From e591908e408b42a552949b35e125dd4b6af5ca7c Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期二, 21 四月 2026 13:59:33 +0800
Subject: [PATCH] fix: 更新图片服务路径和API端点配置

---
 screen/src/view/workList/detail.vue                 |    2 
 screen/.env.development                             |    8 
 screen/src/view/workList/index.vue                  |   15 
 screen/src/view/accidentCase/detail.vue             |    4 
 screen/src/view/hiddenDanger/index.vue              |    6 
 screen/.env.production                              |    2 
 screen/src/view/header/index.vue                    |    2 
 screen/src/view/personnelOnDuty/index.vue           |    2 
 screen/src/view/projectHome/index.vue               | 1655 ++++++++++++++++++++++++++++----------------------------
 screen/src/view/planOfAudit/index.vue               |   14 
 screen/src/assets/img/home/new-mark.png             |    0 
 screen/src/view/home/index.vue                      |    2 
 screen/src/view/projectProgress/index.vue           |    2 
 screen/src/view/accidentCase/index.vue              |    6 
 estate-frontend-v2024/src/views/common/constants.js |    4 
 15 files changed, 857 insertions(+), 867 deletions(-)

diff --git a/estate-frontend-v2024/src/views/common/constants.js b/estate-frontend-v2024/src/views/common/constants.js
index c8ad36b..226a678 100644
--- a/estate-frontend-v2024/src/views/common/constants.js
+++ b/estate-frontend-v2024/src/views/common/constants.js
@@ -3,8 +3,8 @@
 // 定义全局变量
 
 // export const BASE_URL = 'http://47.93.28.249:8181'
-// export const BASE_URL = 'http://221.182.45.100:8002';测试
-export const BASE_URL = 'http://47.108.113.190:8182';
+export const BASE_URL = 'http://192.168.110.111:8182'; //测试
+// export const BASE_URL = 'http://47.108.113.190:8182';
 // export const SCREEN_URL = 'http://221.182.45.100:8087/#/'; 测试
 export const SCREEN_URL = 'http://xllpgzx.com/screen/#/';
 
diff --git a/screen/.env.development b/screen/.env.development
index 20374c5..ee9803e 100644
--- a/screen/.env.development
+++ b/screen/.env.development
@@ -1,11 +1,11 @@
 # 开发环境配置
 
 # 主API地址
-VUE_APP_BASE_URL=http://221.182.45.100:8180
-# VUE_APP_BASE_URL=http://192.168.110.64:9908
+VUE_APP_BASE_URL=http://47.108.113.190:9908
+# VUE_APP_BASE_URL=http://192.168.110.111:9908
 
 # 图片回显地址
-VUE_APP_IMAGE_BASE_URL=http://221.182.45.100:8180
+VUE_APP_IMAGE_BASE_URL=http://47.108.113.190:8182
 
 # 后台请求地址
-VUE_ADMIN_BASE_URL=http://221.182.45.100:8002
+VUE_ADMIN_BASE_URL=http://47.108.113.190:8182
diff --git a/screen/.env.production b/screen/.env.production
index 79f0d13..d926411 100644
--- a/screen/.env.production
+++ b/screen/.env.production
@@ -5,7 +5,7 @@
 # // 测试环境
 # VUE_APP_BASE_URL=http://192.168.110.64:9908
 # 图片回显地址
-VUE_APP_IMAGE_BASE_URL=http://221.182.45.100:8180
+VUE_APP_IMAGE_BASE_URL=http://47.108.113.190:8182
 
 # 后台请求地址
 VUE_ADMIN_BASE_URL=http://47.108.113.190:8182
diff --git a/screen/src/assets/img/home/new-mark.png b/screen/src/assets/img/home/new-mark.png
new file mode 100644
index 0000000..7ae8628
--- /dev/null
+++ b/screen/src/assets/img/home/new-mark.png
Binary files differ
diff --git a/screen/src/view/accidentCase/detail.vue b/screen/src/view/accidentCase/detail.vue
index ca85e92..b0d2b1c 100644
--- a/screen/src/view/accidentCase/detail.vue
+++ b/screen/src/view/accidentCase/detail.vue
@@ -62,7 +62,7 @@
             <img
               v-if="detailData.img"
               :src="
-                VUE_APP_BASE_URL + '/project/download/' +
+                VUE_APP_IMAGE_BASE_URL + '/public/file/download/' +
                 detailData.img
               "
               @error="handleImageError"
@@ -94,7 +94,7 @@
     return {
       detailData: {},
       loading: false,
-      VUE_APP_BASE_URL: process.env.VUE_APP_BASE_URL
+      VUE_APP_IMAGE_BASE_URL: process.env.VUE_APP_IMAGE_BASE_URL
     }
   },
   computed: {},
diff --git a/screen/src/view/accidentCase/index.vue b/screen/src/view/accidentCase/index.vue
index caa736d..6aeb4e5 100644
--- a/screen/src/view/accidentCase/index.vue
+++ b/screen/src/view/accidentCase/index.vue
@@ -194,7 +194,7 @@
           </div>
           <img
             v-if="item.img"
-            :src="VUE_APP_BASE_URL + '/project/download/' + item.img"
+            :src="VUE_APP_IMAGE_BASE_URL + '/public/file/download/' + item.img"
             class="w--264 h--160 shrink0 ml--54 br--10 cursor-pointer"
             @error="handleImageError"
             @click.stop="previewImage(item)"
@@ -264,7 +264,7 @@
       classifyList: [],
       storyList: [],
       loading: false,
-      VUE_APP_BASE_URL: process.env.VUE_APP_BASE_URL,
+      VUE_APP_IMAGE_BASE_URL: process.env.VUE_APP_IMAGE_BASE_URL,
       previewVisible: false,
       previewImages: []
     }
@@ -556,7 +556,7 @@
     previewImage (item) {
       if (item.img) {
         // 如果img是字符串,可能是逗号分隔的多张图片
-        const imageUrl = this.VUE_APP_BASE_URL + '/project/download/' + item.img
+        const imageUrl = this.VUE_APP_IMAGE_BASE_URL + '/public/file/download/' + item.img
         this.previewImages = [imageUrl]
         this.previewVisible = true
       } else {
diff --git a/screen/src/view/header/index.vue b/screen/src/view/header/index.vue
index 06fd652..1ed017a 100644
--- a/screen/src/view/header/index.vue
+++ b/screen/src/view/header/index.vue
@@ -10,7 +10,7 @@
       <img
         :src="
           clientLogo && clientLogo != 'null'
-            ? VUE_APP_IMAGE_BASE_URL + '/project/download/' + clientLogo
+            ? VUE_APP_IMAGE_BASE_URL + '/public/file/download/' + clientLogo
             : require('../../assets/img/logo.png')
         "
         class="w--30 h--30 shrink0 mr--10"
diff --git a/screen/src/view/hiddenDanger/index.vue b/screen/src/view/hiddenDanger/index.vue
index 3ae3f7f..2c56c49 100644
--- a/screen/src/view/hiddenDanger/index.vue
+++ b/screen/src/view/hiddenDanger/index.vue
@@ -1048,7 +1048,7 @@
       this.loadTableData();
     },
 
-    // 选择器改变时自动请求
+    // 选择器改变时自动请求VUE_APP_IMAGE_BASE_URL
     handleSelectChange() {
       this.pageNum = 1;
       this.loadTableData();
@@ -1110,7 +1110,7 @@
         if (img.startsWith("http://") || img.startsWith("https://")) {
           return img;
         }
-        return baseUrl + "/project/download/" + img;
+        return baseUrl + "/public/file/download/" + img;
       });
       this.previewVisible = true;
     },
@@ -1222,7 +1222,7 @@
         if (img.startsWith("http://") || img.startsWith("https://")) {
           return img;
         }
-        return baseUrl + "/project/download/" + img;
+        return baseUrl + "/public/file/download/" + img;
       });
       this.previewVisible = true;
     },
diff --git a/screen/src/view/home/index.vue b/screen/src/view/home/index.vue
index 9fce957..0cc6213 100644
--- a/screen/src/view/home/index.vue
+++ b/screen/src/view/home/index.vue
@@ -804,7 +804,7 @@
       activeTabs: "本年",
       workListData: [],
       VUE_APP_IMAGE_BASE_URL:
-        process.env.VUE_APP_IMAGE_BASE_URL + "/project/download/",
+        process.env.VUE_APP_IMAGE_BASE_URL + "/public/file/download/",
       projectList: [],
       tooltipVisible: false,
       tooltipPos: { left: 0, top: 0 },
diff --git a/screen/src/view/personnelOnDuty/index.vue b/screen/src/view/personnelOnDuty/index.vue
index 955324f..232ce5b 100644
--- a/screen/src/view/personnelOnDuty/index.vue
+++ b/screen/src/view/personnelOnDuty/index.vue
@@ -427,7 +427,7 @@
       // 图片预览数据
       previewImages: [],
       VUE_APP_IMAGE_BASE_URL:
-        process.env.VUE_APP_IMAGE_BASE_URL + '/project/download/'
+        process.env.VUE_APP_IMAGE_BASE_URL + '/public/file/download/'
     }
   },
   computed: {
diff --git a/screen/src/view/planOfAudit/index.vue b/screen/src/view/planOfAudit/index.vue
index 4af170d..2a68d47 100644
--- a/screen/src/view/planOfAudit/index.vue
+++ b/screen/src/view/planOfAudit/index.vue
@@ -992,7 +992,7 @@
           return img
         }
         // 否则拼接基础路径
-        return this.VUE_APP_IMAGE_BASE_URL + '/project/download/' + img
+        return this.VUE_APP_IMAGE_BASE_URL + '/public/file/download/' + img
       })
     },
 
@@ -1181,18 +1181,22 @@
 
 // 图片预览器样式优化
 ::v-deep .el-image-viewer__wrapper {
-  z-index: 9999 !important; // 设置足够高的层级,确保在弹窗之上
+  z-index: 12000 !important;
 }
 
 ::v-deep .el-image-viewer__mask {
-  z-index: 9999 !important;
+  z-index: 12000 !important;
 }
 
 ::v-deep .el-image-viewer__btn {
-  z-index: 10000 !important;
+  z-index: 12002 !important;
 }
 
 ::v-deep .el-image-viewer__canvas {
-  z-index: 9999 !important;
+  z-index: 12001 !important;
+}
+
+::v-deep .el-image-viewer__actions {
+  z-index: 12002 !important;
 }
 </style>
diff --git a/screen/src/view/projectHome/index.vue b/screen/src/view/projectHome/index.vue
index 5db2d97..908bb1e 100644
--- a/screen/src/view/projectHome/index.vue
+++ b/screen/src/view/projectHome/index.vue
@@ -106,72 +106,60 @@
                 "
               >
                 <div class="flex2 flex">
-                  <div class="label dept">
-                    设备租赁单位
-                  </div>
+                  <div class="label dept">设备租赁单位</div>
                   <div class="value" v-if="filteredRentalUnits.length >= 1">
-                    {{
-                      filteredRentalUnits[0][
-                        "工程起重机械租赁单位"
-                      ] || "-"
-                    }}
+                    {{ filteredRentalUnits[0]["工程起重机械租赁单位"] || "-" }}
                   </div>
