From 19f2e3bdbe04e7ea79c6a0bdc8c7318d4837b189 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 28 五月 2026 17:36:45 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_NEW_pro' into dev_pro_山西_晋和园

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

diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
new file mode 100644
index 0000000..721a5c2
--- /dev/null
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
@@ -0,0 +1,167 @@
+<!-- 瀹℃壒璇︽儏锛氬熀纭�淇℃伅 + 濉姤鍐呭 -->
+<template>
+  <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>
+    <div class="detail-block">
+      <div class="detail-block-title">濉姤鍐呭</div>
+      <FormPayloadFields :fields="formResolved.fields"
+                         :form-payload="formResolved.formPayload"
+                         readonly />
+    </div>
+    <div v-if="attachmentList.length"
+         class="detail-block">
+      <div class="detail-block-title">闄勪欢鍒楄〃</div>
+      <div class="attachment-list">
+        <div v-for="file in attachmentList"
+             :key="file.id"
+             class="attachment-item">
+          <el-icon class="file-icon">
+            <Paperclip />
+          </el-icon>
+          <span class="file-name"
+                :title="file.name || file.originalFilename">
+            {{ file.name || file.originalFilename }}
+          </span>
+          <div class="file-actions">
+            <el-link v-if="file.previewURL || file.url"
+                     type="primary"
+                     :underline="false"
+                     @click="openFile(file.previewURL || file.url)">棰勮</el-link>
+            <el-divider v-if="(file.previewURL || file.url) && file.downloadURL"
+                        direction="vertical" />
+            <el-link v-if="file.downloadURL"
+                     type="primary"
+                     :underline="false"
+                     @click="openFile(file.downloadURL)">涓嬭浇</el-link>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+  import { computed } from "vue";
+  import { Paperclip } from "@element-plus/icons-vue";
+  import { formatDisplayTime } from "../../approve-template/approveTemplateConstants.js";
+  import {
+    approvalTypeLabel,
+    approvalTypeStyle,
+    approvalStatusLabel,
+    approvalStatusTagType,
+    resolveInstanceFormFields,
+  } from "../approveListConstants.js";
+  import FormPayloadFields from "./FormPayloadFields.vue";
+
+  const props = defineProps({
+    row: { type: Object, default: () => ({}) },
+  });
+
+  const formResolved = computed(() => resolveInstanceFormFields(props.row));
+
+  const attachmentList = computed(() => {
+    const list = props.row.storageBlobVOList || props.row.storageBlobDTOs || [];
+    return Array.isArray(list) ? list : [];
+  });
+
+  function openFile(url) {
+    if (!url) return;
+    window.open(url, "_blank");
+  }
+</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;
+  }
+  .reject-text {
+    color: var(--el-color-danger);
+  }
+
+  .attachment-list {
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
+    gap: 12px;
+  }
+  .attachment-item {
+    display: flex;
+    align-items: center;
+    padding: 10px 12px;
+    background-color: var(--el-fill-color-light);
+    border-radius: 6px;
+    border: 1px solid var(--el-border-color-lighter);
+    transition: all 0.3s;
+  }
+  .attachment-item:hover {
+    border-color: var(--el-color-primary-light-5);
+    background-color: var(--el-color-primary-light-9);
+  }
+  .file-icon {
+    font-size: 18px;
+    color: var(--el-text-color-secondary);
+    margin-right: 10px;
+  }
+  .file-name {
+    flex: 1;
+    font-size: 13px;
+    color: var(--el-text-color-primary);
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    margin-right: 12px;
+  }
+  .file-actions {
+    display: flex;
+    align-items: center;
+    flex-shrink: 0;
+  }
+</style>

--
Gitblit v1.9.3