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-list/approveListConstants.js |  145 +++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 117 insertions(+), 28 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js b/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
index c16dcd8..938a787 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
@@ -12,6 +12,10 @@
   isDynamicOptionSource,
   resolveSelectDisplayLabel,
 } from "../approve-template/selectOptionSource.js";
+import {
+  appendDotNotationQuery,
+  buildApprovalInstanceSearchDto,
+} from "../approve-shared/approvalInstanceListSearch.js";
 
 /** 瀹℃壒绫诲瀷锛堜笌鍚庣瀛楁 approvalType 瀵归綈锛屽悗鏈熷彲鍚屾锛� */
 export const APPROVAL_TYPE_OPTIONS = [
@@ -33,6 +37,7 @@
 
 /** 鍒楄〃鏌ヨ锛氬鎵圭姸鎬侊紙涓庡悗绔� status 鏋氫妇涓�鑷达級 */
 export const APPROVAL_STATUS_SEARCH_OPTIONS = [
+  { value: "DRAFT", label: "鑽夌" },
   { value: "PENDING", label: "寰呭鎵�" },
   { value: "APPROVED", label: "宸查�氳繃" },
   { value: "REJECTED", label: "宸查┏鍥�" },
@@ -40,34 +45,105 @@
 
 /**
  * 瀹℃壒鐘舵�佸睍绀猴紙涓庡悗绔� status 鏋氫妇涓�鑷达級
- * PENDING 鈫� 寰呭鎵�/杩涜涓�  APPROVED 鈫� 宸查�氳繃/宸插畬鎴�  REJECTED 鈫� 宸查┏鍥�
+ * DRAFT鈫掕崏绋� PENDING鈫掑緟瀹℃壒/杩涜涓� APPROVED鈫掑凡閫氳繃/宸插畬鎴� REJECTED鈫掑凡椹冲洖
  */
 export const APPROVAL_STATUS_OPTIONS = [
+  { value: "draft", api: "DRAFT", label: "鑽夌" },
   { value: "pending", api: "PENDING", label: "寰呭鎵�" },
   { value: "approved", api: "APPROVED", label: "宸查�氳繃" },
   { value: "rejected", api: "REJECTED", label: "宸查┏鍥�" },
   { value: "cancelled", api: "CANCELLED", label: "宸叉挙閿�" },
 ];
 
+/** 鏁板瓧鐘舵�佺爜锛堥儴鍒嗗悗绔敤 0/1/2锛� */
+const STATUS_NUMERIC_MAP = {
+  0: "pending",
+  1: "approved",
+  2: "rejected",
+  3: "cancelled",
+  4: "cancelled",
+};
+
 /** 鍚庣 status / 椤甸潰 approvalStatus 鈫� 缁熶竴椤甸潰 key锛坧ending | approved | rejected | cancelled锛� */
 export function normalizeApprovalStatusKey(v) {
-  const s = String(v ?? "").trim();
+  if (v == null || v === "") return "pending";
+  if (typeof v === "number" || (typeof v === "string" && /^\d+$/.test(v.trim()))) {
+    const numKey = STATUS_NUMERIC_MAP[Number(v)];
+    if (numKey) return numKey;
+  }
+  const s = String(v).trim();
   if (!s) return "pending";
   const upper = s.toUpperCase();
-  if (upper === "APPROVED" || upper === "APPROVE" || upper === "PASS") return "approved";
-  if (upper === "REJECTED" || upper === "REJECT" || upper === "REFUSE") return "rejected";
-  if (upper === "CANCELLED" || upper === "CANCEL") return "cancelled";
+  if (upper === "DRAFT") return "draft";
+  if (upper === "PUBLISHED") return "approved";
+  if (upper === "OFFLINE") return "cancelled";
+  if (upper === "APPROVED" || upper === "APPROVE" || upper === "PASS" || upper === "AGREE") {
+    return "approved";
+  }
+  if (
+    upper === "REJECTED" ||
+    upper === "REJECT" ||
+    upper === "REFUSE" ||
+    upper === "REFUSED" ||
+    upper === "DENIED"
+  ) {
+    return "rejected";
+  }
+  if (upper === "CANCELLED" || upper === "CANCEL" || upper === "REVOKED") return "cancelled";
   if (
     upper === "PENDING" ||
     upper === "IN_PROGRESS" ||
     upper === "PROCESSING" ||
-    upper === "RUNNING"
+    upper === "RUNNING" ||
+    upper === "WAIT" ||
+    upper === "WAITING"
   ) {
     return "pending";
   }
+  if (s.includes("鑽夌")) return "draft";
+  if (s.includes("椹冲洖") || s.includes("鎷掔粷")) return "rejected";
+  if (s.includes("涓嬬嚎")) return "cancelled";
+  if (s.includes("鎾ら攢")) return "cancelled";
+  if (s.includes("鍙戝竷") || s.includes("閫氳繃") || s.includes("瀹屾垚")) return "approved";
+  if (s.includes("寰呭") || s.includes("杩涜涓�") || s.includes("瀹℃壒涓�")) return "pending";
   const lower = s.toLowerCase();
-  if (["pending", "approved", "rejected", "cancelled"].includes(lower)) return lower;
+  if (["draft", "pending", "approved", "rejected", "cancelled"].includes(lower)) return lower;
   return "pending";
+}
+
+/** 浠庡垪琛�/璇︽儏琛岃В鏋愬悗绔師濮嬬姸鎬侊紙鍏煎澶氬瓧娈靛懡鍚嶏級 */
+export function resolveInstanceStatusRaw(row) {
+  if (!row || typeof row !== "object") return "";
+  const candidates = [
+    row.status,
+    row.statusRaw,
+    row.approvalStatus,
+    row.statusName,
+    row.statusLabel,
+    row.approvalStatusName,
+    row.statusDesc,
+    row.instanceStatus,
+    row.approvalInstanceStatus,
+    row.approveStatus,
+    row.auditStatus,
+    row.approvalInstance?.status,
+    row.approvalInstanceVo?.status,
+  ];
+  for (const c of candidates) {
+    if (c != null && c !== "") return c;
+  }
+  const tasks = row.tasks;
+  if (Array.isArray(tasks) && tasks.length) {
+    const rejected = tasks.some((t) =>
+      normalizeApprovalStatusKey(t?.status ?? t?.taskStatus) === "rejected"
+    );
+    if (rejected) return "REJECTED";
+    const allApproved = tasks.every((t) =>
+      normalizeApprovalStatusKey(t?.status ?? t?.taskStatus) === "approved"
+    );
+    if (allApproved) return "APPROVED";
+  }
+  return "";
 }
 
 /** 鎻愪氦寮圭獥锛氭ā鏉垮崱鐗囷紙鏉ヨ嚜鍚庣鍒楄〃锛� */
@@ -322,12 +398,15 @@
     dto.id = existingRow?.id ?? submitForm?.instanceId;
     dto.instanceNo = existingRow?.instanceNo ?? submitForm?.instanceNo ?? "";
     dto.status =
-      existingRow?.statusRaw || mapInstanceStatusToApi(existingRow?.approvalStatus) || "PENDING";
+      submitForm?.saveStatusApi ||
+      existingRow?.statusRaw ||
+      mapInstanceStatusToApi(existingRow?.approvalStatus) ||
+      "PENDING";
     dto.currentLevel = existingRow?.currentLevel ?? submitForm?.currentLevel ?? 1;
     dto.applicantId = existingRow?.applicantId ?? existingRow?.applicantNo;
     dto.applicantName = existingRow?.applicantName || "";
   } else {
-    dto.status = "PENDING";
+    dto.status = submitForm?.saveStatusApi || "PENDING";
     dto.currentLevel = 1;
     dto.applicantId = userStore?.id;
     dto.applicantName = userStore?.nickName || userStore?.name || "";
@@ -352,6 +431,12 @@
   return normalizeApprovalStatusKey(status);
 }
 
+/** 鍒楄〃/璇︽儏琛� 鈫� 椤甸潰 approvalStatus key */
+export function mapInstanceApprovalStatusFromRow(row) {
+  const raw = resolveInstanceStatusRaw(row);
+  return normalizeApprovalStatusKey(raw);
+}
+
 /** 椤甸潰 approvalStatus 鈫� 鍚庣 status */
 export function mapInstanceStatusToApi(approvalStatus) {
   const key = normalizeApprovalStatusKey(approvalStatus);
@@ -370,7 +455,8 @@
 /** 鍒嗛〉鍒楄〃椤� 鈫� 琛ㄦ牸琛� */
 export function mapInstanceFromApi(row) {
   if (!row) return {};
-  const approvalStatus = mapInstanceStatusFromApi(row.status);
+  const statusRaw = resolveInstanceStatusRaw(row);
+  const approvalStatus = normalizeApprovalStatusKey(statusRaw);
   const createTime = formatDisplayTime(row.createTime ?? row.applyTime ?? "");
   const applyTime = formatDisplayTime(row.applyTime ?? "");
   const finishTime = formatDisplayTime(row.finishTime ?? "");
@@ -393,11 +479,11 @@
     applicantId: row.applicantId,
     applicantNo: row.applicantId != null ? String(row.applicantId) : "",
     applicantName: row.applicantName || "",
-    approvalType: row.templateName || "",
+    approvalType: row.approvalType || row.templateName || "",
     unread: Boolean(row.isApprove) && approvalStatus === "pending",
     isApprove: Boolean(row.isApprove),
     approvalStatus,
-    statusRaw: row.status,
+    statusRaw: statusRaw || row.status,
     createTime,
     applyTime: applyTime === "鈥�" ? "" : applyTime,
     finishTime: finishTime === "鈥�" ? "" : finishTime,
@@ -438,26 +524,26 @@
   };
 }
 
-export function buildApprovalInstanceListParams({ page, searchForm, businessType, extraParams }) {
+export function buildApprovalInstanceListParams({
+  page,
+  searchForm,
+  businessType,
+  extraParams,
+}) {
+  const dto = buildApprovalInstanceSearchDto(searchForm, extraParams);
+  const bizType = businessType ?? searchForm?.businessType;
+  if (bizType != null && bizType !== "") {
+    dto.businessType = bizType;
+  }
+
   const params = {
     current: page.current,
     size: page.size,
-    ...(extraParams && typeof extraParams === "object" ? extraParams : {}),
+    "page.current": page.current,
+    "page.size": page.size,
+    ...dto,
   };
-  const bizType = businessType ?? searchForm?.businessType;
-  if (bizType != null && bizType !== "") {
-    params.businessType = bizType;
-  }
-  if (searchForm?.status) {
-    params.status = searchForm.status;
-  }
-  const range = searchForm?.createTimeRange;
-  if (Array.isArray(range) && range[0]) {
-    params.createTime = range[0];
-  }
-  if (Array.isArray(range) && range[1]) {
-    params.createTimeEnd = range[1];
-  }
+  appendDotNotationQuery(params, "approvalInstanceDto", dto);
   return params;
 }
 
@@ -483,6 +569,7 @@
 /** 涓氬姟鐢宠椤电姸鎬佹枃妗堬細PENDING鈫掕繘琛屼腑 APPROVED鈫掑凡瀹屾垚 REJECTED鈫掑凡椹冲洖 */
 export function businessApprovalStatusLabel(v) {
   const key = normalizeApprovalStatusKey(v);
+  if (key === "draft") return "鑽夌";
   if (key === "pending") return "杩涜涓�";
   if (key === "approved") return "宸插畬鎴�";
   if (key === "rejected") return "宸查┏鍥�";
@@ -503,6 +590,7 @@
 
 export function businessApprovalStatusTagType(v) {
   const key = normalizeApprovalStatusKey(v);
+  if (key === "draft") return "info";
   if (key === "approved") return "success";
   if (key === "rejected") return "danger";
   if (key === "cancelled") return "info";
@@ -511,6 +599,7 @@
 
 export function approvalStatusTagType(v) {
   const key = normalizeApprovalStatusKey(v);
+  if (key === "draft") return "info";
   if (key === "approved") return "success";
   if (key === "rejected") return "danger";
   if (key === "cancelled") return "info";

--
Gitblit v1.9.3