From dd95eaa2cabb746eede2962f22af258ee0a18cdf Mon Sep 17 00:00:00 2001
From: 董国庆 <364620639@qq.com>
Date: 星期三, 01 四月 2026 15:29:31 +0800
Subject: [PATCH] feat(header): 增强首页导航逻辑并存储clientId

---
 screen/src/view/projectHome/index.vue |    1 
 screen/src/view/home/index.vue        | 1036 ++++++++++++++++++++++++----------------------
 screen/src/view/header/index.vue      |  243 +++++++----
 3 files changed, 687 insertions(+), 593 deletions(-)

diff --git a/screen/src/view/header/index.vue b/screen/src/view/header/index.vue
index 820e4ff..7ceb043 100644
--- a/screen/src/view/header/index.vue
+++ b/screen/src/view/header/index.vue
@@ -1,11 +1,18 @@
 <template>
-  <div class="txt-center h--85 w100 relative imgBg fixed z-10" style="display: flex;justify-content: center;align-items: center;">
+  <div
+    class="txt-center h--85 w100 relative imgBg fixed z-10"
+    style="display: flex; justify-content: center; align-items: center"
+  >
     <div
       @click="toHome"
       class="flex a-center c-fff absolute adress1 cursor-pointer"
     >
       <img
-        :src="clientLogo && clientLogo!='null' ? (VUE_APP_IMAGE_BASE_URL + '/project/download/' + clientLogo) : require('../../assets/img/logo.png')"
+        :src="
+          clientLogo && clientLogo != 'null'
+            ? VUE_APP_IMAGE_BASE_URL + '/project/download/' + clientLogo
+            : require('../../assets/img/logo.png')
+        "
         class="w--30 h--30 shrink0 mr--10"
       />
       <div class="color2 lh--30 fs--30 SHSBold">
@@ -16,8 +23,18 @@
       ref="titleEl"
       class="fs--43 lh--43 color3 SHSBold letter--6"
       :style="[
-        { width: '660px', textAlign: 'center', whiteSpace: titleWhiteSpace, display: 'inline-block' },
-        { fontSize: titleFontSize + 'px', transform: 'scale(' + titleScale + ')', transformOrigin: 'center top', letterSpacing: titleLetterSpacing }
+        {
+          width: '660px',
+          textAlign: 'center',
+          whiteSpace: titleWhiteSpace,
+          display: 'inline-block',
+        },
+        {
+          fontSize: titleFontSize + 'px',
+          transform: 'scale(' + titleScale + ')',
+          transformOrigin: 'center top',
+          letterSpacing: titleLetterSpacing,
+        },
       ]"
     >
       {{ title || "智慧工程安全监管平台" }}
@@ -35,14 +52,30 @@
 
     <!-- 退出登录确认弹窗 -->
     <transition name="fade">
-      <div v-if="showLogoutDialog" class="logout-mask" @click.self="showLogoutDialog = false">
+      <div
+        v-if="showLogoutDialog"
+        class="logout-mask"
+        @click.self="showLogoutDialog = false"
+      >
         <div class="logout-dialog">
           <div class="dialog-title">退出登录</div>
           <div class="dialog-content">
             <div class="dialog-icon">
               <svg width="60" height="60" viewBox="0 0 60 60" fill="none">
-                <circle cx="30" cy="30" r="28" stroke="#09B9FF" stroke-width="2" opacity="0.3"/>
-                <path d="M30 20V32M30 38V40" stroke="#09B9FF" stroke-width="3" stroke-linecap="round"/>
+                <circle
+                  cx="30"
+                  cy="30"
+                  r="28"
+                  stroke="#09B9FF"
+                  stroke-width="2"
+                  opacity="0.3"
+                />
+                <path
+                  d="M30 20V32M30 38V40"
+                  stroke="#09B9FF"
+                  stroke-width="3"
+                  stroke-linecap="round"
+                />
               </svg>
             </div>
             <div class="dialog-text">确定要退出登录吗?</div>
@@ -62,139 +95,169 @@
   props: {
     title: {
       type: String,
-      default: ''
+      default: "",
     },
     name: {
       type: String,
-      default: ''
+      default: "",
     },
     logo: {
       type: String,
-      default: ''
-    }
+      default: "",
+    },
   },
-  data () {
+  data() {
     return {
-      currentDate: '',
-      clientName: sessionStorage.getItem('clientName'),
-      clientLogo: sessionStorage.getItem('clientLogo'),
+      currentDate: "",
+      clientName: sessionStorage.getItem("clientName"),
+      clientLogo: sessionStorage.getItem("clientLogo"),
       VUE_APP_IMAGE_BASE_URL: process.env.VUE_APP_IMAGE_BASE_URL,
       showLogoutDialog: false,
       titleFontSize: 43,
       titleScale: 1,
-      titleWhiteSpace: 'normal',
-      titleLetterSpacing: null
-    }
+      titleWhiteSpace: "normal",
+      titleLetterSpacing: null,
+    };
   },
-  mounted () {
-    this.updateDateTime()
-    console.log('clientLogo', this.clientLogo)
-    this.timer = setInterval(this.updateDateTime, 1000)
+  mounted() {
+    this.updateDateTime();
+    console.log("clientLogo", this.clientLogo);
+    this.timer = setInterval(this.updateDateTime, 1000);
     this.$nextTick(() => {
-      this.adjustTitleFontSize()
-      window.addEventListener('resize', this.adjustTitleFontSize)
-    })
+      this.adjustTitleFontSize();
+      window.addEventListener("resize", this.adjustTitleFontSize);
+    });
   },