-                    <el-tooltip
-                      style="margin-left: 10px"
-                      v-if="filteredRentalUnits.length > 1"
-                      placement="top"
-                      effect="dark"
-                    >
-                      <div slot="content" class="tooltip-content">
-                        <div
-                          v-for="(item, index) in filteredRentalUnits"
-                          :key="index"
-                          class="tooltip-item"
-                        >
-                          <div class="tooltip-label">单位{{ index + 1 }}:</div>
-                          <div class="tooltip-value">
-                            {{ item["工程起重机械租赁单位"] || "-" }}
-                          </div>
+                  <el-tooltip
+                    style="margin-left: 10px"
+                    v-if="filteredRentalUnits.length > 1"
+                    placement="top"
+                    effect="dark"
+                  >
+                    <div slot="content" class="tooltip-content">
+                      <div
+                        v-for="(item, index) in filteredRentalUnits"
+                        :key="index"
+                        class="tooltip-item"
+                      >
+                        <div class="tooltip-label">单位{{ index + 1 }}:</div>
+                        <div class="tooltip-value">
+                          {{ item["工程起重机械租赁单位"] || "-" }}
                         </div>
                       </div>
-                      <span class="count-badge">{{
-                        filteredRentalUnits.length
-                      }}</span>
-                    </el-tooltip>
+                    </div>
+                    <span class="count-badge">{{
+                      filteredRentalUnits.length
+                    }}</span>
+                  </el-tooltip>
                 </div>
                 <div class="flex1 flex">
-                  <div class="label">
-                    联系人
-                  </div>
+                  <div class="label">联系人</div>
                   <div class="value" v-if="filteredContacts.length >= 1">
-                    {{
-                      filteredContacts[0]["联系人"] || "-"
-                    }}
+                    {{ filteredContacts[0]["联系人"] || "-" }}
                   </div>
-                    <el-tooltip
-                      style="margin-left: 10px"
-                      v-if="filteredContacts.length > 1"
-                      placement="top"
-                      effect="dark"
-                    >
-                      <div slot="content" class="tooltip-content">
-                        <div
-                          v-for="(item, index) in filteredContacts"
-                          :key="index"
-                          class="tooltip-item"
-                        >
-                          <div class="tooltip-label">
-                            联系人{{ index + 1 }}:
-                          </div>
-                          <div class="tooltip-value">
-                            {{ item["联系人"] || "-" }}
-                          </div>
+                  <el-tooltip
+                    style="margin-left: 10px"
+                    v-if="filteredContacts.length > 1"
+                    placement="top"
+                    effect="dark"
+                  >
+                    <div slot="content" class="tooltip-content">
+                      <div
+                        v-for="(item, index) in filteredContacts"
+                        :key="index"
+                        class="tooltip-item"
+                      >
+                        <div class="tooltip-label">联系人{{ index + 1 }}:</div>
+                        <div class="tooltip-value">
+                          {{ item["联系人"] || "-" }}
                         </div>
                       </div>
-                      <span class="count-badge">{{
-                        filteredContacts.length
-                      }}</span>
-                    </el-tooltip>
+                    </div>
+                    <span class="count-badge">{{
+                      filteredContacts.length
+                    }}</span>
+                  </el-tooltip>
                 </div>
               </div>
               <div class="info-item11">
@@ -371,7 +359,6 @@
             </div>
           </div>
         </div>
-
       </div>
       <div
         v-if="permissionProject.includes('12')"
@@ -614,8 +601,8 @@
 </template>
 
 <script>
-import HeaderBox from '../header/index.vue'
-import moment from 'moment'
+import HeaderBox from "../header/index.vue";
+import moment from "moment";
 import {
   getLoginInfo,
   getProjectDetail,
@@ -627,50 +614,50 @@
   getProjectSource,
   getDangerTrend,
   getProjectDangerousTrend,
-  getProjectLatestProgress
-} from './service.js'
+  getProjectLatestProgress,
+} from "./service.js";
 
-import { transformRiskSourceData } from '@/utils/riskSourceMap.js'
-import * as echarts from 'echarts'
+import { transformRiskSourceData } from "@/utils/riskSourceMap.js";
+import * as echarts from "echarts";
 export default {
   components: {
-    HeaderBox
+    HeaderBox,
   },
-  data () {
+  data() {
     return {
       mapView: null,
       mapPromise: null,
       _AMap: null,
       _mapInitPromise: null,
       _mapResizeHandler: null,
-      _lastMarkerPosKey: '',
+      _lastMarkerPosKey: "",
       currentMarker: null, // 保存当前的 marker 实例
       dateRange: [
-        moment().subtract(5, 'months').startOf('month'),
-        moment().endOf('month')
+        moment().subtract(5, "months").startOf("month"),
+        moment().endOf("month"),
       ], // 默认近6个月
       markers: [],
-      projectId: '',
-      projectName: '',
+      projectId: "",
+      projectName: "",
       // 项目详情信息
       projectInfo: {
         addressInfo: {},
-        address: '',
+        address: "",
         constructionCompanyInfo: {},
         developmentCompanyInfo: {},
         supervisorCompanyInfo: {},
-        properties: []
+        properties: [],
       }, // 项目信息
       dangerCount: {
         serious: 0,
         rectified: 0,
-        unRectified: 0
+        unRectified: 0,
       }, // 危险源统计
-      dangerCountTab: 'serious',
+      dangerCountTab: "serious",
       dangerCountLoading: false,
       dangerCountCache: {
         all: null,
-        serious: null
+        serious: null,
       },
 
       deviceTypeList: [], // 设备类型列表
@@ -679,7 +666,7 @@
 
       // pie数据
       legendData: [],
-      dateTxt: '',
+      dateTxt: "",
       dangerTrendList: [], // 分项隐患趋势数据
       dangerSortType: 1, // 排序类型:1-隐患数量,2-趋势
       dangerSortDesc: true, // 是否倒序
@@ -689,11 +676,11 @@
       riskTrendData: {
         xAxisData: [],
         seriesData: [],
-        statusData: []
+        statusData: [],
       },
       // 9各分项隐患趋势 10隐患数量 11设备数量 12查看报告入口 13人员在岗率 14重大风险源 15 项目风险趋势
       permissionProject:
-        JSON.parse(sessionStorage.getItem('permissionProject')) || [],
+        JSON.parse(sessionStorage.getItem("permissionProject")) || [],
 
       // 项目进度相关
       progressVisible: false, // 进度弹窗显示状态
@@ -703,36 +690,36 @@
       progressMediaList: [], // 处理后的媒体列表(包含类型信息)
       // 预览相关
       previewVisible: false, // 预览弹窗显示状态
-      previewUrl: '', // 预览的URL
-      previewType: 'image', // 预览类型:'image' 或 'video'
-      clientName: '', // 客户名称
-      clientLogo: '' // 客户logo
-    }
+      previewUrl: "", // 预览的URL
+      previewType: "image", // 预览类型:'image' 或 'video'
+      clientName: "", // 客户名称
+      clientLogo: "", // 客户logo
+    };
   },
   computed: {
-    dangerCountTabName () {
-      return this.dangerCountTab === 'all' ? '所有隐患数' : '重大隐患数'
+    dangerCountTabName() {
+      return this.dangerCountTab === "all" ? "所有隐患数" : "重大隐患数";
     },
     // 处理风险源数据,添加合并单元格的逻辑
 
-    riskSourceList () {
+    riskSourceList() {
       if (!this.riskSourceData || this.riskSourceData.length === 0) {
-        return []
+        return [];
       }
 
-      const result = []
-      let i = 0
+      const result = [];
+      let i = 0;
 
       while (i < this.riskSourceData.length) {
-        const currentRiskScale = this.riskSourceData[i].riskScale
-        let rowspan = 1
+        const currentRiskScale = this.riskSourceData[i].riskScale;
+        let rowspan = 1;
 
         // 计算相同风险规模的行数
         for (let j = i + 1; j < this.riskSourceData.length; j++) {
           if (this.riskSourceData[j].riskScale === currentRiskScale) {
-            rowspan++
+            rowspan++;
           } else {
-            break
+            break;
           }
         }
 
@@ -740,740 +727,739 @@
         result.push({
           ...this.riskSourceData[i],
           showRiskScale: true,
-          rowspan: rowspan
-        })
+          rowspan: rowspan,
+        });
 
         // 添加后续相同风险规模的行,不显示风险规模
         for (let k = 1; k < rowspan; k++) {
           result.push({
             ...this.riskSourceData[i + k],
             showRiskScale: false,
-            rowspan: 0
-          })
+            rowspan: 0,
+          });
         }
 
-        i += rowspan
+        i += rowspan;
       }
 
-      return result
+      return result;
     },
-    filteredProperties () {
+    filteredProperties() {
       if (
         !this.projectInfo.properties ||
         this.projectInfo.properties.length === 0
       ) {
-        return []
+        return [];
       }
 
-      const uniqueProperties = []
-      const seen = new Set()
+      const uniqueProperties = [];
+      const seen = new Set();
 
       this.projectInfo.properties.forEach((itemStr) => {
         try {
-          const item = JSON.parse(itemStr)
-          const rentalUnit = item['工程起重机械租赁单位']
-          const contact = item['联系电话']
+          const item = JSON.parse(itemStr);
+          const rentalUnit = item["工程起重机械租赁单位"];
+          const contact = item["联系电话"];
 
           if (rentalUnit || contact) {
-            const key = `${rentalUnit}-${contact}`
+            const key = `${rentalUnit}-${contact}`;
             if (!seen.has(key)) {
-              seen.add(key)
-              uniqueProperties.push(item)
+              seen.add(key);
+              uniqueProperties.push(item);
             }
           }
         } catch (e) {
-          console.error('Parsing project properties failed:', e)
+          console.error("Parsing project properties failed:", e);
         }
-      })
-      console.log('uniqueProperties uniqueProperties', uniqueProperties)
+      });
+      console.log("uniqueProperties uniqueProperties", uniqueProperties);
 
-      return uniqueProperties
+      return uniqueProperties;
     },
-    filteredRentalUnits () {
+    filteredRentalUnits() {
       if (
         !this.projectInfo.properties ||
         this.projectInfo.properties.length === 0
       ) {
-        return []
+        return [];
       }
 
-      const list = []
-      const seen = new Set()
+      const list = [];
+      const seen = new Set();
 
       this.projectInfo.properties.forEach((itemStr) => {
         try {
-          const item = JSON.parse(itemStr)
-          const rentalUnit = item['工程起重机械租赁单位']
-          if (!rentalUnit) return
-          const key = String(rentalUnit).trim()
-          if (!key) return
-          if (seen.has(key)) return
-          seen.add(key)
-          list.push({ '工程起重机械租赁单位': rentalUnit })
-        } catch (e) {
-
-        }
-      })
-      return list
+          const item = JSON.parse(itemStr);
+          const rentalUnit = item["工程起重机械租赁单位"];
+          if (!rentalUnit) return;
+          const key = String(rentalUnit).trim();
+          if (!key) return;
+          if (seen.has(key)) return;
+          seen.add(key);
+          list.push({ 工程起重机械租赁单位: rentalUnit });
+        } catch (e) {}
+      });
+      return list;
     },
-    filteredContacts () {
+    filteredContacts() {
       if (
         !this.projectInfo.properties ||
         this.projectInfo.properties.length === 0
       ) {
-        return []
+        return [];
       }
 
-      const list = []
-      const seen = new Set()
+      const list = [];
+      const seen = new Set();
 
       this.projectInfo.properties.forEach((itemStr) => {
         try {
-          const item = JSON.parse(itemStr)
-          const name = item['联系人']
-          if (!name) return
-          const key = String(name).trim()
-          if (!key) return
-          if (seen.has(key)) return
-          seen.add(key)
-          list.push({ '联系人': name })
-        } catch (e) {
+          const item = JSON.parse(itemStr);
+          const name = item["联系人"];
+          if (!name) return;
+          const key = String(name).trim();
+          if (!key) return;
+          if (seen.has(key)) return;
+          seen.add(key);
+          list.push({ 联系人: name });
+        } catch (e) {}
+      });
 
-        }
-      })
-
-      return list
-    }
+      return list;
+    },
   },
   watch: {
     dateRange: {
-      handler (newVal, oldVal) {
+      handler(newVal, oldVal) {
         if (newVal.length > 0) {
           this.dateTxt =
-            moment(newVal[0]).format('YYYY -MM') +
-            ' - ' +
-            moment(newVal[1]).format('YYYY -MM')
+            moment(newVal[0]).format("YYYY -MM") +
+            " - " +
+            moment(newVal[1]).format("YYYY -MM");
           // 当日期范围改变时,重新获取风险趋势数据
           if (this.projectId) {
-            this.getProjectRiskTrend()
+            this.getProjectRiskTrend();
           }
         }
       },
-      immediate: true
-    }
+      immediate: true,
+    },
   },
