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