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();
}