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'