From 352f7bbb74f1b6c57b3d3e576849d0565932fbd4 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期三, 20 五月 2026 16:50:36 +0800
Subject: [PATCH] 审批模板集成页面

---
 src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js |  151 +++++++++++++++++++++++++++++++++++--------------
 1 files changed, 107 insertions(+), 44 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js b/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
index acbed98..3f6bf88 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
@@ -8,7 +8,10 @@
   nodeSignModeLabel,
 } from "../approve-template/approveTemplateConstants.js";
 import { buildFormPayloadFromFields, parseFormConfigToData } from "../approve-template/formConfigUtils.js";
-import { isDynamicOptionSource, selectOptionSourceLabel } from "../approve-template/selectOptionSource.js";
+import {
+  isDynamicOptionSource,
+  resolveSelectDisplayLabel,
+} from "../approve-template/selectOptionSource.js";
 
 /** 瀹℃壒绫诲瀷锛堜笌鍚庣瀛楁 approvalType 瀵归綈锛屽悗鏈熷彲鍚屾锛� */
 export const APPROVAL_TYPE_OPTIONS = [
@@ -25,15 +28,47 @@
   { value: "procurement", label: "閲囪喘瀹℃壒", cellBg: "#f4f4f5", cellColor: "#909399" },
   { value: "quotation", label: "鎶ヤ环瀹℃壒", cellBg: "#f4ecfc", cellColor: "#9b59b6" },
   { value: "shipment", label: "鍙戣揣瀹℃壒", cellBg: "#e8faf6", cellColor: "#1abc9c" },
+  { value: "enterprise_news", label: "浼佷笟鏂伴椈", cellBg: "#ecf5ff", cellColor: "#409eff" },
 ];
 
-/** 瀹℃壒鐘舵�� approvalStatus */
-export const APPROVAL_STATUS_OPTIONS = [
-  { value: "pending", label: "瀹℃牳涓�" },
-  { value: "approved", label: "宸查�氳繃" },
-  { value: "rejected", label: "宸查┏鍥�" },
-  { value: "cancelled", label: "宸叉挙閿�" },
+/** 鍒楄〃鏌ヨ锛氬鎵圭姸鎬侊紙涓庡悗绔� status 鏋氫妇涓�鑷达級 */
+export const APPROVAL_STATUS_SEARCH_OPTIONS = [
+  { value: "PENDING", label: "寰呭鎵�" },
+  { value: "APPROVED", label: "宸查�氳繃" },
+  { value: "REJECTED", label: "宸查┏鍥�" },
 ];
+
+/**
+ * 瀹℃壒鐘舵�佸睍绀猴紙涓庡悗绔� status 鏋氫妇涓�鑷达級
+ * PENDING 鈫� 寰呭鎵�/杩涜涓�  APPROVED 鈫� 宸查�氳繃/宸插畬鎴�  REJECTED 鈫� 宸查┏鍥�
+ */
+export const APPROVAL_STATUS_OPTIONS = [
+  { value: "pending", api: "PENDING", label: "寰呭鎵�" },
+  { value: "approved", api: "APPROVED", label: "宸查�氳繃" },
+  { value: "rejected", api: "REJECTED", label: "宸查┏鍥�" },
+  { value: "cancelled", api: "CANCELLED", label: "宸叉挙閿�" },
+];
+
+/** 鍚庣 status / 椤甸潰 approvalStatus 鈫� 缁熶竴椤甸潰 key锛坧ending | approved | rejected | cancelled锛� */
+export function normalizeApprovalStatusKey(v) {
+  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 === "PENDING" ||
+    upper === "IN_PROGRESS" ||
+    upper === "PROCESSING" ||
+    upper === "RUNNING"
+  ) {
+    return "pending";
+  }
+  const lower = s.toLowerCase();
+  if (["pending", "approved", "rejected", "cancelled"].includes(lower)) return lower;
+  return "pending";
+}
 
 /** 鎻愪氦寮圭獥锛氭ā鏉垮崱鐗囷紙鏉ヨ嚜鍚庣鍒楄〃锛� */
 export function mapSubmitTemplateCard(row) {
@@ -75,20 +110,11 @@
 }
 
 export function mapTaskStatusLabel(status) {
-  const s = String(status || "").toUpperCase();
-  if (s === "APPROVED") return "宸查�氳繃";
-  if (s === "REJECTED") return "宸查┏鍥�";
-  if (s === "PENDING") return "寰呭鎵�";
-  if (s === "CANCELLED") return "宸叉挙閿�";
-  return status || "鈥�";
+  return approvalStatusLabel(status);
 }
 
 export function mapTaskStatusTagType(status) {
-  const s = String(status || "").toUpperCase();
-  if (s === "APPROVED") return "success";
-  if (s === "REJECTED") return "danger";
-  if (s === "CANCELLED") return "info";
-  return "warning";
+  return approvalStatusTagType(status);
 }
 
 /** 鍚庣 tasks 鈫� 椤甸潰 flowNodes锛堟寜 levelNo 鍒嗙粍锛屼緵娴佺▼缂栬緫/灞曠ず锛� */
@@ -164,11 +190,16 @@
   return "text";
 }
 