-  created () {
+  created() {
     this.mapPromise = AMapLoader.load({
-      key: '232929db1cb31f26d42b3645a7456154',
-      version: '2.0',
-      zoom: 25
-    })
+      key: "232929db1cb31f26d42b3645a7456154",
+      version: "2.0",
+      zoom: 25,
+    });
     if (this.$route.query.projectId) {
-      this.projectId = this.$route.query.projectId || ''
+      this.projectId = this.$route.query.projectId || "";
       // 添加错误处理,确保登录信息获取失败不影响其他模块
       getLoginInfo({ id: this.projectId, type: 2 })
         .then((res) => {
-          this.projectName = res.projectName
-          if (sessionStorage.getItem('userInfo')) {
+          this.projectName = res.projectName;
+          if (sessionStorage.getItem("userInfo")) {
             this.permissionProject =
-              JSON.parse(sessionStorage.getItem('permissionProject')) || []
+              JSON.parse(sessionStorage.getItem("permissionProject")) || [];
           } else {
             const permissions = res.permissionProject
-              ? res.permissionProject.split(',')
-              : []
-            this.permissionProject = permissions
+              ? res.permissionProject.split(",")
+              : [];
+            this.permissionProject = permissions;
             sessionStorage.setItem(
-              'permissionProject',
+              "permissionProject",
               JSON.stringify(permissions)
-            )
+            );
           }
 
-          sessionStorage.setItem('deviceTemplateId', res.deviceTemplateId) // 设备模板id
-          sessionStorage.setItem('deviceTemplateName', res.deviceTemplateName) // 设备模板id
-          sessionStorage.setItem('safetyId', res.safetyId) // 安全报告模板id
-          sessionStorage.setItem('safetyName', res.safetyName)
-          sessionStorage.setItem('bigHiddenDanger', res.bigHiddenDanger) // 1开启 2关闭 重大隐患
+          sessionStorage.setItem("deviceTemplateId", res.deviceTemplateId); // 设备模板id
+          sessionStorage.setItem("deviceTemplateName", res.deviceTemplateName); // 设备模板id
+          sessionStorage.setItem("safetyId", res.safetyId); // 安全报告模板id
+          sessionStorage.setItem("safetyName", res.safetyName);
+          sessionStorage.setItem("bigHiddenDanger", res.bigHiddenDanger); // 1开启 2关闭 重大隐患
           sessionStorage.setItem(
-            'generalHiddenDanger',
+            "generalHiddenDanger",
             res.generalHiddenDanger
-          ) // 1开启 2关闭 一般隐患
-          sessionStorage.setItem('commentType', res.commentType) // 1模糊评价 2打分评价
-          sessionStorage.setItem('clientName', res.name)
-          sessionStorage.setItem('clientLogo', res.logo)
-          sessionStorage.setItem('clientId', res.clientId)
-          this.clientName = res.name
-          this.clientLogo = res.logo
+          ); // 1开启 2关闭 一般隐患
+          sessionStorage.setItem("commentType", res.commentType); // 1模糊评价 2打分评价
+          sessionStorage.setItem("clientName", res.name);
+          sessionStorage.setItem("clientLogo", res.logo);
+          sessionStorage.setItem("clientId", res.clientId);
+          this.clientName = res.name;
+          this.clientLogo = res.logo;
         })
         .catch((err) => {
-          console.error('获取登录信息失败:', err)
+          console.error("获取登录信息失败:", err);
           // 设置默认值,确保页面可以继续渲染
-          this.projectName = '项目详情'
+          this.projectName = "项目详情";
           // this.permissionProject = []
-        })
-      this.getDetail()
-      this.getDangerTrendList()
-      this.getProjectRiskTrend()
+        });
+      this.getDetail();
+      this.getDangerTrendList();
+      this.getProjectRiskTrend();
     }
   },
-  mounted () {
+  mounted() {
     setTimeout(() => {
-      this.initRiskChart()
-    }, 1000)
+      this.initRiskChart();
+    }, 1000);
   },
-  activated () {
+  activated() {
     // 当从其他页面返回时,重新设置地图 marker
     if (this.mapView && this.projectInfo.type !== undefined) {
-      this.updateMapMarker()
+      this.updateMapMarker();
     }
   },
-  beforeDestroy () {
+  beforeDestroy() {
     if (this._mapResizeHandler) {
-      window.removeEventListener('resize', this._mapResizeHandler)
-      this._mapResizeHandler = null
+      window.removeEventListener("resize", this._mapResizeHandler);
+      this._mapResizeHandler = null;
     }
     if (this.mapView) {
-      this.mapView.destroy()
-      this.mapView = null
+      this.mapView.destroy();
+      this.mapView = null;
     }
-    this.currentMarker = null
-    this._lastMarkerPosKey = ''
+    this.currentMarker = null;
+    this._lastMarkerPosKey = "";
   },
   methods: {
     // 打开项目进度弹窗
-    toProjectDetail () {
-      this.progressVisible = true
-      this.getLatestProgress()
+    toProjectDetail() {
+      this.progressVisible = true;
+      this.getLatestProgress();
     },
     // 获取最新进度
-    async getLatestProgress () {
-      this.progressLoading = true
+    async getLatestProgress() {
+      this.progressLoading = true;
       try {
-        const res = await getProjectLatestProgress(this.projectId)
+        const res = await getProjectLatestProgress(this.projectId);
         if (res) {
-          this.latestProgress = res
+          this.latestProgress = res;
           // 解析并检测媒体文件类型
-          await this.detectMediaTypes(res.url)
+          await this.detectMediaTypes(res.url);
         } else {
-          this.latestProgress = {}
-          this.progressMediaList = []
+          this.latestProgress = {};
+          this.progressMediaList = [];
         }
       } catch (error) {
-        console.error('获取最新进度失败:', error)
-        this.$message.error('获取最新进度失败')
-        this.latestProgress = {}
-        this.progressMediaList = []
+        console.error("获取最新进度失败:", error);
+        this.$message.error("获取最新进度失败");
+        this.latestProgress = {};
+        this.progressMediaList = [];
       } finally {
-        this.progressLoading = false
+        this.progressLoading = false;
       }
     },
     // 关闭进度弹窗
-    closeProgressDialog () {
-      this.progressVisible = false
-      this.latestProgress = {}
+    closeProgressDialog() {
+      this.progressVisible = false;
+      this.latestProgress = {};
     },
     // 跳转到历史进度页面
-    toProgressHistory () {
-      this.progressVisible = false
+    toProgressHistory() {
+      this.progressVisible = false;
       this.$router.push({
-        path: '/projectProgress',
+        path: "/projectProgress",
         query: {
           projectId: this.projectId,
-          projectName: this.projectName
-        }
-      })
+          projectName: this.projectName,
+        },
+      });
     },
     // 格式化进度时间
-    formatProgressTime (time) {
-      return time ? moment(time).format('YYYY-MM-DD HH:mm:ss') : '-'
+    formatProgressTime(time) {
+      return time ? moment(time).format("YYYY-MM-DD HH:mm:ss") : "-";
     },
     // 通过 Content-Type 检测媒体文件类型(加载时检测所有文件)
-    async detectMediaTypes (urlStr) {
+    async detectMediaTypes(urlStr) {
       if (!urlStr) {
-        this.progressMediaList = []
-        return
+        this.progressMediaList = [];
+        return;
       }
 
       try {
-        let fileIds = []
+        let fileIds = [];
 
         // 如果是数组,直接使用
         if (Array.isArray(urlStr)) {
-          fileIds = urlStr
+          fileIds = urlStr;
         }
         // 如果是逗号分隔的字符串
-        else if (typeof urlStr === 'string' && urlStr.includes(',')) {
-          fileIds = urlStr.split(',').filter((item) => item.trim())
+        else if (typeof urlStr === "string" && urlStr.includes(",")) {
+          fileIds = urlStr.split(",").filter((item) => item.trim());
         }
         // 如果是单个字符串
-        else if (typeof urlStr === 'string' && urlStr.trim()) {
-          fileIds = [urlStr.trim()]
+        else if (typeof urlStr === "string" && urlStr.trim()) {
+          fileIds = [urlStr.trim()];
         }
 
         // 并发检测所有文件的类型
         const mediaPromises = fileIds.map(async (id) => {
-          let url = ''
+          let url = "";
           // 如果已经是完整的URL(http或https开头),直接使用
-          if (id.startsWith('http://') || id.startsWith('https://')) {
-            url = id
+          if (id.startsWith("http://") || id.startsWith("https://")) {
+            url = id;
           } else {
             // 否则拼接为下载URL
-            url = `${this.VUE_APP_BASE_URL}/project/download/${id}`
+            url = `${this.VUE_APP_BASE_URL}/public/file/download/${id}`;
           }
 
           // 先尝试从扩展名判断
-          let type = 'image'
+          let type = "image";
           if (url.match(/\.(mp4|webm|ogg|avi|mov)$/i)) {
-            type = 'video'
+            type = "video";
           } else {
             // 如果没有扩展名,通过 Content-Type 检测
-            type = await this.getFileTypeByContentType(url)
+            type = await this.getFileTypeByContentType(url);
           }
 
           return {
             url: url,
             type: type, // 'image' 或 'video'
-            id: id
-          }
-        })
+            id: id,
+          };
+        });
 
-        this.progressMediaList = await Promise.all(mediaPromises)
+        this.progressMediaList = await Promise.all(mediaPromises);
       } catch (error) {
-        console.error('检测媒体文件类型失败:', error)
-        this.progressMediaList = []
+        console.error("检测媒体文件类型失败:", error);
+        this.progressMediaList = [];
       }
     },
     // 通过 Content-Type 判断文件类型(使用 GET 请求,和后台管理保持一致)
-    async getFileTypeByContentType (url) {
+    async getFileTypeByContentType(url) {
       try {
         // 使用 GET 请求获取响应头(和 React 后台管理一致)
         const response = await fetch(url, {
-          method: 'GET',
-          mode: 'cors'
-        })
+          method: "GET",
+          mode: "cors",
+        });
 
-        const contentType = response.headers.get('Content-Type') || ''
+        const contentType = response.headers.get("Content-Type") || "";
 
         // 判断是否为视频
-        if (contentType.startsWith('video/')) {
-          return 'video'
+        if (contentType.startsWith("video/")) {
+          return "video";
         }
         // 判断是否为图片
-        else if (contentType.startsWith('image/')) {
-          return 'image'
+        else if (contentType.startsWith("image/")) {
+          return "image";
         }
         // 默认当作图片处理
         else {
-          return 'image'
+          return "image";
         }
       } catch (error) {
-        console.error('获取文件 Content-Type 失败:', url, error)
+        console.error("获取文件 Content-Type 失败:", url, error);
         // 如果请求失败,默认当作图片处理
-        return 'image'
+        return "image";
       }
     },
     // 预览进度媒体(图片或视频)- 弹窗预览
-    previewProgressMedia (item) {
+    previewProgressMedia(item) {
       if (item && item.url) {
-        this.previewUrl = item.url
-        this.previewType = item.type || 'image'
-        this.previewVisible = true
+        this.previewUrl = item.url;
+        this.previewType = item.type || "image";
+        this.previewVisible = true;
       }
     },
     // 关闭预览弹窗
-    closePreview () {
-      this.previewVisible = false
-      this.previewUrl = ''
-      this.previewType = 'image'
+    closePreview() {
+      this.previewVisible = false;
+      this.previewUrl = "";
+      this.previewType = "image";
     },
     // 图片加载失败处理
-    handleImageError (e) {
-      e.target.src = require('../../assets/img/logo.png')
+    handleImageError(e) {
+      e.target.src = require("../../assets/img/logo.png");
     },
     // 视频加载失败处理
-    handleVideoError (e) {
-      console.error('视频加载失败:', e)
+    handleVideoError(e) {
+      console.error("视频加载失败:", e);
       // 可以在这里添加视频加载失败的处理逻辑
     },
-    normalizeDangerCount (res) {
+    normalizeDangerCount(res) {
       return {
         serious: res && res.serious !== undefined ? res.serious : 0,
         rectified: res && res.rectified !== undefined ? res.rectified : 0,
-        unRectified: res && res.unRectified !== undefined
-          ? res.unRectified
-          : 0
-      }
+        unRectified: res && res.unRectified !== undefined ? res.unRectified : 0,
+      };
     },
-    async loadDangerCount (tab = this.dangerCountTab, force = false) {
-      const cacheData = this.dangerCountCache[tab]
+    async loadDangerCount(tab = this.dangerCountTab, force = false) {
+      const cacheData = this.dangerCountCache[tab];
       if (!force && cacheData) {
-        this.dangerCount = { ...cacheData }
-        return
+        this.dangerCount = { ...cacheData };
+        return;
       }
 
-      this.dangerCountLoading = true
+      this.dangerCountLoading = true;
       try {
-        const requestApi = tab === 'all' ? getDangerCountAll : getDangerCount
-        const res = await requestApi(this.projectId)
-        const countData = this.normalizeDangerCount(res)
-        this.dangerCount = countData
-        this.dangerCountCache[tab] = { ...countData }
+        const requestApi = tab === "all" ? getDangerCountAll : getDangerCount;
+        const res = await requestApi(this.projectId);
+        const countData = this.normalizeDangerCount(res);
+        this.dangerCount = countData;
+        this.dangerCountCache[tab] = { ...countData };
       } catch (err) {
         console.error(
-          `获取${tab === 'all' ? '所有隐患数量' : '重大隐患数量'}失败:`,
+          `获取${tab === "all" ? "所有隐患数量" : "重大隐患数量"}失败:`,
           err
-        )
-        this.dangerCount = this.normalizeDangerCount()
+        );
+        this.dangerCount = this.normalizeDangerCount();
       } finally {
-        this.dangerCountLoading = false
+        this.dangerCountLoading = false;
       }
     },
-    handleDangerTabChange (tab) {
-      if (this.dangerCountTab === tab) return
-      this.dangerCountTab = tab
-      this.loadDangerCount(tab)
+    handleDangerTabChange(tab) {
+      if (this.dangerCountTab === tab) return;
+      this.dangerCountTab = tab;
+      this.loadDangerCount(tab);
     },
     // 获取项目详情
-    getDetail () {
+    getDetail() {
       this.dangerCountCache = {
         all: null,
-        serious: null
-      }
+        serious: null,
+      };
 
       // 设备类型 - 添加错误处理
       deviceTypes()
         .then((res) => {
-          this.deviceTypeList = res
+          this.deviceTypeList = res;
         })
         .catch((err) => {
-          console.error('获取设备类型失败:', err)
-          this.deviceTypeList = []
-        })
+          console.error("获取设备类型失败:", err);
+          this.deviceTypeList = [];
+        });
 
       // 获取项目详情 - 添加错误处理
       getProjectDetail(this.projectId)
         .then((res) => {
           const addressInfo = res.addressInfo
             ? JSON.parse(res.addressInfo)
-            : {}
+            : {};
           const constructionCompanyInfo = res.constructionCompanyInfo
             ? JSON.parse(res.constructionCompanyInfo)
-            : {}
+            : {};
           const developmentCompanyInfo = res.developmentCompanyInfo
             ? JSON.parse(res.developmentCompanyInfo)
-            : {}
+            : {};
           const supervisorCompanyInfo = res.supervisorCompanyInfo
             ? JSON.parse(res.supervisorCompanyInfo)
-            : {}
+            : {};
 
           this.projectInfo = {
             ...res,
             addressInfo: addressInfo,
             address:
-              (addressInfo.province || '') +
-              (addressInfo.city || '') +
-              (addressInfo.district || '') +
-              (addressInfo.detail || ''),
+              (addressInfo.province || "") +
+              (addressInfo.city || "") +
+              (addressInfo.district || "") +
+              (addressInfo.detail || ""),
             constructionCompanyInfo: constructionCompanyInfo,
             developmentCompanyInfo: developmentCompanyInfo,
-            supervisorCompanyInfo: supervisorCompanyInfo
-          }
+            supervisorCompanyInfo: supervisorCompanyInfo,
+          };
           this.$nextTick(() => {
             this.setMapload().then(() => {
-              this.updateMapMarker()
-            })
-          })
+              this.updateMapMarker();
+            });
+          });
         })
         .catch((err) => {
-          console.error('获取项目详情失败:', err)
+          console.error("获取项目详情失败:", err);
           // 设置默认值
           this.projectInfo = {
             addressInfo: {},
-            address: '',
+            address: "",
             constructionCompanyInfo: {},
             developmentCompanyInfo: {},
             supervisorCompanyInfo: {},
-            properties: []
-          }
-        })
+            properties: [],
+          };
+        });
 
       // 设备数量 - 添加错误处理
       getProjectDeviceCount(this.projectId)
         .then((res) => {
-          this.equipment = 0
+          this.equipment = 0;
           this.legendData = res.map((item) => {
-            this.equipment += item.count
-            const deviceType = this.deviceTypeList[item.type]
+            this.equipment += item.count;
+            const deviceType = this.deviceTypeList[item.type];
             return {
               ...item,
               value: item.count || 0,
               name:
-                deviceType && deviceType.name ? deviceType.name : '未知设备',
-              itemStyle: { color: this.generateRandomColor() }
-            }
-          })
-          this.initPie3D()
+                deviceType && deviceType.name ? deviceType.name : "未知设备",
+              itemStyle: { color: this.generateRandomColor() },
+            };
+          });
+          this.initPie3D();
         })
         .catch((err) => {
-          console.error('获取设备数量失败:', err)
-          this.equipment = 0
-          this.legendData = []
-        })
+          console.error("获取设备数量失败:", err);
+          this.equipment = 0;
+          this.legendData = [];
+        });
 