-  beforeDestroy () {
+  beforeDestroy() {
     if (this.timer) {
-      clearInterval(this.timer)
+      clearInterval(this.timer);
     }
-    window.removeEventListener('resize', this.adjustTitleFontSize)
+    window.removeEventListener("resize", this.adjustTitleFontSize);
   },
   watch: {
-    title () {
-      this.$nextTick(this.adjustTitleFontSize)
+    title() {
+      this.$nextTick(this.adjustTitleFontSize);
     },
-    name () {
-      this.clientName = this.name
+    name() {
+      this.clientName = this.name;
     },
-    logo () {
-      this.clientLogo = this.logo
-    }
+    logo() {
+      this.clientLogo = this.logo;
+    },
   },
   methods: {
-    adjustTitleFontSize () {
-      const el = this.$refs.titleEl
-      if (!el) return
+    adjustTitleFontSize() {
+      const el = this.$refs.titleEl;
+      if (!el) return;
 
       // Reset styles to start measurement
-      this.titleWhiteSpace = 'nowrap'
-      this.titleScale = 1
-      this.titleLetterSpacing = null
+      this.titleWhiteSpace = "nowrap";
+      this.titleScale = 1;
+      this.titleLetterSpacing = null;
 
-      const maxSize = 43
-      const minSize = 20
-      let size = maxSize
-      el.style.fontSize = size + 'px'
-      const limit = el.clientWidth
-      let guard = 0
+      const maxSize = 43;
+      const minSize = 20;
+      let size = maxSize;
+      el.style.fontSize = size + "px";
+      const limit = el.clientWidth;
+      let guard = 0;
 
       // Reduce font size until it fits or hits the minimum
       while (el.scrollWidth > limit && size > minSize && guard < 50) {
-        size -= 1
-        el.style.fontSize = size + 'px'
-        guard++
+        size -= 1;
+        el.style.fontSize = size + "px";
+        guard++;
       }
-      this.titleFontSize = size
+      this.titleFontSize = size;
 
       // If it still overflows at min font size, allow wrapping
       if (el.scrollWidth > limit) {
-        this.titleWhiteSpace = 'normal'
+        this.titleWhiteSpace = "normal";
       }
     },
-    toHome () {
-      let userType = null
+    toHome() {
+      let userType = null;
       try {
-        const userInfoStr = sessionStorage.getItem('userInfo')
-        const userInfo = userInfoStr ? JSON.parse(userInfoStr) : null
-        userType = Number(userInfo && userInfo.type)
+        const userInfoStr = sessionStorage.getItem("userInfo");
+        const userInfo = userInfoStr ? JSON.parse(userInfoStr) : null;
+        userType = Number(userInfo && userInfo.type);
       } catch (e) {
-        userType = null
+        userType = null;
       }
       if (userType === 2) {
-        if (this.$route.path === '/projectHome') {
-          return
+        if (this.$route.path === "/projectHome") {
+          return;
         }
         this.$router.replace({
-          path: '/projectHome',
+          path: "/projectHome",
           query: {
             projectId: this.$route.query.projectId,
-            projectName: this.$route.query.projectName
-          }
-        })
+            projectName: this.$route.query.projectName,
+          },
+        });
+        sessionStorage.setItem("projectType", userType);
       } else if (userType === 1) {
-        if (this.$route.path === '/home') {
-          return
+        if (this.$route.path === "/home") {
+          return;
         }
         this.$router.replace({
-          path: '/home'
-        })
+          path: "/home",
+        });
+        sessionStorage.setItem("projectType", userType);
+      } else {
+        // userType = sessionStorage.getItem('projectType')
+        if (sessionStorage.getItem("projectType") == 2) {
+          if (this.$route.path === "/projectHome") {
+            this.$router.replace({
+              path: "/home",
+              query:{
+                clientId: sessionStorage.getItem("clientId"),
+              }
+            });
+            sessionStorage.setItem("projectType", 1);
+          } else {
+            this.$router.replace({
+              path: "/projectHome",
+              query: {
+                projectId: this.$route.query.projectId,
+                projectName: this.$route.query.projectName,
+              },
+            });
+          }
+        } else {
+          if (this.$route.path === "/home") {
+            return;
+          }
+          this.$router.replace({
+            path: "/home",
+          });
+        }
       }
-      sessionStorage.setItem('projectType', userType)
+      
     },
-    updateDateTime () {
-      const now = new Date()
+    updateDateTime() {
+      const now = new Date();
       // 更新日期 (YYYY年MM月DD日)
-      this.currentDate = now.toLocaleDateString('zh-CN', {
-        year: 'numeric',
-        month: 'long',
-        day: 'numeric'
-      })
+      this.currentDate = now.toLocaleDateString("zh-CN", {
+        year: "numeric",
+        month: "long",
+        day: "numeric",
+      });
     },
-    handleLogout () {
+    handleLogout() {
       // 清除所有登录信息
-      sessionStorage.clear()
+      sessionStorage.clear();
 
       // 关闭弹窗
-      this.showLogoutDialog = false
+      this.showLogoutDialog = false;
 
       // 跳转到登录页
       this.$router.replace({
-        path: '/'
-      })
-    }
-  }
-}
+        path: "/",
+      });
+    },
+  },
+};
 </script>
 
 <style scoped lang="less">
@@ -260,8 +323,7 @@
   background: linear-gradient(180deg, #0a1e3f 0%, #051429 100%);
   border: 2px solid rgba(9, 185, 255, 0.3);
   border-radius: 12px;
-  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5),
-              0 0 60px rgba(9, 185, 255, 0.15);
+  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5), 0 0 60px rgba(9, 185, 255, 0.15);
   overflow: hidden;
   animation: dialogSlideIn 0.3s ease-out;
 }
@@ -283,7 +345,11 @@
   font-size: 24px;
   font-weight: bold;
   color: #ffffff;
-  background: linear-gradient(90deg, rgba(9, 185, 255, 0.15) 0%, rgba(77, 104, 255, 0.05) 100%);
+  background: linear-gradient(
+    90deg,
+    rgba(9, 185, 255, 0.15) 0%,
+    rgba(77, 104, 255, 0.05) 100%
+  );
   border-bottom: 1px solid rgba(9, 185, 255, 0.2);
   letter-spacing: 1px;
 }
@@ -301,7 +367,8 @@
 }
 
 @keyframes iconPulse {
-  0%, 100% {
+  0%,
+  100% {
     transform: scale(1);
     opacity: 1;
   }
diff --git a/screen/src/view/home/index.vue b/screen/src/view/home/index.vue
index e35c7b5..56a2c7c 100644
--- a/screen/src/view/home/index.vue
+++ b/screen/src/view/home/index.vue
@@ -40,7 +40,10 @@
           src="../../assets/img/home/Group@2x (4).png"
           class="w--110 h--110 shrink0"
         />
-        <div @click="toHiddenDanger" class="hoverBox bgimg4 pt--10 c-fff cursor-pointer">
+        <div
+          @click="toHiddenDanger"
+          class="hoverBox bgimg4 pt--10 c-fff cursor-pointer"
+        >
           <div class="flex a-center ml--14">
             <div class="ripple">
               <div class="ripple-wave wave-1"></div>
@@ -308,20 +311,14 @@
                     />
                     <div class="ml--7 SHSR shrink0">
                       <div class="color2 fs--14 lh--14">房建</div>
-                      <div
-                        class="mt--9 fs--8 lh--8 color3"
-                      >
-                        本月检查覆盖率
-                      </div>
+                      <div class="mt--9 fs--8 lh--8 color3">本月检查覆盖率</div>
                     </div>
                   </div>
                   <div class="ml--11 txt-center">
                     <div class="c-fff fs--22 lh--22 SHSBold">
                       {{ screenData.housingProjectCount }}
                     </div>
-                    <div
-                      class="mt--9 fs--10 lh--12 color4 SHSM"
-                    >
+                    <div class="mt--9 fs--10 lh--12 color4 SHSM">
                       {{ screenData.housingInspectionCoverage }}%
                     </div>
                   </div>
@@ -334,20 +331,14 @@
                     />
                     <div class="ml--7 SHSR shrink0">
                       <div class="color2 fs--14 lh--14">市政</div>
-                      <div
-                        class="mt--9 fs--8 lh--8 color3"
-                      >
-                        本月检查覆盖率
-                      </div>
+                      <div class="mt--9 fs--8 lh--8 color3">本月检查覆盖率</div>
                     </div>
                   </div>
                   <div class="ml--11 txt-center">
                     <div class="c-fff fs--22 lh--22 SHSBold">
                       {{ screenData.municipalProjectCount }}
                     </div>
-                    <div
-                      class="mt--9 fs--10 lh--12 color4 SHSM"
-                    >
+                    <div class="mt--9 fs--10 lh--12 color4 SHSM">
                       {{ screenData.municipalInspectionCoverage }}%
                     </div>
                   </div>
@@ -423,7 +414,7 @@
                       <div class="fs--45 lh--45 ff54- color8">
                         {{ screenData.inspectedMachineryTotal }}
                       </div>
-                      <div class="mt--20  oa">
+                      <div class="mt--20 oa">
                         <div
                           v-for="(
                             item, index
@@ -752,38 +743,39 @@
 </template>
 
 <script>
-import HeaderBox from '../header/index.vue'
-import moment from 'moment'
-import s1 from '../../assets/img/home/s1.png'
-import s2 from '../../assets/img/home/s2.png'
-import s3 from '../../assets/img/home/s3.png'
-import f1 from '../../assets/img/home/f1.png'
-import f2 from '../../assets/img/home/f2.png'
-import f3 from '../../assets/img/home/f3.png'
-import z1 from '../../assets/img/home/assets1.png'
-import z2 from '../../assets/img/home/assets2.png'
-import z3 from '../../assets/img/home/assets3.png'
-import s4 from '../../assets/img/home/s4.png'
-import f4 from '../../assets/img/home/f4.png'
-import z4 from '../../assets/img/home/z4.png'
+import HeaderBox from "../header/index.vue";
+import moment from "moment";
+import s1 from "../../assets/img/home/s1.png";
+import s2 from "../../assets/img/home/s2.png";
+import s3 from "../../assets/img/home/s3.png";
+import f1 from "../../assets/img/home/f1.png";
+import f2 from "../../assets/img/home/f2.png";
+import f3 from "../../assets/img/home/f3.png";
+import z1 from "../../assets/img/home/assets1.png";
+import z2 from "../../assets/img/home/assets2.png";
+import z3 from "../../assets/img/home/assets3.png";
+import s4 from "../../assets/img/home/s4.png";
+import f4 from "../../assets/img/home/f4.png";
+import z4 from "../../assets/img/home/z4.png";
 import {
   getStatistics,
   getStoryList,
   getProjectSelect,
   getWorkPresentationList,
-  getprojectTooltip
-} from './service'
+  getprojectTooltip,
+} from "./service";
+import { getLoginInfo } from "../projectHome/service";
 
 export default {
   components: {
-    HeaderBox
+    HeaderBox,
   },
-  data () {
+  data() {
     return {
       mapView: null,
       mapPromise: null,
-      dateRange: [moment().startOf('month'), moment().endOf('month')], // 默认本月
-      dateTxt: '',
+      dateRange: [moment().startOf("month"), moment().endOf("month")], // 默认本月
+      dateTxt: "",
       activeTab: 1,
       scrollData: [], // 存储滚动数据
       scrollTimer: null, // 滚动定时器
@@ -793,604 +785,638 @@
       categoryFilter: {
         municipal: true,
         house: true,
-        assets: true
+        assets: true,
       },
       levelFilter: {
         A: true,
         B: true,
-        C: true
+        C: true,
       },
       markers: [],
       // 2项目总数(在建工程) 3大型机械设备数(在建工程) 4重大隐患数(在建工程) 5项目总数(固定资产) 6重大隐患数(固定资产) 7事故简讯 8工作展示
-      permissionClient: JSON.parse(sessionStorage.getItem('permissionClient')),
+      permissionClient: JSON.parse(sessionStorage.getItem("permissionClient")),
       // 9各分项隐患趋势 10隐患数量 11设备数量 12查看报告入口 13人员在岗率 14重大风险源 15 项目风险趋势
-      permissionProject: JSON.parse(sessionStorage.getItem('permissionProject')),
+      permissionProject: JSON.parse(
+        sessionStorage.getItem("permissionProject")
+      ),
       screenData: {},
-      searchTabs: ['本周', '本月', '本季度', '本年'],
-      activeTabs: '本年',
+      searchTabs: ["本周", "本月", "本季度", "本年"],
+      activeTabs: "本年",
       workListData: [],
       VUE_APP_IMAGE_BASE_URL:
-        process.env.VUE_APP_IMAGE_BASE_URL + '/project/download/',
+        process.env.VUE_APP_IMAGE_BASE_URL + "/project/download/",
       projectList: [],
       tooltipVisible: false,
       tooltipPos: { left: 0, top: 0 },
       tooltipData: {},
       tooltipLoading: false,
       tooltipError: false,
-      boundaryPolygons: []
-    }
+      boundaryPolygons: [],
+    };
   },
   watch: {
     dateRange: {
-      handler (newVal, oldVal) {
+      handler(newVal, oldVal) {
         if (newVal.length > 0) {
           this.dateTxt =
-            moment(newVal[0]).format('YYYY年MM月DD日') +
-            ' ~ ' +
-            moment(newVal[1]).format('YYYY年MM月DD日')
+            moment(newVal[0]).format("YYYY年MM月DD日") +
+            " ~ " +
+            moment(newVal[1]).format("YYYY年MM月DD日");
         } else {
-          this.dateTxt = ''
+          this.dateTxt = "";
         }
         this.$nextTick(() => {
-          this.getScreenData()
-        })
+          this.getScreenData();
+        });
       },
-      immediate: true
-    }
+      immediate: true,
+    },
   },
