From 373bb991da07b4084f7aed07831236bd6fdc0dd2 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 04 六月 2026 15:59:47 +0800
Subject: [PATCH] 新疆马铃薯 1.环境检测展示字段修改 2.设备巡检查看附件字段和页面修改

---
 src/views/inventoryManagement/environmentalMonitoring/index.vue             |  218 ++++++++++++++++++++++++++---------------------------
 src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue |    6 -
 2 files changed, 109 insertions(+), 115 deletions(-)

diff --git a/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue b/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
index 444cdf4..3f07d92 100644
--- a/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
+++ b/src/views/equipmentManagement/inspectionManagement/components/viewFiles.vue
@@ -3,9 +3,8 @@
     <el-dialog title="鏌ョ湅闄勪欢"
                v-model="dialogVisitable" width="800px" @close="cancel">
       <div class="upload-container">
-        <!-- 鐢熶骇寮傚父 -->
         <div class="form-container">
-          <div class="title">鐢熶骇寮傚父</div>
+          <div class="title">宸℃闄勪欢</div>
 
           <!-- 鍥剧墖鍒楄〃 -->
           <div style="display: flex; flex-wrap: wrap;">
@@ -148,8 +147,7 @@
 
 // 鎵撳紑寮圭獥骞跺姞杞芥暟鎹�
 const openDialog = async (row) => {
-  // 浣跨敤 commonFileListBeforeDTO 鎴� commonFileListBeforeVO 瀛楁
-  const fileList = row.commonFileListBeforeDTO || row.commonFileListBeforeVO || [];
+  const fileList = row.commonFileListVO || [];
   const { images, videos } = processItems(fileList);
 
   productionAbnormalImgs.value = images;
diff --git a/src/views/inventoryManagement/environmentalMonitoring/index.vue b/src/views/inventoryManagement/environmentalMonitoring/index.vue
index 7db5696..58b2fcc 100644
--- a/src/views/inventoryManagement/environmentalMonitoring/index.vue
+++ b/src/views/inventoryManagement/environmentalMonitoring/index.vue
@@ -16,45 +16,49 @@
 
     <section class="table-panel">
       <h3 class="panel-title">璁惧鐜鏁版嵁鍒楄〃</h3>
-      <div class="sensor-table">
-        <div class="sensor-table__head">
-          <span>璁惧缂栧彿</span>
-          <span>璁惧鍚嶇О</span>
-          <span>鐘舵��</span>
-          <span>鐢甸噺</span>
-          <span>娓╁害</span>
-          <span>婀垮害</span>
-          <span>浜屾哀鍖栫⒊</span>
-          <span>鍏夌収</span>
-          <span>鎿嶄綔</span>
-        </div>
-        <div v-for="item in deviceRows" :key="item.guid" class="sensor-table__row">
-          <span>{{ item.guid }}</span>
-          <span>{{ item.name }}</span>
-          <span>
-            <el-tag
-              v-if="item.statusLabel !== '-'"
-              :type="item.statusTagType"
-              effect="light"
-              size="small"
-            >
-              {{ item.statusLabel }}
+      <el-table :data="deviceRows"
+                border
+                stripe
+                empty-text="鏆傛棤鐜鏁版嵁"
+                show-overflow-tooltip>
+        <el-table-column label="璁惧缂栧彿" prop="guid" min-width="160" show-overflow-tooltip />
+        <el-table-column label="璁惧鍚嶇О" prop="name" min-width="120" show-overflow-tooltip />
+        <el-table-column label="鐘舵��" prop="statusLabel" width="80" align="center">
+          <template #default="{ row }">
+            <el-tag v-if="row.statusLabel !== '-'"
+                    :type="row.statusTagType"
+                    effect="light"
+                    size="small">
+              {{ row.statusLabel }}
             </el-tag>
-            <span v-else>{{ item.statusLabel }}</span>
-          </span>
-          <span>{{ item.battery }}</span>
-          <span>{{ item.temperature }}</span>
-          <span>{{ item.humidity }}</span>
-          <span>{{ item.co2 }}</span>
-          <span>{{ item.light }}</span>
-          <span class="sensor-table__action">
-            <el-button type="primary" link @click="openHistoryDialog(item)">
+            <span v-else>-</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鐢甸噺" prop="battery" width="80" align="center" />
+        <el-table-column label="娓╁害" prop="temperature" width="90" align="center" />
+        <el-table-column label="婀垮害" prop="humidity" width="90" align="center" />
+        <el-table-column label="浜屾哀鍖栫⒊" prop="co2" width="100" align="center" />
+        <el-table-column label="鍏夌収" prop="light" width="90" align="center" />
+        <el-table-column label="瀛樻斁浣嶇疆" prop="storageLocation" min-width="120" show-overflow-tooltip />
+        <el-table-column label="闄勪欢" width="100" align="center">
+          <template #default="{ row }">
+            <el-button v-if="row.commonFileListVO && row.commonFileListVO.length"
+                       type="primary"
+                       link
+                       @click="openFileDialog(row)">
+              鏌ョ湅闄勪欢
+            </el-button>
+            <span v-else>-</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" width="130" align="center" fixed="right">
+          <template #default="{ row }">
+            <el-button type="primary" link @click="openHistoryDialog(row)">
               鏌ョ湅鍘嗗彶鏁版嵁
             </el-button>
-          </span>
-        </div>
-        <div v-if="!deviceRows.length" class="sensor-table__empty">鏆傛棤鐜鏁版嵁</div>
-      </div>
+          </template>
+        </el-table-column>
+      </el-table>
     </section>
 
     <el-dialog
@@ -85,35 +89,58 @@
         </div>
       </div>
 
-      <div class="history-table">
-        <div class="history-table__head">
-          <span>鏃堕棿</span>
-          <span>娓╁害</span>
-          <span>婀垮害</span>
-          <span>浜屾哀鍖栫⒊</span>
-          <span>鍏夌収</span>
-        </div>
-        <div v-for="item in historyRows" :key="`${item.time}-${item.index}`" class="history-table__row">
-          <span>{{ item.time }}</span>
-          <span>{{ item.temperature }}</span>
-          <span>{{ item.humidity }}</span>
-          <span>{{ item.co2 }}</span>
-          <span>{{ item.light }}</span>
-        </div>
-        <div v-if="!historyRows.length" class="sensor-table__empty">鏆傛棤鍘嗗彶鏁版嵁</div>
+      <el-table :data="historyRows"
+                v-loading="historyLoading"
+                border
+                stripe
+                empty-text="鏆傛棤鍘嗗彶鏁版嵁"
+                show-overflow-tooltip>
+        <el-table-column label="鏃堕棿" prop="time" min-width="160" show-overflow-tooltip />
+        <el-table-column label="娓╁害" prop="temperature" width="100" align="center" />
+        <el-table-column label="婀垮害" prop="humidity" width="100" align="center" />
+        <el-table-column label="浜屾哀鍖栫⒊" prop="co2" width="100" align="center" />
+        <el-table-column label="鍏夌収" prop="light" width="100" align="center" />
+      </el-table>
+    </el-dialog>
+
+    <el-dialog
+      v-model="fileDialogVisible"
+      title="鏌ョ湅闄勪欢"
+      width="600px"
+      append-to-body
+      destroy-on-close
+    >
+      <div class="file-dialog__meta">
+        <span>璁惧缂栧彿锛歿{ fileDevice.guid || "-" }}</span>
+        <span>璁惧鍚嶇О锛歿{ fileDevice.name || "-" }}</span>
       </div>