-      this.loadDangerCount(this.dangerCountTab, true)
+      this.loadDangerCount(this.dangerCountTab, true);
 
       // 项目人员信息 - 添加错误处理
 
       getProjectPersonInfo({ projectId: this.projectId })
         .then((res) => {
-          this.peopleList = res || []
+          this.peopleList = res || [];
         })
         .catch((err) => {
-          console.error('获取人员信息失败:', err)
-          this.peopleList = []
-        })
+          console.error("获取人员信息失败:", err);
+          this.peopleList = [];
+        });
 
       // 获取项目风险源 - 添加错误处理
       getProjectSource({ projectId: this.projectId })
         .then((res) => {
-          const riskSourceList = []
+          const riskSourceList = [];
 
           // 处理超危大工程
           if (res.superDangerousOptions) {
             try {
-              const superDangerousArray = JSON.parse(res.superDangerousOptions)
+              const superDangerousArray = JSON.parse(res.superDangerousOptions);
               const transformedData = transformRiskSourceData(
                 superDangerousArray,
-                'superDangerous',
-                '超危大工程'
-              )
-              riskSourceList.push(...transformedData)
+                "superDangerous",
+                "超危大工程"
+              );
+              riskSourceList.push(...transformedData);
             } catch (e) {
-              console.error('解析超危大工程数据失败:', e)
+              console.error("解析超危大工程数据失败:", e);
             }
           }
 
           // 处理危大工程
           if (res.dangerousOptions) {
             try {
-              const dangerousArray = JSON.parse(res.dangerousOptions)
+              const dangerousArray = JSON.parse(res.dangerousOptions);
               const transformedData = transformRiskSourceData(
                 dangerousArray,
-                'dangerous',
-                '危大工程'
-              )
-              riskSourceList.push(...transformedData)
+                "dangerous",
+                "危大工程"
+              );
+              riskSourceList.push(...transformedData);
             } catch (e) {
-              console.error('解析危大工程数据失败:', e)
+              console.error("解析危大工程数据失败:", e);
             }
           }
 
           // 处理风险源
           if (res.hazardSource) {
             try {
-              const hazardSourceArray = JSON.parse(res.hazardSource)
+              const hazardSourceArray = JSON.parse(res.hazardSource);
               const transformedData = transformRiskSourceData(
                 hazardSourceArray,
-                'hazardSource',
-                '风险源'
-              )
-              riskSourceList.push(...transformedData)
+                "hazardSource",
+                "风险源"
+              );
+              riskSourceList.push(...transformedData);
             } catch (e) {
-              console.error('解析风险源数据失败:', e)
+              console.error("解析风险源数据失败:", e);
             }
           }
 
-          this.riskSourceData = riskSourceList
+          this.riskSourceData = riskSourceList;
         })
         .catch((err) => {
-          console.error('获取项目风险源失败:', err)
-          this.riskSourceData = []
-        })
+          console.error("获取项目风险源失败:", err);
+          this.riskSourceData = [];
+        });
     },
     // 获取隐患趋势
-    getDangerTrendList () {
+    getDangerTrendList() {
       let params = {
         projectId: this.projectId,
         type: this.dangerSortType, // 1数量 2 趋势
-        desc: this.dangerSortDesc // 是否倒序
-      }
+        desc: this.dangerSortDesc, // 是否倒序
+      };
       getDangerTrend(params)
         .then((res) => {
-          this.dangerTrendList = res || []
+          this.dangerTrendList = res || [];
         })
         .catch((err) => {
-          console.error('获取隐患趋势失败:', err)
-          this.dangerTrendList = []
-        })
+          console.error("获取隐患趋势失败:", err);
+          this.dangerTrendList = [];
+        });
     },
     // 切换隐患排序方式
-    changeDangerSort (type) {
+    changeDangerSort(type) {
       if (this.dangerSortType === type) {
         // 如果点击的是当前排序类型,则切换升序/降序
-        this.dangerSortDesc = !this.dangerSortDesc
+        this.dangerSortDesc = !this.dangerSortDesc;
       } else {
         // 如果点击的是不同的排序类型,则切换类型并默认倒序
-        this.dangerSortType = type
-        this.dangerSortDesc = true
+        this.dangerSortType = type;
+        this.dangerSortDesc = true;
       }
       // 重新请求数据
-      this.getDangerTrendList()
+      this.getDangerTrendList();
     },
     // 计算进度条宽度
-    getBarWidth (current, compare) {
-      const max = Math.max(current, compare)
-      if (max === 0) return '0px'
-      const percentage = (current / max) * 100
-      const maxWidth = 114 // 最大宽度
-      return `${(percentage / 100) * maxWidth}px`
+    getBarWidth(current, compare) {
+      const max = Math.max(current, compare);
+      if (max === 0) return "0px";
+      const percentage = (current / max) * 100;
+      const maxWidth = 114; // 最大宽度
+      return `${(percentage / 100) * maxWidth}px`;
     },
     // 人员在岗率
-    toPersonnelOnDuty () {
+    toPersonnelOnDuty() {
       this.$router.push({
-        path: '/personnelOnDuty',
+        path: "/personnelOnDuty",
         query: {
           projectId: this.projectId,
-          projectName: this.projectName
-        }
-      })
+          projectName: this.projectName,
+        },
+      });
     },
     // 跳转隐患列表
