From 4ab0be7d4441f378add1f242b168d80fb27e65fe Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期五, 22 五月 2026 17:57:44 +0800
Subject: [PATCH] OA部分查询条件变更

---
 src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalInstanceListSearch.js |  136 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 136 insertions(+), 0 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalInstanceListSearch.js b/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalInstanceListSearch.js
new file mode 100644
index 0000000..3042d0c
--- /dev/null
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-shared/approvalInstanceListSearch.js
@@ -0,0 +1,136 @@
+import { APPROVAL_MODULE_KEYS } from "./approvalModuleRegistry.js";
+
+/** 鏀寔瀹℃壒鍗曞彿鏌ヨ/涓昏〃灞曠ず鐨勫鎵圭敵璇锋ā鍧� */
+export const INSTANCE_NO_SEARCH_MODULE_KEYS = new Set([
+  APPROVAL_MODULE_KEYS.REGULAR,
+  APPROVAL_MODULE_KEYS.TRANSFER,
+  APPROVAL_MODULE_KEYS.WORK_HANDOVER,
+  APPROVAL_MODULE_KEYS.LEAVE,
+  APPROVAL_MODULE_KEYS.OVERTIME,
+]);
+
+export const INSTANCE_NO_TABLE_COLUMN = {
+  label: "瀹℃壒鍗曞彿",
+  prop: "instanceNo",
+  width: 170,
+  showOverflowTooltip: true,
+};
+
+/** 鎵佸钩鍖栦负 Spring GET 鍙粦瀹氱殑 query锛坅pprovalInstanceDto.xxx锛屽嬁鐢ㄦ柟鎷彿锛� */
+export function appendDotNotationQuery(target, prefix, fields) {
+  if (!fields || typeof fields !== "object") return;
+  for (const [key, value] of Object.entries(fields)) {
+    if (value == null || value === "") continue;
+    target[`${prefix}.${key}`] = value;
+  }
+}
+
+function pickApplicantFromSearchForm(searchForm = {}) {
+  const out = {};
+  const sf = searchForm || {};
+  const name = (sf.applicantName || "").trim();
+  const kw = (sf.applicantKeyword || "").trim();
+  const id = sf.applicantId;
+
+  if (name) out.applicantName = name;
+  if (kw) {
+    out.applicantName = kw;
+    if (/^\d+$/.test(kw)) out.applicantId = Number(kw);
+  }
+  if (id != null && id !== "") {
+    out.applicantId = typeof id === "number" ? id : Number(id) || id;
+  }
+  return out;
+}
+
+function pickInstanceNoFromSearchForm(searchForm = {}) {
+  const no = (searchForm?.instanceNo || "").trim();
+  return no ? { instanceNo: no } : {};
+}
+
+/** 缁勮 approvalInstanceDto 鏌ヨ鐗囨锛堢敵璇蜂汉 + 瀹℃壒鍗曞彿锛� */
+export function buildApprovalInstanceSearchDto(searchForm = {}, extraParams = {}) {
+  const dto = {
+    ...(extraParams && typeof extraParams === "object" ? extraParams : {}),
+  };
+  Object.assign(dto, pickApplicantFromSearchForm(searchForm));
+  Object.assign(dto, pickInstanceNoFromSearchForm(searchForm));
+  delete dto.createTime;
+  delete dto.createTimeStart;
+  delete dto.createTimeEnd;
+  return dto;
+}
+
+function getRowPayloadValue(row, keys) {
+  const keyList = Array.isArray(keys) ? keys : [keys];
+  const payload = row?.formPayload || {};
+  for (const k of keyList) {
+    if (row?.[k] != null && row[k] !== "") return row[k];
+    if (payload[k] != null && payload[k] !== "") return payload[k];
+  }
+  return "";
+}
+
+function matchApplicantKeyword(row, keyword) {
+  const kw = (keyword || "").trim().toLowerCase();
+  if (!kw) return true;
+  const parts = [
+    row?.applicantName,
+    row?.applicantNo,
+    row?.applicantId,
+    getRowPayloadValue(row, ["applicant", "applicantName", "applicantId"]),
+  ]
+    .filter((v) => v != null && v !== "")
+    .map((v) => String(v).toLowerCase());
+  return parts.some((p) => p.includes(kw));
+}
+
+function matchApplicantId(row, applicantId) {
+  if (applicantId == null || applicantId === "") return true;
+  const id = String(applicantId);
+  if (row?.applicantId != null && String(row.applicantId) === id) return true;
+  const payloadApplicant = getRowPayloadValue(row, [
+    "applicant",
+    "applicantId",
+    "applicantUserId",
+  ]);
+  return String(payloadApplicant) === id;
+}
+
+function matchSelectValue(row, keys, expected) {
+  if (!expected) return true;
+  const raw = getRowPayloadValue(row, keys);
+  return String(raw) === String(expected);
+}
+
+function matchInstanceNo(row, instanceNo) {
+  const kw = (instanceNo || "").trim().toLowerCase();
+  if (!kw) return true;
+  const parts = [row?.instanceNo, row?.bizId]
+    .filter((v) => v != null && v !== "")
+    .map((v) => String(v).toLowerCase());
+  return parts.some((p) => p.includes(kw));
+}
+
+/** 鏄惁瀛樺湪鍒楄〃绛涢�夋潯浠讹紙鐢宠浜� / 瀹℃壒鍗曞彿锛� */
+export function hasActiveModuleSearch(moduleKey, searchForm = {}) {
+  const sf = searchForm || {};
+  if ((sf.instanceNo || "").trim()) return true;
+  if ((sf.applicantKeyword || "").trim()) return true;
+  if ((sf.applicantName || "").trim()) return true;
+  return sf.applicantId != null && sf.applicantId !== "";
+}
+
+/** 鎸夌敵璇蜂汉銆佸鎵瑰崟鍙峰仛鍓嶇鍏滃簳绛涢�� */
+export function filterInstanceRowsByModuleSearch(moduleKey, rows, searchForm = {}) {
+  const sf = searchForm || {};
+  const list = Array.isArray(rows) ? rows : [];
+  if (!hasActiveModuleSearch(moduleKey, sf)) return list;
+
+  return list.filter(
+    (row) =>
+      matchInstanceNo(row, sf.instanceNo) &&
+      matchApplicantId(row, sf.applicantId) &&
+      matchApplicantKeyword(row, sf.applicantKeyword || sf.applicantName)
+  );
+}

--
Gitblit v1.9.3