优化
This commit is contained in:
@@ -9,7 +9,6 @@ import {
|
||||
approveEnterpriseReview,
|
||||
archivePlatformTenant,
|
||||
changePlatformTenantStatus,
|
||||
checkPlatformTenantContactPhone,
|
||||
createPlatformTenant,
|
||||
createPlatformTenantImpersonation,
|
||||
downloadTenantQualification,
|
||||
@@ -148,11 +147,14 @@ const rules: FormRules = {
|
||||
tenantName: [{ required: true, message: '请输入公司名称', trigger: 'blur' }],
|
||||
legalName: [{ required: true, message: '请输入营业执照上的企业名称', trigger: 'blur' }],
|
||||
legalRepresentative: [{ required: true, message: '请输入法定代表人姓名', trigger: 'blur' }],
|
||||
unifiedSocialCreditCode: [{ pattern: /^[0-9A-Z]{18}$/, message: '请输入 18 位大写字母或数字', trigger: 'blur' }],
|
||||
unifiedSocialCreditCode: [
|
||||
{ required: true, message: '请输入统一社会信用代码', trigger: 'blur' },
|
||||
{ pattern: /^[0-9A-Z]{18}$/, message: '请输入 18 位大写字母或数字', trigger: 'blur' },
|
||||
],
|
||||
contactName: [{ required: true, message: '请输入联系人姓名', trigger: 'blur' }],
|
||||
contactPhone: [
|
||||
{ required: true, message: '请输入联系电话', trigger: 'blur' },
|
||||
{ pattern: /^[0-9-]{4,32}$/, message: '请输入 4-32 位数字或连字符,联系电话将作为登录用户名', trigger: 'blur' },
|
||||
{ required: true, message: '请输入公司联系电话', trigger: 'blur' },
|
||||
{ pattern: /^[0-9-]{4,32}$/, message: '请输入 4-32 位数字或连字符', trigger: 'blur' },
|
||||
],
|
||||
contactEmail: [{ type: 'email', message: '请输入有效邮箱地址', trigger: 'blur' }],
|
||||
servicePackage: [{ required: true, message: '请选择客户套餐', trigger: 'change' }],
|
||||
@@ -171,7 +173,7 @@ const decisionRules: FormRules = {
|
||||
function newQualificationDrafts(): QualificationDraft[] {
|
||||
const definitions: Array<Pick<QualificationDraft, 'type' | 'label' | 'required'>> = [
|
||||
{ type: 'BUSINESS_LICENSE', label: '营业执照', required: true },
|
||||
{ type: 'LEGAL_PERSON_ID', label: '法人身份证', required: true },
|
||||
{ type: 'LEGAL_PERSON_ID', label: '法人身份证', required: false },
|
||||
{ type: 'FREIGHT_FORWARDER_CERTIFICATE', label: '货代资质证书', required: false },
|
||||
{ type: 'BANK_ACCOUNT_LICENSE', label: '银行开户许可证', required: false },
|
||||
]
|
||||
@@ -221,23 +223,16 @@ const uploadingQualifications = computed(() => qualifications.value.some((item)
|
||||
const hasSelectedQualifications = computed(() => qualifications.value.some((item) => item.file))
|
||||
const selectedBusinessLicense = computed(() => qualifications.value.find((item) => item.type === 'BUSINESS_LICENSE')?.file)
|
||||
const selectedLegalPersonId = computed(() => qualifications.value.find((item) => item.type === 'LEGAL_PERSON_ID')?.file)
|
||||
const requiredPackageChangeSelected = computed(() => Boolean(selectedBusinessLicense.value || selectedLegalPersonId.value))
|
||||
const requiredPackageFilesSelected = computed(() => Boolean(selectedBusinessLicense.value && selectedLegalPersonId.value))
|
||||
const creditCodeReadyForSave = computed(() => requiredPackageChangeSelected.value
|
||||
? requiredPackageFilesSelected.value && (creditCodeEstablished.value
|
||||
|| unifiedSocialCreditCodePattern.test(form.value.unifiedSocialCreditCode || ''))
|
||||
: creditCodeEstablished.value)
|
||||
const requiredQualificationPackageComplete = computed(() => creditCodeReadyForSave.value
|
||||
&& (requiredPackageChangeSelected.value
|
||||
? requiredPackageFilesSelected.value
|
||||
: qualifications.value.filter((item) => item.required).every((item) => item.uploaded)))
|
||||
const businessLicenseReadyForSave = computed(() => Boolean(selectedBusinessLicense.value
|
||||
|| qualifications.value.find((item) => item.type === 'BUSINESS_LICENSE')?.uploaded))
|
||||
const creditCodeReadyForSave = computed(() => creditCodeEstablished.value
|
||||
|| unifiedSocialCreditCodePattern.test(form.value.unifiedSocialCreditCode || ''))
|
||||
const requiredQualificationPackageComplete = computed(() => businessLicenseReadyForSave.value && creditCodeReadyForSave.value)
|
||||
const missingQualificationPackageItems = computed(() => {
|
||||
const businessLicense = qualifications.value.find((item) => item.type === 'BUSINESS_LICENSE')
|
||||
const legalPersonId = qualifications.value.find((item) => item.type === 'LEGAL_PERSON_ID')
|
||||
const missing: string[] = []
|
||||
if (requiredPackageChangeSelected.value ? !businessLicense?.file : !businessLicense?.uploaded) missing.push('营业执照')
|
||||
if (!creditCodeReadyForSave.value) missing.push('18位统一社会信用代码(需随必填资质包保存)')
|
||||
if (requiredPackageChangeSelected.value ? !legalPersonId?.file : !legalPersonId?.uploaded) missing.push('法人身份证')
|
||||
if (!businessLicense?.file && !businessLicense?.uploaded) missing.push('营业执照')
|
||||
if (!creditCodeReadyForSave.value) missing.push('18位统一社会信用代码(需随营业执照保存)')
|
||||
return missing
|
||||
})
|
||||
const hasUnsavedChanges = computed(() => Boolean(editingId.value) && JSON.stringify(form.value) !== savedFormSnapshot.value)
|
||||
@@ -512,27 +507,38 @@ async function uploadSelectedQualifications(tenantId: string) {
|
||||
const failures: string[] = []
|
||||
const businessLicense = qualifications.value.find((item) => item.type === 'BUSINESS_LICENSE')
|
||||
const legalPersonId = qualifications.value.find((item) => item.type === 'LEGAL_PERSON_ID')
|
||||
if (requiredPackageChangeSelected.value && businessLicense?.file && legalPersonId?.file) {
|
||||
businessLicense.uploading = true; legalPersonId.uploading = true
|
||||
businessLicense.error = ''; legalPersonId.error = ''
|
||||
const businessLicenseFile = businessLicense?.file || null
|
||||
const legalPersonIdFile = legalPersonId?.file || null
|
||||
if (businessLicense && businessLicenseFile) {
|
||||
businessLicense.uploading = true
|
||||
if (legalPersonIdFile && legalPersonId) legalPersonId.uploading = true
|
||||
businessLicense.error = ''
|
||||
if (legalPersonId) legalPersonId.error = ''
|
||||
try {
|
||||
const uploaded = await uploadPlatformTenantRequiredQualificationPackage(
|
||||
tenantId, businessLicense.file, legalPersonId.file, form.value.unifiedSocialCreditCode,
|
||||
businessLicense.uploaded, legalPersonId.uploaded,
|
||||
tenantId, businessLicenseFile, legalPersonIdFile, form.value.unifiedSocialCreditCode,
|
||||
businessLicense.uploaded, Boolean(legalPersonIdFile && legalPersonId?.uploaded),
|
||||
)
|
||||
businessLicense.uploaded = true; legalPersonId.uploaded = true
|
||||
if (legalPersonIdFile && !uploaded.legalPersonIdDocumentUrl) throw new Error('法人身份证上传结果缺少文件地址')
|
||||
businessLicense.uploaded = true
|
||||
creditCodeEstablished.value = true
|
||||
businessLicense.uploadedName = businessLicense.file.name
|
||||
legalPersonId.uploadedName = legalPersonId.file.name
|
||||
businessLicense.uploadedName = businessLicenseFile.name
|
||||
businessLicense.documentUrl = uploaded.businessLicenseDocumentUrl
|
||||
legalPersonId.documentUrl = uploaded.legalPersonIdDocumentUrl
|
||||
businessLicense.file = null; legalPersonId.file = null
|
||||
businessLicense.file = null
|
||||
if (legalPersonIdFile && legalPersonId) {
|
||||
legalPersonId.uploaded = true
|
||||
legalPersonId.uploadedName = legalPersonIdFile.name
|
||||
legalPersonId.documentUrl = uploaded.legalPersonIdDocumentUrl || ''
|
||||
legalPersonId.file = null
|
||||
}
|
||||
} catch (error) {
|
||||
const message = getApiErrorMessage(error, '必填资质包上传失败,请重试')
|
||||
businessLicense.error = message; legalPersonId.error = message
|
||||
failures.push('必填资质包')
|
||||
const message = getApiErrorMessage(error, '营业执照及统一社会信用代码保存失败,请重试')
|
||||
businessLicense.error = message
|
||||
if (legalPersonIdFile && legalPersonId) legalPersonId.error = message
|
||||
failures.push('营业执照资质')
|
||||
} finally {
|
||||
businessLicense.uploading = false; legalPersonId.uploading = false
|
||||
businessLicense.uploading = false
|
||||
if (legalPersonId) legalPersonId.uploading = false
|
||||
}
|
||||
}
|
||||
for (const draft of failures.length ? [] : qualifications.value.filter((item) => !item.required && item.file)) {
|
||||
|
||||
@@ -128,10 +128,10 @@ export interface PlatformQualificationUploadResponse {
|
||||
|
||||
export interface PlatformRequiredQualificationPackageUploadResponse {
|
||||
businessLicenseQualificationId: number | string
|
||||
legalPersonIdQualificationId: number | string
|
||||
legalPersonIdQualificationId: number | string | null
|
||||
tenantStatus: PlatformTenantStatus
|
||||
businessLicenseDocumentUrl: string
|
||||
legalPersonIdDocumentUrl: string
|
||||
legalPersonIdDocumentUrl: string | null
|
||||
}
|
||||
|
||||
export interface EnterpriseApprovalResponse {
|
||||
@@ -429,14 +429,14 @@ export async function uploadPlatformTenantQualification(
|
||||
export async function uploadPlatformTenantRequiredQualificationPackage(
|
||||
tenantId: number | string,
|
||||
businessLicense: File,
|
||||
legalPersonId: File,
|
||||
legalPersonId: File | null,
|
||||
unifiedSocialCreditCode: string,
|
||||
replaceBusinessLicense = false,
|
||||
replaceLegalPersonId = false,
|
||||
) {
|
||||
const form = new FormData()
|
||||
form.append('businessLicense', businessLicense)
|
||||
form.append('legalPersonId', legalPersonId)
|
||||
if (legalPersonId) form.append('legalPersonId', legalPersonId)
|
||||
form.append('unifiedSocialCreditCode', unifiedSocialCreditCode)
|
||||
if (replaceBusinessLicense) form.append('replaceBusinessLicense', 'true')
|
||||
if (replaceLegalPersonId) form.append('replaceLegalPersonId', 'true')
|
||||
|
||||
Reference in New Issue
Block a user