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 @@
-
+
下载
+ >
+ 下载{{ getFinalContractFileCount(scope.row.signatureAppendix) > 1 ? `(${getFinalContractFileCount(scope.row.signatureAppendix)})` : '' }}
未上传
@@ -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('下载终版合同附件失败');