-  created () {
-    if (sessionStorage.getItem('activeTab')) {
-      this.activeTab = Number(sessionStorage.getItem('activeTab'))
+  created() {
+    if (this.$route.query.clientId) {
+      // alert(this.$route.query.clientId)
+      getLoginInfo({ id: this.$route.query.clientId, type: 1 }).then((r) => {
+        if (r) {
+          this.permissionProject =  r.permissionProject ? r.permissionProject.split(",") : [];
+          this.permissionClient =  r.permissionClient ? r.permissionClient.split(",") : [];
+          sessionStorage.setItem(
+            "permissionClient",
+            JSON.stringify(
+              r.permissionClient ? r.permissionClient.split(",") : []
+            )
+          );
+          sessionStorage.setItem(
+            "permissionProject",
+            JSON.stringify(
+              r.permissionProject ? r.permissionProject.split(",") : []
+            )
+          );
+          
+          sessionStorage.setItem("clientId", params.get("clientId"));
+          sessionStorage.setItem("clientName", params.get("clientName"));
+          sessionStorage.setItem("clientLogo", r.logo);
+          sessionStorage.setItem("deviceTemplateName", r.deviceTemplateName); // 设备模板id
+          sessionStorage.setItem("deviceTemplateId", r.deviceTemplateId); // 设备模板id
+          sessionStorage.setItem("safetyId", r.safetyId); // 安全报告模板id
+          sessionStorage.setItem("safetyName", r.safetyName); // 安全报告模板id
+          sessionStorage.setItem("bigHiddenDanger", r.bigHiddenDanger); // 1开启 2关闭 重大隐患
+          sessionStorage.setItem("generalHiddenDanger", r.generalHiddenDanger); // 1开启 2关闭 一般隐患
+          sessionStorage.setItem("commentType", r.commentType); // 1模糊评价 2打分评价
+        }
+      });
+    }
+    if (sessionStorage.getItem("activeTab")) {
+      this.activeTab = Number(sessionStorage.getItem("activeTab"));
     }
     this.mapPromise = window.AMapLoader.load({
-      key: '232929db1cb31f26d42b3645a7456154',
-      version: '2.0',
-      plugins: ['AMap.DistrictSearch', 'AMap.Geocoder'],
+      key: "232929db1cb31f26d42b3645a7456154",
+      version: "2.0",
+      plugins: ["AMap.DistrictSearch", "AMap.Geocoder"],
       AMapUI: {
-        version: '1.1',
-        plugins: ['geo/DistrictExplorer']
-      }
-    })
-    this.getStoryData()
+        version: "1.1",
+        plugins: ["geo/DistrictExplorer"],
+      },
+    });
+    this.getStoryData();
     getWorkPresentationList({
-      clientId: sessionStorage.getItem('clientId'),
+      clientId: sessionStorage.getItem("clientId"),
       state: 1,
       pageNum: 1,
-      pageSize: 9999
+      pageSize: 9999,
     }).then((res) => {
-      this.workListData = res.records
-    })
+      this.workListData = res.records;
+    });
   },
-  mounted () {
+  mounted() {
     this.$nextTick(() => {
-      this.scrollContainer = this.$refs.scrollContainer
-    })
+      this.scrollContainer = this.$refs.scrollContainer;
+    });
   },
