From c36003db2f5bcb992517639ce697ca053e568fa0 Mon Sep 17 00:00:00 2001 From: zhouxiaofeng <2946471396@qq.com> Date: Mon, 13 Jul 2026 13:47:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B8=A6=E5=87=BA=E7=94=B2=E4=B9=99=E6=96=B9?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E4=B8=8B=E8=BD=BD=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/contract/launch/components/1.vue | 598 -------------- src/views/contract/launch/components/2.vue | 727 ------------------ .../ContractPartyPlaceholderModal.vue | 28 +- .../ContractTemplateFillDemoModal.vue | 32 + .../components/SealPositionConfigModal.vue | 41 +- .../ContractTemplateManageModal.vue | 93 ++- .../shared/templateAutoFillMappings.js | 293 +++++++ 7 files changed, 472 insertions(+), 1340 deletions(-) delete mode 100644 src/views/contract/launch/components/1.vue delete mode 100644 src/views/contract/launch/components/2.vue create mode 100644 src/views/contract/shared/templateAutoFillMappings.js diff --git a/src/views/contract/launch/components/1.vue b/src/views/contract/launch/components/1.vue deleted file mode 100644 index 7090c1e..0000000 --- a/src/views/contract/launch/components/1.vue +++ /dev/null @@ -1,598 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/contract/launch/components/2.vue b/src/views/contract/launch/components/2.vue deleted file mode 100644 index d98cb5a..0000000 --- a/src/views/contract/launch/components/2.vue +++ /dev/null @@ -1,727 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/views/contract/launch/components/ContractPartyPlaceholderModal.vue b/src/views/contract/launch/components/ContractPartyPlaceholderModal.vue index 92d38e7..a2e732c 100644 --- a/src/views/contract/launch/components/ContractPartyPlaceholderModal.vue +++ b/src/views/contract/launch/components/ContractPartyPlaceholderModal.vue @@ -1090,21 +1090,24 @@ function splitFilesByCategory(source = {}) { return { contractBodyFileName: - getFileNameFromDetail(source, "body") || bodyFile.fileName || "", + source.contractBodyFileName || + bodyFile.fileName || + getFileNameFromDetail(source, "body") || + "", contractBodyFilePath: source.contractBodyFilePath || - source.contractTextFilePath || bodyFile.filePath || + source.contractTextFilePath || "", contractBodyFileType: source.contractBodyFileType || - source.contractTextFileType || bodyFile.fileType || + source.contractTextFileType || "", contractBodyFileSize: source.contractBodyFileSize ?? - source.contractTextFileSize ?? bodyFile.fileSize ?? + source.contractTextFileSize ?? null, otherAttachmentList: source.otherAttachmentList?.length ? source.otherAttachmentList.map(normalizeFileItem) @@ -1181,6 +1184,9 @@ function createEmptyParty(roleCode, index = 0) { oppositeId: "", companyName: "", companyType: "", + companyNature: "", + orgNature: "", + orgNatureLevel: "", oppositeCharacter: "", oppCharacter: "", contactName: "", @@ -1190,6 +1196,8 @@ function createEmptyParty(roleCode, index = 0) { registeredAddress: "", legalRepresentative: "", creditCode: "", + registeredCapitalText: "", + countryName: "", naturalPersonIdType: "", naturalPersonIdNumber: "", isGroupInternal: false, @@ -1731,6 +1739,9 @@ function mapPartnerToParty(raw = {}, roleKey, companyName) { oppositeId: raw.oppositeId || "", companyName: raw.customerNameC || companyName || "", companyType: getRelativeTypeLabel(raw.relativeType), + companyNature: raw.oppositeCharacter || "", + orgNature: raw.natureOfEnterpriseOrg || "", + orgNatureLevel: raw.natureOfEnterpriseOrgLev || "", oppositeCharacter: raw.oppositeCharacter || "", oppCharacter: raw.oppositeCharacter || "", creditCode: raw.customerTaxno || "", @@ -1740,6 +1751,8 @@ function mapPartnerToParty(raw = {}, roleKey, companyName) { contactPhone: firstContact.contactPhone || raw.officephone || "", contactEmail: firstContact.email || raw.emailAddress || "", contactAddress: firstContact.postalAddress || raw.customerAddress || "", + registeredCapitalText: raw.regCapital || raw.registeredCapital || "", + countryName: raw.countryName || raw.country || "", naturalPersonIdType: raw.certificateType || "", naturalPersonIdNumber: raw.certificateNum || "", isGroupInternal: raw.groupFlag === "Y" || raw.isJtn === "1", @@ -1754,12 +1767,19 @@ function mapOrgNodeToParty(raw = {}) { ...createEmptyParty(PARTY_ROLE_OUR), subjectCode: raw.orgId == null ? "" : String(raw.orgId), companyName: raw.orgName || "", + companyNature: raw.companyNature || "1", + orgNature: raw.orgNature || "QY", + orgNatureLevel: raw.orgNatureLevel || "", contactPhone: raw.contactPhone || "", contactEmail: raw.contactEmail || "", contactAddress: raw.contactAddress || "", registeredAddress: raw.registeredAddress || "", legalRepresentative: raw.legalRepresentative || "", creditCode: raw.creditCode || "", + registeredCapitalText: raw.regCapital || raw.registeredCapital || "", + countryName: raw.countryName || raw.country || "", + isGroupInternal: true, + isHongKongMacaoTaiwan: false, roleCode: PARTY_ROLE_OUR, roleName: "我方", }; diff --git a/src/views/contract/launch/components/ContractTemplateFillDemoModal.vue b/src/views/contract/launch/components/ContractTemplateFillDemoModal.vue index 517ebdd..3752314 100644 --- a/src/views/contract/launch/components/ContractTemplateFillDemoModal.vue +++ b/src/views/contract/launch/components/ContractTemplateFillDemoModal.vue @@ -220,6 +220,7 @@ import { } from "../../shared/templateFieldDict.js"; import { renderTemplateDocxBlob } from "../../shared/templateDocxRenderer.js"; import { buildTemplateLaunchFieldList } from "../../shared/templateVariableConfig.js"; +import { buildOurPartyAutoFillValues } from "../../shared/templateAutoFillMappings.js"; import TemplateRichTextEditor from "./TemplateRichTextEditor.vue"; import { extraAmountFieldOptions, @@ -317,6 +318,21 @@ function createParty(roleCode = PARTY_ROLE_OPPOSITE, index = 0) { : `相对方${index + 1}`, subjectCode: "", companyName: "", + companyType: "", + companyNature: "", + orgNature: "", + orgNatureLevel: "", + isGroupInternal: false, + isHongKongMacaoTaiwan: false, + creditCode: "", + registeredAddress: "", + legalRepresentative: "", + registeredCapitalText: "", + contactName: "", + contactPhone: "", + contactEmail: "", + contactAddress: "", + countryName: "", }; } @@ -335,6 +351,9 @@ function mapLaunchPartyToFormParty(item = {}) { oppositeId: item.oppositeId || "", companyName: item.companyName || "", companyType: item.companyType || "", + companyNature: item.companyNature || item.oppositeCharacter || "", + orgNature: item.orgNature || item.natureOfEnterpriseOrg || "", + orgNatureLevel: item.orgNatureLevel || item.natureOfEnterpriseOrgLev || "", oppCharacter: item.oppositeCharacter || "", contactName: item.contactName || "", contactPhone: item.contactPhone || "", @@ -343,6 +362,9 @@ function mapLaunchPartyToFormParty(item = {}) { registeredAddress: item.registeredAddress || "", legalRepresentative: item.legalRepresentative || "", creditCode: item.creditCode || "", + registeredCapitalText: + item.registeredCapitalText || item.regCapital || item.registeredCapital || "", + countryName: item.countryName || item.country || "", bankName: item.bankName || "", bankAccount: item.bankAccount || "", naturalPersonIdType: item.naturalPersonIdType || "", @@ -1257,6 +1279,16 @@ function prefillFromMainFields(rawSource) { }); let changed = false; + const ourPartyAutoFillValues = buildOurPartyAutoFillValues(contractDetailState.value); + Object.entries(ourPartyAutoFillValues).forEach(([key, value]) => { + if (!keysToFill.has(key)) return; + if (values[key] !== undefined && values[key] !== null && values[key] !== "") return; + if (value !== undefined && value !== null && value !== "") { + values[key] = String(value); + changed = true; + } + }); + keysToFill.forEach(key => { if (values[key] !== undefined && values[key] !== null && values[key] !== "") return; // 1. 先尝试从当前合同详情直接取(同名字段) diff --git a/src/views/contract/launch/components/SealPositionConfigModal.vue b/src/views/contract/launch/components/SealPositionConfigModal.vue index e5bcd43..3767840 100644 --- a/src/views/contract/launch/components/SealPositionConfigModal.vue +++ b/src/views/contract/launch/components/SealPositionConfigModal.vue @@ -4,6 +4,7 @@ :title="modalTitle" width="96%" :footer="null" + centered :mask-closable="false" :destroy-on-close="false" wrap-class-name="seal-position-config-wrap" @@ -80,6 +81,7 @@
+
合同信息
@@ -177,8 +179,13 @@
-
签章位列表
+
签章位列表({{ sortedPositions.length }})
+
+
+ + + + 甲方带出说明 + + 下载变量说明 @@ -324,6 +330,43 @@
+ + +
+ + +
+

单甲方变量

+
+ {{ name }} +
+
+ +
+

多甲方变量(支持甲方1到甲方{{ OUR_PARTY_AUTO_FILL_MAX_COUNT }})

+
+ {{ name }} +
+
+ +
+

汇总变量

+
+ {{ name }} +
+
+
+