import { matchBusinessTypeValue } from "../approve-list/approveListConstants.js";
|
|
/**
|
* 各业务模块与审批模板类型的映射(配置化入口)
|
* businessType 与后端 TypeEnums / listPage 约定一致(写死枚举值)
|
*/
|
export const APPROVAL_MODULE_KEYS = {
|
REGULAR: "regular",
|
TRANSFER: "transfer",
|
RESIGN: "resign",
|
WORK_HANDOVER: "work_handover",
|
LEAVE: "leave",
|
OVERTIME: "overtime",
|
TRAVEL_REIMBURSE: "travel_reimburse",
|
COST_REIMBURSE: "cost_reimburse",
|
ENTERPRISE_NEWS: "enterprise_news",
|
};
|
|
/** 审批实例 listPage / 保存 使用的 businessType 枚举 */
|
export const APPROVAL_BUSINESS_TYPE = {
|
[APPROVAL_MODULE_KEYS.REGULAR]: 10,
|
[APPROVAL_MODULE_KEYS.TRANSFER]: 11,
|
[APPROVAL_MODULE_KEYS.WORK_HANDOVER]: 13,
|
[APPROVAL_MODULE_KEYS.LEAVE]: 14,
|
[APPROVAL_MODULE_KEYS.OVERTIME]: 15,
|
[APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE]: 16,
|
[APPROVAL_MODULE_KEYS.COST_REIMBURSE]: 17,
|
[APPROVAL_MODULE_KEYS.ENTERPRISE_NEWS]: 18,
|
};
|
|
/** @type {Record<string, import('./approvalModuleRegistry.js').ApprovalModuleConfig>} */
|
export const APPROVAL_MODULE_REGISTRY = {
|
[APPROVAL_MODULE_KEYS.REGULAR]: {
|
label: "转正申请",
|
approvalType: "regular",
|
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.REGULAR],
|
typeLabels: ["转正", "转正申请"],
|
},
|
[APPROVAL_MODULE_KEYS.TRANSFER]: {
|
label: "调岗申请",
|
approvalType: "transfer",
|
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.TRANSFER],
|
typeLabels: ["调岗", "调动", "调岗申请", "调动申请"],
|
},
|
[APPROVAL_MODULE_KEYS.RESIGN]: {
|
label: "离职申请",
|
approvalType: "resign",
|
typeLabels: ["离职", "离职申请", "离职审批"],
|
},
|
[APPROVAL_MODULE_KEYS.WORK_HANDOVER]: {
|
label: "工作交接",
|
approvalType: "work_handover",
|
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.WORK_HANDOVER],
|
typeLabels: ["工作交接", "交接", "工作交接审批"],
|
},
|
[APPROVAL_MODULE_KEYS.LEAVE]: {
|
label: "请假申请",
|
approvalType: "leave",
|
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.LEAVE],
|
typeLabels: ["请假", "请假申请", "请假审批"],
|
},
|
[APPROVAL_MODULE_KEYS.OVERTIME]: {
|
label: "加班申请",
|
approvalType: "overtime",
|
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.OVERTIME],
|
typeLabels: ["加班", "加班申请", "加班审批"],
|
},
|
[APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE]: {
|
label: "差旅报销",
|
approvalType: "travel_reimburse",
|
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE],
|
typeLabels: ["差旅", "差旅报销", "出差报销"],
|
},
|
[APPROVAL_MODULE_KEYS.COST_REIMBURSE]: {
|
label: "费用报销",
|
approvalType: "cost_reimburse",
|
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.COST_REIMBURSE],
|
typeLabels: ["费用", "费用报销"],
|
},
|
[APPROVAL_MODULE_KEYS.ENTERPRISE_NEWS]: {
|
label: "企业新闻",
|
approvalType: "enterprise_news",
|
businessType: APPROVAL_BUSINESS_TYPE[APPROVAL_MODULE_KEYS.ENTERPRISE_NEWS],
|
typeLabels: ["企业新闻", "新闻", "新闻发布"],
|
},
|
};
|
|
/**
|
* @typedef {object} ApprovalModuleConfig
|
* @property {string} label
|
* @property {string} [approvalType]
|
* @property {string|number} [businessType]
|
* @property {string[]} [typeLabels]
|
*/
|
|
export function getApprovalModuleConfig(moduleKey) {
|
if (!moduleKey) return null;
|
return APPROVAL_MODULE_REGISTRY[moduleKey] || null;
|
}
|
|
/** 列表查询 businessType(优先配置枚举,不再回退 approvalType 字符串) */
|
export function getModuleListBusinessType(moduleKey) {
|
const cfg = getApprovalModuleConfig(moduleKey);
|
if (!cfg) return "";
|
if (cfg.businessType != null && cfg.businessType !== "") return cfg.businessType;
|
return APPROVAL_BUSINESS_TYPE[moduleKey] ?? "";
|
}
|
|
/** 从 TypeEnums 解析本模块 businessType;已配置枚举时直接返回 */
|
export function resolveModuleBusinessType(moduleKey, typeOptions = []) {
|
const cfg = getApprovalModuleConfig(moduleKey);
|
if (!cfg) return null;
|
|
const fixed = getModuleListBusinessType(moduleKey);
|
if (fixed != null && fixed !== "") return fixed;
|
|
const labels = [cfg.label, ...(cfg.typeLabels || [])].filter(Boolean);
|
const hitByLabel = (typeOptions || []).find((opt) => {
|
const optLabel = String(opt?.label || opt?.name || "").trim();
|
if (!optLabel) return false;
|
return labels.some(
|
(l) => optLabel === l || optLabel.includes(l) || l.includes(optLabel)
|
);
|
});
|
if (hitByLabel?.value != null && hitByLabel.value !== "") return hitByLabel.value;
|
|
return cfg.approvalType || null;
|
}
|
|
/** 列表/模板过滤用的 businessType 集合 */
|
export function getModuleMatchingBusinessTypes(moduleKey, typeOptions = []) {
|
const cfg = getApprovalModuleConfig(moduleKey);
|
if (!cfg) return [];
|
|
const fixed = getModuleListBusinessType(moduleKey);
|
if (fixed != null && fixed !== "") return [fixed];
|
|
const values = new Set();
|
const primary = resolveModuleBusinessType(moduleKey, typeOptions);
|
if (primary != null && primary !== "") values.add(primary);
|
|
const labels = [cfg.label, ...(cfg.typeLabels || [])].filter(Boolean);
|
for (const opt of typeOptions || []) {
|
const optLabel = String(opt?.label || opt?.name || "").trim();
|
if (!optLabel) continue;
|
const matched = labels.some(
|
(l) => optLabel === l || optLabel.includes(l) || l.includes(optLabel)
|
);
|
if (matched && opt.value != null && opt.value !== "") {
|
values.add(opt.value);
|
}
|
}
|
return [...values];
|
}
|