-  beforeDestroy () {
-    sessionStorage.setItem('activeTab', this.activeTab)
-    this.stopAutoScroll()
+  beforeDestroy() {
+    sessionStorage.setItem("activeTab", this.activeTab);
+    this.stopAutoScroll();
     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;
     }
   },
   methods: {
-    handleTabClick (tab) {
-      this.activeTabs = tab
-      this.getStoryData()
+    handleTabClick(tab) {
+      this.activeTabs = tab;
+      this.getStoryData();
     },
-    changeTab (type) {
-      if (this.activeTab === type) return
-      this.activeTab = type
-      this.getScreenData()
+    changeTab(type) {
+      if (this.activeTab === type) return;
+      this.activeTab = type;
+      this.getScreenData();
     },
-    getStoryData () {
-      let startTime = moment()
-      let endTime = moment()
-      if (this.activeTabs === '本周') {
-        startTime = moment().startOf('isoWeek')
-        endTime = moment().endOf('isoWeek')
-      } else if (this.activeTabs === '本月') {
-        startTime = moment().startOf('month')
-        endTime = moment().endOf('month')
-      } else if (this.activeTabs === '本季度') {
-        startTime = moment().startOf('quarter')
-        endTime = moment().endOf('quarter')
-      } else if (this.activeTabs === '本年') {
-        startTime = moment().startOf('year')
-        endTime = moment().endOf('year')
+    getStoryData() {
+      let startTime = moment();
+      let endTime = moment();
+      if (this.activeTabs === "本周") {
+        startTime = moment().startOf("isoWeek");
+        endTime = moment().endOf("isoWeek");
+      } else if (this.activeTabs === "本月") {
+        startTime = moment().startOf("month");
+        endTime = moment().endOf("month");
+      } else if (this.activeTabs === "本季度") {
+        startTime = moment().startOf("quarter");
+        endTime = moment().endOf("quarter");
+      } else if (this.activeTabs === "本年") {
+        startTime = moment().startOf("year");
+        endTime = moment().endOf("year");
       }
       let time =
-        startTime.format('YYYY-MM-DD') + ' - ' + endTime.format('YYYY-MM-DD')
+        startTime.format("YYYY-MM-DD") + " - " + endTime.format("YYYY-MM-DD");
       getStoryList({
-        time: time
+        time: time,
       }).then((res) => {
-        this.scrollData = res
+        this.scrollData = res;
         if (this.scrollData.length > 4) {
-          this.initScrollData()
+          this.initScrollData();
         }
-      })
+      });
     },
 
-    getScreenData () {
+    getScreenData() {
       let params = {
-        projectCategory: ['ongoing', 'fixed'][this.activeTab - 1],
-        startDate: '',
-        endDate: '',
-        clientId: sessionStorage.getItem('clientId')
-      }
+        projectCategory: ["ongoing", "fixed"][this.activeTab - 1],
+        startDate: "",
+        endDate: "",
+        clientId: sessionStorage.getItem("clientId"),
+      };
       if (this.dateRange.length) {
-        params.startDate = moment(this.dateRange[0]).format('YYYY-MM-DD')
-        params.endDate = moment(this.dateRange[1]).format('YYYY-MM-DD')
+        params.startDate = moment(this.dateRange[0]).format("YYYY-MM-DD");
+        params.endDate = moment(this.dateRange[1]).format("YYYY-MM-DD");
       }
       getProjectSelect(params).then((res) => {
-        this.projectList = res
-      })
+        this.projectList = res;
+      });
       getStatistics(params).then((res) => {
-        this.screenData = res.ongoingProject || res.fixedAsset
-        this.setMapload()
-      })
+        this.screenData = res.ongoingProject || res.fixedAsset;
+        this.setMapload();
+      });
     },
-    toAccidentCaseDetail (item) {
+    toAccidentCaseDetail(item) {
       this.$router.push({
-        path: '/accidentCase/detail',
+        path: "/accidentCase/detail",
         query: {
-          id: item.id
-        }
-      })
+          id: item.id,
+        },
+      });
     },
-    toAccidentCaseList () {
-      this.$router.push('/accidentCase')
+    toAccidentCaseList() {
+      this.$router.push("/accidentCase");
     },
-    toWorkDetail (item) {
+    toWorkDetail(item) {
       this.$router.push({
-        path: '/workList/detail',
+        path: "/workList/detail",
         query: {
-          id: item.id
-        }
-      })
+          id: item.id,
+        },
+      });
     },
-    toWorkList () {
-      this.$router.push('/workList')
+    toWorkList() {
+      this.$router.push("/workList");
     },
-    toPorjectList () {
+    toPorjectList() {
       const query = {
-        projectCategory: ['ongoing', 'fixed'][this.activeTab - 1]
-      }
+        projectCategory: ["ongoing", "fixed"][this.activeTab - 1],
+      };
 
       // 如果有选择日期范围,则传递开始和结束时间
       if (this.dateRange && this.dateRange.length === 2) {
         query.startTime = moment(this.dateRange[0]).format(
-          'YYYY-MM-DD HH:mm:ss'
-        )
-        query.endTime = moment(this.dateRange[1]).format('YYYY-MM-DD HH:mm:ss')
+          "YYYY-MM-DD HH:mm:ss"
+        );
+        query.endTime = moment(this.dateRange[1]).format("YYYY-MM-DD HH:mm:ss");
       }
 
       this.$router.push({
-        path: '/projectList',
-        query: query
-      })
+        path: "/projectList",
+        query: query,
+      });
     },
-    toEquipmentList () {
-      const query = {}
+    toEquipmentList() {
+      const query = {};
 
       // 如果有选择日期范围,则传递开始和结束时间
       if (this.dateRange && this.dateRange.length === 2) {
         query.startTime = moment(this.dateRange[0]).format(
-          'YYYY-MM-DD HH:mm:ss'
-        )
-        query.endTime = moment(this.dateRange[1]).format('YYYY-MM-DD HH:mm:ss')
+          "YYYY-MM-DD HH:mm:ss"
+        );
+        query.endTime = moment(this.dateRange[1]).format("YYYY-MM-DD HH:mm:ss");
       }
 
       this.$router.push({
-        path: '/equipmentList',
-        query: query
-      })
+        path: "/equipmentList",
+        query: query,
+      });
     },
-    toHiddenDanger () {
+    toHiddenDanger() {
       const query = {
-        projectCategory: ['ongoing', 'fixed'][this.activeTab - 1]
-      }
+        projectCategory: ["ongoing", "fixed"][this.activeTab - 1],
+      };
 
       // 如果有选择日期范围,则传递开始和结束时间
       if (this.dateRange && this.dateRange.length === 2) {
         query.startTime = moment(this.dateRange[0]).format(
-          'YYYY-MM-DD HH:mm:ss'
-        )
-        query.endTime = moment(this.dateRange[1]).format('YYYY-MM-DD HH:mm:ss')
+          "YYYY-MM-DD HH:mm:ss"
+        );
+        query.endTime = moment(this.dateRange[1]).format("YYYY-MM-DD HH:mm:ss");
       }
 
       this.$router.push({
-        path: '/hiddenDanger',
-        query: query
-      })
+        path: "/hiddenDanger",
+        query: query,
+      });
     },
     // 切换活动索引
-    changeActiveIndex (index) {
-      this.activeIndex = index
-      this.$refs.carousel.setActiveItem(index)
+    changeActiveIndex(index) {
+      this.activeIndex = index;
+      this.$refs.carousel.setActiveItem(index);
     },
     // 切换活动索引
-    handleChangeCarousel (index) {
-      this.activeIndex = index
+    handleChangeCarousel(index) {
+      this.activeIndex = index;
     },
-    handleClick () {
-      this.$refs.datePicker.focus()
+    handleClick() {
+      this.$refs.datePicker.focus();
     },
-    handleSearch () {
+    handleSearch() {
       if (!this.projectId) {
-        return
+        return;
       }
 
       const target = this.screenData.projectMapPoints.find(
         (item) => item.projectId === this.projectId
-      )
+      );
 
       if (!target || Object.keys(target).length === 0) {
-        this.$message.warning('无此项目地图点位')
-        return
+        this.$message.warning("无此项目地图点位");
+        return;
       }
 
       if (target.longitude && target.latitude) {
         // 定位地图
         this.mapView.setZoomAndCenter(15, [
           Number(target.longitude),
-          Number(target.latitude)
-        ])
+          Number(target.latitude),
+        ]);
 
         // 显示悬浮窗
         setTimeout(() => {
           this.showTooltip(null, {
             projectId: target.projectId,
-            position: [Number(target.longitude), Number(target.latitude)]
-          })
-        }, 1000)
+            position: [Number(target.longitude), Number(target.latitude)],
+          });
+        }, 1000);
       } else {
-        this.$message.warning('该项目暂无位置信息')
+        this.$message.warning("该项目暂无位置信息");
       }
     },
     // 初始化滚动数据
-    initScrollData () {
-      this.stopAutoScroll()
-      if (!this.scrollData || this.scrollData.length === 0) return
+    initScrollData() {
+      this.stopAutoScroll();
+      if (!this.scrollData || this.scrollData.length === 0) return;
 
       // 为了实现无缝滚动,复制2份数据
-      this.scrollData = [...this.scrollData, ...this.scrollData]
+      this.scrollData = [...this.scrollData, ...this.scrollData];
 
       // 开始滚动
       this.$nextTick(() => {
-        this.startAutoScroll()
-      })
+        this.startAutoScroll();
+      });
     },
 
     // 开始自动滚动
