From 6a4ca55df9aa84ca256ec118cf1d1601817e5c99 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期五, 22 五月 2026 21:27:13 +0800
Subject: [PATCH] feat: 设备台账新增附件上传和详情查看

---
 src/views/equipmentManagement/ledger/index.vue |   61 +++++++++++++++++++++++++++++-
 1 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/src/views/equipmentManagement/ledger/index.vue b/src/views/equipmentManagement/ledger/index.vue
index 93b9e6d..af10532 100644
--- a/src/views/equipmentManagement/ledger/index.vue
+++ b/src/views/equipmentManagement/ledger/index.vue
@@ -109,13 +109,52 @@
         </div>
       </template>
     </el-dialog>
+
+    <!-- 璇︽儏瀵硅瘽妗� -->
+    <el-dialog v-model="detailDialogVisible" title="璁惧鍙拌处璇︽儏" width="60%" draggable>
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="璁惧鍚嶇О">{{ detailData.deviceName }}</el-descriptions-item>
+        <el-descriptions-item label="瑙勬牸鍨嬪彿">{{ detailData.deviceModel }}</el-descriptions-item>
+        <el-descriptions-item label="璁惧鍝佺墝">{{ detailData.deviceBrand }}</el-descriptions-item>
+        <el-descriptions-item label="璁惧绫诲瀷">{{ detailData.type }}</el-descriptions-item>
+        <el-descriptions-item label="渚涘簲鍟�">{{ detailData.supplierName }}</el-descriptions-item>
+        <el-descriptions-item label="瀛樻斁浣嶇疆">{{ detailData.storageLocation }}</el-descriptions-item>
+        <el-descriptions-item label="鍗曚綅">{{ detailData.unit }}</el-descriptions-item>
+        <el-descriptions-item label="鏁伴噺">{{ detailData.number }}</el-descriptions-item>
+        <el-descriptions-item label="鍚敤鎶樻棫">{{ detailData.isDepr === 1 ? '鏄�' : '鍚�' }}</el-descriptions-item>
+        <el-descriptions-item label="姣忓勾鎶樻棫閲戦">{{ detailData.annualDepreciationAmount }}</el-descriptions-item>
+        <el-descriptions-item label="鍚◣鍗曚环">{{ detailData.taxIncludingPriceUnit }}</el-descriptions-item>
+        <el-descriptions-item label="鍚◣鎬讳环">{{ detailData.taxIncludingPriceTotal }}</el-descriptions-item>
+        <el-descriptions-item label="绋庣巼(%)">{{ detailData.taxRate }}</el-descriptions-item>
+        <el-descriptions-item label="涓嶅惈绋庢�讳环">{{ detailData.unTaxIncludingPriceTotal }}</el-descriptions-item>
+        <el-descriptions-item label="褰曞叆鏃ユ湡">{{ detailData.createTime }}</el-descriptions-item>
+        <el-descriptions-item label="棰勮杩愯鏃堕棿">{{ detailData.planRuntimeTime ? dayjs(detailData.planRuntimeTime).format('YYYY-MM-DD') : '' }}</el-descriptions-item>
+        <el-descriptions-item label="璁惧鍥剧墖" :span="2">
+          <div v-if="detailData.storageBlobVOs && detailData.storageBlobVOs.length > 0" style="display: flex; gap: 10px; flex-wrap: wrap;">
+            <el-image 
+              v-for="(file, index) in detailData.storageBlobVOs" 
+              :key="index" 
+              :src="file.previewURL || file.url" 
+              :preview-src-list="detailData.storageBlobVOs.map(u => u.previewURL || u.url)"
+              :initial-index="index"
+              style="width: 100px; height: 100px" 
+              fit="cover" 
+            />
+          </div>
+          <span v-else>鏃犲浘鐗�</span>
+        </el-descriptions-item>
+      </el-descriptions>
+      <template #footer>
+        <el-button @click="detailDialogVisible = false">鍏抽棴</el-button>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup>
 import { usePaginationApi } from "@/hooks/usePaginationApi";
 // import { Search } from "@element-plus/icons-vue";
-import { getLedgerPage, delLedger } from "@/api/equipmentManagement/ledger";
+import { getLedgerPage, delLedger, getLedgerById } from "@/api/equipmentManagement/ledger";
 import { onMounted, getCurrentInstance, ref, reactive } from "vue";
 import Modal from "./Modal.vue";
 import { ElMessageBox, ElMessage } from "element-plus";
@@ -135,6 +174,9 @@
 const qrDialogVisible = ref(false);
 const qrCodeUrl = ref("");
 const qrRowData = ref(null);
+
+const detailDialogVisible = ref(false);
+const detailData = ref({});
 
 // 瀵煎叆鐩稿叧
 const uploadRef = ref(null)
@@ -218,8 +260,14 @@
 			label: "鎿嶄綔",
 			align: "center",
 			fixed: 'right',
-			width: 150,
+			width: 180,
 			operation: [
+        {
+          name: "璇︽儏",
+          clickFun: (row) => {
+            handleDetail(row);
+          },
+        },
 				{
 					name: "缂栬緫",
 					clickFun: (row) => {
@@ -227,7 +275,7 @@
 					},
 				},
 				{
-					name: "鐢熸垚浜岀淮鐮�",
+					name: "浜岀淮鐮�",
 					clickFun: (row) => {
 						showQRCode(row)
 					},
@@ -248,6 +296,13 @@
 const edit = (id) => {
   modalRef.value.loadForm(id);
 };
+const handleDetail = async (row) => {
+  const { code, data } = await getLedgerById(row.id);
+  if (code == 200) {
+    detailData.value = data;
+    detailDialogVisible.value = true;
+  }
+};
 const changePage = ({ page, limit }) => {
   pagination.currentPage = page;
 	pagination.pageSize = limit;

--
Gitblit v1.9.3