From 42e7814f816bedba1a0ef8e8f8fb3df1f495c9db Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Fri, 05 Dec 2025 09:27:58 +0800
Subject: [PATCH] Merge branch 'feature/v8.0/8.0.4' into feature/v9.0/9.0.1

---
 src/views/tickets/ticket.vue                       |    5 
 src/views/layerManagement/components/rightEdit.vue |   11 
 src/views/resource/components/spotDetails.vue      |   28 ++
 src/views/wel/components/proportionStatic.vue      |   42 ++
 src/views/device/addDevice.vue                     |   20 
 src/assets/images/layerManagement/disabled.svg     |   23 ++
 src/views/layerManagement/components/leftList.vue  |   27 ++
 src/views/resource/patchManagement.vue             |   52 ++--
 src/views/device/airport.vue                       |  217 +++++++++++-------
 src/api/home/index.js                              |    8 
 src/views/wel/components/backlog.vue               |    2 
 src/views/job/components/SearchBox.vue             |   40 ++
 src/views/tickets/orderLog.vue                     |   15 
 src/views/device/components/DockControlPanel.vue   |    2 
 src/views/dataCenter/dataCenter.vue                |   52 +++-
 src/views/algorithmMange/algorithmMange.vue        |    3 
 src/axios.js                                       |   19 +
 src/utils/date.js                                  |   27 ++
 src/views/job/components/DeviceJobDetails.vue      |   47 ++--
 src/views/layerManagement/index.vue                |   15 +
 20 files changed, 447 insertions(+), 208 deletions(-)

diff --git a/src/api/home/index.js b/src/api/home/index.js
index 3b7e45f..0715709 100644
--- a/src/api/home/index.js
+++ b/src/api/home/index.js
@@ -6,6 +6,14 @@
     method: 'get',
   });
 };