+      <el-table :data="fileList"
+                border
+                stripe
+                empty-text="鏆傛棤闄勪欢"
+                show-overflow-tooltip>
+        <el-table-column label="闄勪欢鍚嶇О" prop="originalFilename" min-width="200" show-overflow-tooltip />
+        <el-table-column label="鎿嶄綔" width="120" align="center">
+          <template #default="{ row }">
+            <el-button type="primary" link @click="downloadAttachment(row)">
+              涓嬭浇
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
     </el-dialog>
   </div>
 </template>
 
 <script setup>
-import { computed, onBeforeUnmount, onMounted, ref } from "vue";
+import { computed, getCurrentInstance, onBeforeUnmount, onMounted, ref } from "vue";
 import Echarts from "@/components/Echarts/echarts.vue";
 import {
   getEnvironmentalHistoryData,
   getEnvironmentalRealData,
 } from "@/api/inventoryManagement/environmentalMonitoring";
 
+const { proxy } = getCurrentInstance();
 const POLL_INTERVAL = import.meta.env.DEV ? 73000 : 30000;
 const TEN_DAYS_MS = 10 * 24 * 60 * 60 * 1000;
 
@@ -123,6 +150,9 @@
 const historyDate = ref(formatDateOnly(new Date()));
 const historyList = ref([]);
 const historyLoading = ref(false);
