95 lines
2.9 KiB
JavaScript
95 lines
2.9 KiB
JavaScript
import { getDictionary } from '@/api/system/dictbiz';
|
||
import { processDelete, processSubmit } from '@/api/system/business-process';
|
||
import { ElMessage } from 'element-plus';
|
||
|
||
export const MK_BIZ = {
|
||
'customer-archive': {
|
||
dictName: '提交客商审核流',
|
||
subjectPrefix: '客商准入审批',
|
||
rejected: ['rejected'],
|
||
},
|
||
'project-apply': {
|
||
dictName: '提交项目审核流',
|
||
subjectPrefix: '项目审批',
|
||
rejected: ['rejected', 'change_rejected', 'withdrawn'],
|
||
},
|
||
'contract-manage': {
|
||
dictName: '提交合同审核流',
|
||
subjectPrefix: '合同审批',
|
||
rejected: ['rejected', 'change_rejected', 'withdrawn'],
|
||
},
|
||
'waybill-manage': {
|
||
dictName: '提交运单审核流',
|
||
subjectPrefix: '运单审批',
|
||
rejected: ['rejected', 'returned'],
|
||
},
|
||
'pre-settlement': {
|
||
dictName: '提交预结算审核流',
|
||
subjectPrefix: '预结算审批',
|
||
rejected: ['returned'],
|
||
},
|
||
'formal-settlement': {
|
||
dictName: '提交正式结算审核流',
|
||
subjectPrefix: '正式结算审批',
|
||
rejected: ['returned'],
|
||
},
|
||
'payment-application': {
|
||
dictName: '提交付款审核流',
|
||
subjectPrefix: '付款审批',
|
||
rejected: ['returned'],
|
||
},
|
||
};
|
||
|
||
const MK_SWITCH_NAME = '开启MK';
|
||
|
||
async function loadMkTemplateList() {
|
||
const res = await getDictionary({ code: 'mk_template' });
|
||
return res?.data?.data || [];
|
||
}
|
||
|
||
/** 业务字典 mk_template:名称「开启MK」且键值为 1 时才请求 MK */
|
||
export function isMkEnabled(list = []) {
|
||
const matched = list.find(item => String(item.dictValue || '').trim() === MK_SWITCH_NAME);
|
||
return String(matched?.dictKey ?? '').trim() === '1';
|
||
}
|
||
|
||
export async function resolveMkTemplateCode(dictName, list) {
|
||
const dictList = list || (await loadMkTemplateList());
|
||
const matched = dictList.find(item => String(item.dictValue || '').trim() === dictName);
|
||
const templateCode = matched?.dictKey;
|
||
if (!templateCode) {
|
||
ElMessage.warning(`未配置业务字典 mk_template「${dictName}」,无法提交审核流`);
|
||
return Promise.reject(new Error(`未配置业务字典 mk_template「${dictName}」`));
|
||
}
|
||
return String(templateCode);
|
||
}
|
||
|
||
export async function submitMkApprovalFlow({
|
||
bizType,
|
||
formInstanceId,
|
||
subjectName = '',
|
||
approvalStatus = '',
|
||
}) {
|
||
const conf = MK_BIZ[bizType];
|
||
if (!conf) {
|
||
return Promise.reject(new Error(`不支持的MK业务类型:${bizType}`));
|
||
}
|
||
const list = await loadMkTemplateList();
|
||
if (!isMkEnabled(list)) {
|
||
return;
|
||
}
|
||
if ((conf.rejected || []).includes(approvalStatus)) {
|
||
await processDelete({ formInstanceId: String(formInstanceId) });
|
||
}
|
||
const templateCode = await resolveMkTemplateCode(conf.dictName, list);
|
||
const subject = subjectName
|
||
? `${conf.subjectPrefix}:${subjectName}`
|
||
: `${conf.subjectPrefix}:${formInstanceId}`;
|
||
return processSubmit({
|
||
templateCode,
|
||
formInstanceId: String(formInstanceId),
|
||
subject,
|
||
bizType,
|
||
});
|
||
}
|