-    toHiddenDanger (type) {
+    toHiddenDanger(type) {
       this.$router.push({
-        path: '/hiddenDanger',
+        path: "/hiddenDanger",
         query: {
           projectId: this.projectId,
           projectName: this.projectName,
           activeTab: type,
-          type: 2
-        }
-      })
+          type: 2,
+        },
+      });
     },
     // 跳转设备列表
-    toEquipmentInfo () {
+    toEquipmentInfo() {
       this.$router.push({
-        path: '/equipmentList',
-        query: {
-          projectId: this.projectId,
-          projectName: this.projectName
-        }
-      })
-    },
-    // 跳转重大危险源
-    toMajorRiskList () {
-      this.$router.push({
-        path: '/majorRisk',
-        query: {
-          projectId: this.projectId,
-          projectName: this.projectName
-        }
-      })
-    },
-    toPlanOfAudit () {
-      this.$router.push({
-        path: '/planOfAudit',
+        path: "/equipmentList",
         query: {
           projectId: this.projectId,
           projectName: this.projectName,
-          type: 2
-        }
-      })
+        },
+      });
     },
-    setMapload () {
+    // 跳转重大危险源
+    toMajorRiskList() {
+      this.$router.push({
+        path: "/majorRisk",
+        query: {
+          projectId: this.projectId,
+          projectName: this.projectName,
+        },
+      });
+    },
+    toPlanOfAudit() {
+      this.$router.push({
+        path: "/planOfAudit",
+        query: {
+          projectId: this.projectId,
+          projectName: this.projectName,
+          type: 2,
+        },
+      });
+    },
+    setMapload() {
       if (!this.mapPromise) {
         this.mapPromise = AMapLoader.load({
-          key: '232929db1cb31f26d42b3645a7456154',
-          version: '2.0'
-        })
+          key: "232929db1cb31f26d42b3645a7456154",
+          version: "2.0",
+        });
       }
       if (this._mapInitPromise) {
-        return this._mapInitPromise
+        return this._mapInitPromise;
       }
 
       this._mapInitPromise = this.mapPromise
         .then((AMap) => {
-          this._AMap = AMap
+          this._AMap = AMap;
 
           if (this.mapView) {
-            this.mapView.resize()
+            this.mapView.resize();
             if (!this._mapResizeHandler) {
               this._mapResizeHandler = () => {
-                if (this.mapView) this.mapView.resize()
-              }
-              window.addEventListener('resize', this._mapResizeHandler)
+                if (this.mapView) this.mapView.resize();
+              };
+              window.addEventListener("resize", this._mapResizeHandler);
             }
-            return AMap
+            return AMap;
           }
 
-          const satellite = new AMap.TileLayer.Satellite()
+          const satellite = new AMap.TileLayer.Satellite();
 
           // 获取经纬度
-          let center = [104.065617, 30.65695] // 默认中心点
-          let longitude = null
-          let latitude = null
+          let center = [104.065617, 30.65695]; // 默认中心点
+          let longitude = null;
+          let latitude = null;
 
           if (this.projectInfo && this.projectInfo.addressInfo) {
-            longitude = Number(this.projectInfo.addressInfo.longitude)
-            latitude = Number(this.projectInfo.addressInfo.latitude)
+            longitude = Number(this.projectInfo.addressInfo.longitude);
+            latitude = Number(this.projectInfo.addressInfo.latitude);
 
-            if (!isNaN(longitude) && !isNaN(latitude) && longitude !== 0 && latitude !== 0) {
-              center = [longitude, latitude]
+            if (
+              !isNaN(longitude) &&
+              !isNaN(latitude) &&
+              longitude !== 0 &&
+              latitude !== 0
+            ) {
+              center = [longitude, latitude];
             }
           }
 
-          this.mapView = new AMap.Map('projectContainer', {
+          this.mapView = new AMap.Map("projectContainer", {
             zoom: 17,
             center: center,
-            layers: [satellite]
-          })
+            layers: [satellite],
+          });
 
-          this.mapView.resize()
+          this.mapView.resize();
           if (!this._mapResizeHandler) {
             this._mapResizeHandler = () => {
-              if (this.mapView) this.mapView.resize()
-            }
-            window.addEventListener('resize', this._mapResizeHandler)
+              if (this.mapView) this.mapView.resize();
+            };
+            window.addEventListener("resize", this._mapResizeHandler);
           }
 
-          return AMap
+          return AMap;
         })
         .catch((e) => {
-          console.error(e)
-          throw e
+          console.error(e);
+          throw e;
         })
         .finally(() => {
-          this._mapInitPromise = null
-        })
+          this._mapInitPromise = null;
+        });
 
-      return this._mapInitPromise
+      return this._mapInitPromise;
     },
     // 更新地图 marker
-    updateMapMarker () {
-      if (!this.mapView) return
+    updateMapMarker() {
+      if (!this.mapView) return;
 
-      const AMap = this._AMap || window.AMap
-      if (!AMap) return
+      const AMap = this._AMap || window.AMap;
+      if (!AMap) return;
 
       // 根据项目类型选择图标
       const iconImages = [
-        require('../../assets/img/home/f4.png'),
-        require('../../assets/img/home/s4.png'),
-        require('../../assets/img/home/z4.png')
-      ]
-
-      const iconImage = iconImages[this.projectInfo.type] || iconImages[0]
+        require("../../assets/img/home/new-mark.png"),
+        require("../../assets/img/home/s4.png"),
+        require("../../assets/img/home/z4.png"),
+      ];
+      // const iconImage = iconImages[this.projectInfo.type] || iconImages[0];
+      const iconImage = iconImages[0];
 
       const tryRenderMarker = (lng, lat) => {
         if (
-          typeof lng !== 'number' ||
-          typeof lat !== 'number' ||
+          typeof lng !== "number" ||
+          typeof lat !== "number" ||
           isNaN(lng) ||
           isNaN(lat)
         ) {
-          return false
+          return false;
         }
-        const nextKey = `${lng},${lat}`
+        const nextKey = `${lng},${lat}`;
         if (this.currentMarker && this._lastMarkerPosKey === nextKey) {
-          return true
+          return true;
         }
 
         if (!this.currentMarker) {
@@ -1481,60 +1467,60 @@
             position: [lng, lat],
             icon: new AMap.Icon({
               image: iconImage,
-              size: new AMap.Size(30, 30),
-              imageSize: new AMap.Size(30, 30)
+              size: new AMap.Size(60, 60),
+              imageSize: new AMap.Size(60, 60),
             }),
-            offset: new AMap.Pixel(-15, -15),
-            zoom: 17
-          })
-          this.mapView.add(this.currentMarker)
-        } else if (typeof this.currentMarker.setPosition === 'function') {
-          this.currentMarker.setPosition([lng, lat])
+            offset: new AMap.Pixel(-30, -30),
+            zoom: 17,
+          });
+          this.mapView.add(this.currentMarker);
+        } else if (typeof this.currentMarker.setPosition === "function") {
+          this.currentMarker.setPosition([lng, lat]);
         } else {
-          this.mapView.remove(this.currentMarker)
+          this.mapView.remove(this.currentMarker);
           this.currentMarker = new AMap.Marker({
             position: [lng, lat],
             icon: new AMap.Icon({
               image: iconImage,
               size: new AMap.Size(30, 30),
-              imageSize: new AMap.Size(30, 30)
+              imageSize: new AMap.Size(30, 30),
             }),
             offset: new AMap.Pixel(-15, -15),
-            zoom: 17
-          })
-          this.mapView.add(this.currentMarker)
+            zoom: 17,
+          });
+          this.mapView.add(this.currentMarker);
         }
 
-        if (typeof this.mapView.setZoomAndCenter === 'function') {
+        if (typeof this.mapView.setZoomAndCenter === "function") {
           if (!this._lastMarkerPosKey) {
-            this.mapView.setZoomAndCenter(17, [lng, lat])
-          } else if (typeof this.mapView.setCenter === 'function') {
-            this.mapView.setCenter([lng, lat])
+            this.mapView.setZoomAndCenter(17, [lng, lat]);
+          } else if (typeof this.mapView.setCenter === "function") {
+            this.mapView.setCenter([lng, lat]);
           } else {
-            this.mapView.setZoomAndCenter(17, [lng, lat])
+            this.mapView.setZoomAndCenter(17, [lng, lat]);
           }
         }
-        this._lastMarkerPosKey = nextKey
-        return true
-      }
+        this._lastMarkerPosKey = nextKey;
+        return true;
+      };
 
       // 1) 优先使用后端返回的经纬度(如果有)
-      const info = this.projectInfo.addressInfo || {}
-      let lng = null
-      let lat = null
+      const info = this.projectInfo.addressInfo || {};
+      let lng = null;
+      let lat = null;
 
       if (info.longitude && info.latitude) {
-        lng = Number(info.longitude)
-        lat = Number(info.latitude)
+        lng = Number(info.longitude);
+        lat = Number(info.latitude);
       } else {
-        const lonLatStr = typeof info.lonLat === 'string' ? info.lonLat : ''
-        const lonLatParts = lonLatStr.split(',')
-        lng = lonLatParts[0] ? Number(lonLatParts[0]) : null
-        lat = lonLatParts[1] ? Number(lonLatParts[1]) : null
+        const lonLatStr = typeof info.lonLat === "string" ? info.lonLat : "";
+        const lonLatParts = lonLatStr.split(",");
+        lng = lonLatParts[0] ? Number(lonLatParts[0]) : null;
+        lat = lonLatParts[1] ? Number(lonLatParts[1]) : null;
       }
 
       if (tryRenderMarker(lng, lat)) {
-        return
+        return;
       }
 
       // 2) 无经纬度时,使用地址进行地理编码
@@ -1544,149 +1530,149 @@
           info && info.province,
           info && info.city,
           info && info.district,
-          info && info.detail
+          info && info.detail,
         ]
           .filter(Boolean)
-          .join('')
+          .join("");
 
       if (address && this.mapPromise) {
         this.mapPromise
           .then(() => {
             const Geocoder =
               (window.AMap && window.AMap.Geocoder) ||
-              (typeof AMap !== 'undefined' && AMap.Geocoder)
-            if (!Geocoder) return
+              (typeof AMap !== "undefined" && AMap.Geocoder);
+            if (!Geocoder) return;
             const geocoder = new Geocoder({
-              city: (info && (info.city || info.province)) || ''
-            })
+              city: (info && (info.city || info.province)) || "",
+            });
             geocoder.getLocation(address, (status, result) => {
               if (
-                status === 'complete' &&
+                status === "complete" &&
                 result &&
                 result.geocodes &&
                 result.geocodes.length > 0
               ) {
-                const loc = result.geocodes[0].location
-                const lnglat = [loc.lng, loc.lat]
-                tryRenderMarker(lnglat[0], lnglat[1])
+                const loc = result.geocodes[0].location;
+                const lnglat = [loc.lng, loc.lat];
+                tryRenderMarker(lnglat[0], lnglat[1]);
               } else {
                 // 回退到默认中心点
-                tryRenderMarker(104.065617, 30.65695)
+                tryRenderMarker(104.065617, 30.65695);
               }
-            })
+            });
           })
           .catch(() => {
             // 加载失败时回退到默认中心点
-            tryRenderMarker(104.065617, 30.65695)
-          })
+            tryRenderMarker(104.065617, 30.65695);
+          });
       } else {
         // 3) 地址不可用时,回退到默认中心点
-        tryRenderMarker(104.065617, 30.65695)
+        tryRenderMarker(104.065617, 30.65695);
       }
     },
     // 初始化 3D 环饼图(echarts-gl)