+// 大屏首页=>事件状态数量
+export const getEventStatusNum = data => {
+  return request({
+    url: '/drone-device-core/jobEvent/eventStatusNum',
+    method: 'post',
+    data,
+  })
+}
 // 事件概况分类数
 export const getJobEventByStatus = data => {
   return request({
diff --git a/src/assets/images/layerManagement/disabled.svg b/src/assets/images/layerManagement/disabled.svg
new file mode 100644
index 0000000..e287704
--- /dev/null
+++ b/src/assets/images/layerManagement/disabled.svg
@@ -0,0 +1,23 @@
+<svg width="133" height="47" viewBox="0 0 133 47" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="Group 1321316177">
+<g id="Rectangle 34624973" filter="url(#filter0_d_2810_2521)">
+<rect x="4" width="125" height="39" rx="4" fill="#A4A4A4"/>
+</g>
+<path id="&#228;&#191;&#157;&#229;&#173;&#152;" d="M65.584 13.17L67.124 13.674C66.76 14.584 66.326 15.536 65.822 16.432V26.19H64.24V18.868C63.89 19.316 63.54 19.736 63.176 20.114C63.022 19.708 62.56 18.812 62.28 18.406C63.582 17.146 64.856 15.158 65.584 13.17ZM68.986 15.214V17.09H73.088V15.214H68.986ZM75.44 21.332H72.64C73.466 22.55 74.67 23.698 75.846 24.384C75.468 24.706 74.936 25.294 74.67 25.714C73.648 24.986 72.626 23.852 71.828 22.606V26.218H70.148V22.676C69.294 23.908 68.23 24.972 67.124 25.686C66.872 25.28 66.354 24.678 65.976 24.356C67.236 23.698 68.482 22.564 69.35 21.332H66.48V19.82H70.148V18.56H67.404V13.758H74.754V18.56H71.828V19.82H75.44V21.332ZM89.23 16.544H81.768C81.292 17.552 80.732 18.518 80.074 19.414V26.19H78.394V21.304C77.974 21.682 77.554 22.018 77.078 22.34C76.91 21.906 76.546 21.164 76.294 20.744C77.806 19.75 79.024 18.224 79.878 16.544H76.798V14.948H80.592C80.816 14.332 81.012 13.73 81.166 13.128L82.902 13.548C82.762 14.024 82.594 14.472 82.426 14.948H89.23V16.544ZM89.44 21.15V22.704H86.122V24.454C86.122 25.294 85.982 25.728 85.38 25.98C84.792 26.204 83.966 26.232 82.846 26.218C82.79 25.742 82.594 25.098 82.384 24.622C83.084 24.664 83.91 24.664 84.134 24.664C84.372 24.65 84.442 24.594 84.442 24.412V22.704H80.886V21.15H84.442V20.17C84.876 19.904 85.338 19.526 85.772 19.134H81.978V17.636H87.298L87.648 17.538L88.698 18.392C87.984 19.148 87.046 19.974 86.122 20.618V21.15H89.44Z" fill="white"/>
+<g id="Frame">
+<path id="Vector" d="M47.3855 24.4975C47.1585 24.4975 46.9402 24.4126 46.7756 24.2584L42.0787 19.8785C41.7269 19.551 41.7148 19.007 42.0509 18.664C42.387 18.3209 42.9467 18.3105 43.2984 18.638L47.3093 22.3786L54.5843 13.7695C54.8944 13.4039 55.4506 13.3502 55.8266 13.6517C56.2025 13.9531 56.2562 14.4937 55.9478 14.861L48.0681 24.1857C47.9122 24.371 47.6835 24.4837 47.4392 24.4975H47.3855Z" fill="white"/>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_2810_2521" x="0" y="0" width="133" height="47" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset dy="4"/>
+<feGaussianBlur stdDeviation="2"/>
+<feComposite in2="hardAlpha" operator="out"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
+<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_2810_2521"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2810_2521" result="shape"/>
+</filter>
+</defs>
+</svg>
diff --git a/src/axios.js b/src/axios.js
index 4acc439..3ef44cf 100644
--- a/src/axios.js
+++ b/src/axios.js
@@ -50,6 +50,25 @@
         `${website.clientId}:${website.clientSecret}`
       )}`;
     }
+    // 后端的要求
+    if (router.currentRoute.value.path === '/job/jobstatistics'){
+      const userAreaCode = store?.state?.user?.userInfo?.detail?.areaCode
+      const paramsKey = config.method === 'get' ? 'params' : 'data';
+      const codeKey = config.method === 'get' ? 'areaCode' : 'area_code';
+      const paramCode = config?.params?.areaCode || config?.data?.area_code
+      try {
+        if (paramCode){
+          if (paramCode === userAreaCode) {
+            config[paramsKey][codeKey] = config.method === 'get' ? '' : undefined;
+          } else {
+            if (!Array.isArray(config[paramsKey])){
+              config[paramsKey] = {...config[paramsKey],[codeKey]: paramCode}
+            }
+          }
+        }
+      }catch (e) {}
+    }
+
     //headers判断请求是否携带token
     const meta = config.meta || {};
     const isToken = meta.isToken === false;
diff --git a/src/utils/date.js b/src/utils/date.js
index 35d9eb7..0e22793 100644
--- a/src/utils/date.js
+++ b/src/utils/date.js
@@ -1,3 +1,11 @@
+import dayjs from 'dayjs'
+import 'dayjs/locale/zh-cn'
+import weekday from 'dayjs/plugin/weekday'
+
+// 配置 dayjs
+dayjs.locale('zh-cn')
+dayjs.extend(weekday)
+
 export const calcDate = (date1, date2) => {
   let date3 = date2 - date1;
 
@@ -56,3 +64,22 @@
 export function dateNow() {
   return dateFormat(new Date(), 'yyyyMMddhhmmss');
 }
+
+export const getDateRange = (unit, formatStr = 'YYYY-MM-DD HH:mm:ss') => {
+  const todayDate = dayjs()
+  let returnArr = [dayjs(), todayDate]
+  if (unit === 'today') {
+    returnArr = [dayjs(), todayDate]
+  }
+  if (unit === 'week') {
+    returnArr = [dayjs().weekday(0), todayDate]
+  }
+  if (unit === 'month') {
+    returnArr = [dayjs().startOf('month'), todayDate]
+  }
+  if (unit === 'year') {
+    returnArr = [dayjs().startOf('year'), todayDate]
+  }
+  returnArr = [returnArr[0].startOf('day').format(formatStr), returnArr[1].endOf('day').format(formatStr)]
+  return returnArr
+}
diff --git a/src/views/algorithmMange/algorithmMange.vue b/src/views/algorithmMange/algorithmMange.vue
index 464984e..1695145 100644
--- a/src/views/algorithmMange/algorithmMange.vue
+++ b/src/views/algorithmMange/algorithmMange.vue
@@ -25,7 +25,7 @@
     <div class="mange-table">
 			<el-table border :data="tableList" class="ztzf-table-mange">
 				<el-table-column label="序号" type="index" width="60"></el-table-column>
-        <el-table-column prop="model_name" label="算法名称" align="center" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="alg_name" label="算法名称" align="center" show-overflow-tooltip></el-table-column>
         <el-table-column prop="alg_type" label="算法类型" align="center"></el-table-column>
 				<el-table-column prop="qua_rate" label="最低准确率" align="center">
           <template #header>
@@ -48,6 +48,7 @@
             {{ scope.row.event_type == 0 ? '常规类' : '紧急类' }}
           </template>
         </el-table-column>
+        <el-table-column prop="version" label="算法版本" align="center"/>
 				<el-table-column prop="remark" label="算法描述" show-overflow-tooltip />
 				<el-table-column label="操作" width="180" align="center">
 					<template #default="scope">
diff --git a/src/views/dataCenter/dataCenter.vue b/src/views/dataCenter/dataCenter.vue
index 95d19e5..a1baa56 100644
--- a/src/views/dataCenter/dataCenter.vue
+++ b/src/views/dataCenter/dataCenter.vue
@@ -93,13 +93,15 @@
 
           <el-table-column property="link" label="缩略图" width="120">
             <template #default="scope">
-              <img
+             <div v-if="scope.row?.resultType === 5" class="videoItem1">
+               <img
                 class="quanjing"
                 @click="clickpanorama(scope.row)"
-                v-if="scope.row?.resultType === 5"
+                
                 :src="scope.row?.smallUrl"
                 alt=""
               />
+             </div>
               <!-- 视频 -->
               <div v-else-if="scope.row?.resultType === 1" class="videoItem1">
                 <img
@@ -116,20 +118,23 @@
                 />
               </div>
               <!-- 正射 -->
-              <el-image
-                v-else-if="scope.row?.resultType === 4"
+              <div v-else-if="scope.row?.resultType === 4" class="videoItem1">
+                <el-image
+                
                 :src="getzsSmallImg(scope.row?.link)"
                 :preview-src-list="[getzsSmallImg(scope.row?.link)]"
                 fit="cover"
                 preview-teleported
               />
-              <el-image
-                v-else
+              </div>
+              <div v-else class="videoItem1">
+                <el-image            
                 :src="scope.row?.smallUrl"
                 :preview-src-list="[scope.row?.showUrl]"
                 fit="cover"
                 preview-teleported
               />
+              </div>
             </template>
           </el-table-column>
           <el-table-column prop="jobTime" label="任务时间" />
@@ -304,7 +309,7 @@
       >
         <div class="video-container">
           <video
-            style="width: 100%"
+            style="width: 100%;height: 500px"
             class="videoBox"
             ref="videoRefs"
             controls
@@ -1027,17 +1032,30 @@
     width: 76px;
     height: 72px;
   }
+ 
   .videoItem1 {
-    .playBox {
-      width: 20px;
-      height: 20px;
-      position: absolute;
-      top: 46%;
-      left: 43%;
-      transform: translate(-50%, -50%);
-      cursor: pointer;
-    }
-  }
+  position: relative; 
+  display: flex;     
+  justify-content: center; 
+  align-items: center;     
+  width: 100%;       
+  height: 100%;     
+
+  min-height: 80px;
+}
+
+.playBox {
+  position: absolute;
+  width: 20px;        
+  height: 20px;
+  cursor: pointer;
+  
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%); 
+ 
+  z-index: 1;
+}
   .videoDialog :deep(.el-dialog) {
     height: 600px;
     width: 54%;
diff --git a/src/views/device/addDevice.vue b/src/views/device/addDevice.vue
index a8a95d0..8eece02 100644
--- a/src/views/device/addDevice.vue
+++ b/src/views/device/addDevice.vue
@@ -288,9 +288,9 @@
                             },
                         ],
                     },
-                    
-                    
-                    
+
+
+
 
                 ],
             },
@@ -393,7 +393,7 @@
                 console.error('获取行政区划数据失败:', error);
                 return [];
             }
-        },  
+        },
         findNodeById(tree, id) {
             if (tree.id === id) {
                 return tree;
@@ -411,11 +411,11 @@
             try {
                 const response = await this.getFullAreaCode(areaCode);
                 const codes = response.split(',');
-                
+
                 // 获取区域树数据
                 const xzqhData = await this.getRegionTreeList(codes[0]);
                 if (!xzqhData) return '/';
-                
+
                 const names = [];
                 for (const code of codes) {
                     const node = this.findNodeById(xzqhData, code);
@@ -434,7 +434,7 @@
         copyInfo (row, index) {
           const ipAddress = import.meta.env.VITE_APP_DEVICE_IP
           let params = `
-            host: tcp://${ipAddress}
+            网关地址: tcp://${ipAddress}
             账号:drone
             密码:drone@123
             组织id:${row.bing_id}
@@ -610,7 +610,7 @@
             this.onLoad(this.page, this.query)
         },
         onLoad (page, params = {}) {
-            
+
             const { releaseTimeRange } = this.query
             let values = {
                 ...params,
@@ -629,7 +629,7 @@
             if (values.area_code) {
                 values['area_code'] = values.area_code.split(',').pop()
             }
-            
+
             this.loading = true
             getList(page.currentPage, page.pageSize, values).then(async res => {
                 const data = res.data.data
@@ -649,7 +649,7 @@
                 this.loading = false
                 this.selectionClear()
             })
-            
+
         },
         treeLoad (tree, treeNode, resolve) {
             var params = {
diff --git a/src/views/device/airport.vue b/src/views/device/airport.vue
index fdddfba..7bead20 100644
--- a/src/views/device/airport.vue
+++ b/src/views/device/airport.vue
@@ -26,18 +26,18 @@
       <template #firmware_status="{ row }">
         <div v-if="row.firmware_status == 1" class="onlineStatus1">
           <el-tag type="info">无需升级</el-tag>
-          <el-tag type="primary" effect="dark" class="active-element" @click="rollFirmware(row)">版本管理</el-tag>
+<!--          <el-tag type="primary" effect="dark" class="active-element" @click="rollFirmware(row)">版本管理</el-tag>-->
           <!-- <div style="background-color: #f1f1f1; border-radius: 4px">无需升级</div> -->
         </div>
         <div v-if="row.firmware_status == 2" class="onlineStatus1">
           <!-- <el-tag type="success" effect="dark" class="active-element" @click="updateFirmware(row)"
             >升级固件</el-tag
           > -->
-          <el-tag type="primary" effect="dark" class="active-element" @click="rollFirmware(row)">版本管理</el-tag>
+<!--          <el-tag type="primary" effect="dark" class="active-element" @click="rollFirmware(row)">版本管理</el-tag>-->
           <!-- <div @click="updateFirmware(row)" class="firmware_status">升级固件</div> -->
         </div>
         <div v-if="row.firmware_status == 3" class="onlineStatus">
-          <el-tag type="success" effect="dark" class="active-element" @click="updateFirmware(row)">一致性升级</el-tag>
+<!--          <el-tag type="success" effect="dark" class="active-element" @click="updateFirmware(row)">一致性升级</el-tag>-->
           <!-- <div @click="updateFirmware(row)" class="firmware_status">一致性升级</div> -->
         </div>
         <div v-if="row.firmware_status == 4" class="onlineStatus">
@@ -64,31 +64,33 @@
             </el-icon>更多</el-button>
           <template #dropdown v-if="scope.row.domain == 3">
             <el-dropdown-menu teleported>
-              <el-dropdown-item command="a">
-                <el-button type="primary" text icon="el-icon-paperclip" v-if="permission.oss_set"
+              <el-dropdown-item command="a" v-if="permission.oss_set">
+                <el-button type="primary" text icon="el-icon-paperclip"
                   @click.stop="handleOpenOssSet(scope.row, scope.index)">存储配置</el-button>
               </el-dropdown-item>
-              <el-dropdown-item command="b">
-                <el-button type="primary" text icon="el-icon-share" v-if="permission.per_share && scope.row.domain == 3"
+              <el-dropdown-item command="b" v-if="permission.per_share && scope.row.domain == 3">
+                <el-button type="primary" text icon="el-icon-share"
                   @click.stop="handleOpenDevicePerShare(scope.row, scope.index)">机场授权</el-button>
               </el-dropdown-item>
-              <el-dropdown-item command="c"> <el-button type="primary" text icon="el-icon-position"
-                  :disabled="!scope.row.status" v-if="permission.rang_con && scope.row.domain == 3"
+              <el-dropdown-item command="c" v-if="permission.rang_con && scope.row.domain == 3">
+                <el-button type="primary" text icon="el-icon-position"
+                  :disabled="!scope.row.status"
                   @click.stop="handleOpenRemoteDebugging(scope.row, scope.index)">远程调试</el-button>
               </el-dropdown-item>
-              <el-dropdown-item command="d"><el-button type="primary" text icon="el-icon-collection"
-                  v-if="permission.fly_device_offline" @click.stop="rollFirmware(scope.row)">固件版本管理</el-button>
+              <el-dropdown-item command="d" v-if="permission.fly_device_offline">
+                <el-button type="primary" text icon="el-icon-collection"
+                   @click.stop="rollFirmware(scope.row)">固件版本管理</el-button>
               </el-dropdown-item>
               <el-dropdown-item command="d" v-if="!scope.row.status">
                 <el-button type="primary" text icon="el-icon-collection" @click.stop="dockNotLine(scope.row)">
                   {{ scope.row.hidden_flag === 1 ? '设备上线' : '设备下线' }}
                 </el-button>
               </el-dropdown-item>
-              <el-dropdown-item command="e"><el-button type="primary" text icon="el-icon-document-delete"
-                  v-if="permission.fly_device_offline && scope.row.mode_code !==0" @click.stop="handleDeviceOffline(scope.row)">注销</el-button>
+              <el-dropdown-item command="e" v-if="permission.fly_device_offline && scope.row.mode_code !==0">
+                <el-button type="primary" text icon="el-icon-document-delete" @click.stop="handleDeviceOffline(scope.row)">注销</el-button>
               </el-dropdown-item>
-              <el-dropdown-item command="e">
-                <el-button type="primary" text icon="el-icon-document-delete" v-if="permission.fly_device_offline"
+              <el-dropdown-item command="e" v-if="permission.fly_device_offline">
+                <el-button type="primary" text icon="el-icon-document-delete"
                   :disabled="scope.row.dem_status === 1" @click.stop="handleStatus(scope.row)">
                   {{ scope.row.dem_status === 0 ? '初始化地形' : (scope.row.dem_status === 1 ? '初始化中' : '更新地形') }}
                 </el-button>
@@ -297,6 +299,7 @@
       rollFirmVersion: '',
       firmList: [],
       rollFirmwareBox: false,
+      isUpdateDrone: {},
       // 用于记录已经创建的websocket,防止重复创建
       webSocketIdSet: new Set(),
       // 用于保存多组websocket
@@ -407,7 +410,46 @@
               },
             ],
           },
