diff --git a/src/api/launch.js b/src/api/launch.js index 4fbaca6..8534ca0 100644 --- a/src/api/launch.js +++ b/src/api/launch.js @@ -206,6 +206,15 @@ export function downloadLaunchFile(fileName) { }); } +export function uploadWatermarkFile(id, formData) { + return request({ + url: `/contract/launch/${id}/watermark/upload`, + method: "post", + data: formData, + headers: { "Content-Type": "multipart/form-data" }, + }); +} + export function queryContractLogList(data) { return request({ url: "/contract/log/list", diff --git a/src/views/contract/launch/components/ContractPartyPlaceholderModal.vue b/src/views/contract/launch/components/ContractPartyPlaceholderModal.vue index 7f97b4e..92d38e7 100644 --- a/src/views/contract/launch/components/ContractPartyPlaceholderModal.vue +++ b/src/views/contract/launch/components/ContractPartyPlaceholderModal.vue @@ -707,15 +707,15 @@ - - + +
是否公开招标 - - + +
@@ -723,8 +723,8 @@ - - + +
- - + +
是否共享 - - + +
是否重大合同 - - + +
@@ -1043,12 +1043,9 @@ function normalizeFileItem(item = {}) { } function normalizeBooleanValue(value) { - if (value === true || value === false) return value; - if (value === 1 || value === "1" || value === "Y" || value === "true") - return true; - if (value === 0 || value === "0" || value === "N" || value === "false") - return false; - return false; + if (value === 1 || value === "1" || value === true || value === "Y" || value === "true") + return "1"; + return "0"; } function pickBooleanSource(source = {}, key) { @@ -1405,12 +1402,12 @@ function createContractFormData() { counterpartyList: [], }, isSingleAgreement: "0", - isInvolveHongKongMacaoTaiwan: false, - isPublicTender: false, - isForeignRelatedSubject: false, - isIncludedInCurrentYearBudget: false, - isShared: false, - isMajorContract: false, + isInvolveHongKongMacaoTaiwan: "0", + isPublicTender: "0", + isForeignRelatedSubject: "0", + isIncludedInCurrentYearBudget: "0", + isShared: "0", + isMajorContract: "0", needAmendments: "0", extraAmounts: { depositEnabled: false, @@ -2172,9 +2169,9 @@ function validateSubmit() { // 以下为 pushContract 必填项补充校验(接口文档要求) if (detailState.value.isMajorContract === undefined || detailState.value.isMajorContract === null || detailState.value.isMajorContract === "") return "请选择是否重大合同"; - if (detailState.value.isPublicTender === undefined || detailState.value.isPublicTender === null) + if (detailState.value.isPublicTender === undefined || detailState.value.isPublicTender === null || detailState.value.isPublicTender === "") return "请选择是否公开招标"; - if (detailState.value.isInvolveHongKongMacaoTaiwan === undefined || detailState.value.isInvolveHongKongMacaoTaiwan === null) + if (detailState.value.isInvolveHongKongMacaoTaiwan === undefined || detailState.value.isInvolveHongKongMacaoTaiwan === null || detailState.value.isInvolveHongKongMacaoTaiwan === "") return "请选择是否涉及港澳台"; if (!detailState.value.paymentDirection) return "请选择收支方向"; if (!detailState.value.contractTypeCode) return "请选择合同类型编码"; @@ -2376,12 +2373,12 @@ function buildLaunchRecord() { isElectron: detailState.value.isElectron || "1", isSingleAgreement: detailState.value.isSingleAgreement || "0", paymentDirection: detailState.value.paymentDirection || "0", - isMajorContract: detailState.value.isMajorContract ? 1 : 0, - isOpenBidding: detailState.value.isPublicTender ? 1 : 0, - isYearBudget: detailState.value.isIncludedInCurrentYearBudget ? 1 : 0, - isShare: detailState.value.isShared ? "1" : "0", - contractNature: detailState.value.isForeignRelatedSubject ? "1" : "0", - isSgat: detailState.value.isInvolveHongKongMacaoTaiwan ? "1" : "0", + isMajorContract: detailState.value.isMajorContract, + isOpenBidding: detailState.value.isPublicTender, + isYearBudget: detailState.value.isIncludedInCurrentYearBudget, + isShare: detailState.value.isShared, + contractNature: detailState.value.isForeignRelatedSubject, + isSgat: detailState.value.isInvolveHongKongMacaoTaiwan, biddingNo: detailState.value.isPublicTender ? detailState.value.biddingNo || "" : "", diff --git a/src/views/contract/launch/components/ContractTemplateFillDemoModal.vue b/src/views/contract/launch/components/ContractTemplateFillDemoModal.vue index f49e1bf..c287bbc 100644 --- a/src/views/contract/launch/components/ContractTemplateFillDemoModal.vue +++ b/src/views/contract/launch/components/ContractTemplateFillDemoModal.vue @@ -455,12 +455,12 @@ function createContractFormData() { isSingleAgreement: "0", // 合同属性 - isInvolveHongKongMacaoTaiwan: false, // 是否涉及港澳台 - isPublicTender: false, // 是否公开招标 - isForeignRelatedSubject: false, // 签约主体是否涉外 - isIncludedInCurrentYearBudget: false, // 是否列入当年预算 - isShared: false, // 是否共享 - isMajorContract: false, // 是否重大合同 + isInvolveHongKongMacaoTaiwan: "0", // 是否涉及港澳台 + isPublicTender: "0", // 是否公开招标 + isForeignRelatedSubject: "0", // 签约主体是否涉外 + isIncludedInCurrentYearBudget: "0", // 是否列入当年预算 + isShared: "0", // 是否共享 + isMajorContract: "0", // 是否重大合同 // 额外金额 extraAmounts: { diff --git a/src/views/contract/launch/index.vue b/src/views/contract/launch/index.vue index 1d19e37..47f9857 100644 --- a/src/views/contract/launch/index.vue +++ b/src/views/contract/launch/index.vue @@ -323,6 +323,7 @@ import { getLaunchDetail, getLawApproveCallbackSample, mockApproveLaunch, + uploadWatermarkFile, mockRejectLaunch, finishLaunchSeal, queryApproveViewUrl, @@ -1039,12 +1040,16 @@ function handleUploadSigned(row) { } function handleOnlineSign(row) { - getLaunchDetail(row.id).then((res) => { + getLaunchDetail(row.id).then(async (res) => { if (!isSuccessResponse(res) || !getDataResult(res)) { message.error(getResponseMessage(res, "获取合同详情失败")); return; } const detail = getDataResult(res); + if (!detail.contractTextFilePath) { + await handleWatermarkUpload(row); + return; + } mixedSignModalRef.value?.showModal({ ...detail, contractId: detail.sealContractId, @@ -1052,6 +1057,60 @@ function handleOnlineSign(row) { }); } +async function handleWatermarkUpload(row) { + let file + const ok = await new Promise((resolve) => { + Modal.confirm({ + title: "法务水印文件缺失", + content: h("div", [ + h("p", { style: "margin-bottom: 12px" }, "法务审批回调未带回带水印的合同文件,请手动上传带水印的合同文件后继续在线签订。"), + h("input", { + type: "file", + accept: ".pdf,.doc,.docx", + style: "margin-top: 8px; width: 100%", + onChange(e) { + file = e.target.files?.[0] + }, + }), + ]), + okText: "上传并继续", + cancelText: "取消", + async onOk() { + if (!file) { + message.warning("请先选择文件") + return false + } + const formData = new FormData() + formData.append("file", file) + try { + const res = await uploadWatermarkFile(row.id, formData) + if (!isSuccessResponse(res)) { + message.error(getResponseMessage(res, "上传水印文件失败")) + return false + } + message.success("水印文件上传成功") + resolve(true) + } catch { + message.error("上传水印文件失败") + return false + } + }, + onCancel() { + resolve(false) + }, + }) + }) + if (!ok) return + getLaunchDetail(row.id).then((res) => { + if (!isSuccessResponse(res) || !getDataResult(res)) return + const detail = getDataResult(res) + mixedSignModalRef.value?.showModal({ + ...detail, + contractId: detail.sealContractId, + }) + }) +} + function handleSignBusinessUpdated() { getList(); }