From 930d38ed2a3c2131be3305a585602c7a5a275fe3 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 19 五月 2026 17:09:12 +0800
Subject: [PATCH] Merge branch 'dev-new_pro_OA' of http://114.132.189.42:9002/r/product-inventory-management into dev-new_pro_OA

---
 src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue |  117 +++++++++++++++++++++++++++-------------------------------
 1 files changed, 54 insertions(+), 63 deletions(-)

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
index 19328af..f54c167 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
@@ -1,92 +1,83 @@
-<!-- 缁熶竴瀹℃壒锛氫笟鍔℃憳瑕� -->
+<!-- 瀹℃壒璇︽儏锛氬熀纭�淇℃伅 + 濉姤鍐呭 -->
 <template>
-  <el-descriptions :column="2" border>
-    <el-descriptions-item label="涓氬姟鍗曞彿">{{ row.bizId || row.id || "鈥�" }}</el-descriptions-item>
-    <el-descriptions-item label="瀹℃壒鐘舵��">
-      <el-tag :type="approvalStatusTagType(row.approvalStatus)" size="small" effect="plain">
-        {{ approvalStatusLabel(row.approvalStatus) }}
-      </el-tag>
-    </el-descriptions-item>
-    <el-descriptions-item label="瀹℃壒绫诲瀷">
-      <span class="approve-type-cell" :style="approvalTypeStyle(row.approvalType)">
-        {{ approvalTypeLabel(row.approvalType) }}
-      </span>
-    </el-descriptions-item>
-    <el-descriptions-item label="瀹℃壒鏂瑰紡">
-      <span class="approval-method-text">{{ approvalModeLabel(row.approvalMode) }}</span>
-    </el-descriptions-item>
-    <el-descriptions-item label="鐢宠浜虹紪鍙�">{{ row.applicantNo || "鈥�" }}</el-descriptions-item>
-    <el-descriptions-item label="鐢宠浜哄悕绉�">{{ row.applicantName || "鈥�" }}</el-descriptions-item>
-    <el-descriptions-item label="鐢宠鎽樿" :span="2">{{ row.summary || "鈥�" }}</el-descriptions-item>
-    <el-descriptions-item v-if="row.rejectReason" label="椹冲洖鍘熷洜" :span="2">
-      <span class="reject-text">{{ row.rejectReason }}</span>
-    </el-descriptions-item>
-    <el-descriptions-item label="鍒涘缓鏃堕棿" :span="2">{{ row.createTime || "鈥�" }}</el-descriptions-item>
-  </el-descriptions>
+  <div class="approve-detail-panel">
+    <div class="detail-block">
+      <div class="detail-block-title">鍩烘湰淇℃伅</div>
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="涓氬姟鍗曞彿">{{ row.bizId || row.id || "鈥�" }}</el-descriptions-item>
+        <el-descriptions-item label="瀹℃壒鐘舵��">
+          <el-tag :type="approvalStatusTagType(row.approvalStatus)" size="small" effect="plain">
+            {{ approvalStatusLabel(row.approvalStatus) }}
+          </el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="瀹℃壒绫诲瀷">
+          <span class="approve-type-cell" :style="approvalTypeStyle(row.approvalType)">
+            {{ approvalTypeLabel(row.approvalType) }}
+          </span>
+        </el-descriptions-item>
+        <el-descriptions-item label="鐢宠浜虹紪鍙�">{{ row.applicantNo || "鈥�" }}</el-descriptions-item>
+        <el-descriptions-item label="鐢宠浜哄悕绉�">{{ row.applicantName || "鈥�" }}</el-descriptions-item>
+        <el-descriptions-item label="鐢宠鎽樿">{{ row.summary || "鈥�" }}</el-descriptions-item>
+        <el-descriptions-item v-if="row.rejectReason" label="椹冲洖鍘熷洜" :span="2">
+          <span class="reject-text">{{ row.rejectReason }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="鍒涘缓鏃堕棿" :span="2">
+          {{ formatDisplayTime(row.createTime) }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </div>
 
-  <template v-if="extraFields.length">
-    <el-divider content-position="left">濉姤鍐呭</el-divider>
-    <el-descriptions :column="2" border size="small">
-      <el-descriptions-item v-for="item in extraFields" :key="item.key" :label="item.label">
-        {{ item.display }}
-      </el-descriptions-item>
-    </el-descriptions>
-  </template>
+    <div class="detail-block">
+      <div class="detail-block-title">濉姤鍐呭</div>
+      <FormPayloadFields
+        :fields="formResolved.fields"
+        :form-payload="formResolved.formPayload"
+        readonly
+      />
+    </div>
+  </div>
 </template>
 
 <script setup>
 import { computed } from "vue";
+import { formatDisplayTime } from "../../approve-template/approveTemplateConstants.js";
 import {
   approvalTypeLabel,
   approvalTypeStyle,
-  approvalModeLabel,
   approvalStatusLabel,
   approvalStatusTagType,
-  SUBMIT_TEMPLATES,
+  resolveInstanceFormFields,
 } from "../approveListConstants.js";
+import FormPayloadFields from "./FormPayloadFields.vue";
 
 const props = defineProps({
   row: { type: Object, default: () => ({}) },
 });
 
-const extraFields = computed(() => {
-  const payload = props.row?.formPayload || {};
-  const tpl = Object.values(SUBMIT_TEMPLATES).find((t) => t.approvalType === props.row?.approvalType);
-  if (!tpl?.fields?.length) {
-    return Object.keys(payload)
-      .filter((k) => k !== "summary" && payload[k] != null && payload[k] !== "")
-      .map((k) => ({ key: k, label: k, display: formatValue(payload[k]) }));
-  }
-  return tpl.fields
-    .map((f) => {
-      const val = payload[f.key];
-      if (val == null || val === "" || (Array.isArray(val) && !val.length)) return null;
-      let display = formatValue(val);
-      if (f.type === "select" && f.options) {
-        display = f.options.find((o) => o.value === val)?.label || display;
-      }
-      return { key: f.key, label: f.label, display };
-    })
-    .filter(Boolean);
-});
-
-function formatValue(val) {
-  if (Array.isArray(val)) return val.join(" 鑷� ");
-  return String(val);
-}
+const formResolved = computed(() => resolveInstanceFormFields(props.row));
 </script>
 
 <style scoped>
+.approve-detail-panel {
+  display: flex;
+  flex-direction: column;
+  gap: 20px;
+}
+.detail-block-title {
+  font-size: 14px;
+  font-weight: 600;
+  color: var(--el-text-color-primary);
+  margin: 0 0 12px;
+  padding-left: 10px;
+  border-left: 3px solid var(--el-color-primary);
+  line-height: 1.4;
+}
 .approve-type-cell {
   display: inline-block;
   padding: 2px 10px;
   border-radius: 4px;
   font-size: 13px;
   line-height: 1.5;
-}
-.approval-method-text {
-  color: var(--el-color-danger);
-  font-weight: 500;
 }
 .reject-text {
   color: var(--el-color-danger);

--
Gitblit v1.9.3