From 93c4adf174dd099fc1ca5bcd3409ee9775f5f287 Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 22 May 2026 15:52:59 +0800 Subject: [PATCH] =?UTF-8?q?1.1.53=20=E5=90=88=E5=90=8C=E6=BF=80=E6=B4=BB?= =?UTF-8?q?=E7=BB=88=E7=89=88=E5=90=88=E5=90=8C=E9=99=84=E4=BB=B6=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=8F=AF=E4=BB=A5=E4=B8=8A=E4=BC=A0=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E9=99=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/oa/erp/contractChangeInfo/types.ts | 6 ++-- src/api/oa/erp/contractInfo/types.ts | 12 +++---- src/views/oa/erp/contractInfo/index.vue | 33 ++++++++++++++----- .../oa/erp/contractInfo/orderActivate.vue | 12 +++++-- src/views/oa/erp/projectInfo/edit.vue | 10 ++++-- 5 files changed, 51 insertions(+), 22 deletions(-) diff --git a/src/api/oa/erp/contractChangeInfo/types.ts b/src/api/oa/erp/contractChangeInfo/types.ts index 951526a..3446d9c 100644 --- a/src/api/oa/erp/contractChangeInfo/types.ts +++ b/src/api/oa/erp/contractChangeInfo/types.ts @@ -117,7 +117,7 @@ export interface ContractChangeInfoVO { /** * 签字合同附件 */ - signatureAppendix: number; + signatureAppendix: string; /** * 质保期(天) @@ -315,7 +315,7 @@ export interface ContractChangeInfoForm extends BaseEntity { /** * 签字合同附件 */ - signatureAppendix?: number; + signatureAppendix?: string; /** * 质保期(天) @@ -509,7 +509,7 @@ export interface ContractChangeInfoQuery extends PageQuery { /** * 签字合同附件 */ - signatureAppendix?: number; + signatureAppendix?: string; /** * 质保期(天) diff --git a/src/api/oa/erp/contractInfo/types.ts b/src/api/oa/erp/contractInfo/types.ts index d70ee81..966122c 100644 --- a/src/api/oa/erp/contractInfo/types.ts +++ b/src/api/oa/erp/contractInfo/types.ts @@ -180,9 +180,9 @@ export interface ContractInfoVO { paymentMethod: string; /** - * 签字合同附件 + * 签字合同附件(多个 OSS ID,逗号分隔) */ - signatureAppendix: number; + signatureAppendix: string; /** * 海威SAP订单号(后端 erp_contract_info.internal_contract_code) @@ -458,9 +458,9 @@ export interface ContractInfoForm extends BaseEntity { paymentMethod?: string; /** - * 签字合同附件 + * 签字合同附件(多个 OSS ID,逗号分隔) */ - signatureAppendix?: number; + signatureAppendix?: string; /** * 内部合同号 @@ -734,9 +734,9 @@ export interface ContractInfoQuery extends PageQuery { paymentMethod?: string; /** - * 签字合同附件 + * 签字合同附件(多个 OSS ID,逗号分隔) */ - signatureAppendix?: number; + signatureAppendix?: string; /** * 内部合同号 diff --git a/src/views/oa/erp/contractInfo/index.vue b/src/views/oa/erp/contractInfo/index.vue index ea7fe2e..f0305f1 100644 --- a/src/views/oa/erp/contractInfo/index.vue +++ b/src/views/oa/erp/contractInfo/index.vue @@ -157,7 +157,7 @@ - + @@ -282,7 +283,7 @@ --> - + @@ -814,14 +815,14 @@ const confirmUploadFinal = async () => { } const { contractId, contractDeptId, oss, contractStatus } = uploadDialog.form; const ossStr = oss as unknown as string | string[]; - const finalOss = Array.isArray(ossStr) ? (ossStr[0] ?? '') : (ossStr ?? ''); + const finalOss = Array.isArray(ossStr) ? ossStr.filter(Boolean).join(',') : String(ossStr ?? '').trim(); uploadDialog.loading = true; try { await updateContractInfo({ contractId, contractDeptId, contractStatus, - signatureAppendix: finalOss + signatureAppendix: finalOss || undefined } as any); proxy?.$modal.msgSuccess('合同已激活!'); uploadDialog.visible = false; @@ -831,9 +832,25 @@ const confirmUploadFinal = async () => { } }; -// 下载终版合同 -const downloadFinalContract = (ossId: string | number) => { - download.oss(ossId); +/** 解析终版合同附件 OSS ID 列表 */ +const parseFinalContractOssIds = (ossIds: string | number | undefined): string[] => { + if (ossIds === undefined || ossIds === null || ossIds === '') return []; + return String(ossIds) + .split(',') + .map((id) => id.trim()) + .filter(Boolean); +}; + +const getFinalContractFileCount = (ossIds: string | number | undefined) => parseFinalContractOssIds(ossIds).length; + +// 下载终版合同(支持多个附件) +const downloadFinalContract = (ossIds: string | number) => { + const ids = parseFinalContractOssIds(ossIds); + if (ids.length === 0) { + proxy?.$modal.msgWarning('该合同暂无终版合同附件'); + return; + } + ids.forEach((id) => download.oss(id)); }; // 查看审批记录 diff --git a/src/views/oa/erp/contractInfo/orderActivate.vue b/src/views/oa/erp/contractInfo/orderActivate.vue index 009fe4b..0ea9780 100644 --- a/src/views/oa/erp/contractInfo/orderActivate.vue +++ b/src/views/oa/erp/contractInfo/orderActivate.vue @@ -221,7 +221,7 @@ { form.value.contractTerritorialFlag = contractData?.contractTerritorialFlag; form.value.settlementCurrency = contractData?.settlementCurrency; form.value.rmbExchangeRate = contractData?.rmbExchangeRate; - // 勾选“已生效客户订单”时,自动将合同附件带入终版合同附件 - if (contractData?.effectiveCustomerOrderFlag === '1' && contractData?.ossId) { + // 已有终版合同附件时优先回显;否则勾选“已生效客户订单”时自动带入合同附件 + if (contractData?.signatureAppendix) { + form.value.ossId = contractData.signatureAppendix; + } else if (contractData?.effectiveCustomerOrderFlag === '1' && contractData?.ossId) { form.value.ossId = contractData.ossId; } }; @@ -1132,6 +1134,10 @@ const loadContractInfo = async () => { if (form.value.peopleId && typeof form.value.peopleId === 'string') { form.value.peopleId = (form.value.peopleId as string).split(',').map((id) => String(id.trim())) as any; } + const contractRes = await getContractInfo(contractId); + if (contractRes?.data) { + fillContractExtraFields(contractRes.data); + } await getPlanStageList(); } else { // 如果没有查询到项目,则查询合同信息并赋值相关字段 diff --git a/src/views/oa/erp/projectInfo/edit.vue b/src/views/oa/erp/projectInfo/edit.vue index 0aa4177..e5b7aa2 100644 --- a/src/views/oa/erp/projectInfo/edit.vue +++ b/src/views/oa/erp/projectInfo/edit.vue @@ -783,11 +783,17 @@ const handleDownloadFinalContract = async (row: any) => { const res = await getContractInfo(row.contractId); const contractData = res?.data as any; const signatureAppendix = contractData?.signatureAppendix; - if (!signatureAppendix) { + const ossIds = signatureAppendix + ? String(signatureAppendix) + .split(',') + .map((id) => id.trim()) + .filter(Boolean) + : []; + if (ossIds.length === 0) { proxy?.$modal.msgWarning('该合同暂无终版合同附件'); return; } - proxy?.$download.oss(signatureAppendix); + ossIds.forEach((id) => proxy?.$download.oss(id)); } catch (error) { console.error('下载终版合同附件失败:', error); proxy?.$modal.msgError('下载终版合同附件失败');