+const fileDialogVisible = ref(false);
+const fileDevice = ref({});
+const fileList = ref([]);
 
 let pollTimer = null;
 
@@ -223,6 +253,8 @@
     name: source.deviceName || source.name || `璁惧${index + 1}`,
     status: source.status || source.deviceStatus || "",
     battery: source.battery ?? source.deviceBattery ?? "",
+    storageLocation: source.storageLocation || source.location || "",
+    commonFileListVO: source.commonFileListVO || [],
     temperature: 0,
     humidity: 0,
     co2: 0,
@@ -361,6 +393,8 @@
     humidity: formatMetricValue(item.humidity, "%RH"),
     co2: formatMetricValue(item.co2, "ppm"),
     light: formatMetricValue(item.light, "Lux"),
+    storageLocation: item.storageLocation || "-",
+    commonFileListVO: item.commonFileListVO || [],
   }))
 );
 
@@ -419,6 +453,20 @@
   fetchHistoryData();
 }
 
+function openFileDialog(row) {
+  fileDevice.value = row;
+  fileList.value = row.commonFileListVO || [];
+  fileDialogVisible.value = true;
+}
+
+function downloadAttachment(file) {
+  if (!file.url) {
+    proxy.$modal.msgWarning("闄勪欢閾炬帴涓嶅瓨鍦�");
+    return;
+  }
+  proxy.$download.byUrl(file.url, file.originalFilename || file.fileName);
+}
+
 function openHistoryDialog(row) {
   historyDevice.value = { ...row };
   historyDate.value = formatDateOnly(new Date());
@@ -463,55 +511,6 @@
   font-weight: 600;
 }
 
-.sensor-table,
-.history-table {
-  display: flex;
-  flex-direction: column;
-  gap: 10px;
-}
-
-.sensor-table__head,
-.sensor-table__row {
-  display: grid;
-  grid-template-columns: 1.2fr 1fr 0.8fr 0.8fr 0.9fr 0.9fr 1fr 0.9fr 0.9fr;
-  gap: 12px;
-  align-items: center;
-}
-
-.history-table__head,
-.history-table__row {
-  display: grid;
-  grid-template-columns: 1.3fr 1fr 1fr 1fr 1fr;
-  gap: 12px;
-  align-items: center;
-}
-
-.sensor-table__head,
-.history-table__head {
-  padding: 0 6px 10px;
-  color: #8393a8;
-  font-size: 13px;
-}
-
-.sensor-table__row,
-.history-table__row {
-  padding: 14px 16px;
-  border-radius: 12px;
-  background: #f6f9fc;
-  color: #1d344f;
-}
-
-.sensor-table__action {
-  display: flex;
-  align-items: center;
-}
-
-.sensor-table__empty {
-  padding: 32px 0;
-  color: #8393a8;
-  text-align: center;
-}
-
 .history-toolbar {
   display: flex;
   justify-content: space-between;
@@ -533,8 +532,12 @@
   align-items: center;
 }
 
-.history-table {
-  margin-top: 16px;
+.file-dialog__meta {
+  display: flex;
+  gap: 20px;
+  color: #1d344f;
+  margin-bottom: 16px;
+  flex-wrap: wrap;
 }
 
 @media (max-width: 768px) {
@@ -545,13 +548,6 @@
   .chart-panel,
   .table-panel {
     padding: 16px;
-  }
-
-  .sensor-table__head,
-  .sensor-table__row,
-  .history-table__head,
-  .history-table__row {
-    grid-template-columns: repeat(2, minmax(0, 1fr));
   }
 
   .history-toolbar {

--
Gitblit v1.9.3