-    startAutoScroll () {
-      this.stopAutoScroll()
+    startAutoScroll() {
+      this.stopAutoScroll();
 
-      if (!this.scrollContainer || !this.scrollData.length) return
+      if (!this.scrollContainer || !this.scrollData.length) return;
 
-      const originalDataLength = this.scrollData.length / 2
+      const originalDataLength = this.scrollData.length / 2;
 
       // 动态计算高度
-      let firstHalfHeight = 0
-      const wrapper = this.scrollContainer.children[0]
+      let firstHalfHeight = 0;
+      const wrapper = this.scrollContainer.children[0];
       if (wrapper && wrapper.children.length) {
         for (let i = 0; i < originalDataLength; i++) {
           if (wrapper.children[i]) {
-            firstHalfHeight += wrapper.children[i].offsetHeight
+            firstHalfHeight += wrapper.children[i].offsetHeight;
           }
         }
       }
 
       // 兜底
-      if (firstHalfHeight === 0) firstHalfHeight = originalDataLength * 102
+      if (firstHalfHeight === 0) firstHalfHeight = originalDataLength * 102;
 
       // 判断是否需要跳转的标志
-      let shouldJump = false
+      let shouldJump = false;
 
       const scroll = () => {
-        let currentScrollTop = this.scrollContainer.scrollTop
+        let currentScrollTop = this.scrollContainer.scrollTop;
 
         // 当滚动到第二份的末尾时
         if (currentScrollTop >= firstHalfHeight) {
           // 计算当前滚动位置相对于第二份数据开始的偏移量
-          const offset = currentScrollTop - firstHalfHeight
+          const offset = currentScrollTop - firstHalfHeight;
           // 直接跳到第一份数据相同偏移量的位置
-          this.scrollContainer.scrollTop = offset
+          this.scrollContainer.scrollTop = offset;
           // 设置标志表示刚刚进行过跳转
-          shouldJump = true
+          shouldJump = true;
         } else {
           // 如果在跳转后,并且位置重置到了0附近,重置标志
           if (shouldJump && currentScrollTop < 2) {
-            shouldJump = false
+            shouldJump = false;
           }
         }
 
         // 只有在不处于跳转状态时才继续滚动
         if (!shouldJump) {
-          this.scrollContainer.scrollTop += 1
+          this.scrollContainer.scrollTop += 1;
         }
 
-        this.scrollTimer = requestAnimationFrame(scroll)
-      }
+        this.scrollTimer = requestAnimationFrame(scroll);
+      };
 
       // 开始滚动
-      this.scrollTimer = requestAnimationFrame(scroll)
+      this.scrollTimer = requestAnimationFrame(scroll);
     },
 
     // 停止自动滚动
-    stopAutoScroll () {
+    stopAutoScroll() {
       if (this.scrollTimer) {
-        cancelAnimationFrame(this.scrollTimer)
-        this.scrollTimer = null
+        cancelAnimationFrame(this.scrollTimer);
+        this.scrollTimer = null;
       }
     },
 
     // 鼠标进入容器时暂停滚动
-    handleMouseEnter () {
-      this.stopAutoScroll()
+    handleMouseEnter() {
+      this.stopAutoScroll();
     },
 
     // 鼠标离开容器时恢复滚动
-    handleMouseLeave () {
-      this.startAutoScroll()
+    handleMouseLeave() {
+      this.startAutoScroll();
     },
 
     // 处理滚轮事件
-    handleWheel (event) {
-      event.preventDefault()
-      this.scrollContainer.scrollTop += event.deltaY
+    handleWheel(event) {
+      event.preventDefault();
+      this.scrollContainer.scrollTop += event.deltaY;
     },
 
-    setMapload () {
+    setMapload() {
       if (!this.mapPromise) {
         this.mapPromise = window.AMapLoader.load({
-          key: '232929db1cb31f26d42b3645a7456154',
-          version: '2.0',
-          plugins: ['AMap.DistrictSearch', 'AMap.Geocoder'],
+          key: "232929db1cb31f26d42b3645a7456154",
+          version: "2.0",
+          plugins: ["AMap.DistrictSearch", "AMap.Geocoder"],
           AMapUI: {
-            version: '1.1',
-            plugins: ['geo/DistrictExplorer']
-          }
-        })
+            version: "1.1",
+            plugins: ["geo/DistrictExplorer"],
+          },
+        });
       }
       this.mapPromise
         .then((AMap) => {
-          this.mapView = new AMap.Map('container', {
+          this.mapView = new AMap.Map("container", {
             zoom: 13,
             center: [104.065617, 30.656952], // 初始化地图中心点
-            mapStyle: 'amap://styles/darkblue'
-          })
-          this.mapView.resize()
+            mapStyle: "amap://styles/darkblue",
+          });
+          this.mapView.resize();
           this._mapResizeHandler = () => {
             if (this.mapView) {
-              this.mapView.resize()
+              this.mapView.resize();
             }
-          }
-          window.addEventListener('resize', this._mapResizeHandler)
+          };
+          window.addEventListener("resize", this._mapResizeHandler);
           // this.infoWindow = new AMap.InfoWindow({
           //   isCustom: true,
           //   offset: new AMap.Pixel(0, -30),
           // });
-          this.initCategoryMarkers(AMap)
-          this.renderAllBoundaries()
+          this.initCategoryMarkers(AMap);
+          this.renderAllBoundaries();
         })
         .catch((e) => {
-          console.error(e) // 加载错误提示
-        })
+          console.error(e); // 加载错误提示
+        });
     },
-    initCategoryMarkers (AMap) {
+    initCategoryMarkers(AMap) {
       if (!this.mapView) {
-        return
+        return;
       }
       const points = this.screenData.projectMapPoints.map((item) => {
-        let category
+        let category;
         if (this.activeTab === 2) {
-          category = 'assets'
+          category = "assets";
         } else {
-          category = ['house', 'municipal', 'assets'][item.projectType]
+          category = ["house", "municipal", "assets"][item.projectType];
         }
         return {
           ...item,
           position: [Number(item.longitude), Number(item.latitude)],
           category: category,
-          level: item.category
-        }
-      })
-      const markers = []
+          level: item.category,
+        };
+      });
+      const markers = [];
       points.forEach((item) => {
-        const marker = this.createCategoryMarker(AMap, item)
+        const marker = this.createCategoryMarker(AMap, item);
         if (marker) {
-          this.mapView.add(marker)
-          markers.push(marker)
+          this.mapView.add(marker);
+          markers.push(marker);
         }
-      })
-      this.markers = markers
-      this.updateMarkerVisibility()
+      });
+      this.markers = markers;
+      this.updateMarkerVisibility();
     },
-    createCategoryMarker (AMap, item) {
+    createCategoryMarker(AMap, item) {
       if (!item || !item.position) {
-        return null
+        return null;
       }
-      let image = null
-      let level = item.level
-      if (item.category === 'municipal') {
-        if (item.level === 'A') {
-          image = s1
-        } else if (item.level === 'B') {
-          image = s3
-        } else if (item.level === 'C') {
-          image = s2
+      let image = null;
+      let level = item.level;
+      if (item.category === "municipal") {
+        if (item.level === "A") {
+          image = s1;
+        } else if (item.level === "B") {
+          image = s3;
+        } else if (item.level === "C") {
+          image = s2;
         } else {
-          image = s4
+          image = s4;
         }
-      } else if (item.category === 'house') {
-        if (item.level === 'A') {
-          image = f1
-        } else if (item.level === 'B') {
-          image = f3
-        } else if (item.level === 'C') {
-          image = f2
+      } else if (item.category === "house") {
+        if (item.level === "A") {
+          image = f1;
+        } else if (item.level === "B") {
+          image = f3;
+        } else if (item.level === "C") {
+          image = f2;
         } else {
-          image = f4
+          image = f4;
         }
-      } else if (item.category === 'assets') {
-        if (item.level === 'A') {
-          image = z1
-        } else if (item.level === 'B') {
-          image = z3
-        } else if (item.level === 'C') {
-          image = z2
+      } else if (item.category === "assets") {
+        if (item.level === "A") {
+          image = z1;
+        } else if (item.level === "B") {
+          image = z3;
+        } else if (item.level === "C") {
+          image = z2;
         } else {
-          image = z4
+          image = z4;
         }
       }
       if (!image) {
-        return null
+        return null;
       }
       const icon = new AMap.Icon({
         image,
         size: new AMap.Size(30, 30),
-        imageSize: new AMap.Size(30, 30)
-      })
+        imageSize: new AMap.Size(30, 30),
+      });
       const marker = new AMap.Marker({
         position: item.position,
         icon,
         offset: new AMap.Pixel(-12, -12),
         extData: {
           category: item.category,
-          level: level
-        }
-      })
-      marker.on('mouseover', (e) => {
-        this.showTooltip(e, item)
-      })
-      marker.on('mouseout', () => {
-        this.hideTooltip()
-      })
-      marker.on('click', () => {
+          level: level,
+        },
+      });
+      marker.on("mouseover", (e) => {
+        this.showTooltip(e, item);
+      });
+      marker.on("mouseout", () => {
+        this.hideTooltip();
+      });
+      marker.on("click", () => {
         this.$router.push({
-          path: '/projectHome',
+          path: "/projectHome",
           query: {
             projectId: item.projectId,
-            projectName: item.projectName
-          }
-        })
-      })
-      return marker
+            projectName: item.projectName,
+          },
+        });
+      });
+      return marker;
     },
