From 2d3530a7c11557a40807ad7c0b9e302ce6ce3a9f Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期五, 28 八月 2026 10:16:32 +0800
Subject: [PATCH] feat: 综合业务模块页面重构与交互完善

---
 src/views/officeProcessAutomation/ReimburseManage/shared/finReimbursementMappers.js |   88 +++++++++++++++++++++++++++++++++----------
 1 files changed, 67 insertions(+), 21 deletions(-)

diff --git a/src/views/officeProcessAutomation/ReimburseManage/shared/finReimbursementMappers.js b/src/views/officeProcessAutomation/ReimburseManage/shared/finReimbursementMappers.js
index 2525f70..85029bc 100644
--- a/src/views/officeProcessAutomation/ReimburseManage/shared/finReimbursementMappers.js
+++ b/src/views/officeProcessAutomation/ReimburseManage/shared/finReimbursementMappers.js
@@ -173,29 +173,61 @@
   return out;
 }
 
-/** 鏄惁瀛樺湪鍒楄〃绛涢�夋潯浠讹紙浠呯敵璇蜂汉锛� */
-export function hasActiveReimbursementSearch(searchForm = {}) {
-  return Boolean((searchForm?.applicantKeyword || "").trim());
+
+export function expenseTypeToCategory(typeLabel) {
+  const hit = EXPENSE_CATEGORY_OPTIONS.find((x) => x.label === typeLabel || x.value === typeLabel);
+  return hit?.value || typeLabel || "";
 }
 
-/** 鏈嶅姟绔湭鐢熸晥鏃讹紝鎸夌敵璇蜂汉鍋氬墠绔厹搴曠瓫閫� */
+/** 鏄惁瀛樺湪鍒楄〃绛涢�夋潯浠� */
+export function hasActiveReimbursementSearch(searchForm = {}) {
+  return Boolean(
+    (searchForm?.applicantKeyword || "").trim() ||
+    searchForm?.deptId ||
+    searchForm?.expenseCategory ||
+    (searchForm?.applyTimeRange && searchForm.applyTimeRange.length === 2)
+  );
+}
+
+/** 鏈嶅姟绔湭鐢熸晥鏃讹紝鎸夋潯浠跺仛鍓嶇鍏滃簳绛涢�� */
 export function filterReimbursementRowsBySearch(rows, searchForm = {}) {
   const list = Array.isArray(rows) ? rows : [];
-  const kw = (searchForm?.applicantKeyword || "").trim().toLowerCase();
-  if (!kw) return list;
+  let result = list;
 
-  return list.filter((row) => {
-    const parts = [
-      row.applicantName,
-      row.employeeName,
-      row.applicantNo,
-      row.applicantCode,
-      row.employeeNo,
-    ]
-      .filter((v) => v != null && v !== "")
-      .map((v) => String(v).toLowerCase());
-    return parts.some((p) => p.includes(kw));
-  });
+  const kw = (searchForm?.applicantKeyword || "").trim().toLowerCase();
+  if (kw) {
+    result = result.filter((row) => {
+      const parts = [
+        row.applicantName,
+        row.employeeName,
+        row.applicantNo,
+        row.applicantCode,
+        row.employeeNo,
+      ]
+        .filter((v) => v != null && v !== "")
+        .map((v) => String(v).toLowerCase());
+      return parts.some((p) => p.includes(kw));
+    });
+  }
+
+  if (searchForm?.deptId) {
+    result = result.filter(row => String(row.deptId) === String(searchForm.deptId));
+  }
+
+  if (searchForm?.expenseCategory) {
+    result = result.filter(row => row.expenseCategory === searchForm.expenseCategory);
+  }
+
+  if (searchForm?.applyTimeRange && searchForm.applyTimeRange.length === 2) {
+    const start = searchForm.applyTimeRange[0];
+    const end = searchForm.applyTimeRange[1];
+    result = result.filter(row => {
+      const t = (row.applyTime || row.createTime || "").substring(0, 10);
+      return t >= start && t <= end;
+    });
+  }
+
+  return result;
 }
 
 /** 鎵佸钩鍖栦负 Spring GET 鍙粦瀹氱殑 query锛坒inReimbursementDto.xxx锛屽嬁鐢ㄦ柟鎷彿锛� */
@@ -216,6 +248,10 @@
 }) {
   const dto = {
     reimbursementType,
+    deptId: searchForm.deptId || undefined,
+    expenseType: searchForm.expenseCategory ? expenseCategoryToType(searchForm.expenseCategory) : undefined,
+    createTimeStart: searchForm.applyTimeRange?.[0] || undefined,
+    createTimeEnd: searchForm.applyTimeRange?.[1] || undefined,
     ...pickApplicantQuery(searchForm),
     ...(extraDto && typeof extraDto === "object" ? extraDto : {}),
   };
@@ -227,6 +263,12 @@
     "page.size": page.size,
     ...dto,
   };
+  
+  if (searchForm.applyTimeRange && searchForm.applyTimeRange.length === 2) {
+    params["params[beginTime]"] = searchForm.applyTimeRange[0] + " 00:00:00";
+    params["params[endTime]"] = searchForm.applyTimeRange[1] + " 23:59:59";
+  }
+
   appendDotNotationQuery(params, "finReimbursementDto", dto);
   return params;
 }
@@ -319,7 +361,8 @@
     applicantName: row.applicantName || "",
     employeeNo: row.applicantCode || "",
     employeeName: row.applicantName || "",
-    applicantDeptName: row.applicantDeptName || "",
+    applicantDeptName: row.deptName || "",
+    deptId: row.deptId,
     reimburseReason: row.reason || "",
     travelStartTime: formatReimbursementDateTime(travel.startTime),
     travelEndTime: formatReimbursementDateTime(travel.endTime),
@@ -375,12 +418,14 @@
     applicantName: row.applicantName || "",
     employeeNo: row.applicantCode || "",
     employeeName: row.applicantName || "",
-    applicantDeptName: row.applicantDeptName || "",
+    applicantDeptName: row.deptName || "",
+    deptId: row.deptId,
     reimburseReason: row.reason || "",
-    expenseCategory: row.expenseType || "",
+    expenseCategory: expenseTypeToCategory(row.expenseType) || "",
     applyAmount: row.applyAmount,
     applyTime: formatReimbursementDateTime(row.createTime),
     payee: row.payeeName || "",
+    payer: row.payer || "",
     payeeAccount: row.payeeAccount || "",
     bankBranch: row.payeeBank || "",
     billStatus: row.billStatus,
@@ -846,6 +891,7 @@
     applyAmount,
     detailTotalAmount: detailTotal,
     payeeName: form.payee || "",
+    payer: form.payer || "",
     payeeAccount: form.payeeAccount || "",
     payeeBank: form.bankBranch || form.payeeBank || "",
     billStatus: "IN_APPROVAL",

--
Gitblit v1.9.3