Files
jjx-wap/components/user/notary-union-pay.vue
2026-10-08 18:34:09 +08:00

227 lines
11 KiB
Vue
Raw Permalink 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="p-30">
<view class="text-main text-30 font-bold">金久信公正银联资料</view>
<view class="mt-20 text-main text-25" style="line-height: 42rpx;">
<view>银联提供资料明细</view>
<view>根据银联交易要求,为防止网络犯罪,金久信公正交易您需向银联提供以下资料:</view>
<view>1、营业执照(原件手机拍照或复印件加盖公章);</view>
<view>2、法人身份证正反面(原件手机拍照或复印件加盖公章);</view>
<view>3、结算账户信息(结算账户信息需要开户许可证或银行回单等盖有银行印章的证明文件);</view>
<view>4.店铺/办公地址照片(门头+门牌+经营场所的照片,收银台照片);</view>
<view>5.法人手机号(用于电子签約)</view>
<view>如由授权代理人负责,需要加收代理人身份证+代理人签约授权书,授权书我司提供模板;</view>
<view>6、金久信平台入驻协议、授权书(请联系平台工作人员签约)</view>
<view>7、审核时间2-3天,建议注册提前开通。</view>
<view>8、如果您完成审核请联系平台客服开通。</view>
</view>
<view class="mt-20">
<view class="flex justify-start items-center flex-wrap">
<view v-if="extraInfo.agreementUrl" class="mr-20 mb-20">
<u-button size="small" color="#A92924" text="金久信平台入驻协议下载" @click="openLink(extraInfo.agreementUrl)"></u-button>
</view>
<view v-if="extraInfo.authorizationUrl" class="mb-20">
<u-button size="small" color="#A92924" text="授权书下载" @click="openLink(extraInfo.authorizationUrl)"></u-button>
</view>
</view>
<view class="flex justify-start items-start mt-20">
<view v-if="extraInfo.unionWechat" class="mr-30">
<view class="text-25 mb-10">银联工作人员微信</view>
<u--image :src="extraInfo.unionWechat" width="160rpx" height="160rpx"></u--image>
</view>
<view v-if="extraInfo.platformWechat">
<view class="text-25 mb-10">金久信工作人员微信</view>
<u--image :src="extraInfo.platformWechat" width="160rpx" height="160rpx"></u--image>
</view>
</view>
</view>
<view class="mt-20 text-25">审核状态:{{ statusText }}</view>
<view class="group m-top-30"><view class="lb need">营业执照</view></view>
<u-upload class="m-top-20" :fileList="businessLicenseFile" @afterRead="afterRead($event, 'businessLicenseFile')" @delete="deletePic($event, 'businessLicenseFile')" :disabled="isLocked" :maxCount="1" width="70" height="70"></u-upload>
<view class="group m-top-30"><view class="lb need">法人身份证正面</view></view>
<u-upload class="m-top-20" :fileList="legalIdCardFront" @afterRead="afterRead($event, 'legalIdCardFront')" @delete="deletePic($event, 'legalIdCardFront')" :disabled="isLocked" :maxCount="1" width="70" height="70"></u-upload>
<view class="group m-top-30"><view class="lb need">法人身份证反面</view></view>
<u-upload class="m-top-20" :fileList="legalIdCardBack" @afterRead="afterRead($event, 'legalIdCardBack')" @delete="deletePic($event, 'legalIdCardBack')" :disabled="isLocked" :maxCount="1" width="70" height="70"></u-upload>
<view class="group m-top-30"><view class="lb need">结算账户证明</view></view>
<u-upload class="m-top-20" :fileList="settlementAccountFiles" @afterRead="afterRead($event, 'settlementAccountFiles', true)" @delete="deletePic($event, 'settlementAccountFiles', true)" :disabled="isLocked" multiple :maxCount="10" width="70" height="70"></u-upload>
<view class="group m-top-30"><view class="lb need">店铺/办公照片</view></view>
<u-upload class="m-top-20" :fileList="shopPhotos" @afterRead="afterRead($event, 'shopPhotos', true)" @delete="deletePic($event, 'shopPhotos', true)" :disabled="isLocked" multiple :maxCount="10" width="70" height="70"></u-upload>
<view class="group flex align-center m-top-30">
<view class="lb need">法人手机号</view>
<view class="vl flex-1"><u--input v-model="form.legalMobile" placeholder="请输入法人手机号" :disabled="isLocked"></u--input></view>
</view>
<view class="group m-top-30"><view class="lb">是否有代理人</view></view>
<view class="m-top-20"><u-switch v-model="form.hasAgent" activeColor="#A92924" :disabled="isLocked"></u-switch></view>
<template v-if="form.hasAgent">
<view class="group m-top-30"><view class="lb need">代理人身份证正面</view></view>
<u-upload class="m-top-20" :fileList="agentIdCardFront" @afterRead="afterRead($event, 'agentIdCardFront')" @delete="deletePic($event, 'agentIdCardFront')" :disabled="isLocked" :maxCount="1" width="70" height="70"></u-upload>
<view class="group m-top-30"><view class="lb need">代理人身份证反面</view></view>
<u-upload class="m-top-20" :fileList="agentIdCardBack" @afterRead="afterRead($event, 'agentIdCardBack')" @delete="deletePic($event, 'agentIdCardBack')" :disabled="isLocked" :maxCount="1" width="70" height="70"></u-upload>
<view class="group m-top-30"><view class="lb need">代理人授权书</view></view>
<u-upload class="m-top-20" :fileList="agentAuthorizationFiles" @afterRead="afterRead($event, 'agentAuthorizationFiles', true)" @delete="deletePic($event, 'agentAuthorizationFiles', true)" :disabled="isLocked" multiple :maxCount="10" width="70" height="70"></u-upload>
</template>
<view class="group m-top-30"><view class="lb need">平台入驻协议</view></view>
<u-upload class="m-top-20" :fileList="platformAgreementFiles" @afterRead="afterRead($event, 'platformAgreementFiles', true)" @delete="deletePic($event, 'platformAgreementFiles', true)" :disabled="isLocked" multiple :maxCount="10" width="70" height="70"></u-upload>
<view class="group m-top-30"><view class="lb need">平台授权书</view></view>
<u-upload class="m-top-20" :fileList="platformAuthorizationFiles" @afterRead="afterRead($event, 'platformAuthorizationFiles', true)" @delete="deletePic($event, 'platformAuthorizationFiles', true)" :disabled="isLocked" multiple :maxCount="10" width="70" height="70"></u-upload>
<u-button class="public-btn" text="提交资料" @click="submit" :disabled="isLocked"></u-button>
</view>
</template>
<script>
import dayjs from "dayjs";
export default {
name: "notary-union-pay",
props: {
userData: Object
},
data() {
return {
form: {
businessLicenseFile: '',
legalIdCardFront: '',
legalIdCardBack: '',
settlementAccountFiles: [],
shopPhotos: [],
legalMobile: '',
hasAgent: false,
agentIdCardFront: '',
agentIdCardBack: '',
agentAuthorizationFiles: [],
platformAgreementFiles: [],
platformAuthorizationFiles: []
},
profile: null,
extraInfo: {
agreementUrl: '',
authorizationUrl: '',
unionWechat: '',
platformWechat: '',
},
businessLicenseFile: [],
legalIdCardFront: [],
legalIdCardBack: [],
settlementAccountFiles: [],
shopPhotos: [],
agentIdCardFront: [],
agentIdCardBack: [],
agentAuthorizationFiles: [],
platformAgreementFiles: [],
platformAuthorizationFiles: [],
}
},
computed: {
statusText() {
if (!this.profile) return '未提交'
if (this.profile.status === 1) return '已通过'
if (this.profile.status === 2) return `已拒绝${this.profile.refuseReason ? `:${this.profile.refuseReason}` : ''}`
if (this.profile.status === 0) return '审核中'
return '未提交'
},
isLocked() {
return this.profile && [0, 1].includes(this.profile.status)
}
},
methods: {
async refresh() {
const {data} = await vk.callFunction({
url: 'client/user/kh/getNotaryUnionPayProfile',
})
this.profile = data
const profile = data || {}
this.form = {
businessLicenseFile: profile.businessLicenseFile || '',
legalIdCardFront: profile.legalIdCardFront || '',
legalIdCardBack: profile.legalIdCardBack || '',
settlementAccountFiles: profile.settlementAccountFiles || [],
shopPhotos: profile.shopPhotos || [],
legalMobile: profile.legalMobile || '',
hasAgent: !!profile.hasAgent,
agentIdCardFront: profile.agentIdCardFront || '',
agentIdCardBack: profile.agentIdCardBack || '',
agentAuthorizationFiles: profile.agentAuthorizationFiles || [],
platformAgreementFiles: profile.platformAgreementFiles || [],
platformAuthorizationFiles: profile.platformAuthorizationFiles || []
}
this.resetFileList()
if (!this.extraInfo.agreementUrl && !this.extraInfo.authorizationUrl && !this.extraInfo.unionWechat && !this.extraInfo.platformWechat) {
this.getExtraInfo()
}
},
async getExtraInfo() {
const dictIds = {
agreementUrl: 'd6a300ae6a2f6d98009a50e36a4f0766',
authorizationUrl: 'ed693ef16a2f6db00036fcd95c9dabf8',
unionWechat: 'ed693ef16a2f6dcf0037006c1e6aec14',
platformWechat: 'd6a300ae6a2f6dda009a81bc6b8b1fab'
}
const entries = await Promise.all(Object.entries(dictIds).map(async ([key, id]) => {
const res = await vk.callFunction({
url: 'client/dict/pub/getDetail',
data: {id}
})
return [key, res.content || '']
}))
this.extraInfo = Object.fromEntries(entries)
},
resetFileList() {
const singleFields = ['businessLicenseFile', 'legalIdCardFront', 'legalIdCardBack', 'agentIdCardFront', 'agentIdCardBack']
const multiFields = ['settlementAccountFiles', 'shopPhotos', 'agentAuthorizationFiles', 'platformAgreementFiles', 'platformAuthorizationFiles']
singleFields.forEach(field => {
this[field] = this.form[field] ? [{url: this.form[field]}] : []
})
multiFields.forEach(field => {
this[field] = (this.form[field] || []).map(url => ({url}))
})
},
afterRead({file}, field, multi = false) {
const list = multi ? file : [file]
list.forEach(item => {
uniCloud.uploadFile({
filePath: item.url,
cloudPath: dayjs().format('YYYY/MM/DD') + '/' + item.name,
success: ({fileID}) => {
uniCloud.getTempFileURL({
fileList: [fileID]
}).then(res => {
const url = res.fileList[0].tempFileURL
if (multi) {
this[field].push({url})
this.form[field].push(url)
} else {
this[field] = [{url}]
this.form[field] = url
}
})
}
})
})
},
deletePic({index}, field, multi = false) {
if (multi) {
this[field].splice(index, 1)
this.form[field].splice(index, 1)
} else {
this[field] = []
this.form[field] = ''
}
},
async submit() {
await vk.callFunction({
url: 'client/user/kh/saveNotaryUnionPayProfile',
title: '提交中...',
data: this.form
})
this.$message.success('提交成功')
await this.refresh()
},
openLink(url) {
window.location.href = url
}
},
mounted() {
this.refresh()
}
}
</script>