-    updateMarkerVisibility () {
+    updateMarkerVisibility() {
       if (!this.markers || !this.markers.length) {
-        return
+        return;
       }
       this.markers.forEach((marker) => {
         if (!marker) {
-          return
+          return;
         }
-        const data = marker.getExtData ? marker.getExtData() : null
+        const data = marker.getExtData ? marker.getExtData() : null;
         if (!data) {
-          return
+          return;
         }
-        const categoryVisible = this.categoryFilter[data.category]
-        const levelVisible = !data.level || this.levelFilter[data.level]
+        const categoryVisible = this.categoryFilter[data.category];
+        const levelVisible = !data.level || this.levelFilter[data.level];
         if (categoryVisible && levelVisible) {
-          marker.show()
+          marker.show();
         } else {
-          marker.hide()
+          marker.hide();
         }
-      })
+      });
     },
-    toggleCategory (type) {
+    toggleCategory(type) {
       if (!this.categoryFilter.hasOwnProperty(type)) {
-        return
+        return;
       }
-      this.categoryFilter[type] = !this.categoryFilter[type]
-      this.updateMarkerVisibility()
+      this.categoryFilter[type] = !this.categoryFilter[type];
+      this.updateMarkerVisibility();
     },
-    toggleLevel (level) {
+    toggleLevel(level) {
       if (!this.levelFilter.hasOwnProperty(level)) {
-        return
+        return;
       }
-      this.levelFilter[level] = !this.levelFilter[level]
-      this.updateMarkerVisibility()
+      this.levelFilter[level] = !this.levelFilter[level];
+      this.updateMarkerVisibility();
     },
-    showTooltip (e, item) {
-      if (!this.mapView) return
+    showTooltip(e, item) {
+      if (!this.mapView) return;
 
-      const pixel = this.mapView.lngLatToContainer(item.position)
+      const pixel = this.mapView.lngLatToContainer(item.position);
 
       // 获取当前缩放比例
-      let scaleX = 1
-      let scaleY = 1
-      const app = document.querySelector('#app')
+      let scaleX = 1;
+      let scaleY = 1;
+      const app = document.querySelector("#app");
       if (app) {
-        const rect = app.getBoundingClientRect()
+        const rect = app.getBoundingClientRect();
         // offsetWidth 是元素的布局宽度(不包含 transform)
         // rect.width 是元素的渲染宽度(包含 transform)
         if (app.offsetWidth > 0) {
-          scaleX = rect.width / app.offsetWidth
+          scaleX = rect.width / app.offsetWidth;
         }
         if (app.offsetHeight > 0) {
-          scaleY = rect.height / app.offsetHeight
+          scaleY = rect.height / app.offsetHeight;
         }
       }
 
-      this.tooltipPos = { left: pixel.x / scaleX, top: pixel.y / scaleY - 60 }
-      this.tooltipVisible = true
-      this.tooltipLoading = true
-      this.tooltipError = false
-      this.tooltipData = {}
+      this.tooltipPos = { left: pixel.x / scaleX, top: pixel.y / scaleY - 60 };
+      this.tooltipVisible = true;
+      this.tooltipLoading = true;
+      this.tooltipError = false;
+      this.tooltipData = {};
 
       getprojectTooltip(item.projectId)
         .then((res) => {
-          let address = '-'
-          let constructionCompanyInfo = '-'
-          let supervisorCompanyInfo = '-'
-          let developmentCompanyInfo = '-'
+          let address = "-";
+          let constructionCompanyInfo = "-";
+          let supervisorCompanyInfo = "-";
+          let developmentCompanyInfo = "-";
 
           try {
             if (res.addressInfo) {
-              const addressInfo = JSON.parse(res.addressInfo)
+              const addressInfo = JSON.parse(res.addressInfo);
               address =
-                (addressInfo.province || '') +
-                (addressInfo.city || '') +
-                (addressInfo.district || '') +
-                (addressInfo.detail || '')
+                (addressInfo.province || "") +
+                (addressInfo.city || "") +
+                (addressInfo.district || "") +
+                (addressInfo.detail || "");
             }
             if (res.constructionCompanyInfo) {
-              constructionCompanyInfo = JSON.parse(res.constructionCompanyInfo)
+              constructionCompanyInfo = JSON.parse(res.constructionCompanyInfo);
             }
             if (res.supervisorCompanyInfo) {
-              supervisorCompanyInfo = JSON.parse(res.supervisorCompanyInfo)
+              supervisorCompanyInfo = JSON.parse(res.supervisorCompanyInfo);
             }
             if (res.developmentCompanyInfo) {
-              developmentCompanyInfo = JSON.parse(res.developmentCompanyInfo)
+              developmentCompanyInfo = JSON.parse(res.developmentCompanyInfo);
             }
           } catch (error) {
-            console.error('Parse error', error)
+            console.error("Parse error", error);
           }
 
           // 对设备租赁单位进行去重处理
-          let uniqueProperties = []
+          let uniqueProperties = [];
           if (res.properties && res.properties.length > 0) {
-            const seenNames = new Set()
+            const seenNames = new Set();
             uniqueProperties = res.properties.filter((item) => {
               try {
-                const parsed = JSON.parse(item)
-                const companyName = parsed['工程起重机械租赁单位']
+                const parsed = JSON.parse(item);
+                const companyName = parsed["工程起重机械租赁单位"];
                 if (companyName && !seenNames.has(companyName)) {
-                  seenNames.add(companyName)
-                  return true
+                  seenNames.add(companyName);
+                  return true;
                 }
-                return false
+                return false;
               } catch (e) {
-                return false
+                return false;
               }
-            })
+            });
           }
 
           this.tooltipData = {
@@ -1399,107 +1425,107 @@
             constructionCompanyInfo,
             supervisorCompanyInfo,
             developmentCompanyInfo,
-            properties: uniqueProperties
-          }
-          this.tooltipLoading = false
+            properties: uniqueProperties,
+          };
+          this.tooltipLoading = false;
         })
         .catch(() => {
-          this.tooltipLoading = false
-          this.tooltipError = true
-        })
+          this.tooltipLoading = false;
+          this.tooltipError = true;
+        });
     },
