|
@@ -19,7 +19,7 @@
|
|
|
</div>
|
|
|
<cy-comm-table
|
|
|
ref="commTable"
|
|
|
- style="margin-top: 10px; width: 100%"
|
|
|
+ style="margin-top: 10px; width: 100%;"
|
|
|
:columns="columns"
|
|
|
:data="tableData"
|
|
|
:count="0"
|
|
@@ -122,10 +122,27 @@
|
|
|
}"
|
|
|
:disabled="disabled"
|
|
|
:file-data="businessLicense"
|
|
|
+ :isCallBack="true"
|
|
|
+ :limit="1"
|
|
|
+ @call-back="businessLicenseCallBack"
|
|
|
:upload-from-orange-status="true"
|
|
|
placeholder="请上传营业执照"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
+ <el-form-item label="经营范围" prop="businessScope">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.businessScope"
|
|
|
+ :disabled="disabled"
|
|
|
+ placeholder="请输入经营范围"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="注册地址" prop="registeredAddress">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.registeredAddress"
|
|
|
+ :disabled="disabled"
|
|
|
+ placeholder="请输入注册地址"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="基本户信息" class="form-required" prop="basicAccountInformation">
|
|
|
<cy-upload
|
|
|
ref="basicAccountInformation"
|
|
@@ -138,6 +155,20 @@
|
|
|
placeholder="请上传基本户信息"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
+ <el-form-item label="基本存款账号" prop="bankAccount">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.bankAccount"
|
|
|
+ :disabled="disabled"
|
|
|
+ placeholder="请输入基本存款账号"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="基本账户开户行名称" prop="bank">
|
|
|
+ <el-input
|
|
|
+ v-model="ruleForm.bank"
|
|
|
+ :disabled="disabled"
|
|
|
+ placeholder="请输入基本账户开户行名称"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
<el-form-item label="公司章程和修正案" class="form-required" prop="articlesAssociation">
|
|
|
<cy-upload
|
|
|
ref="articlesAssociation"
|
|
@@ -173,6 +204,8 @@
|
|
|
import { salesContractManagementGetAuthStatus, salesContractManagementSignType } from '@/api/myTrade/salesContractManagement/salesContractManagement'
|
|
|
import creditInvestigation from '../mixins/creditInvestigation'
|
|
|
import { mapGetters } from 'vuex'
|
|
|
+import { ocrIdentifyCard, ocrBusinessLicense } from '@/api/sushang/supplierCredit'
|
|
|
+
|
|
|
export default {
|
|
|
mixins: [creditInvestigation],
|
|
|
props: {
|
|
@@ -196,7 +229,11 @@ export default {
|
|
|
businessAddress: '',
|
|
|
id: '',
|
|
|
cascaderAddress: [],
|
|
|
- inputAddress: ''
|
|
|
+ inputAddress: '',
|
|
|
+ businessScope: '',
|
|
|
+ registeredAddress: '',
|
|
|
+ bankAccount: '',
|
|
|
+ bank: ''
|
|
|
},
|
|
|
locationMap: [],
|
|
|
rentalContract: [],
|
|
@@ -207,7 +244,11 @@ export default {
|
|
|
articlesAssociation: [],
|
|
|
judgment: [],
|
|
|
rules: {
|
|
|
- businessAddress: [{ required: true, message: '请输入经营地址', trigger: 'blur' }]
|
|
|
+ businessAddress: [{ required: true, message: '请输入经营地址', trigger: 'blur' }],
|
|
|
+ businessScope: [{ required: true, message: '请输入经营范围', trigger: 'blur' }],
|
|
|
+ registeredAddress: [{ required: true, message: '请输入注册地址', trigger: 'blur' }],
|
|
|
+ bankAccount: [{ required: true, message: '请输入基本存款账号', trigger: 'blur' }],
|
|
|
+ bank: [{ required: true, message: '请输入基本账户开户行名称', trigger: 'blur' }]
|
|
|
},
|
|
|
tableData: [],
|
|
|
columns: [
|
|
@@ -217,15 +258,55 @@ export default {
|
|
|
},
|
|
|
{
|
|
|
label: '身份类型',
|
|
|
+ width: 100,
|
|
|
prop: 'typeStr',
|
|
|
ruleRequired: true
|
|
|
},
|
|
|
+ {
|
|
|
+ label: '身份证正面',
|
|
|
+ width: 180,
|
|
|
+ ruleRequired: true,
|
|
|
+ render: (h, row, index) => {
|
|
|
+ return <cy-upload
|
|
|
+ ref={`idcardStorage_front_${index}`}
|
|
|
+ uploadParams={{ fileType: 'enterprise_idcard_front' }}
|
|
|
+ disabled={this.disabled}
|
|
|
+ isCallBack={true}
|
|
|
+ limit={1}
|
|
|
+ fileData={(row.frontFile && row.frontFile.length) ? row.frontFile : []}
|
|
|
+ oncall-back={ (fileList, fileName) => {
|
|
|
+ this.frontCardCallBack(fileList, fileName, row, index)
|
|
|
+ } }
|
|
|
+ defaultDesc='请上传身份证正面'
|
|
|
+ />
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '身份证反面',
|
|
|
+ width: 180,
|
|
|
+ ruleRequired: true,
|
|
|
+ render: (h, row, index) => {
|
|
|
+ return <cy-upload
|
|
|
+ ref={`idcardStorage_back_${index}`}
|
|
|
+ uploadParams={{ fileType: 'enterprise_idcard_back' }}
|
|
|
+ disabled={this.disabled}
|
|
|
+ isCallBack={true}
|
|
|
+ limit={1}
|
|
|
+ fileData={(row.frontFile && row.frontFile.length) ? row.backFile : []}
|
|
|
+ oncall-back={ (fileList, fileName) => {
|
|
|
+ this.backCardCallBack(fileList, fileName, row, index)
|
|
|
+ } }
|
|
|
+ defaultDesc='请上传身份证反面'
|
|
|
+ />
|
|
|
+ }
|
|
|
+ },
|
|
|
{
|
|
|
label: '姓名',
|
|
|
+ width: 100,
|
|
|
prop: 'name',
|
|
|
ruleRequired: true,
|
|
|
render: (h, row) => {
|
|
|
- return row.typeStr === '实控人' ? <el-input disabled={this.disabled} v-model={ row.name} placeholder='请输入姓名'></el-input> : <span>{row.name}</span>
|
|
|
+ return row.typeStr === '实控人' || row.typeStr === '大股东' ? <el-input disabled={this.disabled} v-model={ row.name} placeholder='请输入姓名'></el-input> : <span>{row.name}</span>
|
|
|
}
|
|
|
},
|
|
|
{
|
|
@@ -233,19 +314,71 @@ export default {
|
|
|
prop: 'socialCreditCode',
|
|
|
ruleRequired: true,
|
|
|
render: (h, row) => {
|
|
|
- return <cy-card-input v-model={row.socialCreditCode} disabled={this.disabled} placeholder='请输入身份证号'></cy-card-input>
|
|
|
+ return <el-input disabled={this.disabled} v-model={row.socialCreditCode} placeholder='请输入身份证号'></el-input>
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
- label: '身份证正反面',
|
|
|
- render: (h, row, index) => {
|
|
|
- return <cy-upload
|
|
|
- ref={`idcardStorage${index}`}
|
|
|
- uploadParams={{ fileType: 'enterprise_idcard_Files' }}
|
|
|
+ label: '手机号码',
|
|
|
+ render: (h, row) => {
|
|
|
+ return <el-input
|
|
|
disabled={this.disabled}
|
|
|
- fileData={row.files}
|
|
|
- defaultDesc={`请上传身份证正反面`}
|
|
|
- />
|
|
|
+ v-model={row.phoneNumber}
|
|
|
+ placeholder='请输入手机号码'
|
|
|
+ ></el-input>
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '户籍地址',
|
|
|
+ ruleRequired: true,
|
|
|
+ render: (h, row) => {
|
|
|
+ return <el-input
|
|
|
+ disabled={this.disabled}
|
|
|
+ v-model={row.domicileAddress}
|
|
|
+ placeholder='请输入户籍地址'
|
|
|
+ ></el-input>
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '常住地址',
|
|
|
+ ruleRequired: true,
|
|
|
+ render: (h, row) => {
|
|
|
+ return <el-input
|
|
|
+ disabled={this.disabled}
|
|
|
+ v-model={row.permanentAddress}
|
|
|
+ placeholder='请输入常住地址'
|
|
|
+ ></el-input>
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '证件有效开始日期',
|
|
|
+ ruleRequired: true,
|
|
|
+ render: (h, row) => {
|
|
|
+ return <el-date-picker
|
|
|
+ disabled={this.disabled}
|
|
|
+ v-model={row.validFrom}
|
|
|
+ type='date'
|
|
|
+ value-format='yyyy-MM-dd'
|
|
|
+ placeholder='请选择证件有效开始日期'>
|
|
|
+ </el-date-picker>
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '证件有效截止期',
|
|
|
+ ruleRequired: true,
|
|
|
+ render: (h, row) => {
|
|
|
+ return <el-date-picker
|
|
|
+ disabled={this.disabled}
|
|
|
+ v-model={row.validTo}
|
|
|
+ type='date'
|
|
|
+ value-format='yyyy-MM-dd'
|
|
|
+ placeholder='请选择证件有效截止期'>
|
|
|
+ </el-date-picker>
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '邮箱',
|
|
|
+ render: (h, row) => {
|
|
|
+ return <el-input disabled={this.disabled} v-model={row.email} placeholder='请输入邮箱地址'></el-input>
|
|
|
}
|
|
|
}
|
|
|
],
|
|
@@ -345,13 +478,17 @@ export default {
|
|
|
handler(newV) {
|
|
|
if (newV === undefined || !newV?.id) return
|
|
|
if (newV && Object.keys(newV)) {
|
|
|
- const { businessAddress, locationMap, rentalContract, waterElectricityFees, officeEnvironment, businessLicense, basicAccountInformation, articlesAssociation, judgment, creditInvestigationInfoList, corporateName, certificateShortSignUrl, certificateSignStatus, shortAuthUrl, authStatus, id, cComprehensiveRiskInvestigationId, fddCustomerId, certificateContractId, certificateTransactionId } = JSON.parse(JSON.stringify(newV))
|
|
|
+ const { businessAddress, locationMap, rentalContract, waterElectricityFees, officeEnvironment, businessLicense, basicAccountInformation, articlesAssociation, judgment, creditInvestigationInfoList, corporateName, certificateShortSignUrl, certificateSignStatus, shortAuthUrl, authStatus, id, cComprehensiveRiskInvestigationId, fddCustomerId, certificateContractId, certificateTransactionId, businessScope, registeredAddress, bankAccount, bank } = JSON.parse(JSON.stringify(newV))
|
|
|
this.ruleForm = {
|
|
|
businessAddress,
|
|
|
id,
|
|
|
cComprehensiveRiskInvestigationId,
|
|
|
cascaderAddress: [],
|
|
|
- inputAddress: ''
|
|
|
+ inputAddress: '',
|
|
|
+ businessScope,
|
|
|
+ registeredAddress,
|
|
|
+ bankAccount,
|
|
|
+ bank
|
|
|
}
|
|
|
this.locationMap = locationMap
|
|
|
this.rentalContract = rentalContract
|
|
@@ -362,6 +499,17 @@ export default {
|
|
|
this.articlesAssociation = articlesAssociation
|
|
|
this.judgment = judgment
|
|
|
this.tableData = JSON.parse(JSON.stringify(creditInvestigationInfoList))
|
|
|
+
|
|
|
+ // 转一下个人征信身份证正反面回显
|
|
|
+ this.tableData.forEach((el) => {
|
|
|
+ const frontArr = []
|
|
|
+ const backArr = []
|
|
|
+ frontArr.push(el.frontFile)
|
|
|
+ backArr.push(el.backFile)
|
|
|
+ el.frontFile = frontArr
|
|
|
+ el.backFile = backArr
|
|
|
+ })
|
|
|
+
|
|
|
this.enterpriseTableData = [
|
|
|
{
|
|
|
corporateName,
|
|
@@ -413,13 +561,33 @@ export default {
|
|
|
|
|
|
// 个人征信
|
|
|
const creditInvestigationInfoList = this.tableData.map((item, index) => {
|
|
|
- const { type, name, socialCreditCode } = item
|
|
|
- const fileLists = this.$refs.commTable.$refs[`idcardStorage${index}`].getFileLists
|
|
|
+ const {
|
|
|
+ type,
|
|
|
+ name,
|
|
|
+ socialCreditCode,
|
|
|
+ phoneNumber,
|
|
|
+ domicileAddress,
|
|
|
+ permanentAddress,
|
|
|
+ validFrom,
|
|
|
+ validTo,
|
|
|
+ email
|
|
|
+ } = item
|
|
|
+ // const fileLists = this.$refs.commTable.$refs[`idcardStorage${index}`].getFileLists
|
|
|
+ const fileFrontList = this.$refs.commTable.$refs[`idcardStorage_front_${index}`].getFileLists
|
|
|
+ const fileBackList = this.$refs.commTable.$refs[`idcardStorage_back_${index}`].getFileLists
|
|
|
return {
|
|
|
type,
|
|
|
name,
|
|
|
socialCreditCode,
|
|
|
- fileList: fileLists.map(item => item.id)
|
|
|
+ phoneNumber,
|
|
|
+ domicileAddress,
|
|
|
+ permanentAddress,
|
|
|
+ validFrom,
|
|
|
+ validTo,
|
|
|
+ email,
|
|
|
+ front: fileFrontList.length ? fileFrontList[0].id : '',
|
|
|
+ back: fileBackList.length ? fileBackList[0].id : ''
|
|
|
+ // fileList: fileLists.map(item => item.id)
|
|
|
}
|
|
|
})
|
|
|
|
|
@@ -471,18 +639,20 @@ export default {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- for (let i = 0; i < creditInvestigationInfoList.length; i++) {
|
|
|
- const { name, socialCreditCode, fileList } = creditInvestigationInfoList[i]
|
|
|
- if (!name) {
|
|
|
- this.$message.warning('请输入姓名')
|
|
|
+ // 个人征信校验
|
|
|
+ if (!this.validateCreditInvestigationInfoList(creditInvestigationInfoList)) return
|
|
|
+ // 校验手机号、邮箱 -- 只校验法人
|
|
|
+ if (creditInvestigationInfoList.length) {
|
|
|
+ if (creditInvestigationInfoList[0].phoneNumber === '') {
|
|
|
+ this.$message.warning('请输入个人征信第一行法定代表人手机号')
|
|
|
return
|
|
|
}
|
|
|
- if (!socialCreditCode) {
|
|
|
- this.$message.warning('请输入身份证号')
|
|
|
+ if (creditInvestigationInfoList[0].email === '') {
|
|
|
+ this.$message.warning('请输入个人征信第一行法定代表人邮箱地址')
|
|
|
return
|
|
|
}
|
|
|
- if (!fileList.length) {
|
|
|
- this.$message.warning('请上传身份证正反面')
|
|
|
+ if (creditInvestigationInfoList[0].email && creditInvestigationInfoList[0].email.indexOf('@') < 0) {
|
|
|
+ this.$message.warning(`请输入个人征信第一行合法邮箱地址`)
|
|
|
return
|
|
|
}
|
|
|
}
|
|
@@ -503,6 +673,99 @@ export default {
|
|
|
getBusinessAddress() {
|
|
|
const address = this.ruleForm.cascaderAddress.length ? this.ruleForm.cascaderAddress.join('') : ''
|
|
|
this.ruleForm.businessAddress = address + this.ruleForm.inputAddress
|
|
|
+ },
|
|
|
+ // 身份证正面上传成功回调
|
|
|
+ async frontCardCallBack(fileList, fileName, row, index) {
|
|
|
+ const fileFrontList = this.$refs.commTable.$refs[`idcardStorage_front_${index}`].getFileLists
|
|
|
+
|
|
|
+ const fileBackList = this.$refs.commTable.$refs[`idcardStorage_back_${index}`].getFileLists
|
|
|
+
|
|
|
+ if (fileFrontList.length && fileBackList.length) {
|
|
|
+ row.frontFile = fileFrontList
|
|
|
+ row.backFile = fileBackList
|
|
|
+ this.ocrIdCard(fileFrontList[0].id, fileBackList[0].id, row)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 身份证背面上传成功回调
|
|
|
+ backCardCallBack(fileList, fileName, row, index) {
|
|
|
+ const fileFrontList = this.$refs.commTable.$refs[`idcardStorage_front_${index}`].getFileLists
|
|
|
+
|
|
|
+ const fileBackList = this.$refs.commTable.$refs[`idcardStorage_back_${index}`].getFileLists
|
|
|
+
|
|
|
+ if (fileFrontList.length && fileBackList.length) {
|
|
|
+ row.frontFile = fileFrontList
|
|
|
+ row.backFile = fileBackList
|
|
|
+ this.ocrIdCard(fileFrontList[0].id, fileBackList[0].id, row)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // OCR身份证
|
|
|
+ async ocrIdCard(frontId, backId, tableRow) {
|
|
|
+ if (frontId !== '' && backId !== '') {
|
|
|
+ const res = await ocrIdentifyCard({
|
|
|
+ front: frontId,
|
|
|
+ back: backId
|
|
|
+ })
|
|
|
+
|
|
|
+ if (res.success) {
|
|
|
+ tableRow.domicileAddress = res.data.address
|
|
|
+ tableRow.permanentAddress = res.data.address
|
|
|
+ tableRow.socialCreditCode = res.data.idcard
|
|
|
+ tableRow.validFrom = res.data.validfrom
|
|
|
+ tableRow.validTo = res.data.validto
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 营业执照的OCR
|
|
|
+ async businessLicenseCallBack() {
|
|
|
+ const fileList = this.$refs.businessLicense.getFileLists
|
|
|
+
|
|
|
+ if (fileList.length) {
|
|
|
+ const res = await ocrBusinessLicense({
|
|
|
+ fileId: fileList[0].id
|
|
|
+ })
|
|
|
+
|
|
|
+ console.log(res)
|
|
|
+ if (res.success) {
|
|
|
+ this.ruleForm.businessScope = res.data.businessScope
|
|
|
+ this.ruleForm.registeredAddress = res.data.address
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 校验个人征信表格
|
|
|
+ validateCreditInvestigationInfoList(dataArr) {
|
|
|
+ let i = 0
|
|
|
+ while (i < dataArr.length) {
|
|
|
+ if (!dataArr[i].name) {
|
|
|
+ this.$message.warning(`请输入个人征信第${ i + 1 }行姓名`)
|
|
|
+ return false
|
|
|
+ } else if (!dataArr[i].socialCreditCode) {
|
|
|
+ this.$message.warning(`请输入个人征信第${ i + 1 }行身份证号`)
|
|
|
+ return false
|
|
|
+ } else if (!dataArr[i].domicileAddress) {
|
|
|
+ this.$message.warning(`请输入个人征信第${ i + 1 }行户籍地址`)
|
|
|
+ return false
|
|
|
+ } else if (!dataArr[i].permanentAddress) {
|
|
|
+ this.$message.warning(`请输入个人征信第${ i + 1 }行常住地址`)
|
|
|
+ return false
|
|
|
+ } else if (!dataArr[i].validFrom) {
|
|
|
+ this.$message.warning(`请输入个人征信第${ i + 1 }行证件开始日期`)
|
|
|
+ return false
|
|
|
+ } else if (!dataArr[i].validTo) {
|
|
|
+ this.$message.warning(`请输入个人征信第${ i + 1 }行证件结束日期`)
|
|
|
+ return false
|
|
|
+ } else if (!dataArr[i].front) {
|
|
|
+ this.$message.warning(`请上传个人征信第${ i + 1 }行身份证正面`)
|
|
|
+ return false
|
|
|
+ } else if (!dataArr[i].back) {
|
|
|
+ this.$message.warning(`请上传个人征信第${ i + 1 }行身份证反面`)
|
|
|
+ return false
|
|
|
+ } else if (!dataArr[i].email) {
|
|
|
+ this.$message.warning(`请输入个人征信第${ i + 1 }行邮箱`)
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ i++
|
|
|
+ }
|
|
|
+ return true
|
|
|
}
|
|
|
}
|
|
|
}
|