From 3a2ab7f3a7f89cd299df07126d74a2c6f3ce91f8 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期三, 03 六月 2026 20:18:59 +0800
Subject: [PATCH] 提交:山西林昇焱工贸有限公司/山西羿神晟农生物科技发展有限公司 配置文件

---
 src/views/officeProcessAutomation/ReimburseManage/shared/reimburseApproveBridge.js |  124 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 124 insertions(+), 0 deletions(-)

diff --git a/src/views/officeProcessAutomation/ReimburseManage/shared/reimburseApproveBridge.js b/src/views/officeProcessAutomation/ReimburseManage/shared/reimburseApproveBridge.js
new file mode 100644
index 0000000..664d646
--- /dev/null
+++ b/src/views/officeProcessAutomation/ReimburseManage/shared/reimburseApproveBridge.js
@@ -0,0 +1,124 @@
+import { getFinReimbursementDetail } from "@/api/officeProcessAutomation/finReimbursement.js";
+import { matchBusinessTypeValue } from "../../ApproveManage/approve-list/approveListConstants.js";
+import {
+  APPROVAL_MODULE_KEYS,
+  getApprovalModuleConfig,
+} from "../../ApproveManage/approve-shared/approvalModuleRegistry.js";
+import {
+  getModuleKeyByReimbursementType,
+  mapFinReimbursementDetailRow,
+  resolveReimbursementType,
+  unwrapFinReimbursementDetail,
+} from "./finReimbursementMappers.js";
+
+export const REIMBURSE_EDIT_FROM_APPROVE_KEY = "oa_reimburse_edit_from_approve";
+
+const REIMBURSE_MODULE_KEYS = [
+  APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE,
+  APPROVAL_MODULE_KEYS.COST_REIMBURSE,
+];
+
+/** 瀹℃壒瀹炰緥鏄惁宸梾/璐圭敤鎶ラ攢 */
+export function inferReimburseModuleKeyFromInstance(row) {
+  if (!row) return "";
+  for (const moduleKey of REIMBURSE_MODULE_KEYS) {
+    const cfg = getApprovalModuleConfig(moduleKey);
+    if (!cfg) continue;
+    if (
+      cfg.businessType != null &&
+      cfg.businessType !== "" &&
+      matchBusinessTypeValue(row.businessType, cfg.businessType)
+    ) {
+      return moduleKey;
+    }
+    if (matchBusinessTypeValue(row.businessType, cfg.approvalType)) {
+      return moduleKey;
+    }
+    const text = `${row.templateName || ""}${row.title || ""}${row.businessName || ""}`;
+    if ((cfg.typeLabels || []).some((l) => l && text.includes(l))) {
+      return moduleKey;
+    }
+  }
+  return "";
+}
+
+export function isReimburseApprovalInstance(row) {
+  return Boolean(inferReimburseModuleKeyFromInstance(row));
+}
+
+/** 瀹℃壒瀹炰緥鍏宠仈鐨� fin_reimbursement.id */
+export function resolveFinReimbursementIdFromInstance(row) {
+  const raw = row?.businessId ?? row?.formPayload?.reimbursementId;
+  if (raw == null || raw === "") return undefined;
+  const n = Number(raw);
+  return Number.isNaN(n) ? raw : n;
+}
+
+/** 鎷夊彇鎶ラ攢璇︽儏骞舵槧灏勪负宸梾/璐圭敤椤甸潰琛岋紙浠ユ帴鍙� reimbursementType 涓哄噯锛� */
+export async function loadReimburseDetailForInstance(instanceRow, moduleKey) {
+  const mk = moduleKey || inferReimburseModuleKeyFromInstance(instanceRow);
+  const id = resolveFinReimbursementIdFromInstance(instanceRow);
+  if (id == null) {
+    throw new Error("missing reimbursement id");
+  }
+  const res = await getFinReimbursementDetail(id);
+  const raw = unwrapFinReimbursementDetail(res);
+  const reimburseRow = mapFinReimbursementDetailRow(raw, mk);
+  const reimbursementType = resolveReimbursementType(raw, mk);
+  const resolvedMk =
+    getModuleKeyByReimbursementType(reimbursementType) || mk;
+  return {
+    reimburseRow,
+    instanceRow,
+    moduleKey: resolvedMk,
+    reimbursementType,
+  };
+}
+
+export function stashReimburseEditFromApprove(moduleKey, reimbursementId) {
+  sessionStorage.setItem(
+    REIMBURSE_EDIT_FROM_APPROVE_KEY,
+    JSON.stringify({ moduleKey, reimbursementId })
+  );
+}
+
+export function consumeReimburseEditFromApprove() {
+  const raw = sessionStorage.getItem(REIMBURSE_EDIT_FROM_APPROVE_KEY);
+  if (!raw) return null;
+  sessionStorage.removeItem(REIMBURSE_EDIT_FROM_APPROVE_KEY);
+  try {
+    return JSON.parse(raw);
+  } catch {
+    return null;
+  }
+}
+
+/** 浠庡凡娉ㄥ唽璺敱瑙f瀽宸梾/璐圭敤鎶ラ攢鑿滃崟 path锛堥伩鍏嶅啓姝� path 瀵艰嚧 404锛� */
+export function resolveReimburseManageRoutePath(router, moduleKey) {
+  if (!router?.getRoutes) return "";
+  const needle =
+    moduleKey === APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE
+      ? "travel-reimburse"
+      : moduleKey === APPROVAL_MODULE_KEYS.COST_REIMBURSE
+        ? "cost-reimburse"
+        : "";
+  if (!needle) return "";
+  const labelHint =
+    moduleKey === APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE ? "宸梾" : "璐圭敤";
+  const hit = router.getRoutes().find((r) => {
+    const path = r.path || "";
+    if (path.includes(needle)) return true;
+    const title = r.meta?.title || "";
+    return title.includes(labelHint) && title.includes("鎶ラ攢");
+  });
+  return hit?.path || "";
+}
+
+export async function navigateToReimburseManageForEdit(router, moduleKey, reimbursementId) {
+  stashReimburseEditFromApprove(moduleKey, reimbursementId);
+  const path = resolveReimburseManageRoutePath(router, moduleKey);
+  if (!path) {
+    throw new Error("route not found");
+  }
+  await router.push(path);
+}

--
Gitblit v1.9.3