-    hideTooltip () {
-      this.tooltipVisible = false
+    hideTooltip() {
+      this.tooltipVisible = false;
     },
-    clearBoundary () {
+    clearBoundary() {
       if (this.boundaryPolygons.length) {
-        this.mapView.remove(this.boundaryPolygons)
-        this.boundaryPolygons = []
+        this.mapView.remove(this.boundaryPolygons);
+        this.boundaryPolygons = [];
       }
     },
-    async renderAllBoundaries () {
-      this.clearBoundary()
-      if (!this.mapView || !this.screenData.projectMapPoints) return
+    async renderAllBoundaries() {
+      this.clearBoundary();
+      if (!this.mapView || !this.screenData.projectMapPoints) return;
 
       // 确保 AMapUI 已加载
       if (!window.AMapUI) {
-        console.warn('AMapUI not loaded')
-        return
+        console.warn("AMapUI not loaded");
+        return;
       }
 
-      const provinceSet = new Set()
-      const districtSet = new Set()
-      const citySet = new Set() // 显式收集有数据的城市
-      const pointsToGeocode = []
+      const provinceSet = new Set();
+      const districtSet = new Set();
+      const citySet = new Set(); // 显式收集有数据的城市
+      const pointsToGeocode = [];
 
       // 1. 收集数据
       this.screenData.projectMapPoints.forEach((point) => {
-        let hasData = false
+        let hasData = false;
         if (point.addressInfo) {
           try {
-            const info = JSON.parse(point.addressInfo)
+            const info = JSON.parse(point.addressInfo);
             if (info.province) {
-              provinceSet.add(info.province)
-              hasData = true
+              provinceSet.add(info.province);
+              hasData = true;
             }
             if (info.district) {
-              districtSet.add(info.district)
-              hasData = true
+              districtSet.add(info.district);
+              hasData = true;
             }
             // 如果只有市没有区,或者需要单独渲染市
             if (info.city) {
-              citySet.add(info.city)
-              hasData = true
+              citySet.add(info.city);
+              hasData = true;
             }
           } catch (e) {
             // ignore
           }
         }
         if (!hasData) {
-          pointsToGeocode.push([point.longitude, point.latitude])
+          pointsToGeocode.push([point.longitude, point.latitude]);
         }
-      })
+      });
 
       // 2. 逆地理编码补充缺失数据
       if (pointsToGeocode.length > 0) {
-        const geocoder = new window.AMap.Geocoder()
-        const batchSize = 20
-        const batches = []
+        const geocoder = new window.AMap.Geocoder();
+        const batchSize = 20;
+        const batches = [];
         for (let i = 0; i < pointsToGeocode.length; i += batchSize) {
-          batches.push(pointsToGeocode.slice(i, i + batchSize))
+          batches.push(pointsToGeocode.slice(i, i + batchSize));
         }
 
         await Promise.all(
           batches.map((batch) => {
             return new Promise((resolve) => {
               geocoder.getAddress(batch, (status, result) => {
-                if (status === 'complete' && result.regeocodes) {
+                if (status === "complete" && result.regeocodes) {
                   result.regeocodes.forEach((geo) => {
                     if (geo.addressComponent) {
-                      const { district, city, province } = geo.addressComponent
-                      if (province) provinceSet.add(province)
-                      if (city) citySet.add(city)
-                      if (district) districtSet.add(district)
+                      const { district, city, province } = geo.addressComponent;
+                      if (province) provinceSet.add(province);
+                      if (city) citySet.add(city);
+                      if (district) districtSet.add(district);
                     }
-                  })
+                  });
                 }
-                resolve()
-              })
-            })
+                resolve();
+              });
+            });
           })
-        )
+        );
       }
 
       // 初始化 DistrictExplorer
-      let districtExplorer = null
+      let districtExplorer = null;
       try {
         districtExplorer = new window.AMapUI.DistrictExplorer({
           map: this.mapView,
-          eventSupport: false // 我们自己绘制,不需要它的事件
-        })
+          eventSupport: false, // 我们自己绘制,不需要它的事件
+        });
       } catch (e) {
-        console.error('Init DistrictExplorer failed', e)
-        return
+        console.error("Init DistrictExplorer failed", e);
+        return;
       }
 
       // 辅助函数:根据名称查找 adcode
@@ -1507,18 +1533,18 @@
         return new Promise((resolve) => {
           const search = new window.AMap.DistrictSearch({
             subdistrict: 1, // 获取下一级以便后续逻辑使用(如省查市)
-            extensions: 'base', // 这里只需要 adcode,不需要详细边界
-            level: level
-          })
+            extensions: "base", // 这里只需要 adcode,不需要详细边界
+            level: level,
+          });
           search.search(name, (status, result) => {
-            if (status === 'complete' && result.districtList.length > 0) {
-              resolve(result.districtList[0])
+            if (status === "complete" && result.districtList.length > 0) {
+              resolve(result.districtList[0]);
             } else {
-              resolve(null)
+              resolve(null);
             }
-          })
-        })
-      }
+          });
+        });
+      };
 
       // 辅助函数:使用 DistrictExplorer 加载并绘制区域
       const renderAreaNode = (
@@ -1531,23 +1557,23 @@
         return new Promise((resolve) => {
           districtExplorer.loadAreaNode(adcode, (error, areaNode) => {
             if (error || !areaNode) {
-              resolve()
-              return
+              resolve();
+              return;
             }
 
             // 获取父级区域的 GeoJSON (ParentFeature)
             // 这包含了正确的孔洞信息
-            const feature = areaNode.getParentFeature()
+            const feature = areaNode.getParentFeature();
             if (!feature || !feature.geometry) {
-              resolve()
-              return
+              resolve();
+              return;
             }
 
-            const geometry = feature.geometry
+            const geometry = feature.geometry;
             const types =
-              geometry.type === 'MultiPolygon'
+              geometry.type === "MultiPolygon"
                 ? geometry.coordinates
-                : [geometry.coordinates]
+                : [geometry.coordinates];
 
             // 遍历所有多边形(处理 MultiPolygon)
             types.forEach((coords) => {
@@ -1560,120 +1586,120 @@
                 path: coords, // 直接使用 GeoJSON 的坐标数组
                 strokeColor: style.strokeColor,
                 strokeWeight: 2,
-                fillColor: style.fillColor || 'transparent',
+                fillColor: style.fillColor || "transparent",
                 fillOpacity:
                   style.fillOpacity !== undefined ? style.fillOpacity : 0.2,
                 zIndex: style.zIndex,
                 bubble: true,
                 cursor:
-                  level === 'district' && (isActive || isHoverable)
-                    ? 'pointer'
-                    : 'default',
-                extData: { level, isActive }
-              })
+                  level === "district" && (isActive || isHoverable)
+                    ? "pointer"
+                    : "default",
+                extData: { level, isActive },
+              });
 
               // 添加 hover 事件
-              if (level === 'district' && (isActive || isHoverable)) {
-                const baseFillColor = style.fillColor || 'transparent'
+              if (level === "district" && (isActive || isHoverable)) {
+                const baseFillColor = style.fillColor || "transparent";
                 const baseFillOpacity =
-                  style.fillOpacity !== undefined ? style.fillOpacity : 0.2
-                const baseStrokeColor = style.strokeColor
+                  style.fillOpacity !== undefined ? style.fillOpacity : 0.2;
+                const baseStrokeColor = style.strokeColor;
                 const hoverStyle = isActive
                   ? {
-                    fillColor: '#00b3ff',
-                    fillOpacity: 0.35,
-                    strokeColor: '#00b3ff',
-                    strokeWeight: 3
-                  }
+                      fillColor: "#00b3ff",
+                      fillOpacity: 0.35,
+                      strokeColor: "#00b3ff",
+                      strokeWeight: 3,
+                    }
                   : {
-                    fillColor: '#00b3ff',
-                    fillOpacity: 0.2
-                  }
+                      fillColor: "#00b3ff",
+                      fillOpacity: 0.2,
+                    };
 
-                polygon.on('mouseover', () => {
-                  polygon.setOptions(hoverStyle)
-                })
-                polygon.on('mouseout', () => {
+                polygon.on("mouseover", () => {
+                  polygon.setOptions(hoverStyle);
+                });
+                polygon.on("mouseout", () => {
                   polygon.setOptions({
                     fillColor: baseFillColor,
                     fillOpacity: baseFillOpacity,
                     strokeColor: baseStrokeColor,
-                    strokeWeight: 2
-                  })
-                })
+                    strokeWeight: 2,
+                  });
+                });
               }
 
-              this.mapView.add(polygon)
-              this.boundaryPolygons.push(polygon)
-            })
+              this.mapView.add(polygon);
+              this.boundaryPolygons.push(polygon);
+            });
 
