From d1ac7d7c17ceb07e092addff0fcdc8fd29f71226 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Tue, 4 Aug 2026 14:15:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nginx/default.conf.template | 1 + src/deployment/nginxConfig.test.ts | 4 ++++ .../customers/pages/CustomersView.test.ts | 15 +++++++++++++++ src/modules/customers/pages/CustomersView.vue | 7 ++++--- src/shared/api/http.test.ts | 17 +++++++++++++++++ src/shared/api/http.ts | 6 +++++- 6 files changed, 46 insertions(+), 4 deletions(-) diff --git a/nginx/default.conf.template b/nginx/default.conf.template index 6ab77528..afeac1aa 100644 --- a/nginx/default.conf.template +++ b/nginx/default.conf.template @@ -14,6 +14,7 @@ server { # 前端代码中的 API 前缀为 /api;保持原始路径转给 Gateway。 location /api/ { + client_max_body_size 6m; proxy_pass ${API_UPSTREAM}; proxy_http_version 1.1; proxy_set_header Host $host; diff --git a/src/deployment/nginxConfig.test.ts b/src/deployment/nginxConfig.test.ts index 4517b6b7..0b70ba19 100644 --- a/src/deployment/nginxConfig.test.ts +++ b/src/deployment/nginxConfig.test.ts @@ -5,6 +5,10 @@ import { describe, expect, it } from 'vitest' const config = readFileSync(resolve(process.cwd(), 'nginx/default.conf.template'), 'utf8') describe('admin nginx deployment config', () => { + it('allows qualification uploads with multipart overhead through the API proxy', () => { + expect(config).toContain('client_max_body_size 6m;') + }) + it('prevents the application shell from retaining stale chunk references', () => { expect(config).toContain('location = /index.html') expect(config).toContain('Cache-Control "no-cache, no-store, must-revalidate"') diff --git a/src/modules/customers/pages/CustomersView.test.ts b/src/modules/customers/pages/CustomersView.test.ts index 66d9a23f..d32ec000 100644 --- a/src/modules/customers/pages/CustomersView.test.ts +++ b/src/modules/customers/pages/CustomersView.test.ts @@ -146,6 +146,21 @@ describe('CustomersView', () => { expect(preview?.src).toBe('blob:qualification-preview') }) + it('marks only the business license and legal-person ID as required qualifications', async () => { + mount(CustomersView, { attachTo: document.body, global: { plugins: [pinia, ElementPlus] } }) + await flushPromises() + tableButtonByText('编辑')?.click() + await flushPromises() + + const labels = [...document.querySelectorAll('.qualification-label')] + expect(labels.map((label) => label.textContent?.replace(/\s/g, ''))).toEqual([ + '*营业执照', + '*法人身份证', + '货代资质证书选填', + '银行开户许可证选填', + ]) + }) + it('does not count rejected or superseded history as a current qualification when resubmitting', async () => { const rejectedTenant = { ...fullTenant, status: 'REJECTED' } vi.mocked(listPlatformTenants).mockResolvedValue({ records: [rejectedTenant], page: 1, size: 10, total: 1, pages: 1 }) diff --git a/src/modules/customers/pages/CustomersView.vue b/src/modules/customers/pages/CustomersView.vue index 1f81d8d5..74dc5058 100644 --- a/src/modules/customers/pages/CustomersView.vue +++ b/src/modules/customers/pages/CustomersView.vue @@ -132,8 +132,8 @@ function newQualificationDrafts(): QualificationDraft[] { const definitions: Array> = [ { type: 'BUSINESS_LICENSE', label: '营业执照', required: true }, { type: 'LEGAL_PERSON_ID', label: '法人身份证', required: true }, - { type: 'FREIGHT_FORWARDER_CERTIFICATE', label: '货代资质证书', required: true }, - { type: 'BANK_ACCOUNT_LICENSE', label: '银行开户许可证', required: true }, + { type: 'FREIGHT_FORWARDER_CERTIFICATE', label: '货代资质证书', required: false }, + { type: 'BANK_ACCOUNT_LICENSE', label: '银行开户许可证', required: false }, ] return definitions.map((item) => ({ ...item, @@ -648,7 +648,7 @@ onMounted(async () => {
文件类型上传文件有效期
-
{{ draft.label }}
+
{{ draft.label }}选填