From 7b60f24e07f54634503e5b37e6ca5f85d4ad743f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 07 八月 2026 15:41:39 +0800
Subject: [PATCH] 天津_建诚恒商贸 1.备件管理-新增独立备件出库功能入口,支持直接完成备件领用出库操作。 2.设备保养-支持按日期分组折叠展示,分组条目可展开查看明细;单条明细行末尾增加【保养完成】操作按钮,可单独办结单条保养任务;折叠汇总状态下,新增【一键保养完成】批量操作按钮,快速办结当前分组全部保养项。 3.设备巡检-按日期分组折叠展示,分组支持展开查看明细;每条巡检明细后增设【巡检完成】按钮,支持单独办结单条巡检记录;分组折叠未展开状态下,提供【一键巡检完成】批量操作,统一办结该分组下所有巡检任务。 4.增值税对比-优化数据展示逻辑,列表展示各订单增值税明细;页面右侧新增柱状可视化图表,直观对比进销项增值税数据。 5.管理驾驶舱-指标修改:将顶部「销售产品数」调整为「销售订单数」;时间筛选:页面左上角新增日期范围下拉筛选控件,所有统计指标标注当前筛选时段;

---
 src/views/officeProcessAutomation/ReimburseManage/cost-reimburse/costReimburseUtils.js |   57 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 32 insertions(+), 25 deletions(-)

diff --git a/src/views/officeProcessAutomation/ReimburseManage/cost-reimburse/costReimburseUtils.js b/src/views/officeProcessAutomation/ReimburseManage/cost-reimburse/costReimburseUtils.js
index 012e4d8..1736b3e 100644
--- a/src/views/officeProcessAutomation/ReimburseManage/cost-reimburse/costReimburseUtils.js
+++ b/src/views/officeProcessAutomation/ReimburseManage/cost-reimburse/costReimburseUtils.js
@@ -107,30 +107,23 @@
 }
 
 export function statusLabel(v) {
+  if (v === "draft") return "鑽夌";
   if (v === "approved") return "宸查�氳繃";
+  if (v === "paid") return "宸蹭粯娆�";
   if (v === "rejected") return "宸查┏鍥�";
+  if (v === "cancelled") return "宸叉挙鍥�";
   return "瀹℃牳涓�";
 }
 
 export function statusTagType(v) {
-  if (v === "approved") return "success";
+  if (v === "draft") return "info";
+  if (v === "approved" || v === "paid") return "success";
   if (v === "rejected") return "danger";
+  if (v === "cancelled") return "info";
   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;
@@ -149,18 +142,32 @@
   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) {

--
Gitblit v1.9.3