From a563ea879ef5fb6897e76d2df661e465dce2ab9b Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 01 六月 2026 15:02:27 +0800
Subject: [PATCH] Merge branch 'dev_新疆_大罗素马铃薯new' of http://114.132.189.42:9002/r/product-inventory-management into dev_新疆_大罗素马铃薯new
---
src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue | 313 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 305 insertions(+), 8 deletions(-)
diff --git a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
index f54c167..9689be8 100644
--- a/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
+++ b/src/views/officeProcessAutomation/ApproveManage/approve-list/components/ApproveDetailPanel.vue
@@ -4,21 +4,40 @@
<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="涓氬姟鍗曞彿">{{
+ row.bizId || row.id || "鈥�"
+ }}</el-descriptions-item>
<el-descriptions-item label="瀹℃壒鐘舵��">
- <el-tag :type="approvalStatusTagType(row.approvalStatus)" size="small" effect="plain">
+ <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)">
+ <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">
+ <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">
@@ -26,20 +45,239 @@
</el-descriptions-item>
</el-descriptions>
</div>
-
<div class="detail-block">
<div class="detail-block-title">濉姤鍐呭</div>
+ <!-- 榛樿琛ㄥ崟灞曠ず -->
<FormPayloadFields
+ v-if="!isSpecialApprovalType"
:fields="formResolved.fields"
:form-payload="formResolved.formPayload"
readonly
/>
+
+ <!-- 鍙戣揣瀹℃壒璇︽儏 -->
+ <template v-else-if="row.businessType === 7">
+ <div v-if="detailData.shippingInfo" class="shipment-detail">
+ <el-divider content-position="left">鍙戣揣璇︽儏</el-divider>
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="閿�鍞鍗�">{{
+ detailData.shippingInfo.salesContractNo || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍑哄簱鎵瑰彿">{{
+ detailData.shippingInfo.outboundBatches || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="瀹㈡埛鍚嶇О">{{
+ detailData.shippingInfo.customerName || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍙戣揣绫诲瀷">{{
+ detailData.shippingInfo.type || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍙戣揣鏃ユ湡">{{
+ detailData.shippingInfo.shippingDateDate || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="瀹℃牳鐘舵��">{{
+ detailData.shippingInfo.status || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍙戣揣杞︾墝鍙�">{{
+ detailData.shippingInfo.shippingCarNumber || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="蹇�掑叕鍙�">{{
+ detailData.shippingInfo.expressCompany || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="蹇�掑崟鍙�" :span="2">{{
+ detailData.shippingInfo.expressNumber || "--"
+ }}</el-descriptions-item>
+ </el-descriptions>
+ <div
+ v-if="detailData.shippingProductDetailDtoList.length"
+ style="margin-top: 20px"
+ >
+ <h4>浜у搧鏄庣粏</h4>
+ <el-table
+ :data="detailData.shippingProductDetailDtoList"
+ border
+ size="small"
+ style="width: 100%"
+ >
+ <el-table-column
+ label="鎵瑰彿"
+ prop="batchNo"
+ min-width="160"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="浜у搧鍚嶇О"
+ prop="productName"
+ min-width="160"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="瑙勬牸鍨嬪彿"
+ prop="specificationModel"
+ min-width="160"
+ show-overflow-tooltip
+ />
+ <el-table-column
+ label="鍙戣揣鏁伴噺"
+ prop="deliveryQuantity"
+ min-width="120"
+ align="center"
+ />
+ </el-table>
+ </div>
+ </div>
+ </template>
+
+ <!-- 閲囪喘瀹℃壒璇︽儏 -->
+ <template v-else-if="row.businessType === 5">
+ <div v-if="detailData" class="procurement-detail">
+ <el-divider content-position="left">閲囪喘璇︽儏</el-divider>
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="閲囪喘鍚堝悓鍙�">{{
+ detailData.purchaseContractNumber || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="渚涘簲鍟嗗悕绉�">{{
+ detailData.supplierName || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="椤圭洰鍚嶇О">{{
+ detailData.projectName || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="閿�鍞悎鍚屽彿">{{
+ detailData.salesContractNo || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="绛捐鏃ユ湡">{{
+ detailData.executionDate || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="褰曞叆鏃ユ湡">{{
+ detailData.entryDate || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="浠樻鏂瑰紡">{{
+ detailData.paymentMethod || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍚堝悓閲戦" :span="2">
+ <span style="font-size: 18px; color: #e6a23c; font-weight: bold">
+ 楼{{ Number(detailData.contractAmount ?? 0).toFixed(2) }}
+ </span>
+ </el-descriptions-item>
+ </el-descriptions>
+ <div v-if="detailData.productData.length" style="margin-top: 20px">
+ <h4>浜у搧鏄庣粏</h4>
+ <el-table :data="detailData.productData" border style="width: 100%">
+ <el-table-column prop="productCategory" label="浜у搧鍚嶇О" />
+ <el-table-column prop="specificationModel" label="瑙勬牸鍨嬪彿" />
+ <el-table-column prop="unit" label="鍗曚綅" />
+ <el-table-column prop="quantity" label="鏁伴噺" />
+ <el-table-column prop="taxInclusiveUnitPrice" label="鍚◣鍗曚环">
+ <template #default="scope"
+ >楼{{
+ Number(scope.row.taxInclusiveUnitPrice ?? 0).toFixed(2)
+ }}</template
+ >
+ </el-table-column>
+ <el-table-column prop="taxInclusiveTotalPrice" label="鍚◣鎬讳环">
+ <template #default="scope"
+ >楼{{
+ Number(scope.row.taxInclusiveTotalPrice ?? 0).toFixed(2)
+ }}</template
+ >
+ </el-table-column>
+ </el-table>
+ </div>
+ </div>
+ </template>
+
+ <!-- 鎶ヤ环瀹℃壒璇︽儏 -->
+ <template v-else-if="row.businessType === 6">
+ <div v-if="detailData" class="quotation-detail">
+ <el-divider content-position="left">鎶ヤ环璇︽儏</el-divider>
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="鎶ヤ环鍗曞彿">{{
+ detailData.quotationNo || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="瀹㈡埛鍚嶇О">{{
+ detailData.customer || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="涓氬姟鍛�">{{
+ detailData.salesperson || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎶ヤ环鏃ユ湡">{{
+ detailData.quotationDate || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鏈夋晥鏈熻嚦">{{
+ detailData.validDate || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="浠樻鏂瑰紡">{{
+ detailData.paymentMethod || "--"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎶ヤ环鎬婚" :span="2">
+ <span style="font-size: 18px; color: #e6a23c; font-weight: bold">
+ 楼{{ Number(detailData.totalAmount ?? 0).toFixed(2) }}
+ </span>
+ </el-descriptions-item>
+ </el-descriptions>
+ <div v-if="detailData.products?.length" style="margin-top: 20px">
+ <h4>浜у搧鏄庣粏</h4>
+ <el-table :data="detailData.products" border style="width: 100%">
+ <el-table-column prop="product" label="浜у搧鍚嶇О" />
+ <el-table-column prop="specification" label="瑙勬牸鍨嬪彿" />
+ <el-table-column prop="unit" label="鍗曚綅" />
+ <el-table-column prop="unitPrice" label="鍗曚环">
+ <template #default="scope"
+ >楼{{ Number(scope.row.unitPrice ?? 0).toFixed(2) }}</template
+ >
+ </el-table-column>
+ </el-table>
+ </div>
+ <div v-if="detailData.remark" style="margin-top: 20px">
+ <h4>澶囨敞</h4>
+ <p>{{ detailData.remark }}</p>
+ </div>
+ </div>
+ </template>
+ </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,
@@ -52,9 +290,30 @@
const props = defineProps({
row: { type: Object, default: () => ({}) },
+ detailData: { type: Object, default: () => ({}) },
});
const formResolved = computed(() => resolveInstanceFormFields(props.row));
+
+// 鏄惁涓虹壒娈婂鎵圭被鍨嬶紙閲囪喘銆佸彂璐с�佹姤浠凤級
+const isSpecialApprovalType = computed(() => {
+ return [5, 7, 6].includes(props.row.businessType);
+});
+
+// 璇︽儏鏁版嵁锛堢洿鎺ヤ娇鐢ㄤ紶鍏ョ殑 detail-data 鍙傛暟锛�
+const detailData = computed(() => {
+ return props.detailData || {};
+});
+
+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>
@@ -82,4 +341,42 @@
.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