+          {
+            label: '设备状态',
+            prop: 'mode_code',
+            addDisplay: false,
+            editDisplay: false,
+            viewDisplay: false,
+            labelWidth: 145,
+            searchSpan: 4,
+            search: true,
+            type: 'select',
+            dicData: [
+              { label: '在线', value: 0 },
+              { label: '离线', value: -1 },
+              { label: '远程调试', value: 2 },
+              { label: '现场调试', value: 1 },
+              { label: '固件升级中', value: 3 }
+            ],
+            slot: true,
+            width: 110,
 
+            rules: [
+              {
+                required: true,
+                message: '请输入机场状态',
+                trigger: 'blur',
+              },
+            ],
+          },
+          {
+            label: '固件升级',
+            prop: 'firmware_status',
+            labelWidth: 145,
+            width: 100,
+            // hide: true,
+            viewDisabled: true,
+            addDisabled: true,
+            editDisplay: false, //编辑显示
+            addDisplay: false,
+            viewDisplay: false,
+          },
           {
             label: '4G增强',
             prop: 'link_workmode',
@@ -502,35 +544,7 @@
             labelWidth: 145,
             width: 110,
           },
-          {
-            label: '设备状态',
-            prop: 'mode_code',
-            addDisplay: false,
-            editDisplay: false,
-            viewDisplay: false,
-            labelWidth: 145,
-            searchSpan: 4,
-            search: true,
-            type: 'select',
-            dicData: [
-              { label: '在线', value: 0 },
-              { label: '离线', value: -1 },
-              { label: '远程调试', value: 2 },
-              { label: '现场调试', value: 1 },
-              { label: '固件升级中', value: 3 }
-            ],
-            slot: true,
-            width: 110,
-
-            rules: [
-              {
-                required: true,
-                message: '请输入机场状态',
-                trigger: 'blur',
-              },
-            ],
-          },
-
+          
           {
             label: '设备SN',
             prop: 'device_sn',
@@ -625,18 +639,6 @@
             labelWidth: 145,
             width: 110,
             editDisplay: false, //编辑显示
-          },
-          {
-            label: '固件升级',
-            prop: 'firmware_status',
-            labelWidth: 145,
-            width: 100,
-            hide: true,
-            viewDisabled: true,
-            addDisabled: true,
-            editDisplay: false, //编辑显示
-            addDisplay: false,
-            viewDisplay: false,
           },
           {
             label: '所属部门',
@@ -867,21 +869,33 @@
       websocket?.initSocket()
     },
     async messageHandler(payload) {
-      if (!payload) {
+      let loadData = JSON.parse(payload)
+      if (!loadData) {
         return
       }
-      if (payload.biz_code != 'ota_progress') {
+
+      if (loadData.biz_code != 'ota_progress') {
         return
       }
-      var data = payload.data
-      this.data.forEach(e => {
-        if (e.device_sn == data.sn && data.output.status == 'in_progress') {
-          e.firmware_progress = data.output.progress.percent
+      console.log(loadData.data.output.progress.percent, '6666')
+      // if(loadData.data.output.progress.percent < 10) {
+      //   this.onLoad(this.page)
+      // }
+      this.data.forEach((e, index) => {
+        if ((e.device_sn == loadData.data.sn || e.child_sn == loadData.data.sn) && loadData.data.output.status == 'in_progress') {
+          e.firmware_progress = loadData.data.output.progress.percent
+          if (e.children[0]) {
+            e.children[0].firmware_progress = loadData.data.output.progress.percent;
+          }
+          console.log('是否更新中2',e.children[0])
         }
 
-        if (e.device_sn == data.sn && data.output.status == 'ok') {
+        if ((e.device_sn == loadData.data.sn || e.child_sn == loadData.data.sn) && loadData.data.output.status == 'ok') {
           // 升级完成修改状态
           e.firmware_status = 1
+          if (e.children[0]) {
+            e.children[0].firmware_status = 1
+          }
           const webscoket = this.websocketMap.get(e.workspace_id)
           // 关闭
           webscoket?.close()
@@ -890,6 +904,7 @@
           this.webSocketIdSet.delete(e.workspace_id)
         }
       })
+      // this.$forceUpdate()
     },
     init() {
       (this.page = {
@@ -998,6 +1013,7 @@
     },
     // 版本回退点击事件
     rollFirmware(row) {
+      console.log(this.data,row, '打印看看值')
       if (row.status == 0) {
         this.$message({
           type: 'warning',
@@ -1017,6 +1033,7 @@
       }
       var that = this
       this.rollFirmwareBox = true
+      this.isUpdateDrone = row
       const param = {
         device_name: row.device_name,
       }
@@ -1122,6 +1139,7 @@
           // 需要改变的版本号和无人机版本号如果是一致,进行单独的机场升级/回滚操作
         }
       }
+      
       ota(that.firmwareInfo.workspaceId, arr).then(res => {
         that.firmwareVersion = ''
         that.firmwareInfo = {}
@@ -1130,8 +1148,25 @@
           type: 'success',
           message: '操作成功!',
         })
-        this.onLoad(this.page)
-        done()
+        // 此处需分是无人机升级还是机巢升级版本
+        console.log('看看是无人机更新还是机场更新',that.isUpdateDrone)
+        if(that.isUpdateDrone.domain == 3) {
+          this.onLoad(this.page)
+        } else {
+          console.log(111)
+          this.data.map(item => {
+            if(item.workspace_id === that.isUpdateDrone.workspace_id) {
+              item.firmware_status = 2
+              item.mode_code = 3
+              item.children[0].mode_code = 0
+              item.children[0].firmware_status = 4
+              this.connectWebSocket(item)
+              console.log('无人机更新中',item)
+            }
+          })
+        }
+        // 获取保存的 resolve 函数===== 此处需要更新子集塞入父级
+        // done()
       })
     },
     // 升级固件按钮事件
@@ -1370,25 +1405,25 @@
           this.$refs.crud.toggleSelection()
         })
     },
-    async getFullAreaCode(areaCode) {
-      console.log('getFullAreaCode', areaCode)
-      if (!areaCode) return ''
-
-      const code = areaCode.toString()
-
-      if (code.includes(',')) return code
-
-      if (code.endsWith('0000000000')) {
-        return code
-      } else if (code.endsWith('00000000') && !code.endsWith('0000000000')) {
-        const provinceCode = code.substring(0, 2) + '0000000000'
-        return `${provinceCode},${code}`
-      } else {
-        const provinceCode = code.substring(0, 2) + '0000000000'
-        const cityCode = code.substring(0, 4) + '00000000'
-        return `${provinceCode},${cityCode},${code}`
-      }
-    },
+    // async getFullAreaCode(areaCode) {
+    //   console.log('getFullAreaCode', areaCode)
+    //   if (!areaCode) return ''
+    //
+    //   const code = areaCode.toString()
+    //
+    //   if (code.includes(',')) return code
+    //
+    //   if (code.endsWith('0000000000')) {
+    //     return code
+    //   } else if (code.endsWith('00000000') && !code.endsWith('0000000000')) {
+    //     const provinceCode = code.substring(0, 2) + '0000000000'
+    //     return `${provinceCode},${code}`
+    //   } else {
+    //     const provinceCode = code.substring(0, 2) + '0000000000'
+    //     const cityCode = code.substring(0, 4) + '00000000'
+    //     return `${provinceCode},${cityCode},${code}`
+    //   }
+    // },
     beforeOpen(done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(async res => {
@@ -1441,12 +1476,17 @@
         this.page.total = data.total
         data.records.forEach(e => {
           e['hasChildren'] = e.has_children
-          if (e.firmware_status == 4) {
+          if (e.firmware_status == 4 || e.mode_code === 3) {
+            console.log('监听了没')// 机巢升级 firmware_status === 4
             this.connectWebSocket(e)
           }
           e.duration_of_insurance = [e?.insure_start_time?.slice(0, 10) || '', e?.insure_expired_time?.slice(0, 10) || '']
         })
-        this.data = data.records
+        this.data = data.records.map(item => ({
+          ...item,
+          firmware_progress: 0
+        }));
+        console.log('2222',this.data)
         this.loading = false
         this.selectionClear()
       })
@@ -1458,7 +1498,10 @@
         childSn: tree.child_sn,
       }
       getList(1, 10, params).then(res => {
-        const data = res.data.data.records
+        const data = res.data.data.records.map(item =>({
+          ...item,
+          firmware_progress: 0
+        }))
         data.forEach(e => {
           e.duration_of_insurance = [e?.insure_start_time?.slice(0, 10) || '', e?.insure_expired_time?.slice(0, 10) || '']
         })
diff --git a/src/views/device/components/DockControlPanel.vue b/src/views/device/components/DockControlPanel.vue
index 9a93c71..e51976b 100644
--- a/src/views/device/components/DockControlPanel.vue
+++ b/src/views/device/components/DockControlPanel.vue
@@ -233,7 +233,7 @@
 watch(
   () => Store.getters.deviceState,
   value => {
-    console.log(value, '测试')
+    // console.log(value, '测试')
     // console.log('设备状态变化', value.deviceInfo[props.deviceInfo.child_sn])
     if (props.sn && (value.currentSn === props.deviceInfo.child_sn || value.currentSn === props.deviceInfo.device_sn)) {
       debugStatus.value = value.dockInfo[props.deviceInfo.device_sn]?.basic_osd?.mode_code === EDockModeCode.Remote_Debugging
diff --git a/src/views/job/components/DeviceJobDetails.vue b/src/views/job/components/DeviceJobDetails.vue
index b0880a0..b143653 100644
--- a/src/views/job/components/DeviceJobDetails.vue
+++ b/src/views/job/components/DeviceJobDetails.vue
@@ -99,28 +99,7 @@
                 fit="cover"
               />
 
-              <el-dialog
-                class="ztzf-dialog"
-                append-to-body
-                modal-class="detailsOfHistoricalTasks"
-                v-model="VideoShow"
-                :width="pxToRem(1600)"
-                :close-on-click-modal="false"
-                :destroy-on-close="true"
-              >
-                <div class="fullscreen">
-                  <video
-                    ref="fullscreenVideo"
-                    class="fullscreen-video"
-                    :src="currentVideoUrl"
-                    :style="{ width: pxToRem(1567), height: '80vh' }"
-                    controls
-                    preload="auto"
-                    @play="handleVideoPlay"
-                    @ended="handleVideoEnded"
-                  ></video>
-                </div>
-              </el-dialog>
+            
             </div>
 
           </template>
@@ -145,6 +124,28 @@
       </div>
     </div>
   </el-dialog>
+    <el-dialog
+        class="ztzf-dialog"
+        append-to-body
+        modal-class="detailsOfHistoricalTasks"
+        v-model="VideoShow"
+        :width="pxToRem(1600)"
+        :close-on-click-modal="false"
+        :destroy-on-close="true"
+      >
+        <div class="fullscreen">
+          <video
+            ref="fullscreenVideo"
+            class="fullscreen-video"
+            :src="currentVideoUrl"
+            :style="{ width: pxToRem(1567), height: '80vh' }"
+            controls
+            preload="auto"
+            @play="handleVideoPlay"
+            @ended="handleVideoEnded"
+          ></video>
+        </div>
+      </el-dialog>
   <!-- 全景360 -->
   <PanoramaPopup
     v-if="'全景'"
@@ -205,11 +206,11 @@
   { name: '任务类型', value: '', field: 'industry_type_str' },
   { name: '飞行事件', value: '', field: 'event_number' },
   { name: '所属机巢', value: '', field: 'device_names' },
+  { name: '创建人', value: '', field: 'creator_name' },
   { name: '所属部门', value: '', field: 'dept_name' },
   { name: '任务时间', value: '', field: 'cycle_time_value' },
   { name: '关联算法', value: '', field: 'ai_type_str' },
   { name: '自定义识别区', value: '', field: 'enable_custom_area' },
-  { name: '创建人', value: '', field: 'creator_name' },
   { name: '任务描述', value: '', field: 'remark' },
   // { name: '任务执行次数', value: '', field: 'job_num' },
 ])
diff --git a/src/views/job/components/SearchBox.vue b/src/views/job/components/SearchBox.vue
index 6f6e0af..83bba63 100644
--- a/src/views/job/components/SearchBox.vue
+++ b/src/views/job/components/SearchBox.vue
@@ -320,27 +320,47 @@
 let timeListEnum = ['TODAY', 'CURRENT_WEEK', 'CURRENT_MONTH', 'CURRENT_YEAR'];
 let checked = ref('month');
 
+// 根据 周期 获取时间段
+function getDateRange(date_enum) {
+  // 设置对应的日期范围
+  switch (date_enum) {
+    case 'today':
+      dateRange.value = [dayjs().startOf('day').format(timeFormat), dayjs().endOf('day').format(timeFormat)]
+      break
+    case 'week':
+      dateRange.value = [dayjs().startOf('week').format(timeFormat), dayjs().format(timeFormat)]
+      break
+    case 'month':
+      dateRange.value = [dayjs().startOf('month').format(timeFormat), dayjs().format(timeFormat)]
+      break
+    case 'year':
+      dateRange.value = [dayjs().startOf('year').format(timeFormat), dayjs().format(timeFormat)]
+      break
+  }
+}
+
 let timeClick = (item, index) => {
-  if (checked.value === item){
+  if (checked.value === item) {
     checked.value = null
     searchForm.date_enum = undefined
-  }else{
+    dateRange.value = []
+  } else {
     checked.value = item
     searchForm.date_enum = timeListEnum[index]
+    getDateRange(item)
   }
-  dateRange.value = []
   handleSearch()
-};
+}
 // 搜索
 const handleSearch = () => {
   if (!dateRange.value) {
     dateRange.value = [];
   }
-  if (dateRange.value && dateRange.value.length) {
-    // 有值时 清除 日 本周 本月 本年状态
-    checked.value = '';
-    searchForm.date_enum = '';
-  }
+  // if (dateRange.value && dateRange.value.length) {
+  //   // 有值时 清除 日 本周 本月 本年状态
+  //   checked.value = '';
+  //   searchForm.date_enum = '';
+  // }
   // 提交至store
   let params = {
     ...searchForm,
@@ -446,6 +466,8 @@
     dateRange.value = dateArray;
     const find = store.state.tags.bsTagList.find(i => i.path === '/job/jobstatistics')
           find && (find.query = {})
+  } else {
+    getDateRange('month')
   }
       // 查询一次
     handleSearch()
diff --git a/src/views/layerManagement/components/leftList.vue b/src/views/layerManagement/components/leftList.vue
index 166ce89..4047f90 100644
--- a/src/views/layerManagement/components/leftList.vue
+++ b/src/views/layerManagement/components/leftList.vue
@@ -59,6 +59,7 @@
         :expand-on-click-node="false"
          :check-on-click-node="false"
         :filter-node-method="filterNode"
+        highlight-current
         @check="handleCheck"
         :props="{
           label: 'name',
@@ -126,6 +127,16 @@
     loading.value = true;
     const res = await treeDataApi({filterExpired:false});
     treeAllData.value = res.data.data;
+    if(coverData.value.length===0){
+       checkedKeys.value = [];
+    checkedNodes.value = [];
+    coverData.value = [];
+     nextTick(() => {
+      if (treeRef.value) {
+        treeRef.value.setCheckedKeys([]);
+      }
+    });
+    }
 
     setupWatch();
   } catch (error) {
@@ -193,6 +204,12 @@
 };
 // 定位按钮事件
 const handleLocation = node => {
+ const currentKey = treeRef.value.getCurrentKey();
+      if (currentKey === node.data.id) {
+        treeRef.value.setCurrentKey(null); // 取消高亮
+      } else {
+        treeRef.value.setCurrentKey(node.data.id); // 高亮当前节点
+      }
   if (node.data.level === 2) {
     layerParams.value.isSingleLocating = false;
     // 新增:标记当前定位的文件夹ID
@@ -206,7 +223,6 @@
   const currentCheckedKeys = [...checkedKeys.value];
   const currentCheckedNodes = [...checkedNodes.value];
   EventBus.emit('focusOnNode', node.data);
-
   if (node.data.level === 2) {
     const folderChildren = node.data.children || [];
     const childrenIds = folderChildren.map(child => child.id);
@@ -260,6 +276,7 @@
 
 // 删除按钮事件
 const handleDelete = node => {
+
   let id = node.data.id;
   ElMessageBox.confirm('确定要删除该内容吗?', '提示', {
     confirmButtonText: '确定',
@@ -445,14 +462,17 @@
   overflow-y: scroll;
   height: 0;
   flex-grow: 1;
-  padding-right: 12px;
+  // padding-right: 12px;
   :deep(.el-tree-node__content) {
   height: 45px !important;
   line-height: 45px !important;
   // padding-left: 0 !important;
   border-bottom: 1px dotted  rgba(255,255,255,0.1);
   }
-
+  // 定位选中节点的背景色样式
+  ::v-deep(.el-tree-node.is-current > .el-tree-node__content) {
+    background-color: rgba(64, 158, 255, 0.2) !important; // 浅蓝色半透明背景
+  }
   .isTheTerritory {
     :deep() {
       .el-tree-node__expand-icon {
@@ -470,6 +490,7 @@
     display: flex;
     justify-content: space-between;
     align-items: center;
+     padding-right: 12px;
     width: 100%;
        .nodeName {
     font-size: 12px !important;
diff --git a/src/views/layerManagement/components/rightEdit.vue b/src/views/layerManagement/components/rightEdit.vue
index 5692638..6d7d0c9 100644
--- a/src/views/layerManagement/components/rightEdit.vue
+++ b/src/views/layerManagement/components/rightEdit.vue
@@ -122,8 +122,9 @@
       </div>
     </div>
     <div class="btnGroups">
-      <img v-if="!layerParams.editingIsProhibited" src="/src/assets/images/layerManagement/savebtn.svg" alt="" @click="submitHandle" />
-     <img v-if="layerParams.editingIsProhibited" src="/src/assets/images/layerManagement/closeBtn.svg" @click="cancelHandel" alt="" />
+      <img v-if="!layerParams.editingIsProhibited && layerParams.fenceArea / 1000000 > 50" src="/src/assets/images/layerManagement/disabled.svg" alt="" />
+      <img v-if="!layerParams.editingIsProhibited && layerParams.fenceArea / 1000000 < 50" src="/src/assets/images/layerManagement/savebtn.svg" alt="" @click="submitHandle" />
+      <img v-if="layerParams.editingIsProhibited" src="/src/assets/images/layerManagement/closeBtn.svg" @click="cancelHandel" alt="" />
       <img v-else src="/src/assets/images/layerManagement/cancelbtn.svg" @click="cancelHandel" alt="" />
       
     </div>
@@ -168,8 +169,10 @@
   () => layerParams.value.fenceArea,
   newArea => {
     if (newArea !== undefined && newArea !== null) {
-      fenceArea.value = newArea;
-      formData.value.area = newArea;
+      if (newArea / 1000000 < 50) {
+        fenceArea.value = newArea;
+        formData.value.area = newArea;
+      }
     }
   },
   { immediate: true }
diff --git a/src/views/layerManagement/index.vue b/src/views/layerManagement/index.vue
index 506055e..4e1a8b4 100644
--- a/src/views/layerManagement/index.vue
+++ b/src/views/layerManagement/index.vue
@@ -15,7 +15,7 @@
           <span class="icon">
             <el-icon><WarningFilled /></el-icon>
           </span>
-          <span>测区不支持交叉面</span>
+          <span>{{ showWarnToolTipText }}</span>
         </div>
          <div class="tool-tip" v-if="!isShowWaringTip && layerParams.addNest">
           {{ showToolTipText }}
@@ -72,6 +72,7 @@
 const userInfo = computed(() => store.getters.userInfo);
 const areaCode = userInfo.value?.detail?.areaCode || '';
 const showToolTipText = ref('点击地图生成测绘区域')
+const showWarnToolTipText = ref('测区不支持交叉面')
 // 红色警告交叉面提示窗
 const isShowWaringTip = ref(false);
 const activeName = ref('自定义识别区');
@@ -417,7 +418,7 @@
   }
   if(polygon.length > 0 && !isShowWaringTip.value){
     showToolTipText.value = '测绘区域已绘制完成'
-  }else {
+  } else {
     showToolTipText.value = '点击地图生成测绘区域'
   }
 
@@ -436,13 +437,20 @@
     const closedPolygon = isClosed ? polygon : [...polygon, firstPoint];
     const turfPolygon = turf.polygon([closedPolygon]);
     const area = _.round(turf.area(turfPolygon), 2);
-    layerParams.value.fenceArea = area;
+    if (area / 1000000 < 50) {
+      layerParams.value.fenceArea = area;
+    } else {
+      layerParams.value.fenceArea = area;
+      isShowWaringTip.value = true
+      showWarnToolTipText.value = '自定义禁飞区不能超过50平方公里'
+    }
   } else {
     layerParams.value.fenceArea = 0;
   }
 };
 drawPolygonExample.subscribe('getShowWaringTip', data => {
   isShowWaringTip.value = data;
+  showWarnToolTipText.value = '测区不支持交叉面'
   layerParams.value.crossSurface = data
 });
 const throttleLoadPlanarRoute = throttle(loadPlanarRoute, 200);
@@ -538,6 +546,7 @@
   });
   // 更新选中数据列表
   selectDataList.value = selectDataList.value.filter(item => item.folder_id !== folderId);
+  getdataFolderApi()
 };
 </script>
 
diff --git a/src/views/resource/components/spotDetails.vue b/src/views/resource/components/spotDetails.vue
index dd0f1eb..1a923a1 100644
--- a/src/views/resource/components/spotDetails.vue
+++ b/src/views/resource/components/spotDetails.vue
@@ -30,6 +30,7 @@
                       v-model="item.value"
                       placeholder="请选择图斑类型"
                       style="width: 102%"
+                      :disabled="item.value ==='综合类'"
                     >
                       <el-option
                         v-for="opt in spotTypeOptions"
@@ -60,7 +61,14 @@
         <div class="table-overlay">
           <div class="table-content">
             <div class="tabname">图斑列表</div>
-            <el-table
+       <div class="tabBoxLoading" 
+        v-loading="tableLoading"
+            element-loading-text="加载中..." 
+            element-loading-background="rgba(0, 0, 0, 0.1)"
+            >
+             <el-table
+             v-if="tableData.length > 0"
+           
               ref="polygonTableEle"
               highlight-current-row
               :row-class-name="tableRowClassName"
@@ -108,6 +116,7 @@
                 </template>
               </el-table-column>
             </el-table>
+       </div>
            
           </div>
         </div>
@@ -160,6 +169,7 @@
 const homeViewer = shallowRef(null);
 let tbJwdList = [];
 const loading = ref(false);
+const tableLoading = ref(true);
 const tableData = ref([]);
 const AlltableData = ref([]);
 let total = ref(0);
@@ -260,9 +270,9 @@
 const isInit = ref(true);
 // 图斑管理表格
 const getTableList = () => {
+  tableLoading.value = true; 
   const requestParams = {
     patchesInfoId: props.detailid,
-  
   };
   AlltableMapListApi(requestParams).then(res => {
     tableData.value = res.data.data?.map(item => ({
@@ -277,6 +287,8 @@
     } else {
       entitiesAddSpot();
     }
+  }).finally(() => {
+    tableLoading.value = false;
   });
 };
 
@@ -640,7 +652,7 @@
       getspotManagementTableApi(); 
     }, 0);
   } else {
- 
+ tableLoading.value = false;
     tableData.value = []; 
     isEditing.value = false;
     handleUpDateDrawState(false);
@@ -907,9 +919,15 @@
   z-index: 9999 !important;
   max-width: 300px;
 }
+.tabBoxLoading {
+height: 100%;
+
+}
+
 .el-table {
-  flex: 1;
-  overflow: auto;
+height: 98%;
+overflow: auto;
+
 }
 .btnGroups {
   position: absolute;
diff --git a/src/views/resource/patchManagement.vue b/src/views/resource/patchManagement.vue
index 2c51b44..1d73c99 100644
--- a/src/views/resource/patchManagement.vue
+++ b/src/views/resource/patchManagement.vue
@@ -510,44 +510,48 @@
   });
 };
 // 图斑上传
-const uploadFlightFile = (file, t) => {
+const uploadFlightFile = async (file, t) => {
   loading.value = true;
-  const fileSuffix = file.name.substring(file.name.lastIndexOf('.') + 1);
-  if (!['kmz', 'kml', 'zip'].includes(fileSuffix)) {
-    return ElMessage.error('请上传zip/kmz/kml格式的文件');
-  }
-  if (file) {
-    box.value = false;
-  }
-  let data = new FormData();
-  let type = t === '3' ? '' : t;
-  const params = {
-    file: file,
-    fileName: ruleForm.name,
-    LotTypeId: ruleForm.region,
-  };
+  try {
+    const fileSuffix = file.name.substring(file.name.lastIndexOf('.') + 1);
+    if (!['kmz', 'kml', 'zip'].includes(fileSuffix)) {
+      ElMessage.error('请上传zip/kmz/kml格式的文件');
+      return;
+    }
+    box.value = false;    
+    let data = new FormData();
+    let type = t === '3' ? '' : t;
+    const params = {
+      file: file,
+      fileName: ruleForm.name,
+      LotTypeId: ruleForm.region,
+    };
 
-  Object.keys(params).forEach(key => {
-    data.append(key, params[key]);
-  });
+    Object.keys(params).forEach(key => {
+      data.append(key, params[key]);
+    });
 
-  uploadManagementApi(data).then(res => {
+    const res = await uploadManagementApi(data);
     if (res.data.code !== 0) {
-      return ElMessage.error('上传失败');
+      ElMessage.error('上传失败');
+      return;
     }
 
     ElMessage.success('上传成功');
-
-    loading.value = false;
+    
+    // 重置表单
     ruleForm.name = '';
     ruleForm.region = '';
-
     if (ruleFormRef.value) {
       ruleFormRef.value.resetFields();
     }
 
     searchReset();
-  });
+  } catch (error) {
+     loading.value = false;
+  } finally {
+    loading.value = false;
+  }
 };
 provide('searchReset', searchReset);
 onMounted(() => {
diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index d88bbbb..595c86c 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -91,19 +91,14 @@
 import AddEditDetails from './component/AddEditDetails.vue'
 import NProgress from 'nprogress'
 import { useStore } from 'vuex'
+import { useRoute } from 'vue-router'
 import { downloadXls } from '@/utils/util'
 import {
   getList,
-  saveUpdateOrderLog,
   orderLogDetails,
-  orderLogRecall,
-  orderLogReject,
-  orderLogPass,
   orderLogExport,
   jobStatusNum,
-  userPublish,
   deleteOrderLog,
-  getWaylineMaxTerrainHeight
 } from '@/api/tickets/orderLog'
 import { newGetWorkspacesPage } from '@/api/resource/wayline'
 import { getDictionaryByCode } from '@/api/system/dictbiz'
@@ -116,11 +111,10 @@
 import { aiImagesPage } from '@/api/dataCenter/dataCenter';
 
 const store = useStore()
+const route = useRoute()
 
 const userInfo = computed(() => store.state.user.userInfo)
 const permission = computed(() => store.state.user.permission);
-
-console.log(userInfo,permission, '8888')
 
 const isShowAddEditDetails = ref(false)
 
@@ -150,7 +144,6 @@
   activeTab.value = tabsList.value[0].name
   // tab值传
   orderListParams.status = tabsList.value[0].value
-  console.log('8878797', tabsList.value)
   // tabsList.value
   //   .map(tab => {
   //     if (tab.name === 'all') {
@@ -334,7 +327,6 @@
       ...cloneDeep(orderListParams.searchParams)
     }
     const res = await orderLogExport(apiParams)
-    console.log(res, '导出')
     downloadXls(res.data, `智飞工单${dayjs().format('YYYY-MM-DD')}.xlsx`)
     ElMessage.success('导出成功')
 
@@ -447,6 +439,9 @@
   filteredTabs()
   getTableList()
   updateGlobalCounts()
+  if (route.query.id) {
+    route.query.status === '1' ? handleCheckDetail({ id:  route.query.id}, '工单审核') : handleCheckDetail({ id:  route.query.id}, '工单详情')
+  }
 })
 </script>
 
diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index 7f4703a..fde578b 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -891,7 +891,10 @@
   try {
     const response = await getstatusCount(params)
     const statusCount = response.data.data || {}
-    const totalCount = Object.values(statusCount).reduce((sum, count) => sum + (count || 0), 0)
+  	const totalCount = Object.entries(statusCount).reduce((sum, [key, count]) => {
+			if (key === '6') return sum
+			return sum + (count || 0)
+		}, 0)
     tabs.value.forEach(tab => {
       if (tab.name === 'all') {
         tab.count = totalCount
diff --git a/src/views/wel/components/backlog.vue b/src/views/wel/components/backlog.vue
index c106d5c..d2b2162 100644
--- a/src/views/wel/components/backlog.vue
+++ b/src/views/wel/components/backlog.vue
@@ -155,11 +155,13 @@
 const jumporder = val => {
   if (checked.value === '智飞工单') {
     const id = val.id
+    const status = val.status
     getaddOrderRecord(id)
     router.replace({
       path: `/tickets/orderLog`,
       query: {
         id,
+        status,
       },
     })
   } else {
diff --git a/src/views/wel/components/proportionStatic.vue b/src/views/wel/components/proportionStatic.vue
index 7601a16..4a063df 100644
--- a/src/views/wel/components/proportionStatic.vue
+++ b/src/views/wel/components/proportionStatic.vue
@@ -46,22 +46,32 @@
 
 <script setup>
 import useEchartsResize from '@/hooks/useEchartsResize';
-import { getJobEventByStatus } from '@/api/home/index';
+import { getJobEventByStatus, getEventStatusNum } from '@/api/home/index';
+import { getDateRange } from '@/utils/date'
 import overviewImg2 from '@/assets/images/workbench/tc2.svg';
 import overviewImg3 from '@/assets/images/workbench/tc3.svg';
 import overviewImg4 from '@/assets/images/workbench/tc4.svg';
 import overviewImg5 from '@/assets/images/workbench/tc5.svg';
 import { useRouter } from 'vue-router'
+import _ from 'lodash'
 const router = useRouter()
 let checked = ref('CURRENT_YEAR');
 let timeListStr = ['本周', '本月', '本年'];
 let timeListEnum = ['CURRENT_WEEK', 'CURRENT_MONTH', 'CURRENT_YEAR'];
+
+const dateRanges = {
+  today: getDateRange('today'),
+  week: getDateRange('week'),
+  month: getDateRange('month'),
+  year: getDateRange('year'),
+}
+
 const params = ref({
-  date_enum: 'CURRENT_YEAR',
+  // date_enum: 'CURRENT_YEAR',
   device_sn: '',
-  end_date: undefined,
-  start_date: undefined,
-   source:1,//数据来源
+  end_date: dateRanges['year'][1], // undefined,
+  start_date: dateRanges['year'][0], // undefined,
+  source:1,//数据来源
 });
 const dateSelect = ref('CURRENT_YEAR');
 const eventTypeList = ref([
@@ -72,13 +82,14 @@
 ]);
 //  工单统计
 const getTypeData = () => {
-  getJobEventByStatus(params.value).then(res => {
+  getEventStatusNum(params.value).then(res => {
     const resList = res?.data?.data || [];
+    let totalNum = resList.reduce((sum, item) => sum + (item.num || 0), 0) - resList[0].num;
     resList.forEach(item => {
       eventTypeList.value.forEach(item1 => {
         if (item1.name === item.name) {
           item1.value = item.num;
-          item1.rate = item.rate;
+          item1.rate = _.round((item.num/totalNum)*100, 1);
         }
       });
     });
@@ -94,7 +105,18 @@
 
 let timeClick = (item, index) => {
   checked.value = item;
-  params.value.date_enum = item;
+  // params.value.date_enum = item;
+  if(item === 'CURRENT_WEEK') {
+    params.value.start_date = dateRanges['week'][0]
+    params.value.end_date = dateRanges['week'][1]
+  } else if(item === 'CURRENT_MONTH') {
+    params.value.start_date = dateRanges['month'][0]
+    params.value.end_date = dateRanges['month'][1]
+  } else {
+    params.value.start_date = dateRanges['year'][0]
+    params.value.end_date = dateRanges['year'][1]
+  }
+
   dateSelect.value = item;
   getTypeData();
 };
@@ -110,7 +132,7 @@
 const echartsRef = ref(null);
 let { chart } = useEchartsResize(echartsRef);
 const initChart = val => {
-  const totalNum = val.reduce((sum, item) => sum + item.num, 0);
+  let totalNum = val[0].num //val.reduce((sum, item) => sum + item.num, 0);
   const data = {
     total: {
       title: '总计',
@@ -119,7 +141,7 @@
     data: val.map(item => ({
       value: item.num,
       name: item.name,
-      rate: item.rate,
+      rate: _.round((item.num/totalNum)*100, 1),
     })),
   };
   const containerWidth = chart.value.clientWidth;

--
Gitblit v1.9.3