-/** 鍗曞瓧娈靛睍绀哄�硷紙璇︽儏鍙锛� */
-export function formatFieldDisplayValue(field, val) {
+/**
+ * 鍗曞瓧娈靛睍绀哄�硷紙璇︽儏鍙銆佸垪琛ㄤ富琛級
+ * @param {object} [caches] 浜哄憳/閮ㄩ棬涓嬫媺缂撳瓨锛岀敤浜庤В鏋愩�屼汉鍛樺垪琛ㄣ�嶇被瀛楁涓哄鍚�
+ */
+export function formatFieldDisplayValue(field, val, caches) {
   if (val == null || val === "" || (Array.isArray(val) && !val.length)) return "鈥�";
   if (field?.type === "select" && isDynamicOptionSource(field.optionSource)) {
-    return `${selectOptionSourceLabel(field.optionSource)}锛�${String(val)}`;
+    const label = resolveSelectDisplayLabel(field, val, caches || {});
+    if (label && label !== "鈥�") return label;
+    return String(val);
   }
   if (field?.type === "select" && field.options?.length) {
     const hit = field.options.find((o) => String(o.value) === String(val));
@@ -323,20 +354,14 @@
 
 /** 鍚庣 status 鈫� 椤甸潰 approvalStatus */
 export function mapInstanceStatusFromApi(status) {
-  const s = String(status || "").toUpperCase();
-  if (s === "APPROVED") return "approved";
-  if (s === "REJECTED") return "rejected";
-  if (s === "CANCELLED") return "cancelled";
-  return "pending";
+  return normalizeApprovalStatusKey(status);
 }
 
 /** 椤甸潰 approvalStatus 鈫� 鍚庣 status */
 export function mapInstanceStatusToApi(approvalStatus) {
-  const s = String(approvalStatus || "").toLowerCase();
-  if (s === "approved") return "APPROVED";
-  if (s === "rejected") return "REJECTED";
-  if (s === "cancelled") return "CANCELLED";
-  return "PENDING";
+  const key = normalizeApprovalStatusKey(approvalStatus);
+  const hit = APPROVAL_STATUS_OPTIONS.find((x) => x.value === key);
+  return hit?.api || "PENDING";
 }
 
 export function unwrapInstancePage(res) {
@@ -418,19 +443,26 @@
   };
 }
 
-export function buildApprovalInstanceListParams({ page, searchForm }) {
+export function buildApprovalInstanceListParams({ page, searchForm, businessType, extraParams }) {
   const params = {
     current: page.current,
     size: page.size,
+    ...(extraParams && typeof extraParams === "object" ? extraParams : {}),
   };
-  const dto = {};
-  const kw = (searchForm?.applicantKeyword || "").trim();
-  if (kw) dto.applicantName = kw;
-  if (searchForm?.approvalType) {
-    const opt = APPROVAL_TYPE_OPTIONS.find((x) => x.value === searchForm.approvalType);
-    if (opt?.label) dto.templateName = opt.label;
+  const bizType = businessType ?? searchForm?.businessType;
+  if (bizType != null && bizType !== "") {
+    params.businessType = bizType;
   }
-  if (Object.keys(dto).length) params.approvalInstanceDto = dto;
+  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];
+  }
   return params;
 }
 
@@ -449,14 +481,45 @@
 }
 
 export function approvalStatusLabel(v) {
-  return APPROVAL_STATUS_OPTIONS.find((x) => x.value === v)?.label || "鈥�";
+  const key = normalizeApprovalStatusKey(v);
+  return APPROVAL_STATUS_OPTIONS.find((x) => x.value === key)?.label || "鈥�";
+}
+
+/** 涓氬姟鐢宠椤电姸鎬佹枃妗堬細PENDING鈫掕繘琛屼腑 APPROVED鈫掑凡瀹屾垚 REJECTED鈫掑凡椹冲洖 */
+export function businessApprovalStatusLabel(v) {
+  const key = normalizeApprovalStatusKey(v);
+  if (key === "pending") return "杩涜涓�";
+  if (key === "approved") return "宸插畬鎴�";
+  if (key === "rejected") return "宸查┏鍥�";
+  if (key === "cancelled") return "宸叉挙閿�";
+  return "鈥�";
+}
+
+/**
+ * 涓氬姟鐢宠椤垫槸鍚﹀厑璁镐慨鏀癸紙浜斾釜鐢宠椤碉級
+ * 杩涜涓�(PENDING)銆佸凡瀹屾垚(APPROVED) 涓嶅彲淇敼锛涘凡椹冲洖銆佸凡鎾ら攢绛夊彲淇敼
+ */
+export function canEditBusinessInstanceRow(row) {
+  const key = normalizeApprovalStatusKey(
+    row?.approvalStatus ?? row?.statusRaw ?? row?.status
+  );
+  return key !== "pending" && key !== "approved";
+}
+
+export function businessApprovalStatusTagType(v) {
+  const key = normalizeApprovalStatusKey(v);
+  if (key === "approved") return "success";
+  if (key === "rejected") return "danger";
+  if (key === "cancelled") return "info";
+  return "warning";
 }
 
 export function approvalStatusTagType(v) {
-  if (v === "approved") return "success";
-  if (v === "rejected") return "danger";
-  if (v === "cancelled") return "info";
-  return "primary";
+  const key = normalizeApprovalStatusKey(v);
+  if (key === "approved") return "success";
+  if (key === "rejected") return "danger";
+  if (key === "cancelled") return "info";
+  return "warning";
 }
 
 export function unreadLabel(v) {

--
Gitblit v1.9.3