From 255e012c1bfac70853a7ba9d3ee65c6991add459 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Wed, 2 Sep 2026 11:59:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index df7c55f..c889e1e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -44,7 +44,7 @@ | 业务 | 模块入口 | 联查模块或服务端 | |---|---|---| | 登录、注册与会话 | `src/modules/auth/` | Backend `auth/`、`iam/` | -| 企业资料、成员与角色 | `src/modules/tenant-management/`、`src/modules/account/` | Backend `iam/`、`file/` | +| 企业资料、成员与角色 | `src/modules/tenant-management/`、`src/modules/account/` | Backend `iam/`、`auth/`、`file/`;公司联系电话/邮箱是企业资料,不作为登录标识;成员登录手机号可选,修改时同步 Auth、撤销该账号会话并审计。审核必填资质仅营业执照与统一社会信用代码,法人身份证选填 | | 工作台与系统入口 | `src/modules/dashboard/`、`src/modules/system/` | `src/navigation/clientNavigation.ts`、`src/router/index.ts` | | 企业成员消息收件箱 | `src/modules/notifications/` | Backend `iam/src/main/java/com/baiyue/iam/notification/`;列表、详情、已读与未读数契约见 `iam/src/main/resources/openapi/notification-v1.yaml` | | 头程下单、订单、入仓码业务关系、箱唛与履约进度 | `src/modules/first-leg/`;列表从 `views/FirstLegOrdersView.vue` 进入,点击入仓码由 `components/InboundCodeAssociationDialog.vue`、`api/inboundCodeAssociations.ts` 查询订单、客户和目的仓关联摘要;箱唛下载从 `api/firstLeg.ts` 进入 | Backend `order/` 的客户隔离 `InboundCodeAssociationService`、`order-v1.yaml`,以及 `firstleg/`、`warehouse/`;不得用内部 ID 补齐缺失业务编号 | From 517b6718f005b3bb0610281f8266cd408f4ee6c5 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Wed, 2 Sep 2026 13:34:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/CompanyProfileView.vue | 20 +++++++------------ .../views/TenantAdministrationViews.test.mjs | 8 +++++--- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/modules/tenant-management/views/CompanyProfileView.vue b/src/modules/tenant-management/views/CompanyProfileView.vue index e9ea571..ea52697 100644 --- a/src/modules/tenant-management/views/CompanyProfileView.vue +++ b/src/modules/tenant-management/views/CompanyProfileView.vue @@ -83,7 +83,6 @@ const normalizedQualificationCertificateNo = computed(() => qualificationCertifi const draftCreditCodeValid = computed(() => unifiedSocialCreditCodePattern.test(normalizedQualificationCertificateNo.value)) const businessLicenseFileSelected = computed(() => Boolean(qualificationDraftItem('BUSINESS_LICENSE')?.file)) const legalPersonIdFileSelected = computed(() => Boolean(qualificationDraftItem('LEGAL_PERSON_ID')?.file)) -const standaloneLegalPersonIdUnsupported = computed(() => legalPersonIdFileSelected.value && !businessLicenseFileSelected.value) const requiredPackageChangeSelected = computed(() => businessLicenseFileSelected.value) const requiredPackageFilesSelected = computed(() => businessLicenseFileSelected.value) const qualificationCreditCodeReady = computed(() => requiredPackageChangeSelected.value @@ -122,11 +121,9 @@ const qualificationUploadDisabledReason = computed(() => { const selectedQualificationCount = computed(() => qualificationDrafts.filter((item) => Boolean(item.file)).length) const canSaveQualificationBatch = computed(() => canUploadQualification.value && selectedQualificationCount.value > 0 - && !standaloneLegalPersonIdUnsupported.value && requiredPackageComplete.value) const qualificationSaveDisabledReason = computed(() => { if (!canUploadQualification.value) return qualificationUploadDisabledReason.value - if (standaloneLegalPersonIdUnsupported.value) return '法人身份证为选填项;当前文件服务尚未开放单独保存,请取消本次选择后保存其他资质。' if (!requiredPackageComplete.value) return `请完整保存必填业务项:${missingRequiredPackageItems.value.join('、')}` if (!selectedQualificationCount.value) return '当前没有需要保存的变更' return '' @@ -340,20 +337,15 @@ async function submitQualification() { ElMessage.warning(qualificationUploadDisabledReason.value) return } - if (standaloneLegalPersonIdUnsupported.value) { - const legalPersonId = qualificationDraftItem('LEGAL_PERSON_ID') - const message = '当前文件服务尚未开放法人身份证单独上传或替换,该选填文件未提交。' - if (legalPersonId) { legalPersonId.error = message; legalPersonId.uploadState = 'error' } - ElMessage.warning(message) - return - } if (!requiredPackageComplete.value) { const businessLicense = qualificationDraftItem('BUSINESS_LICENSE') if (businessLicense && !qualificationCreditCodeReady.value) businessLicense.error = qualificationCreditCodeError.value ElMessage.warning(`请完整保存必填业务项:${missingRequiredPackageItems.value.join('、')}`) return } - const optionalItems = qualificationDrafts.filter((item) => !item.required && item.value !== 'LEGAL_PERSON_ID' && item.file) + const optionalItems = qualificationDrafts.filter((item) => !item.required + && item.file + && (item.value !== 'LEGAL_PERSON_ID' || !requiredPackageChangeSelected.value)) const includedLegalPersonId = legalPersonIdFileSelected.value qualificationSubmitting.value = true let uploadedCount = 0 @@ -430,8 +422,10 @@ async function submitQualification() { } qualificationOpen.value = false if (refreshed) ElMessage.success(includedLegalPersonId - ? '营业执照、统一社会信用代码和法人身份证已保存,尚未提交审核' - : '营业执照和统一社会信用代码已保存,尚未提交审核') + ? (requiredPackageChangeSelected.value + ? '营业执照、统一社会信用代码和法人身份证已保存,尚未提交审核' + : '法人身份证已保存,尚未提交审核') + : '资质文件已保存,尚未提交审核') else ElMessage.warning('资质文件已保存,但最新状态刷新失败,请点击“重新加载”确认状态') } finally { qualificationSubmitting.value = false diff --git a/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs b/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs index 2816e3d..2967085 100644 --- a/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs +++ b/src/modules/tenant-management/views/TenantAdministrationViews.test.mjs @@ -73,12 +73,14 @@ test('implements company details, contact information and qualification workflow assert.match(profileSource, /requiredQualificationTypes\.every/) assert.doesNotMatch(profileSource, /四类必填资质/) assert.doesNotMatch(profileSource, /法人身份证需与本次营业执照一起保存/) - assert.match(profileSource, /const standaloneLegalPersonIdUnsupported = computed/) - assert.match(profileSource, /当前文件服务尚未开放法人身份证单独上传或替换,该选填文件未提交/) + assert.doesNotMatch(profileSource, /standaloneLegalPersonIdUnsupported/) + assert.doesNotMatch(profileSource, /当前文件服务尚未开放法人身份证单独上传或替换/) + assert.match(profileSource, /item\.value !== 'LEGAL_PERSON_ID' \|\| !requiredPackageChangeSelected\.value/) + assert.match(profileSource, /法人身份证已保存,尚未提交审核/) assert.match(profileSource, /qualificationUploadErrorMessage\(error\)/) assert.match(profileSource, /submitTenantQualificationReview/) assert.match(profileSource, /提交企业审核/) - assert.match(profileSource, /营业执照和统一社会信用代码已保存,尚未提交审核/) + assert.match(profileSource, /资质文件已保存,尚未提交审核/) assert.match(profileSource, /资质文件已保存,但最新状态刷新失败/) assert.match(profileSource, /企业资料已提交审核,但最新状态刷新失败/) assert.match(profileSource, /qualificationStatusMeta/)