-            resolve()
-          })
-        })
-      }
+            resolve();
+          });
+        });
+      };
 
       // 3. 处理省份:渲染省界,并收集其下属的所有城市 adcode
-      const cityCodesFromProvinces = new Set()
-      const cityAdcodeToNameMap = new Map() // 辅助Map,用于判断是否在citySet中
+      const cityCodesFromProvinces = new Set();
+      const cityAdcodeToNameMap = new Map(); // 辅助Map,用于判断是否在citySet中
 
       const provincePromises = Array.from(provinceSet).map(
         async (provinceName) => {
-          const result = await resolveAdcode(provinceName, 'province')
+          const result = await resolveAdcode(provinceName, "province");
           if (result) {
             // 渲染省 - 无填充
             renderAreaNode(
               result.adcode,
               {
-                strokeColor: '#5470C6',
-                fillColor: '',
+                strokeColor: "#5470C6",
+                fillColor: "",
                 fillOpacity: 0,
-                zIndex: 8
+                zIndex: 8,
               },
-              'province',
+              "province",
               false
-            )
+            );
 
             // 收集该省下的所有市(用于渲染市界)
             if (result.districtList && result.districtList.length) {
               result.districtList.forEach((city) => {
-                cityCodesFromProvinces.add(city.adcode)
-                cityAdcodeToNameMap.set(city.adcode, city.name)
-              })
+                cityCodesFromProvinces.add(city.adcode);
+                cityAdcodeToNameMap.set(city.adcode, city.name);
+              });
             }
           }
         }
-      )
+      );
 
-      await Promise.all(provincePromises)
+      await Promise.all(provincePromises);
 
       // 4. 渲染市
       // 合并 "省份下属的市" 和 "直接出现在数据中的市"
-      const allCityAdcodes = new Set([...cityCodesFromProvinces])
+      const allCityAdcodes = new Set([...cityCodesFromProvinces]);
 
       // 处理直接出现的市名称
       const cityResolutionPromises = Array.from(citySet).map(
         async (cityName) => {
-          const result = await resolveAdcode(cityName, 'city')
+          const result = await resolveAdcode(cityName, "city");
           if (result) {
-            allCityAdcodes.add(result.adcode)
-            cityAdcodeToNameMap.set(result.adcode, cityName)
+            allCityAdcodes.add(result.adcode);
+            cityAdcodeToNameMap.set(result.adcode, cityName);
           }
         }
-      )
-      await Promise.all(cityResolutionPromises)
+      );
+      await Promise.all(cityResolutionPromises);
 
       const cityRenderPromises = Array.from(allCityAdcodes).map((adcode) => {
         // 渲染所有市 - 无填充 (仅轮廓)
         // 注意:isActive设为false,因为我们只希望聚焦在具体的区或标点上
         return renderAreaNode(
           adcode,
-          { strokeColor: '#FAC858', fillColor: '', fillOpacity: 0, zIndex: 9 },
-          'city',
+          { strokeColor: "#FAC858", fillColor: "", fillOpacity: 0, zIndex: 9 },
+          "city",
           false
-        )
-      })
+        );
+      });
 
-      await Promise.all(cityRenderPromises)
+      await Promise.all(cityRenderPromises);
 
       // 5. 渲染区
       // 策略:
@@ -1682,23 +1708,23 @@
       //    - 如果区不在 districtSet 中 (无数据):透明 + Hover效果 (isActive=false)
       // 2. 遍历 districtSet,处理可能漏掉的区 (比如没有对应的city信息的孤立区数据)
 
-      const renderedDistrictAdcodes = new Set()
+      const renderedDistrictAdcodes = new Set();
 
       const cityDistrictPromises = Array.from(citySet).map(async (cityName) => {
-        const result = await resolveAdcode(cityName, 'city')
+        const result = await resolveAdcode(cityName, "city");
         if (result && result.districtList) {
-          const subDistricts = result.districtList
+          const subDistricts = result.districtList;
           const subPromises = subDistricts.map((sub) => {
-            renderedDistrictAdcodes.add(sub.adcode)
+            renderedDistrictAdcodes.add(sub.adcode);
 
             // 检查该区是否有数据
             // 模糊匹配:districtSet中的名字可能不带"区"字
-            let hasData = false
+            let hasData = false;
             if (sub.name) {
               for (let d of districtSet) {
                 if (sub.name.includes(d) || d.includes(sub.name)) {
-                  hasData = true
-                  break
+                  hasData = true;
+                  break;
                 }
               }
             }
@@ -1707,75 +1733,75 @@
               // 有数据:默认高亮,无Hover特效
               return renderAreaNode(
                 sub.adcode,
-                { strokeColor: '#00ffd2', fillColor: '#00ffd2', zIndex: 10 },
-                'district',
+                { strokeColor: "#00ffd2", fillColor: "#00ffd2", zIndex: 10 },
+                "district",
                 true,
                 false
-              )
+              );
             } else {
               // 无数据:默认透明,有Hover特效
               return renderAreaNode(
                 sub.adcode,
                 {
-                  strokeColor: '#00ffd2',
-                  fillColor: '',
+                  strokeColor: "#00ffd2",
+                  fillColor: "",
                   fillOpacity: 0,
-                  zIndex: 10
+                  zIndex: 10,
                 },
-                'district',
+                "district",
                 false,
                 true
-              )
+              );
             }
-          })
-          return Promise.all(subPromises)
+          });
+          return Promise.all(subPromises);
         }
-      })
+      });
 
-      await Promise.all(cityDistrictPromises)
+      await Promise.all(cityDistrictPromises);
 
       // 处理可能遗漏的区 (districtSet 中有,但没在上面的循环中渲染过)
       const orphanDistrictPromises = Array.from(districtSet).map(
         async (districtName) => {
           // 先检查是否已经渲染过 (需要先resolve adcode才能精确匹配,但这里先用名字简单过滤一下,减少请求)
           // 由于上面是根据adcode记录的,这里还是得resolve一下比较稳妥
-          const result = await resolveAdcode(districtName, 'district')
+          const result = await resolveAdcode(districtName, "district");
           if (result && !renderedDistrictAdcodes.has(result.adcode)) {
             // 既然在districtSet里,肯定是有数据的
             return renderAreaNode(
               result.adcode,
-              { strokeColor: '#00ffd2', fillColor: '#00ffd2', zIndex: 10 },
-              'district',
+              { strokeColor: "#00ffd2", fillColor: "#00ffd2", zIndex: 10 },
+              "district",
               true,
               false
-            )
+            );
           }
         }
-      )
+      );
 
-      await Promise.all(orphanDistrictPromises)
+      await Promise.all(orphanDistrictPromises);
 
       // 6. 自动调整视野
-      const targetOverlays = []
+      const targetOverlays = [];
       if (this.markers && this.markers.length > 0) {
-        targetOverlays.push(...this.markers)
+        targetOverlays.push(...this.markers);
       }
 
       if (this.boundaryPolygons.length > 0) {
         // 只保留 isActive 为 true 的区域用于缩放 (即有数据的区)
         const activePolygons = this.boundaryPolygons.filter((p) => {
-          const data = p.getExtData()
-          return data && data.isActive
-        })
-        targetOverlays.push(...activePolygons)
+          const data = p.getExtData();
+          return data && data.isActive;
+        });
+        targetOverlays.push(...activePolygons);
       }
 
       if (targetOverlays.length > 0) {
-        this.mapView.setFitView(targetOverlays, false, [60, 60, 60, 60])
+        this.mapView.setFitView(targetOverlays, false, [60, 60, 60, 60]);
       }
-    }
-  }
-}
+    },
+  },
+};
 </script>
 
 <style lang="less" scoped>
diff --git a/screen/src/view/projectHome/index.vue b/screen/src/view/projectHome/index.vue
index 9e425e7..81fcf52 100644
--- a/screen/src/view/projectHome/index.vue
+++ b/screen/src/view/projectHome/index.vue
@@ -872,6 +872,7 @@
           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
         })

--
Gitblit v1.7.1