From ac5dac41df2b75de998a79701d846b33a47ce64c Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 05 六月 2026 16:59:06 +0800
Subject: [PATCH] feat(approve): 优化审批详情面板显示逻辑并增加附件功能

---
 src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js |   74 ++++++++++++++++++++++++------------
 1 files changed, 49 insertions(+), 25 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js b/src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
index 96f7158..d4a7570 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 = [
@@ -358,10 +362,36 @@
   });
 }
 
+/** 浠庢ā鏉垮瓧娈典腑鎵惧埌鐢宠浜哄瓧娈� */
+function findApplicantField(fields) {
+  if (!Array.isArray(fields)) return null;
+  return (
+    fields.find((f) => String(f?.label || "").includes("鐢宠浜�")) ||
+    fields.find((f) => f?.type === "select" && f?.optionSource === "user") ||
+    null
+  );
+}
+
+/** 浠� formPayload 鐨勭敵璇蜂汉瀛楁瑙f瀽 applicantId / applicantName */
+function resolveApplicantFromFormPayload(payload, fields) {
+  const field = findApplicantField(fields);
+  if (!field) return {};
+  const val = payload?.[field.key];
+  if (val == null || val === "") return {};
+  const result = { applicantId: val };
+  const opts = field.options;
+  if (Array.isArray(opts) && opts.length) {
+    const hit = opts.find((o) => String(o.value) === String(val));
+    if (hit?.label) result.applicantName = hit.label;
+  }
+  return result;
+}
+
 /** 缁勮淇濆瓨/鏇存柊瀹℃壒 DTO */
 export function buildInstanceDto({ submitForm, activeTemplate, userStore, flowNodes, existingRow }) {
   const payload = submitForm?.formPayload || {};
   const tpl = activeTemplate || {};
+  const fields = tpl.fields || submitForm?.formFieldDefs || [];
   const title =
     String(payload.summary || payload.title || "").trim() ||
     tpl.label ||
@@ -374,6 +404,7 @@
     templateId,
   });
   const isUpdate = Boolean(instanceId);
+  const fromPayload = resolveApplicantFromFormPayload(payload, fields);
 
   const dto = {
     templateId,
@@ -404,8 +435,9 @@
   } else {
     dto.status = submitForm?.saveStatusApi || "PENDING";
     dto.currentLevel = 1;
-    dto.applicantId = userStore?.id;
-    dto.applicantName = userStore?.nickName || userStore?.name || "";
+    dto.applicantId = fromPayload.applicantId || submitForm?.applicantId || userStore?.id;
+    dto.applicantName = fromPayload.applicantName || submitForm?.applicantName
+      || (fromPayload.applicantId ? "" : (userStore?.nickName || userStore?.name || ""));
   }
   return dto;
 }
@@ -498,6 +530,7 @@
     approvalRecords,
     rejectReason:
       approvalRecords.find((r) => r.result === "rejected")?.opinion || "",
+    storageBlobVOList: row.storageBlobVOList || row.storageBlobDTOs || row.attachmentList || [],
   };
 }
 
@@ -520,35 +553,26 @@
   };
 }
 
-export function buildApprovalInstanceListParams({ page, searchForm, businessType, extraParams }) {
-  const extra = { ...(extraParams && typeof extraParams === "object" ? extraParams : {}) };
-  if (extra.createTime != null && extra.createTimeStart == null) {
-    extra.createTimeStart = extra.createTime;
+export function buildApprovalInstanceListParams({
+  page,
+  searchForm,
+  businessType,
+  extraParams,
+}) {
+  const dto = buildApprovalInstanceSearchDto(searchForm, extraParams);
+  const bizType = businessType ?? searchForm?.businessType;
+  if (bizType != null && bizType !== "") {
+    dto.businessType = bizType;
   }
-  delete extra.createTime;
 
   const params = {
     current: page.current,
     size: page.size,
-    ...extra,
+    "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 ??
-    searchForm?.applyDateRange ??
-    searchForm?.transferDateRange;
-  if (Array.isArray(range) && range[0]) {
-    params.createTimeStart = range[0];
-  }
-  if (Array.isArray(range) && range[1]) {
-    params.createTimeEnd = range[1];
-  }
+  appendDotNotationQuery(params, "approvalInstanceDto", dto);
   return params;
 }
 

--
Gitblit v1.9.3