-    initPie3D () {
-      const el = this.$refs.pieChart
-      if (!el) return
-      this._pie = echarts.init(el)
+    initPie3D() {
+      const el = this.$refs.pieChart;
+      if (!el) return;
+      this._pie = echarts.init(el);
 
       // 使用动态数据或默认数据
-      const data = this.legendData.length > 0 ? this.legendData : []
+      const data = this.legendData.length > 0 ? this.legendData : [];
 
       // 生成 3D 饼图 option(internalDiameterRatio 控制环形内径比)
-      this.legendData = data // 用于右侧自定义 legend
-      const series = this.getPie3D(data, 0.7)
+      this.legendData = data; // 用于右侧自定义 legend
+      const series = this.getPie3D(data, 0.7);
 
       const option = {
         legend: {
           tooltip: {
-            show: true
+            show: true,
           },
           data: data.map((item) => item.name),
-          right: '2%',
-          top: 'center',
-          orient: 'vertical',
+          right: "2%",
+          top: "center",
+          orient: "vertical",
           itemGap: 20,
           textStyle: {
-            color: '#fff',
-            fontSize: 12
+            color: "#fff",
+            fontSize: 12,
           },
-          show: false
+          show: false,
         },
         graphic: {
           elements: [
             {
-              type: 'circle',
+              type: "circle",
               shape: {
-                cx: '50%',
-                cy: '50%',
-                r: '35%'
+                cx: "50%",
+                cy: "50%",
+                r: "35%",
               },
               style: {
-                fill: 'transparent',
+                fill: "transparent",
                 shadowBlur: 20,
-                shadowColor: 'rgba(0, 191, 255, 0.4)',
-                opacity: 0.6
+                shadowColor: "rgba(0, 191, 255, 0.4)",
+                opacity: 0.6,
               },
-              z: -1
-            }
-          ]
+              z: -1,
+            },
+          ],
         },
         animation: true,
         tooltip: {
           formatter: (params) => {
             if (
-              params.seriesName !== 'mouseoutSeries' &&
-              params.seriesName !== 'pie2d'
+              params.seriesName !== "mouseoutSeries" &&
+              params.seriesName !== "pie2d"
             ) {
-              const series = option.series[params.seriesIndex]
+              const series = option.series[params.seriesIndex];
               if (series && series.pieData) {
-                return `${params.seriesName}<br/><span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color};"></span>${series.pieData.value}`
+                return `${params.seriesName}<br/><span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color};"></span>${series.pieData.value}`;
               }
             }
           },
           textStyle: {
-            fontSize: 12
-          }
+            fontSize: 12,
+          },
         },
         title: {
-          x: 'center',
-          top: '20',
+          x: "center",
+          top: "20",
           textStyle: {
-            color: '#fff',
-            fontSize: 12
-          }
+            color: "#fff",
+            fontSize: 12,
+          },
         },
-        backgroundColor: 'transparent',
+        backgroundColor: "transparent",
         labelLine: {
           show: false,
           lineStyle: {
-            color: 'transparent'
-          }
+            color: "transparent",
+          },
         },
         label: {
           show: false,
-          color: 'transparent',
-          position: 'outside',
-          formatter: '{b} \n{c} {d}%'
+          color: "transparent",
+          position: "outside",
+          formatter: "{b} \n{c} {d}%",
         },
         xAxis3D: {
           min: -1,
-          max: 1
+          max: 1,
         },
         yAxis3D: {
           min: -1,
-          max: 1
+          max: 1,
         },
         zAxis3D: {
           min: -1,
-          max: 1
+          max: 1,
         },
         grid3D: {
           show: false,
           boxHeight: 2,
-          bottom: '-10%',
-          left: '-15%',
+          bottom: "-10%",
+          left: "-15%",
           viewControl: {
             alpha: 18,
             beta: 50,
@@ -1694,32 +1680,32 @@
             autoRotate: true,
             rotateSensitivity: 0,
             zoomSensitivity: 0,
-            panSensitivity: 0
-          }
+            panSensitivity: 0,
+          },
         },
-        series: series
-      }
+        series: series,
+      };
 
-      this._pie.clear()
-      this._pie.setOption(option)
+      this._pie.clear();
+      this._pie.setOption(option);
 
       // 鼠标事件交互
-      let selectedIndex = ''
-      let hoveredIndex = ''
+      let selectedIndex = "";
+      let hoveredIndex = "";
 
-      this._pie.on('click', (params) => {
-        if (params.seriesName === 'mouseoutSeries') return
-        const s = option.series[params.seriesIndex]
-        if (!s || !s.pieData || !s.pieStatus) return
+      this._pie.on("click", (params) => {
+        if (params.seriesName === "mouseoutSeries") return;
+        const s = option.series[params.seriesIndex];
+        if (!s || !s.pieData || !s.pieStatus) return;
 
-        const isSelected = !s.pieStatus.selected
-        const isHovered = s.pieStatus.hovered
-        const k = s.pieStatus.k
-        const startRatio = s.pieData.startRatio
-        const endRatio = s.pieData.endRatio
+        const isSelected = !s.pieStatus.selected;
+        const isHovered = s.pieStatus.hovered;
+        const k = s.pieStatus.k;
+        const startRatio = s.pieData.startRatio;
+        const endRatio = s.pieData.endRatio;
 
-        if (selectedIndex !== '' && selectedIndex !== params.seriesIndex) {
-          const prev = option.series[selectedIndex]
+        if (selectedIndex !== "" && selectedIndex !== params.seriesIndex) {
+          const prev = option.series[selectedIndex];
           if (prev && prev.pieData && prev.pieStatus) {
             prev.parametricEquation = this.getParametricEquation(
               prev.pieData.startRatio,
@@ -1728,8 +1714,8 @@
               false,
               k,
               prev.pieData.value
-            )
-            prev.pieStatus.selected = false
+            );
+            prev.pieStatus.selected = false;
           }
         }
 
@@ -1740,21 +1726,21 @@
           isHovered,
           k,
           s.pieData.value
-        )
-        s.pieStatus.selected = isSelected
-        if (isSelected) selectedIndex = params.seriesIndex
+        );
+        s.pieStatus.selected = isSelected;
+        if (isSelected) selectedIndex = params.seriesIndex;
 
-        this._pie.setOption(option)
-      })
+        this._pie.setOption(option);
+      });
 
-      this._pie.on('mouseover', (params) => {
-        if (hoveredIndex === params.seriesIndex) return
+      this._pie.on("mouseover", (params) => {
+        if (hoveredIndex === params.seriesIndex) return;
 
         // 取消之前的高亮
-        if (hoveredIndex !== '') {
-          let prev = option.series[hoveredIndex]
+        if (hoveredIndex !== "") {
+          let prev = option.series[hoveredIndex];
           if (prev && prev.pieData && prev.pieStatus) {
-            const k = prev.pieStatus.k
+            const k = prev.pieStatus.k;
             prev.parametricEquation = this.getParametricEquation(
               prev.pieData.startRatio,
               prev.pieData.endRatio,
@@ -1762,17 +1748,17 @@
               false,
               k,
               prev.pieData.value
-            )
-            prev.pieStatus.hovered = false
-            hoveredIndex = ''
+            );
+            prev.pieStatus.hovered = false;
+            hoveredIndex = "";
           }
         }
 
         // 当前高亮(排除透明圆环)
-        if (params.seriesName !== 'mouseoutSeries') {
-          let cur = option.series[params.seriesIndex]
+        if (params.seriesName !== "mouseoutSeries") {
+          let cur = option.series[params.seriesIndex];
           if (cur && cur.pieData && cur.pieStatus) {
-            const k = cur.pieStatus.k
+            const k = cur.pieStatus.k;
             cur.parametricEquation = this.getParametricEquation(
               cur.pieData.startRatio,
               cur.pieData.endRatio,
@@ -1780,20 +1766,20 @@
               true,
               k,
               cur.pieData.value
-            )
-            cur.pieStatus.hovered = true
-            hoveredIndex = params.seriesIndex
+            );
+            cur.pieStatus.hovered = true;
+            hoveredIndex = params.seriesIndex;
           }
         }
 
-        this._pie.setOption(option)
-      })
+        this._pie.setOption(option);
+      });
 
-      this._pie.on('globalout', () => {
-        if (hoveredIndex !== '') {
-          let prev = option.series[hoveredIndex]
+      this._pie.on("globalout", () => {
+        if (hoveredIndex !== "") {
+          let prev = option.series[hoveredIndex];
           if (prev && prev.pieData && prev.pieStatus) {
-            const k = prev.pieStatus.k
+            const k = prev.pieStatus.k;
             prev.parametricEquation = this.getParametricEquation(
               prev.pieData.startRatio,
               prev.pieData.endRatio,
@@ -1801,23 +1787,23 @@
               false,
               k,
               prev.pieData.value
-            )
-            prev.pieStatus.hovered = false
-            hoveredIndex = ''
-            this._pie.setOption(option)
+            );
+            prev.pieStatus.hovered = false;
+            hoveredIndex = "";
+            this._pie.setOption(option);
           }
         }
-      })
+      });
     },
     // 生成随机颜色
-    generateRandomColor () {
-      const h = Math.floor(Math.random() * 360)
-      const s = Math.floor(Math.random() * 30) + 60 // 60-90%
-      const l = Math.floor(Math.random() * 20) + 50 // 50-70%
-      return `hsl(${h}, ${s}%, ${l}%)`
+    generateRandomColor() {
+      const h = Math.floor(Math.random() * 360);
+      const s = Math.floor(Math.random() * 30) + 60; // 60-90%
+      const l = Math.floor(Math.random() * 20) + 50; // 50-70%
+      return `hsl(${h}, ${s}%, ${l}%)`;
     },
     // 生成扇形的曲面参数方程
-    getParametricEquation (
+    getParametricEquation(
       startRatio,
       endRatio,
       isSelected,
@@ -1826,135 +1812,135 @@
       height
     ) {
       // 计算
-      let midRatio = (startRatio + endRatio) / 2
+      let midRatio = (startRatio + endRatio) / 2;
 
-      let startRadian = startRatio * Math.PI * 2
-      let endRadian = endRatio * Math.PI * 2
-      let midRadian = midRatio * Math.PI * 2
+      let startRadian = startRatio * Math.PI * 2;
+      let endRadian = endRatio * Math.PI * 2;
+      let midRadian = midRatio * Math.PI * 2;
 
       // 如果只有一个扇形,则不实现选中效果。
       if (startRatio === 0 && endRatio === 1) {
-        isSelected = false
+        isSelected = false;
       }
 
       // 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
-      k = typeof k !== 'undefined' ? k : 1 / 3
+      k = typeof k !== "undefined" ? k : 1 / 3;
 
       // 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
-      let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0
-      let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0
+      let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
+      let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
 
       // 计算高亮效果的放大比例(未高亮,则比例为 1)
-      let hoverRate = isHovered ? 1.05 : 1
+      let hoverRate = isHovered ? 1.05 : 1;
 
       // 返回曲面参数方程
       return {
         u: {
           min: -Math.PI,
           max: Math.PI * 3,
-          step: Math.PI / 32
+          step: Math.PI / 32,
         },
         v: {
           min: 0,
           max: Math.PI * 2,
-          step: Math.PI / 20
+          step: Math.PI / 20,
         },
         x: function (u, v) {
           if (u < startRadian) {
             return (
               offsetX +
               Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate
-            )
+            );
           }
           if (u > endRadian) {
             return (
               offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate
-            )
+            );
           }
-          return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate
+          return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate;
         },
         y: function (u, v) {
           if (u < startRadian) {
             return (
               offsetY +
               Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate
-            )
+            );
           }
           if (u > endRadian) {
             return (
               offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate
-            )
+            );
           }
-          return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate
+          return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate;
         },
         z: function (u, v) {
           if (u < -Math.PI * 0.5) {
-            return Math.sin(u)
+            return Math.sin(u);
           }
           if (u > Math.PI * 2.5) {
-            return Math.sin(u)
+            return Math.sin(u);
           }
-          return Math.sin(v) > 0 ? 0.6 * height : -0.6
-        }
-      }
+          return Math.sin(v) > 0 ? 0.6 * height : -0.6;
+        },
+      };
     },
 
     // 生成模拟 3D 饼图的配置项
