From 856f10107b7681f91114dc48991ebd121a3a8c3f Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期四, 21 五月 2026 15:20:30 +0800
Subject: [PATCH] 查询条件分类查询区分
---
src/pages/oa/_utils/approvalModuleListSearch.js | 132 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 130 insertions(+), 2 deletions(-)
diff --git a/src/pages/oa/_utils/approvalModuleListSearch.js b/src/pages/oa/_utils/approvalModuleListSearch.js
index 45a7d43..a81b174 100644
--- a/src/pages/oa/_utils/approvalModuleListSearch.js
+++ b/src/pages/oa/_utils/approvalModuleListSearch.js
@@ -4,7 +4,10 @@
getApprovalModuleConfig,
getModuleMatchingBusinessTypes,
} from "./approvalModuleRegistry.js";
-import { parseApprovalFormConfig } from "./approvalFormField.js";
+import {
+ parseApprovalFormConfig,
+ parseDatetimerangeValue,
+} from "./approvalFormField.js";
import { matchBusinessTypeValue } from "./approvalTemplateType.js";
/** 涓� Web leave-apply LEAVE_TYPE_OPTIONS 涓�鑷� */
@@ -49,16 +52,53 @@
return payload;
}
+function guessFieldTypeFromValue(val) {
+ if (Array.isArray(val)) return "datetimerange";
+ if (typeof val === "number") return "number";
+ return "text";
+}
+
/** 瑙f瀽瀹炰緥 formConfig / formPayload锛堜笌 Web resolveInstanceFormFields 瀵归綈锛� */
export function resolveInstanceFormPayload(row) {
const cfg = parseApprovalFormConfig(row?.formConfig);
- const fields = (row?.formFieldDefs?.length ? row.formFieldDefs : cfg.fields) || [];
+ let fields = (row?.formFieldDefs?.length ? row.formFieldDefs : cfg.fields) || [];
const formPayload = {
...(fields.length ? buildFormPayloadFromFields(fields) : {}),
...cfg.formPayload,
...(row?.formPayload || {}),
};
+ if (!fields.length && Object.keys(formPayload).length) {
+ fields = Object.keys(formPayload)
+ .filter(k => k && k !== "summary")
+ .map(k => ({
+ key: k,
+ label: k,
+ type: guessFieldTypeFromValue(formPayload[k]),
+ required: false,
+ options: [],
+ }));
+ }
+ fields = fields.map(field => ({
+ ...field,
+ value:
+ formPayload[field.key] ?? field.value ?? field.defaultValue ?? "",
+ }));
return { fields, formPayload };
+}
+
+/** 宸茬煡涓嬫媺瀛楁 value 鈫� 灞曠ず鏂囨锛堟ā鏉挎湭甯� options 鏃跺厹搴曪級 */
+export function formatKnownSelectLabel(prop, val) {
+ if (val === undefined || val === null || val === "") return "";
+ const maps = {
+ leaveType: LEAVE_TYPE_OPTIONS,
+ overtimeType: OVERTIME_TYPE_OPTIONS,
+ handoverStatus: HANDOVER_STATUS_OPTIONS,
+ handoverType: HANDOVER_TYPE_OPTIONS,
+ };
+ const options = maps[prop];
+ if (!options) return "";
+ const hit = options.find(o => String(o.value) === String(val));
+ return hit?.label || "";
}
export function getRowPayloadValue(row, keys) {
@@ -69,6 +109,73 @@
if (formPayload[k] != null && formPayload[k] !== "") return formPayload[k];
}
return "";
+}
+
+const DATETIME_RANGE_KEYS = [
+ "dateRange",
+ "leaveTime",
+ "overtimeTime",
+ "timeRange",
+];
+
+function pickDatetimerangeRaw(formPayload, fields = []) {
+ for (const key of DATETIME_RANGE_KEYS) {
+ const v = formPayload?.[key];
+ if (v != null && v !== "") return v;
+ const field = (fields || []).find(f => f?.key === key);
+ const fv = field?.value ?? field?.defaultValue;
+ if (fv != null && fv !== "") return fv;
+ }
+ const rangeField = (fields || []).find(
+ f => String(f?.type || "").toLowerCase() === "datetimerange"
+ );
+ if (rangeField?.key) {
+ const v =
+ formPayload?.[rangeField.key] ?? rangeField.value ?? rangeField.defaultValue;
+ if (v != null && v !== "") return v;
+ }
+ return null;
+}
+
+function splitRangeValue(val) {
+ if (val === undefined || val === null || val === "") {
+ return { start: "", end: "" };
+ }
+ if (Array.isArray(val)) {
+ return { start: val[0] || "", end: val[1] || "" };
+ }
+ return parseDatetimerangeValue(val);
+}
+
+/**
+ * 鍒楄〃鍒� prop 涓� formPayload 瀵归綈锛堣鍋� startTime/endTime 鏉ヨ嚜 dateRange锛�
+ */
+export function resolveListFieldRawValue(prop, row, fields = [], formPayload = {}) {
+ const payload = formPayload || {};
+ const direct = payload[prop] ?? row?.[prop];
+
+ if (prop === "startTime" || prop === "endTime") {
+ if (direct != null && direct !== "") return direct;
+ const altStart =
+ payload.start ?? payload.startDate ?? payload.beginTime ?? row?.startTime;
+ const altEnd =
+ payload.end ?? payload.endDate ?? payload.finishTime ?? row?.endTime;
+ if (prop === "startTime" && altStart) return altStart;
+ if (prop === "endTime" && altEnd) return altEnd;
+ const { start, end } = splitRangeValue(pickDatetimerangeRaw(payload, fields));
+ return prop === "startTime" ? start : end;
+ }
+
+ if (prop === "overtimeDate") {
+ const d = payload.overtimeDate ?? payload.date ?? direct;
+ if (d != null && d !== "") return Array.isArray(d) ? d[0] || "" : d;
+ const { start } = splitRangeValue(pickDatetimerangeRaw(payload, fields));
+ return start || "";
+ }
+
+ if (direct != null && direct !== "") return direct;
+ const hit = (fields || []).find(f => f?.key === prop);
+ return hit?.value ?? hit?.defaultValue ?? "";
}
function pickDateRange(searchForm) {
@@ -95,6 +202,10 @@
return { applicantKeyword: "", leaveType: "" };
case APPROVAL_MODULE_KEYS.OVERTIME:
return { applicantKeyword: "", overtimeType: "" };
+ case APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE:
+ case APPROVAL_MODULE_KEYS.COST_REIMBURSE:
+ case APPROVAL_MODULE_KEYS.ENTERPRISE_NEWS:
+ return { applicantKeyword: "" };
default:
return {};
}
@@ -218,6 +329,10 @@
matchApplicantKeyword(row, sf.applicantKeyword) &&
matchSelectValue(row, ["overtimeType", "鍔犵彮绫诲瀷"], sf.overtimeType)
);
+ case APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE:
+ case APPROVAL_MODULE_KEYS.COST_REIMBURSE:
+ case APPROVAL_MODULE_KEYS.ENTERPRISE_NEWS:
+ return list.filter(row => matchApplicantKeyword(row, sf.applicantKeyword));
default:
return list;
}
@@ -292,6 +407,19 @@
},
],
};
+ case APPROVAL_MODULE_KEYS.TRAVEL_REIMBURSE:
+ case APPROVAL_MODULE_KEYS.COST_REIMBURSE:
+ case APPROVAL_MODULE_KEYS.ENTERPRISE_NEWS:
+ return {
+ fields: [
+ {
+ key: "applicantKeyword",
+ type: "input",
+ label: "鐢宠浜�",
+ placeholder: "濮撳悕鎴栫紪鍙�",
+ },
+ ],
+ };
default:
return { fields: [] };
}
--
Gitblit v1.9.3