From 8e1430491bcdf4e18bbbf11ceb7b9b991e27d2e7 Mon Sep 17 00:00:00 2001 From: b2894lxlx <517289602@qq.com> Date: Mon, 2 Nov 2026 14:28:07 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E9=A1=B9=E7=9B=AE=E6=8F=90?= =?UTF-8?q?=E4=BA=A4MK=E4=BC=A0projectType=EF=BC=8C=E5=B9=B6=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=B7=B2=E6=92=A4=E5=9B=9E=E5=86=8D=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- src/api/system/business-process.js | 1 + src/utils/mk-approval.js | 10 ++++++++-- src/views/business/project-apply.vue | 24 +++++++++++++++++------- src/views/business/project-change.vue | 18 +++++++++++------- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/api/system/business-process.js b/src/api/system/business-process.js index 0ea48d5..5f78bf6 100644 --- a/src/api/system/business-process.js +++ b/src/api/system/business-process.js @@ -12,6 +12,7 @@ export const MK_SUBMIT_TIMEOUT = 30000; * @param {string} data.bizId 业务主键(后端生成/复用 formInstanceId) * @param {string} [data.subject] 流程标题 * @param {string} [data.bizType] 业务类型 + * @param {Object} [data.tempVarData] MK 临时变量(如 { projectType }) */ export const processSubmit = data => { return request({ diff --git a/src/utils/mk-approval.js b/src/utils/mk-approval.js index ee1b0ff..475dbf0 100644 --- a/src/utils/mk-approval.js +++ b/src/utils/mk-approval.js @@ -154,6 +154,7 @@ export function isMkApprovedStatus(bizType, approvalStatus) { * @param {string} [options.subjectName] 标题后缀 * @param {string} [options.approvalStatus] 提交前的审批状态 * @param {boolean} [options.mkEnabled] 调用方已知开关时传入,false 时立即跳过 + * @param {Object} [options.tempVarData] 传给 MK 的临时变量(如项目类型 projectType) * @returns {Promise} true=已发起/复用 MK 流程,false=未开启或已跳过 */ export async function submitMkApprovalFlow({ @@ -162,6 +163,7 @@ export async function submitMkApprovalFlow({ subjectName = '', approvalStatus = '', mkEnabled, + tempVarData, } = {}) { const conf = MK_BIZ[bizType]; if (!conf) { @@ -202,12 +204,16 @@ export async function submitMkApprovalFlow({ const subject = subjectName ? `${conf.subjectPrefix}:${subjectName}` : `${conf.subjectPrefix}:${bizIdText}`; - await processSubmit({ + const submitPayload = { templateCode, bizId: bizIdText, subject, bizType, forceNewFormInstance, - }); + }; + if (tempVarData != null && typeof tempVarData === 'object') { + submitPayload.tempVarData = tempVarData; + } + await processSubmit(submitPayload); return true; } diff --git a/src/views/business/project-apply.vue b/src/views/business/project-apply.vue index 0242715..19d4af2 100644 --- a/src/views/business/project-apply.vue +++ b/src/views/business/project-apply.vue @@ -2012,15 +2012,20 @@ export default { const run = value => { const args = operation.prompt ? [row.id, value] : [row.id]; const request = () => this.api[operation.action](...args); + // 先本地提交再调 MK:MK 成功后会把状态同步成 reviewing, + // 若先 MK 再本地,已撤回/已驳回单据会被「当前状态不允许编辑」拦住。 const afterMk = operation.action === 'submitApproval' - ? submitMkApprovalFlow({ - bizType: 'project-apply', - bizId: row.id, - subjectName: row.projectName || '', - approvalStatus: row.approvalStatus || '', - mkEnabled: this.mkEnabled, - }).then(() => request()) + ? request().then(() => + submitMkApprovalFlow({ + bizType: 'project-apply', + bizId: row.id, + subjectName: row.projectName || '', + approvalStatus: row.approvalStatus || '', + mkEnabled: this.mkEnabled, + tempVarData: { projectType: row.projectType || '' }, + }) + ) : request(); // 项目通过会同步等待合规推送,加遮罩防重复点击 const loading = @@ -2264,6 +2269,9 @@ export default { subjectName: name, approvalStatus: status, mkEnabled: this.mkEnabled, + tempVarData: { + projectType: this.form.projectType || data.projectType || '', + }, }).then(() => { this.$message.success('提交成功!'); this.closeProjectForm(); @@ -2384,6 +2392,7 @@ export default { subjectName: this.form.projectName || '', approvalStatus, mkEnabled: this.mkEnabled, + tempVarData: { projectType: this.form.projectType || '' }, }).then(() => { this.$message.success('提交成功!'); this.closeProjectForm(); @@ -2409,6 +2418,7 @@ export default { subjectName: this.form.projectName || '', approvalStatus: this.form.approvalStatus || 'change_rejected', mkEnabled: this.mkEnabled, + tempVarData: { projectType: this.form.projectType || '' }, }).then(() => { this.$message.success('提交成功!'); this.closeProjectForm(); diff --git a/src/views/business/project-change.vue b/src/views/business/project-change.vue index 7fa0031..ca20b94 100644 --- a/src/views/business/project-change.vue +++ b/src/views/business/project-change.vue @@ -214,15 +214,19 @@ export default { } const run = () => { const request = () => this.api[operation.action](row.id); + // 先本地提交再调 MK,避免 MK 回写 reviewing 后本地 submitApproval 被编辑校验拦住。 const afterMk = operation.action === 'submitApproval' - ? submitMkApprovalFlow({ - bizType: 'project-change', - bizId: row.id, - subjectName: row.projectName || '', - approvalStatus: row.approvalStatus || '', - mkEnabled: this.mkEnabled, - }).then(() => request()) + ? request().then(() => + submitMkApprovalFlow({ + bizType: 'project-change', + bizId: row.id, + subjectName: row.projectName || '', + approvalStatus: row.approvalStatus || '', + mkEnabled: this.mkEnabled, + tempVarData: { projectType: row.projectType || '' }, + }) + ) : request(); const loading = operation.action === 'approve'