fourPayProject/51pay-uni/homePages/enterpriseMerchant/MerchantInformation.vue
2025-03-31 10:14:11 +08:00

853 lines
23 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<u-overlay @click="closeShow()" :show="overlayShow"></u-overlay>
<view class="container">
<headers :titles="titles"><uni-icons type="arrow-left" color="#fff" size="22px"></uni-icons></headers>
<view class="box_">
<view class="title_">
上传营业执照
</view>
<view class="">
<u-upload :fileList="fileList1" @afterRead="addInfoImg" @delete="deletePic" name="1" multiple
:maxCount="1" width="250" height="150">
<image src="/static/imgs/scyyzz.png" mode="widthFix" style="width: 420px;">
</image>
</u-upload>
</view>
</view>
<view class="box_">
<view class="title_">
商户信息
</view>
<view class="box_bs">
<view class="">名称</view>
<view class="right_size">
<input v-model="formData.merchantName" type="text" placeholder="请输入" />
</view>
</view>
<view class="box_bs">
<view class="">住所</view>
<view class="right_size">
<input v-model="formData.merAddress" type="text" placeholder="请输入" />
</view>
</view>
<view class="box_bs">
<view class="">注册资本</view>
<view class="dis_" style="width: 75%; align-items: center;">
<ep-select v-model="formData.corCapitalUnit" :options="capitalUnits"
@change="change1"></ep-select>
<view class="input_color">
<input type="number" v-model="formData.corCapital" />
</view>
<view style="width: 50px;margin-left: 5px;">万元</view>
</view>
</view>
<view class="box_bs">
<view class="">成立日期</view>
<view class="dis_" @click="pickTime(1)">
<view v-if="formData.establishDate" class="size_">{{formData.establishDate}}</view>
<view v-else class="size_">请选择</view>
<u-icon name="arrow-right" color="#ececec" size="18"></u-icon>
</view>
</view>
<view class="box_bs">
<view class="">营业期限</view>
<view class="dis_">
<view class="dis_" @click="pickTime(2)">
<view v-if="!formData.corIdEffectDate" style="margin: 0px 5px;">开始日期</view>
<view v-else style="color:#000;margin: 0px 5px;">{{formData.corIdEffectDate}}
</view>
<u-icon name="arrow-down-fill" color="#2e2e2e" size="18"></u-icon>
</view>
<view class="size_" style="margin: 0px 5px;">至</view>
<view class="dis_" @click="timePopup()">
<view v-if="!formData.corIdExaDate" style="margin: 0px 5px;">
截至日期</view>
<view v-else style="color:#000;margin: 0px 5px;">{{formData.corIdExaDate}}</view>
<u-icon name="arrow-down-fill" color="#2e2e2e" size="18"></u-icon>
</view>
</view>
</view>
<view class="box_bs">
<view class="">经营范围</view>
<view class="right_size">
<input v-model="formData.businessScope" type="text" placeholder="请输入" />
</view>
</view>
<view class="box_bs">
<view class="">营业执照号</view>
<view class="right_size">
<input v-model="formData.bno" type="text" placeholder="请输入" />
</view>
</view>
<view class="box_bs">
<view class="">商户简称</view>
<view class="right_size">
<input type="text" v-model="formData.abbreviation" placeholder="请输入" />
</view>
</view>
<view class="box_bs">
<view class="">商户类型</view>
<view class="dis_" @click="selectPick(1)">
<view v-if="!formData.corKind" style="color: #7c7c7c;" class="size_">请选择
</view>
<view v-else style="color: #000;text-align: right;" class="size_">
{{this.formData.corKindName}}
</view>
<u-icon name="arrow-right" color="#ececec" size="18"></u-icon>
</view>
</view>
<view class="box_bs">
<view class="">商户归属地</view>
<view class="dis_">
<view class="dis_" @click="openLevel()">
<view v-if="!formData.merProvinceNames" class="size_">请选择</view>
<view v-else class="size_">
{{this.formData.merProvinceNames+this.formData.merRegionNames+this.formData.merCountyNames}}
</view>
<u-icon name="arrow-right" color="#ececec" size="18"></u-icon>
</view>
<u-icon @click="openMap()" name="map-fill" color="#E4612E" size="20"></u-icon>
</view>
</view>
<view class="box_bs">
<view class="">详细地址</view>
<view class="right_size">
<input type="text" v-model="formData.merAddr" placeholder="请填写" />
</view>
</view>
<view class="box_bs">
<view class="">邮箱</view>
<view class="right_size">
<input type="text" v-model="formData.email" placeholder="请填写" />
</view>
</view>
<view class="box_bs">
<view class="">行业分类</view>
<view class="dis_" @click="selectKindOpen()">
<view v-if="!formData.merTertiaryBusKindName" class="size_">请选择</view>
<view v-else class="size_">
{{this.formData.merTertiaryBusKindName}}
</view>
<u-icon name="arrow-right" color="#ececec" size="18"></u-icon>
</view>
</view>
<view class="box_bs">
<view class="">实缴资本</view>
<view class="dis_" style="width: 75%; align-items: center; justify-content: flex-end;">
<ep-select v-model="formData.paidInCapitalUnit" :options="capitalUnits"
@change="change2"></ep-select>
<view class="input_color">
<input v-model="formData.paidInCapital" type="number" />
</view>
<view style="width: 50px;margin-left: 5px;">万元</view>
</view>
</view>
<view class="box_bs">
<view class="">企业规模</view>
<view class="dis_" @click="selectPick(2)">
<view v-if="!formData.enterpriseScale" style="color: #7c7c7c;" class="size_">请选择
</view>
<view v-else style="color: #000;text-align: right;" class="size_">
{{this.formData.enterpriseScaleName}}
</view>
<u-icon name="arrow-right" color="#ececec" size="18"></u-icon>
</view>
</view>
<view class="box_bs">
<view class="">年营业收入</view>
<view class="dis_" style="width: 75%; align-items: center; justify-content: flex-end;">
<ep-select v-model="formData.annualIncomeUnit" :options="capitalUnits"
@change="change3"></ep-select>
<view class="input_color">
<input v-model="formData.annualIncome" type="number" />
</view>
<view style="width: 50px;margin-left: 5px;">万元</view>
</view>
</view>
<view class="box_bs" style="border: none;">
<view class="">签约期限</view>
<view class="dis_" v-if="this.formData.openAccEffectDate">
<view class="size_">{{this.formData.openAccEffectDate+'-'+this.formData.openAccExpDate}}</view>
</view>
</view>
<view class="right-box">(期满双方如无异议自动续签一年)</view>
</view>
<view class="box_">
<view class="title_">
商户费率
</view>
<view class="box_bs">
<view class="">微信费率(%)</view>
<view class="right_size">
<input type="number" placeholder="请填写" v-model="formData.wxRate" />
</view>
</view>
<view class="box_bs">
<view class="">支付宝费率(%)</view>
<view class="right_size">
<input type="number" placeholder="请填写" v-model="formData.aliRate" />
</view>
</view>
<view class="box_bs">
<view class="">云闪付费率(%)</view>
<view class="right_size">
<input type="number" placeholder="请填写" v-model="formData.unionPayRate" />
</view>
</view>
</view>
<view class="box_">
<view class="title_">
场景说明
</view>
<view class="">
<u--textarea v-model="formData.scenarioDescription" placeholder="请输入内容"></u--textarea>
</view>
</view>
</view>
<view class="button_p" @click="nextStep()">
<view class="">下一步</view>
</view>
<u-datetime-picker :closeOnClickOverlay="true" :show="pickData.timeShow" v-model="pickData.certEffectDate"
:formatter="formatter" @confirm="timeConfirm" @cancel="timeCancel" @close="timeCancel"
mode="date"></u-datetime-picker>
<u-popup :show="pickData.timePopup" mode="center" @close="close" @open="open">
<view class="box-popup">
<view class="x-size" @click="selectExaDate(1)">长期</view>
<view class="x-size" @click="selectExaDate(2)">日期</view>
<view class="x-size" @click="selectExaDate(3)">取消</view>
</view>
</u-popup>
<u-picker :show="pickData.show" :columns="pickData.columns" :title="pickData.title" keyName="label"
@confirm="pickConfirm" @cancel="pickCancel" @close="pickCancel"></u-picker>
<level-linkage ref="levelLinkage" :pickerValueDefault="pickerValueDefault" @onConfirm="onConfirm"
themeColor='#007AFF'></level-linkage>
<level-linkage valueName="busId" keyName="busName" ref="selectKind" :pickerValueDefault="kindDefault"
@onConfirm="kindConfirm" themeColor='#007AFF'></level-linkage>
</view>
</view>
</template>
<script>
import headers from '../../components/header/headers.vue'
import upload from '@/utils/upload.js'
import request from '../../utils/request.js'
import levelLinkage from "@/components/three-level-linkage/linkage.nvue"
export default {
data() {
return {
overlayShow: false,
titles: "商户信息录入",
msg: "1",
value: '',
dataList: [],
fileList1: [],
fileList2: [],
select: '',
pickData: {
columns: [],
show: false,
pickType: null, //下部选择器类型certSelect 证件选择
title: "",
timeShow: false,
timePopup: false,
certEffectDate: Number(new Date()),
certExaDate: Number(new Date()),
timeType: 1
},
corKind: [],
formData: {
areaType: "4", //商户类型 7 企业写死
legalPerson: {
address: "",
backPic: "",
backPicUrl: "",
certEffectDate: "",
certExaDate: "",
certNo: "",
certType: "11",
certTypeName: "身份证",
city: "",
cityName: "",
county: "",
countyName: "",
email: "",
facePic: "",
facePicUrl: "",
firstCareerName: "",
firstCareerNo: "",
gender: "1",
mobileNo: "",
nation: "CHN",
nationLabel: "中国",
participantName: "",
province: "",
provinceName: "",
secondCareerName: "",
secondCareerNo: "",
sort: 0,
thirdCareerName: "",
thirdCareerNo: ""
},
openAccount: "",
openAccountUrl: "",
rate: "0.25",
steps: "2" //步骤当前页面写死第一页
},
capitalUnits: [],
show: false,
status: 'loading',
merchantId: null,
chinaArea: [],
scaleData: [],
pickerValueDefault: [14, 0, 0],
kindDefault: [0, 0]
}
},
onLoad(options) {
if (options && options.merchantId) {
this.merchantId = options.merchantId
this.getMerchantInfo()
}
let data = uni.getStorageSync("userAddress")
this.dealPosition(data)
this.getCorCapitalUnit()
this.getCorKind()
this.getChinaArea()
this.getBusinessKind()
this.getScale()
},
components: {
headers,
levelLinkage
},
methods: {
regPos(address) {
let resAddress = {}
var reg = /.+?(省|市|自治区|自治州|县|区)/g;
let addressList = address.match(reg).toString().split(",");
if (addressList[0] == '重庆市' || addressList[0] == '北京市' || addressList[0] == '天津市' ||
addressList[0] == '上海市') {
resAddress.province = addressList[0];
resAddress.city = addressList[0];
resAddress.district = addressList[1];
} else {
resAddress.province = addressList[0];
resAddress.city = addressList[1];
resAddress.district = addressList[2];
};
let data = uni.getStorageSync("sysAddress")
//处理地址信息
let userAddress = {}
for (var i = 0; i < data.length; i++) {
if (resAddress.province == data[i].name) {
//省找到了
userAddress.merProvinceCode = data[i].code
userAddress.merProvinceName = data[i].name
userAddress.merProvinceIdx = i
for (var j = 0; j < data[i].inferior.length; j++) {
if (resAddress.city == data[i].inferior[j].name) {
//市找到了
userAddress.merCityCode = data[i].inferior[j].code
userAddress.merCityName = data[i].inferior[j].name
userAddress.merCityIdx = j
for (var k = 0; k < data[i].inferior[j].inferior.length; k++) {
if (resAddress.district == data[i].inferior[j].inferior[k]
.name) {
//区找到了
userAddress.merRegionCode = data[i].inferior[j].inferior[k]
.code
userAddress.merRegionName = data[i].inferior[j].inferior[k]
.name
userAddress.merRegionIdx = k
}
}
return userAddress
}
}
}
}
return res
},
dealPosition(data) {
if (data) {
//处理省市区
this.formData.merProvinceNames = data.merProvinceName
this.formData.merProvince = data.merProvinceCode
this.formData.merProvinceId = data.merProvinceCode
this.formData.merRegionNames = data.merCityName
this.formData.merRegion = data.merCityCode
this.formData.merRegionId = data.merCityCode
this.formData.merCountyNames = data.merRegionName
this.formData.merCounty = data.merRegionCode
this.formData.merCountyId = data.merRegionCode
this.pickerValueDefault = [data.merProvinceIdx, data.merCityIdx, data.merRegionIdx]
}
},
openMap() {
let data = uni.getStorageSync("userAddress")
let keyword = ""
if (data) {
keyword = data.merProvinceName + data.merCityName + data.merRegionName
}
let that = this
uni.getLocation({
type: 'gcj02',
geocode: true,
success: function(ress) {
uni.chooseLocation({
keyword: keyword,
success: function(res) {
let temp = that.regPos(res.address)
that.dealPosition(temp)
that.formData.merAddr = res.name
}
});
},
})
},
kindConfirm(data) {
// 行业选择后
this.formData.merSecondaryBusKindName = data.firstPick.busName
this.formData.merSecondaryBusKind = data.firstPick.busId
this.formData.merTertiaryBusKindName = data.secondPick.busName
this.formData.merTertiaryBusKind = data.secondPick.busId
},
async getBusinessKind() {
let res = await request({
url: 'app/drop/getBusinessKind',
method: 'get'
})
if (res.code == 0) {
this.businessKinds = res.data
this.$refs.selectKind.init(res.data);
}
},
selectKindOpen() {
this.$refs.selectKind.open();
},
onConfirm(data) {
// 地区选择确认后选中的数据
this.formData.merProvinceNames = data.firstPick.name
this.formData.merProvince = data.firstPick.code
this.formData.merProvinceId = data.firstPick.code
this.formData.merRegionNames = data.secondPick.name
this.formData.merRegion = data.secondPick.code
this.formData.merRegionId = data.secondPick.code
this.formData.merCountyNames = data.thirdPick.name
this.formData.merCounty = data.thirdPick.code
this.formData.merCountyId = data.thirdPick.code
},
async getChinaArea() {
let res = await request({
url: 'app/drop/getChinaArea',
method: 'get'
})
if (res.code == 0) {
this.chinaArea = res.data
this.$refs.levelLinkage.init(res.data);
}
},
openLevel() {
this.$refs.levelLinkage.open();
},
pickConfirm(data) {
this.pickData.show = false
this.pickData.columns = []
if (this.pickData.pickType == 1) {
this.formData.corKind = data.value[0].value
this.formData.corKindName = data.value[0].label
} else if (this.pickData.pickType == 2) {
this.formData.enterpriseScale = data.value[0].value
this.formData.enterpriseScaleName = data.value[0].label
}
},
pickCancel() {
this.pickData.show = false
this.pickData.columns = []
},
selectPick(type) {
this.pickData.columns = []
this.pickData.show = true
this.pickData.pickType = type
if (type == 1) {
this.pickData.title = "选择商户类型"
this.pickData.columns.push(this.corKind)
} else if (type == 2) {
this.pickData.title = "选择企业规模"
this.pickData.columns.push(this.scaleData)
}
},
async getCorKind() {
this.corKind = await this.$getDictList('pos_merchant_extend_corKind')
},
async getScale() {
this.scaleData = await this.$getDictList('pos_merchant_enterpriseScale')
},
selectExaDate(type) {
if (type == 3) {
//取消
this.pickData.timePopup = false
} else if (type == 1) {
//长期
this.formData.corIdExaDate = '99991231'
this.pickData.timePopup = false
} else {
//日期
this.pickData.timePopup = false
this.pickData.timeShow = true
this.pickData.timeType = 3
}
},
timePopup() {
this.pickData.timePopup = true
},
timeConfirm(e) {
const date = new Date(e.value);
const year = date.getFullYear();
const month = ("0" + (date.getMonth() + 1)).slice(-2);
const day = ("0" + date.getDate()).slice(-2);
if (this.pickData.timeType == 1) {
//证件有效期
this.formData.establishDate = year + month + day
}
if (this.pickData.timeType == 2) {
//证件有效期
this.formData.corIdEffectDate = year + month + day
}
if (this.pickData.timeType == 3) {
//证件有效期
this.formData.corIdExaDate = year + month + day
}
this.pickData.timeShow = false
},
timeCancel() {
this.pickData.timeShow = false
},
pickTime(type) {
//选择时间
this.pickData.timeShow = true
this.pickData.timeType = type
},
formatter(type, value) {
if (type === 'year') {
return `${value}年`
}
if (type === 'month') {
return `${value}月`
}
if (type === 'day') {
return `${value}日`
}
return value
},
async getCorCapitalUnit() {
this.capitalUnits = await this.$getDictList('pos_merchant_extend_corCapitalUnit')
},
closeShow() {
this.overlayShow = false
uni.hideLoading();
},
async getMerchantInfo() {
let ress = await request({
url: 'app/report/newBaseInfo',
method: 'post',
data: {
objectId: this.merchantId
}
})
this.formData = ress.data
this.formData.steps = '2'
const date = new Date();
const year = date.getFullYear();
const month = ("0" + (date.getMonth() + 1)).slice(-2);
const day = ("0" + date.getDate()).slice(-2);
//签约有效期
this.formData.openAccEffectDate = year + month + day
this.formData.openAccExpDate = (year + 1) + month + day
//处理图片问题
if (this.formData.corLicensePicUrl) {
this.fileList1 = []
let tempImg1 = {
url: this.formData.corLicensePicUrl,
}
this.fileList1.push(tempImg1)
}
},
async uploadFile(url, fileName, type) {
uni.showLoading({
title: '上传中'
});
this.overlayShow = true
upload({
url: 'app/report/fileUplod',
filePath: url,
formData: {
type: 5,
fileName: fileName
}
}).then((res) => {
let that = this
if (res.code == 0) {
if (type == 1) {
this.formData.corLicensePic = res.data.externalKey
this.formData.corLicensePicUrl = res.data.imgUrl
//营业执照
let businessData = JSON.parse(res.data.businessData)
if (businessData) {
//商户名称
this.formData.merchantName = businessData.corporateName
this.formData.shortName = businessData.corporateName
//住所
this.formData.merAddress = businessData.resiDence
//证件日期
let tempTxt = businessData.establishDate.replace(/[\u4e00-\u9fa5]/g, '');
this.formData.corIdEffectDate = tempTxt
this.formData.establishDate = tempTxt
this.formData.corIdExaDate = "99991231"
//经营范围
this.formData.businessScope = businessData.managementRange
//营业执照号
this.formData.bno = businessData.creditCode
}
} else if (type == 2) {
//银行卡反面
this.formData.bankPhotoBack = res.data.externalKey
this.formData.bankPhotoBackUrl = res.data.imgUrl
}
}
}).finally((res) => {
this.overlayShow = false
uni.hideLoading();
})
},
deletePic(event) {
this[`fileList${event.name}`].splice(event.index, 1)
},
//银行卡信息
async addInfoImg(event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this[`fileList${event.name}`].length
lists.map((item) => {
this[`fileList${event.name}`].push({
...item,
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFile(lists[i].url, lists[i].name, event.name)
let item = this[`fileList${event.name}`][fileListLen]
this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result
}))
fileListLen++
}
},
change1(e) {
this.formData.corCapitalUnitName = e.label
},
change2(e) {
this.formData.paidInCapitalUnitName = e.label
},
change3(e) {
this.formData.annualIncomeUnitName = e.label
},
async nextStep() {
//小微商户字段重复使用进行赋值
this.formData.shortName = this.formData.merchantName
this.formData.merProvinceName = this.formData.merProvinceNames
this.formData.merRegionName = this.formData.merRegionNames
this.formData.merCountyName = this.formData.merCountyNames
let res = await request({
url: 'app/report/newBaseInfoSaveOrUpdate',
method: 'post',
data: this.formData
})
if (res.code == 0) {
uni.navigateTo({
url: '/homePages/enterpriseMerchant/ResponsiblePerson?merchantId=' + res.merchantId
})
}
},
goback() {
uni.navigateBack()
}
}
}
</script>
<style scoped lang="scss">
.content {
background: #f4f5f6;
height: 100vh;
}
.container {
width: 100%;
background: #f4f5f6;
box-sizing: border-box;
padding-top: 88px;
padding-bottom: 88px;
}
.box_ {
width: 95%;
border-radius: 8px;
box-sizing: border-box;
padding: 10px;
background: #fff;
margin: 15px auto;
}
.box_bs {
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 10px 0px;
color: #aeaeae;
border-bottom: 1px solid #eeeeee;
}
.dis_ {
display: flex;
}
.size_ {
margin-right: 5px;
color: #000;
}
.title_ {
font-size: 18px;
font-weight: bold;
margin: 10px 0px;
margin-bottom: 20px;
}
.upload-box {
width: 100%;
margin: 5px 0px;
display: flex;
text-align: center;
justify-content: space-between;
margin-bottom: 20px;
}
.upload-title {
font-size: 16px;
margin-right: 10%;
}
.right_size {
text-align: right;
input {
color: #000
}
}
.button_p {
width: 100%;
background: #E4612E;
height: 55px;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
border-radius: 4px;
position: fixed;
bottom: 0px;
}
.input_color {
width: 100px;
display: flex;
align-items: center;
height: 36px;
border: 2px solid #efefef;
border-radius: 4px;
box-sizing: border-box;
padding: 5px;
margin-left: 10px;
}
.right-box {
width: 100%;
display: flex;
align-items: center;
justify-content: flex-end;
color: #aeaeae;
font-size: 14px;
margin: 10px 0px;
}
.box-popup {
width: 300px;
// height: 150px;
background: #eeeeee;
box-sizing: border-box;
padding: 0px 20px;
border-radius: 4px;
}
.x-size {
margin: 15px 0px;
color: #8e8e8f;
}
</style>