-    getPie3D (pieData, internalDiameterRatio) {
-      let series = []
-      let sumValue = 0
-      let startValue = 0
-      let endValue = 0
-      let legendData = []
+    getPie3D(pieData, internalDiameterRatio) {
+      let series = [];
+      let sumValue = 0;
+      let startValue = 0;
+      let endValue = 0;
+      let legendData = [];
       let k =
-        typeof internalDiameterRatio !== 'undefined'
+        typeof internalDiameterRatio !== "undefined"
           ? (1 - internalDiameterRatio) / (1 + internalDiameterRatio)
-          : 1 / 3
+          : 1 / 3;
 
       // 为每一个饼图数据,生成一个 series-surface 配置
       for (let i = 0; i < pieData.length; i++) {
-        sumValue += pieData[i].value
+        sumValue += pieData[i].value;
 
         let seriesItem = {
           name:
-            typeof pieData[i].name === 'undefined'
+            typeof pieData[i].name === "undefined"
               ? `series${i}`
               : pieData[i].name,
-          type: 'surface',
+          type: "surface",
           parametric: true,
           wireframe: {
-            show: false
+            show: false,
           },
           pieData: pieData[i],
           pieStatus: {
             selected: false,
             hovered: false,
-            k: k
-          }
-        }
+            k: k,
+          },
+        };
 
-        if (typeof pieData[i].itemStyle !== 'undefined') {
-          let itemStyle = {}
+        if (typeof pieData[i].itemStyle !== "undefined") {
+          let itemStyle = {};
 
-          typeof pieData[i].itemStyle.color !== 'undefined'
+          typeof pieData[i].itemStyle.color !== "undefined"
             ? (itemStyle.color = pieData[i].itemStyle.color)
-            : null
-          typeof pieData[i].itemStyle.opacity !== 'undefined'
+            : null;
+          typeof pieData[i].itemStyle.opacity !== "undefined"
             ? (itemStyle.opacity = pieData[i].itemStyle.opacity)
-            : null
+            : null;
 
-          seriesItem.itemStyle = itemStyle
+          seriesItem.itemStyle = itemStyle;
         }
-        series.push(seriesItem)
+        series.push(seriesItem);
       }
 
       // 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
       // 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
       for (let i = 0; i < series.length; i++) {
-        endValue = startValue + series[i].pieData.value
+        endValue = startValue + series[i].pieData.value;
 
-        series[i].pieData.startRatio = startValue / sumValue
-        series[i].pieData.endRatio = endValue / sumValue
+        series[i].pieData.startRatio = startValue / sumValue;
+        series[i].pieData.endRatio = endValue / sumValue;
         series[i].parametricEquation = this.getParametricEquation(
           series[i].pieData.startRatio,
           series[i].pieData.endRatio,
@@ -1962,11 +1948,11 @@
           false,
           k,
           series[i].pieData.value
-        )
+        );
 
-        startValue = endValue
+        startValue = endValue;
 
-        legendData.push(series[i].name)
+        legendData.push(series[i].name);
       }
       // series.push({
       //   name: 'mouseoutSeries',
@@ -2001,343 +1987,343 @@
       //     },
       //   },
       // });
-      return series
+      return series;
     },
     // 风险等级转换为数值 (A->3, B->2, C->1)
-    levelToValue (level) {
-      if (!level) return null
-      const levelStr = String(level).toUpperCase().trim()
+    levelToValue(level) {
+      if (!level) return null;
+      const levelStr = String(level).toUpperCase().trim();
 
       // 处理 A、B、C 或 A类、B类、C类
-      if (levelStr === 'A' || levelStr === 'A类') return 3
-      if (levelStr === 'B' || levelStr === 'B类') return 2
-      if (levelStr === 'C' || levelStr === 'C类') return 1
+      if (levelStr === "A" || levelStr === "A类") return 3;
+      if (levelStr === "B" || levelStr === "B类") return 2;
+      if (levelStr === "C" || levelStr === "C类") return 1;
 
-      return null
+      return null;
     },
     // 数值转换为风险等级显示 (3->A类, 2->B类, 1->C类)
-    valueToLevel (value) {
-      if (value === 3) return 'A类'
-      if (value === 2) return 'B类'
-      if (value === 1) return 'C类'
-      return ''
+    valueToLevel(value) {
+      if (value === 3) return "A类";
+      if (value === 2) return "B类";
+      if (value === 1) return "C类";
+      return "";
     },
     // 获取项目风险趋势数据
-    async getProjectRiskTrend () {
+    async getProjectRiskTrend() {
       if (!this.dateRange || this.dateRange.length !== 2) {
-        return
+        return;
       }
 
       const params = {
         projectId: this.projectId,
-        startTime: moment(this.dateRange[0]).format('YYYY-MM'),
-        endTime: moment(this.dateRange[1]).format('YYYY-MM')
-      }
+        startTime: moment(this.dateRange[0]).format("YYYY-MM"),
+        endTime: moment(this.dateRange[1]).format("YYYY-MM"),
+      };
 
       try {
-        const res = await getProjectDangerousTrend(params)
+        const res = await getProjectDangerousTrend(params);
 
         if (res && Array.isArray(res)) {
           // 处理接口返回的数据
-          this.riskTrendData.xAxisData = res.map((item) => item.time || '')
+          this.riskTrendData.xAxisData = res.map((item) => item.time || "");
           // 将A、B、C转换为数值 3、2、1
           this.riskTrendData.seriesData = res.map((item) => {
-            const value = this.levelToValue(item.level)
+            const value = this.levelToValue(item.level);
 
-            return value
-          })
-          this.riskTrendData.statusData = res.map((item) => item.status)
+            return value;
+          });
+          this.riskTrendData.statusData = res.map((item) => item.status);
 
           // 更新图表
-          this.updateRiskChart()
+          this.updateRiskChart();
         }
       } catch (error) {
-        console.error('获取项目风险趋势失败:', error)
+        console.error("获取项目风险趋势失败:", error);
         // 设置默认值,确保图表可以正常显示
-        this.riskTrendData.xAxisData = []
-        this.riskTrendData.seriesData = []
-        this.riskTrendData.statusData = []
+        this.riskTrendData.xAxisData = [];
+        this.riskTrendData.seriesData = [];
+        this.riskTrendData.statusData = [];
       }
     },
     // 更新风险趋势图表
-    updateRiskChart () {
-      const chartDom = document.getElementById('riskTrendChart')
+    updateRiskChart() {
+      const chartDom = document.getElementById("riskTrendChart");
       if (!chartDom) {
-        console.warn('风险趋势图表DOM不存在,可能是权限限制导致该模块未渲染')
-        return
+        console.warn("风险趋势图表DOM不存在,可能是权限限制导致该模块未渲染");
+        return;
       }
-      const riskChart = echarts.getInstanceByDom(chartDom)
+      const riskChart = echarts.getInstanceByDom(chartDom);
       if (!riskChart) {
-        console.warn('风险趋势图表实例不存在')
-        return
+        console.warn("风险趋势图表实例不存在");
+        return;
       }
 
       // 文本换行处理函数
       const formatLabel = (text, maxWidth = 4) => {
-        if (!text) return ''
-        const textStr = String(text)
+        if (!text) return "";
+        const textStr = String(text);
         // 如果文本长度超过最大宽度,进行换行
         if (textStr.length > maxWidth) {
-          let result = ''
+          let result = "";
           for (let i = 0; i < textStr.length; i += maxWidth) {
-            result += textStr.substring(i, i + maxWidth) + '\n'
+            result += textStr.substring(i, i + maxWidth) + "\n";
           }
-          return result.trim()
+          return result.trim();
         }
-        return textStr
-      }
+        return textStr;
+      };
 
-      const self = this
+      const self = this;
 
       const option = {
         tooltip: {
-          trigger: 'axis',
+          trigger: "axis",
           show: true,
-          backgroundColor: 'rgba(0, 0, 0, 0.7)',
-          borderColor: '#32C5FF',
+          backgroundColor: "rgba(0, 0, 0, 0.7)",
+          borderColor: "#32C5FF",
           borderWidth: 1,
           textStyle: {
-            color: '#fff',
-            fontSize: 12
+            color: "#fff",
+            fontSize: 12,
           },
           formatter: function (params) {
             if (params && params.length > 0) {
-              const param = params[0]
-              const levelText = self.valueToLevel(param.value)
-              return `${param.name}<br/>${param.seriesName}: ${levelText}`
+              const param = params[0];
+              const levelText = self.valueToLevel(param.value);
+              return `${param.name}<br/>${param.seriesName}: ${levelText}`;
             }
-            return ''
-          }
+            return "";
+          },
         },
         legend: {
-          show: false
+          show: false,
         },
         grid: {
-          top: '10%',
-          bottom: '10%',
-          left: '10%',
-          right: '5%',
-          containLabel: true
+          top: "10%",
+          bottom: "10%",
+          left: "10%",
+          right: "5%",
+          containLabel: true,
         },
         xAxis: {
           data: this.riskTrendData.xAxisData,
           axisTick: { show: true, alignWithLabel: true },
           axisLine: {
             lineStyle: {
-              color: '#666'
-            }
+              color: "#666",
+            },
           },
           axisLabel: {
             color: (value, index) => {
               const status =
                 Array.isArray(this.riskTrendData.statusData) &&
-                typeof index === 'number'
+                typeof index === "number"
                   ? this.riskTrendData.statusData[index]
-                  : undefined
-              return Number(status) === 2 ? '#999' : '#fff'
+                  : undefined;
+              return Number(status) === 2 ? "#999" : "#fff";
             },
             fontSize: 12,
             interval: 0,
             rotate: 0,
             formatter: function (value) {
-              return formatLabel(value, 7)
+              return formatLabel(value, 7);
             },
-            align: 'center',
-            verticalAlign: 'top',
+            align: "center",
+            verticalAlign: "top",
             lineHeight: 14,
             width: 60,
-            overflow: 'break'
-          }
+            overflow: "break",
+          },
         },
         yAxis: {
-          type: 'value',
+          type: "value",
           min: 1,
           max: 3,
           interval: 1,
           splitLine: {
             show: true,
             lineStyle: {
-              type: 'dashed',
-              color: 'rgba(255, 255, 255, .2)'
-            }
+              type: "dashed",
+              color: "rgba(255, 255, 255, .2)",
+            },
           },
           axisLine: {
-            show: false
+            show: false,
           },
           axisTick: {
-            show: false
+            show: false,
           },
           axisLabel: {
-            color: '#fff',
+            color: "#fff",
             fontSize: 12,
             formatter: function (value) {
               // Y轴自定义显示:1->C类, 2->B类, 3->A类
-              if (value === 1) return 'C类'
-              if (value === 2) return 'B类'
-              if (value === 3) return 'A类'
-              return ''
+              if (value === 1) return "C类";
+              if (value === 2) return "B类";
+              if (value === 3) return "A类";
+              return "";
             },
-            align: 'right',
-            verticalAlign: 'middle',
+            align: "right",
+            verticalAlign: "middle",
             lineHeight: 14,
-            width: 30
-          }
+            width: 30,
+          },
         },
         series: [
           {
-            name: '风险等级',
-            type: 'line',
+            name: "风险等级",
+            type: "line",
             data: this.riskTrendData.seriesData,
             smooth: false,
             showSymbol: true,
-            symbol: 'circle',
+            symbol: "circle",
             symbolSize: 8,
             itemStyle: {
-              color: '#32C5FF',
-              borderColor: '#32C5FF',
-              borderWidth: 2
+              color: "#32C5FF",
+              borderColor: "#32C5FF",
+              borderWidth: 2,
             },
             lineStyle: {
               width: 5,
               color: {
-                type: 'linear',
+                type: "linear",
                 x: 0,
                 y: 0,
                 x2: 1,
                 y2: 0,
                 colorStops: [
-                  { offset: 0, color: 'rgba(36, 81, 242, 1)' },
-                  { offset: 0.5, color: 'rgba(11, 204, 254, 1)' },
-                  { offset: 1, color: 'rgba(199, 160, 254, 1)' }
-                ]
-              }
-            }
-          }
-        ]
-      }
+                  { offset: 0, color: "rgba(36, 81, 242, 1)" },
+                  { offset: 0.5, color: "rgba(11, 204, 254, 1)" },
+                  { offset: 1, color: "rgba(199, 160, 254, 1)" },
+                ],
+              },
+            },
+          },
+        ],
+      };
 
