✨ 多业务接入MK审核流,提交改传bizId并由后端生成表单实例

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-29 02:23:24 +08:00
parent 8b9c908237
commit 4641d0a5dd
28 changed files with 644 additions and 391 deletions
+32 -10
View File
@@ -18,11 +18,6 @@ export const MK_BIZ = {
subjectPrefix: '合同审批',
rejected: ['rejected', 'change_rejected', 'withdrawn'],
},
'waybill-manage': {
dictName: '提交运单审核流',
subjectPrefix: '运单审批',
rejected: ['rejected', 'returned'],
},
'pre-settlement': {
dictName: '提交预结算审核流',
subjectPrefix: '预结算审批',
@@ -38,6 +33,21 @@ export const MK_BIZ = {
subjectPrefix: '付款审批',
rejected: ['returned'],
},
'invoice-application': {
dictName: '提交开票审核流',
subjectPrefix: '开票审批',
rejected: ['returned'],
},
'invoice-receipt': {
dictName: '提交收票审核流',
subjectPrefix: '收票审批',
rejected: ['returned'],
},
'bill-payment': {
dictName: '提交汇票付款审核流',
subjectPrefix: '汇票付款审批',
rejected: ['returned'],
},
};
const MK_SWITCH_NAME = '开启MK';
@@ -70,9 +80,17 @@ export async function resolveMkTemplateCode(dictName, list) {
return String(templateCode);
}
/**
* 提交 MK 审核流
* @param {Object} options
* @param {string} options.bizType 业务类型
* @param {string|number} options.bizId 业务主键(后端据此生成/复用 formInstanceId)
* @param {string} [options.subjectName] 标题后缀
* @param {string} [options.approvalStatus] 当前审批状态(驳回态会先 delete)
*/
export async function submitMkApprovalFlow({
bizType,
formInstanceId,
bizId,
subjectName = '',
approvalStatus = '',
}) {
@@ -80,25 +98,29 @@ export async function submitMkApprovalFlow({
if (!conf) {
return Promise.reject(new Error(`不支持的MK业务类型:${bizType}`));
}
if (bizId == null || bizId === '') {
return Promise.reject(new Error('业务id不能为空'));
}
const list = await loadMkTemplateList();
if (!isMkEnabled(list)) {
return;
}
const bizIdText = String(bizId);
// 先查 MK 流程实例:已有数据则不删除、不重新提交
const existsRes = await hasMkProcessInstance({ bizId: String(formInstanceId) });
const existsRes = await hasMkProcessInstance({ bizId: bizIdText });
if (existsRes?.data?.data) {
return;
}
if ((conf.rejected || []).includes(approvalStatus)) {
await processDelete({ formInstanceId: String(formInstanceId) });
await processDelete({ bizId: bizIdText });
}
const templateCode = await resolveMkTemplateCode(conf.dictName, list);
const subject = subjectName
? `${conf.subjectPrefix}:${subjectName}`
: `${conf.subjectPrefix}:${formInstanceId}`;
: `${conf.subjectPrefix}:${bizIdText}`;
return processSubmit({
templateCode,
formInstanceId: String(formInstanceId),
bizId: bizIdText,
subject,
bizType,
});