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/approveListUtils.js |   91 ++++++++++++++++++++++++++++++++++-----------
 1 files changed, 69 insertions(+), 22 deletions(-)

diff --git a/src/pages/oa/_utils/approveListUtils.js b/src/pages/oa/_utils/approveListUtils.js
index 965b3dd..f7ddc00 100644
--- a/src/pages/oa/_utils/approveListUtils.js
+++ b/src/pages/oa/_utils/approveListUtils.js
@@ -5,6 +5,11 @@
   isSelectField,
   mergeFormConfigForEdit,
 } from "./approvalFormField.js";
+import {
+  formatKnownSelectLabel,
+  resolveInstanceFormPayload,
+  resolveListFieldRawValue,
+} from "./approvalModuleListSearch.js";
 
 export const DETAIL_STORAGE_KEY = "oa_approve_instance_detail_row";
 
@@ -57,9 +62,19 @@
   return parseTime(val, "{y}-{m}-{d} {h}:{i}:{s}") || String(val);
 }
 
-/** 瑙f瀽瀹炰緥 formConfig 涓哄彧璇诲睍绀哄瓧娈� */
-export function resolveInstanceDisplayFields(formConfig) {
-  const merged = mergeFormConfigForEdit("", formConfig);
+/** 瑙f瀽瀹炰緥涓哄彧璇诲睍绀哄瓧娈碉紙鍚堝苟 formPayload锛屾敮鎸佷紶鏁磋鎴栦粎 formConfig锛� */
+export function resolveInstanceDisplayFields(formConfigOrRow) {
+  const row =
+    formConfigOrRow &&
+    typeof formConfigOrRow === "object" &&
+    (formConfigOrRow.formConfig != null ||
+      formConfigOrRow.formPayload != null ||
+      formConfigOrRow.formFieldDefs != null)
+      ? formConfigOrRow
+      : { formConfig: formConfigOrRow };
+  const { fields } = resolveInstanceFormPayload(row);
+  if (fields.length) return fields.filter(f => f?.key);
+  const merged = mergeFormConfigForEdit("", row.formConfig);
   return (merged.fields || []).filter(f => f?.key);
 }
 
@@ -67,10 +82,39 @@
   const val = field.value ?? field.defaultValue;
   if (val === undefined || val === null || val === "") return "-";
   if (isSelectField(field)) {
-    return getFieldOptionLabel(field, val) || String(val);
+    const fromOptions = getFieldOptionLabel(field, val);
+    if (fromOptions && fromOptions !== "-") return fromOptions;
+    const known = formatKnownSelectLabel(field.key, val);
+    if (known) return known;
+    return String(val);
   }
+  const known = formatKnownSelectLabel(field?.key, val);
+  if (known) return known;
   const shown = formatFieldDisplayValue(field, val);
   return shown || String(val);
+}
+
+const DATETIME_LIST_PROPS = new Set([
+  "startTime",
+  "endTime",
+  "overtimeDate",
+  "applyTime",
+]);
+
+function formatListFieldDisplay(prop, val, field) {
+  if (val === undefined || val === null || val === "") return "-";
+  if (DATETIME_LIST_PROPS.has(prop)) {
+    const shown = formatDateTime(val);
+    if (shown && shown !== "-") return shown;
+  }
+  if (field?.type === "datetimerange") {
+    const shown = formatFieldDisplayValue(field, val);
+    if (shown) return shown;
+  }
+  if (field) return displayFieldValue({ ...field, value: val });
+  const known = formatKnownSelectLabel(prop, val);
+  if (known) return known;
+  return String(val);
 }
 
 /** 瀹℃壒璁板綍 result锛歛pproved | rejected | pending */
@@ -279,18 +323,23 @@
   };
 }
 
-/** 浠� formConfig 鎻愬彇鍒楄〃灞曠ず瀛楁锛坙abel + value锛� */
-export function buildFormDisplayRows(formConfig, listFields = []) {
-  const fields = resolveInstanceDisplayFields(formConfig);
+/** 浠庡疄渚嬭鎻愬彇鍒楄〃灞曠ず瀛楁锛坙abel + value锛屽惈 formPayload锛� */
+export function buildFormDisplayRows(row, listFields = []) {
+  const { fields, formPayload } = resolveInstanceFormPayload(row);
+  const fieldByKey = new Map((fields || []).map(f => [f.key, f]));
   const rows = [];
-  const propKeys = (listFields || []).map(f => f.prop).filter(Boolean);
+  const defs = listFields || [];
 
-  if (propKeys.length) {
-    propKeys.forEach(prop => {
-      const hit = fields.find(f => f.key === prop);
-      if (hit) {
-        rows.push({ label: hit.label, value: displayFieldValue(hit) });
-      }
+  if (defs.length) {
+    defs.forEach(def => {
+      if (!def?.prop) return;
+      const prop = def.prop;
+      const hit = fieldByKey.get(prop);
+      const raw = resolveListFieldRawValue(prop, row, fields, formPayload);
+      rows.push({
+        label: def.label || hit?.label || prop,
+        value: formatListFieldDisplay(prop, raw, hit),
+      });
     });
   } else {
     fields.slice(0, 3).forEach(f => {
@@ -303,17 +352,14 @@
 /** 鍒楄〃琛屽寮猴紙淇濈暀鍘熷瀛楁渚涜鎯�/缂栬緫锛� */
 export function mapInstanceListRow(row, listFields = []) {
   if (!row) return {};
-  const displayRows = buildFormDisplayRows(row.formConfig, listFields);
+  const displayRows = buildFormDisplayRows(row, listFields);
   const extra = {};
-  const formFields = resolveInstanceDisplayFields(row.formConfig);
+  const { fields, formPayload } = resolveInstanceFormPayload(row);
   (listFields || []).forEach(def => {
     if (!def?.prop) return;
-    const hit = formFields.find(f => f.key === def.prop);
-    extra[def.prop] = hit ? displayFieldValue(hit) : "-";
-  });
-  const formPayload = {};
-  formFields.forEach(f => {
-    if (f?.key) formPayload[f.key] = f.value ?? f.defaultValue ?? "";
+    const hit = fields.find(f => f.key === def.prop);
+    const raw = resolveListFieldRawValue(def.prop, row, fields, formPayload);
+    extra[def.prop] = formatListFieldDisplay(def.prop, raw, hit);
   });
   return {
     ...row,
@@ -322,6 +368,7 @@
     createTime: formatDateTime(row.applyTime || row.createTime),
     displayRows,
     formPayload,
+    formFieldDefs: fields,
     ...extra,
   };
 }

--
Gitblit v1.9.3