-      riskChart.setOption(option)
+      riskChart.setOption(option);
     },
     // 初始化折线图
-    initRiskChart () {
-      const chartDom = document.getElementById('riskTrendChart')
+    initRiskChart() {
+      const chartDom = document.getElementById("riskTrendChart");
       if (!chartDom) {
-        console.warn('风险趋势图表DOM不存在,可能是权限限制导致该模块未渲染')
-        return
+        console.warn("风险趋势图表DOM不存在,可能是权限限制导致该模块未渲染");
+        return;
       }
-      const riskChart = echarts.init(chartDom)
+      const riskChart = echarts.init(chartDom);
 
       // 文本换行处理函数
       const formatLabel = (text, maxWidth = 4) => {
-        if (!text) return ''
-        const textStr = String(text)
+        if (!text) return "";
+        const textStr = String(text);
         // 如果文本长度超过最大宽度,进行换行
         if (textStr.length > maxWidth) {
-          let result = ''
+          let result = "";
           for (let i = 0; i < textStr.length; i += maxWidth) {
-            result += textStr.substring(i, i + maxWidth) + '\n'
+            result += textStr.substring(i, i + maxWidth) + "\n";
           }
-          return result.trim()
+          return result.trim();
         }
-        return textStr
-      }
+        return textStr;
+      };
       let option = {
         tooltip: {
-          trigger: 'axis',
-          show: false
+          trigger: "axis",
+          show: false,
         },
         legend: {
-          show: false
+          show: false,
         },
         grid: {
-          top: '5%',
-          bottom: '5%',
-          left: '5%',
-          right: '5%',
-          containLabel: true
+          top: "5%",
+          bottom: "5%",
+          left: "5%",
+          right: "5%",
+          containLabel: true,
         },
         xAxis: {
           data:
             this.riskTrendData.xAxisData.length > 0
               ? this.riskTrendData.xAxisData
               : [
-                '2025年1月检查',
-                '2025年2月检查',
-                '2025年3月检查',
-                '2025年4月检查',
-                '2025年5月检查'
-              ],
+                  "2025年1月检查",
+                  "2025年2月检查",
+                  "2025年3月检查",
+                  "2025年4月检查",
+                  "2025年5月检查",
+                ],
           axisTick: { show: true, alignWithLabel: true },
           axisLine: {
             lineStyle: {
-              color: '#666'
-            }
+              color: "#666",
+            },
           },
           axisLabel: {
             color: (value, index) => {
               const status =
                 Array.isArray(this.riskTrendData.statusData) &&
-                typeof index === 'number'
+                typeof index === "number"
                   ? this.riskTrendData.statusData[index]
-                  : undefined
-              return Number(status) === 2 ? '#999' : '#fff'
+                  : undefined;
+              return Number(status) === 2 ? "#999" : "#fff";
             },
             fontSize: 12,
             interval: 0, // 强制显示所有标签
             rotate: 0, // 不旋转
             formatter: function (value) {
               // X轴标签格式化,最多7个字符,超出换行
-              return formatLabel(value, 7)
+              return formatLabel(value, 7);
             },
             // 文本对齐方式
-            align: 'center',
-            verticalAlign: 'top',
+            align: "center",
+            verticalAlign: "top",
             lineHeight: 14,
             // 设置标签的最大宽度
             width: 60,
-            overflow: 'break' // 超出换行
-          }
+            overflow: "break", // 超出换行
+          },
         },
         yAxis: {
-          type: 'value',
+          type: "value",
           min: 1,
           max: 3,
           interval: 1,
           splitLine: {
             show: true,
             lineStyle: {
-              type: 'dashed', // 虚线
-              color: 'rgba(255, 255, 255, .2)' // 固定灰色
-            }
+              type: "dashed", // 虚线
+              color: "rgba(255, 255, 255, .2)", // 固定灰色
+            },
           },
           axisLine: {
-            show: false
+            show: false,
           },
           axisTick: {
-            show: false
+            show: false,
           },
           axisLabel: {
-            color: '#fff',
+            color: "#fff",
             fontSize: 12,
             formatter: function (value) {
               // Y轴自定义显示:1->C类, 2->B类, 3->A类
-              if (value === 1) return 'C类'
-              if (value === 2) return 'B类'
-              if (value === 3) return 'A类'
-              return ''
+              if (value === 1) return "C类";
+              if (value === 2) return "B类";
+              if (value === 3) return "A类";
+              return "";
             },
             // 文本对齐方式
-            align: 'right',
-            verticalAlign: 'middle',
+            align: "right",
+            verticalAlign: "middle",
             lineHeight: 14,
             // 设置标签的最大宽度
-            width: 30
-          }
+            width: 30,
+          },
         },
         series: [
           {
-            name: '风险等级',
-            type: 'line',
+            name: "风险等级",
+            type: "line",
             data:
               this.riskTrendData.seriesData.length > 0
                 ? this.riskTrendData.seriesData
@@ -2347,35 +2333,35 @@
             lineStyle: {
               width: 5, // 线条宽度
               color: {
-                type: 'linear',
+                type: "linear",
                 x: 0,
                 y: 0,
                 x2: 1,
                 y2: 0,
                 colorStops: [
-                  { offset: 0, color: 'rgba(36, 81, 242, 1)' }, // 起始颜色
-                  { offset: 0.5, color: 'rgba(11, 204, 254, 1)' }, // 中间颜色
-                  { offset: 1, color: 'rgba(199, 160, 254, 1)' } // 结束颜色
-                ]
-              }
-            }
-          }
-        ]
-      }
-      riskChart.setOption(option)
+                  { offset: 0, color: "rgba(36, 81, 242, 1)" }, // 起始颜色
+                  { offset: 0.5, color: "rgba(11, 204, 254, 1)" }, // 中间颜色
+                  { offset: 1, color: "rgba(199, 160, 254, 1)" }, // 结束颜色
+                ],
+              },
+            },
+          },
+        ],
+      };
+      riskChart.setOption(option);
     },
     // 处理风险趋势时间选择器点击
-    handleRiskPickerClick () {
-      this.$refs.riskDatePicker.focus()
+    handleRiskPickerClick() {
+      this.$refs.riskDatePicker.focus();
     },
-    toRiskTrend () {
+    toRiskTrend() {
       this.$router.push({
-        path: '/subentry',
-        query: { projectId: this.projectId, projectName: this.projectName }
-      })
-    }
-  }
-}
+        path: "/subentry",
+        query: { projectId: this.projectId, projectName: this.projectName },
+      });
+    },
+  },
+};
 </script>
 
 <style lang="less" scoped>
@@ -2875,7 +2861,6 @@
       }
 
       .mid-img {
-
         width: 90px;
         height: 90px;
         margin-right: 20px;
diff --git a/screen/src/view/projectProgress/index.vue b/screen/src/view/projectProgress/index.vue
index db18be8..1eb8642 100644
--- a/screen/src/view/projectProgress/index.vue
+++ b/screen/src/view/projectProgress/index.vue
@@ -472,7 +472,7 @@
             url = id
           } else {
             // 否则拼接为下载URL
-            url = `${this.VUE_APP_BASE_URL}/project/download/${id}`
+            url = `${this.VUE_APP_BASE_URL}/public/file/download/${id}`
           }
 
           // 先尝试从扩展名判断
diff --git a/screen/src/view/workList/detail.vue b/screen/src/view/workList/detail.vue
index da51ee7..94a52b3 100644
--- a/screen/src/view/workList/detail.vue
+++ b/screen/src/view/workList/detail.vue
@@ -53,7 +53,7 @@
   data () {
     return {
       detailData: {},
-      VUE_APP_IMAGE_BASE_URL: process.env.VUE_APP_IMAGE_BASE_URL + '/project/download/'
+      VUE_APP_IMAGE_BASE_URL: process.env.VUE_APP_IMAGE_BASE_URL + '/public/file/download/'
     }
   },
   computed: {},
diff --git a/screen/src/view/workList/index.vue b/screen/src/view/workList/index.vue
index 526f294..c08689e 100644
--- a/screen/src/view/workList/index.vue
+++ b/screen/src/view/workList/index.vue
@@ -306,7 +306,7 @@
           <div class="SHSR fs--16 lh--16 mb--17 color1">工作图片:</div>
           <div class="">
             <el-upload
-              :action="VUE_APP_BASE_URL + '/work-presentation/upload'"
+              :action="VUE_APP_IMAGE_BASE_URL + '/public/file/upload'"
               :headers="uploadHeaders"
               :before-upload="beforeUpload"
               :limit="5"
@@ -357,7 +357,7 @@
   props: {},
   data () {
     return {
-      VUE_APP_BASE_URL: process.env.VUE_APP_BASE_URL,
+      VUE_APP_IMAGE_BASE_URL: process.env.VUE_APP_IMAGE_BASE_URL,
       uploadHeaders: {
         Authorization: sessionStorage.getItem('token')
       },
@@ -435,7 +435,7 @@
 
     openImgDialog (img) {
       this.imgArr = img.split(',').map((item) => {
-        return process.env.VUE_APP_IMAGE_BASE_URL + '/project/download/' + item
+        return process.env.VUE_APP_IMAGE_BASE_URL + '/public/file/download/' + item
       })
       this.previewVisible = true
     },
@@ -495,12 +495,13 @@
     },
 
     handleSuccess (response, file, fileList) {
-      if (response.code == 200) {
+      console.log(response)
+      if (response) {
         this.fileList.push({
           url:
             process.env.VUE_APP_IMAGE_BASE_URL +
-            '/project/download/' +
-            response.data.split('.')[0]
+            '/public/file/download/' +
+            response.data.name.split('.')[0]
         })
         this.$message.success('上传成功')
       } else {
@@ -523,7 +524,7 @@
       this.formData = { ...row }
       this.fileList = row.img.split(',').map((item) => {
         return {
-          url: process.env.VUE_APP_IMAGE_BASE_URL + '/project/download/' + item
+          url: process.env.VUE_APP_IMAGE_BASE_URL + '/public/file/download/' + item
         }
       })
       this.formVisible = true

--
Gitblit v1.7.1