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