| | |
| | | return "warning"; |
| | | } |
| | | |
| | | export function formatApprovalFlowSummary(row) { |
| | | const nodes = row?.approvalFlowNodes || []; |
| | | if (!nodes.length) return "—"; |
| | | return nodes |
| | | .map((n, i) => { |
| | | const name = (n.approverName || "").trim() || `节点${i + 1}`; |
| | | if (n.nodeStatus === "finish") return `${name}✓`; |
| | | if (n.nodeStatus === "error") return `${name}✗`; |
| | | if (n.nodeStatus === "process") return `${name}…`; |
| | | return name; |
| | | }) |
| | | .join(" → "); |
| | | } |
| | | export { formatApprovalFlowSummary } from "../shared/finReimbursementMappers.js"; |
| | | |
| | | export function resolveApprovalRoles(amount, expenseCategory) { |
| | | const amt = Number(amount) || 0; |
| | |
| | | return roles; |
| | | } |
| | | |
| | | export function buildAutoApprovalFlow(amount, expenseCategory) { |
| | | export function buildAutoApprovalFlow(amount, expenseCategory, previousNodes = []) { |
| | | const roles = resolveApprovalRoles(amount, expenseCategory); |
| | | return roles.map((role, i) => ({ |
| | | approverId: null, |
| | | approverName: APPROVAL_ROLE_LABELS[role] || role, |
| | | roleKey: role, |
| | | sortOrder: i + 1, |
| | | nodeOrder: i + 1, |
| | | nodeStatus: i === 0 ? "process" : "wait", |
| | | approveOpinion: "", |
| | | approveTime: "", |
| | | })); |
| | | const prevByRole = new Map(); |
| | | (previousNodes || []).forEach((n, idx) => { |
| | | if (n?.roleKey) prevByRole.set(n.roleKey, n); |
| | | else if (n?.approverId != null && n.approverId !== "") { |
| | | prevByRole.set(`__idx_${idx}`, n); |
| | | } |
| | | }); |
| | | return roles.map((role, i) => { |
| | | const prev = prevByRole.get(role) || prevByRole.get(`__idx_${i}`); |
| | | const hasApprover = prev?.approverId != null && prev.approverId !== ""; |
| | | return { |
| | | approverId: hasApprover ? prev.approverId : null, |
| | | approverName: hasApprover |
| | | ? prev.approverName || "" |
| | | : APPROVAL_ROLE_LABELS[role] || role, |
| | | roleKey: role, |
| | | signMode: prev?.signMode || "countersign", |
| | | sortOrder: i + 1, |
| | | nodeOrder: i + 1, |
| | | nodeStatus: i === 0 ? "process" : "wait", |
| | | approveOpinion: "", |
| | | approveTime: "", |
| | | }; |
| | | }); |
| | | } |
| | | |
| | | export function getApprovalRuleHint(amount, expenseCategory) { |