From 4bb904fc27caf0576ed7dbf46d5909a7b1f778c0 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Mon, 14 Jul 2025 09:52:28 +0800
Subject: [PATCH] Merge branch 'test' of http://139.196.74.78:10010/r/drone/drone-web-manage into test

---
 src/views/tickets/ticket.vue                                                 |  186 
 src/views/wel/components/statistics.vue                                      |   33 
 src/views/wel/index.vue                                                      |  461 +-
 src/assets/images/task/zxz.png                                               |    0 
 public/fonts/font.css                                                        |   30 
 src/option/system/dictbiz.js                                                 |    8 
 src/views/resource/oss.vue                                                   |  277 
 src/views/job/jobserver.vue                                                  |  216 
 src/page/index/top/top-qna.vue                                               |  183 
 src/views/resource/waylineFile.vue                                           |  189 
 src/api/helpCenter/helpCenter.js                                             |   27 
 src/views/system/helpCenter.vue                                              |  162 
 src/views/device/airport.vue                                                 |   96 
 src/option/system/dict.js                                                    |    8 
 src/views/job/components/TaskTop/TaskTotal.vue                               |    4 
 src/views/dataCenter/components/searchData.vue                               |   95 
 src/views/job/jobinfo.vue                                                    |  258 
 index.html                                                                   |    2 
 src/styles/variables.scss                                                    |    4 
 src/utils/cesium/publicCesium.js                                             |    4 
 src/views/dataCenter/components/dataCenterMap.vue                            |   21 
 src/views/job/components/TaskTop/TaskTop.vue                                 |   22 
 src/styles/base.scss                                                         |  111 
 src/views/resource/attach.vue                                                |  219 
 src/buildConfig/buildConfig/config.default.js                                |    5 
 src/views/authority/apiscope.vue                                             |  368 -
 src/views/base/region.vue                                                    |  307 
 src/views/system/dict.vue                                                    |    8 
 src/components/basic-container/main.vue                                      |   42 
 src/permission.js                                                            |   12 
 src/store/modules/user.js                                                    |    2 
 src/views/authority/datascope.vue                                            |  427 +-
 src/views/monitor/log/error.vue                                              |  109 
 src/assets/images/helpCenter/helpIcon.png                                    |    0 
 src/views/job/components/TaskTop/TaskTime.vue                                |    4 
 src/views/system/menu.vue                                                    |  261 
 .env.jiangwu                                                                 |   42 
 src/buildConfig/config.js                                                    |   14 
 src/styles/common.scss                                                       |   20 
 src/views/authority/role.vue                                                 |  263 
 .env.development                                                             |    3 
 src/views/device/fly.vue                                                     |  303 -
 src/views/tickets/orderLog.vue                                               |  204 
 vite.config.mjs                                                              |   30 
 src/views/job/components/TaskTop/TaskIndustry.vue                            |   21 
 src/components/wel-container/main.vue                                        |   84 
 src/main.js                                                                  |   11 
 .env.production                                                              |   19 
 public/fonts/SourceHanSansCN-Regular.woff2                                   |    0 
 src/views/system/client.vue                                                  |  188 
 src/page/login/index.vue                                                     |    9 
 src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue |  117 
 src/views/odm/task.vue                                                       |  277 
 src/views/system/userinfo.vue                                                |   15 
 src/components/basic-main-content/main.vue                                   |   49 
 src/page/index/index.vue                                                     |   51 
 src/router/views/index.js                                                    |   16 
 src/views/device/index.vue                                                   |   80 
 src/views/system/sysConfig.vue                                               |  220 
 src/views/system/user.vue                                                    |  614 +-
 src/views/job/jobstatistics.vue                                              |   11 
 src/views/device/components/firmwareManage.vue                               |   14 
 src/views/device/devicePerMenu.vue                                           |  179 
 src/views/wel/components/backlog.vue                                         |  222 
 src/buildConfig/buildConfig/config.jiangwu.js                                |   12 
 src/assets/images/uoload-success.png                                         |    0 
 src/option/job/jobserver.js                                                  |   15 
 src/views/license/license.vue                                                |  176 
 .env.localhost                                                               |   41 
 src/views/algorithmRepository/algorithmRepository.vue                        |   78 
 src/api/dataCenter/dataCenter.js                                             |    4 
 src/axios.js                                                                 |   16 
 src/views/resource/wayline.vue                                               |  241 
 src/views/wel/components/calendarBox.vue                                     |  139 
 src/views/resource/media.vue                                                 |  346 +-
 src/views/system/dept.vue                                                    |  403 +-
 src/views/wel/components/flyratio.vue                                        |    3 
 src/views/job/components/TaskTop/TaskEvent.vue                               |   13 
 src/views/device/components/devicePerShare.vue                               |  210 
 src/views/device/addDevice.vue                                               |  254 
 src/option/job/jobinfo.js                                                    |   27 
 src/styles/element-ui.scss                                                   |   77 
 src/assets/images/task/qxzx.png                                              |    0 
 src/views/job/components/SearchBox.vue                                       |    3 
 /dev/null                                                                    |    0 
 src/assets/images/upload-error.png                                           |    0 
 src/views/dataCenter/dataCenter.vue                                          |  606 +-
 package.json                                                                 |    4 
 src/page/index/top/index.vue                                                 |   17 
 src/views/monitor/log/api.vue                                                |  113 
 public/fonts/SourceHanSansCN-Bold.woff2                                      |    0 
 91 files changed, 5,210 insertions(+), 4,825 deletions(-)

diff --git a/.env.development b/.env.development
index 488c30a..1281a23 100644
--- a/.env.development
+++ b/.env.development
@@ -26,7 +26,8 @@
 VITE_APP_AIRLINE_URL = https://wrj.shuixiongit.com/minio/cloud-bucket
 
 # 图片存放地址
-VITE_APP_TERRAIN_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/all_terrain
+VITE_APP_TERRAIN_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_terrain/all_terrain
+
 # 算法仓库图片地址
 VITE_APP_PICTURE_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
 
diff --git a/.env.jiangwu b/.env.jiangwu
new file mode 100644
index 0000000..df5b435
--- /dev/null
+++ b/.env.jiangwu
@@ -0,0 +1,42 @@
+
+NODE_ENV = 'jiangwu'
+
+#生产环境配置
+VITE_APP_ENV = 'jiangwu'
+
+#接口地址
+#填写前缀 [/api] 需要用nginx进行反向代理
+#填写地址 [https://api.bladex.cn] 只需要保证接口支持跨域即可, 无需再做代理
+VITE_APP_API=/api
+
+#页面基础路径
+VITE_APP_BASE=/manage
+
+# 服务地址
+VITE_APP_URL = http://192.168.253.121:8080/api
+
+# 域名
+VITE_APP_AREA_NAME = http://192.168.253.121:8080/
+
+#新大屏地址
+VITE_APP_DASHBOARD_URL = 'http://192.168.253.121:8080/command-center-dashboard/'
+
+# ws地址
+VITE_APP_WS_API_URL = ws://192.168.253.121:8080
+
+# 航线文件地址
+VITE_APP_AIRLINE_URL = http://192.168.253.121:9000/cloud-bucket
+
+# 算法仓库图片地址
+VITE_APP_PICTURE_URL = http://192.168.253.121:9000/aiskyminio/cloud-bucket
+
+# 是否在打包时开启压缩,支持 gzip 和 brotli
+VITE_BUILD_COMPRESS = gzip
+
+VITE_APP_OFFLINE_MAP_URL = http://192.168.253.121:9000/cloud-bucket/offline_map
+
+# 地形存放地址
+VITE_APP_TERRAIN_URL = http://192.168.253.121:9000/cloud-bucket/ztzf_terrain
+
+# 图片资源存放地址
+VITE_APP_IMAGESOURCE_URL = http://192.168.253.121:9000/cloud-bucket
diff --git a/.env.localhost b/.env.localhost
new file mode 100644
index 0000000..e3fe6b3
--- /dev/null
+++ b/.env.localhost
@@ -0,0 +1,41 @@
+NODE_ENV = 'development'
+
+#开发环境配置
+VITE_APP_ENV = 'development'
+
+#接口地址
+VITE_APP_API=/api
+
+#页面基础路径
+VITE_APP_BASE=/manage
+
+# 服务地址
+VITE_APP_URL = http://192.168.1.227:80/api
+#VITE_APP_URL= http://192.168.1.168 rjg
+#VITE_APP_URL= http://192.168.1.33
+#新大屏地址
+VITE_APP_DASHBOARD_URL = 'http://192.168.1.227:80/command-center-dashboard/'
+
+# 域名
+VITE_APP_AREA_NAME = http://192.168.1.227:80
+
+# ws地址
+VITE_APP_WS_API_URL = wss://192.168.1.227:80
+
+# 航线文件地址
+VITE_APP_AIRLINE_URL = http://192.168.1.227:80/minio/cloud-bucket
+
+# 图片存放地址
+VITE_APP_TERRAIN_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_terrain/all_terrain
+
+# 算法仓库图片地址
+VITE_APP_PICTURE_URL = http://192.168.1.227:80/aiskyminio/cloud-bucket
+
+# 是否在打包时开启压缩,支持 gzip 和 brotli
+VITE_BUILD_COMPRESS = gzip
+
+#页面基础路径
+# VITE_APP_BASE_COMMAND = /drone-web-manage/
+#天地图token 浏览器端口
+VITE_APP_TDT_TOKEN = e110584a27d506da2740edca951683f4
+VITE_APP_CESIUM_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkYTZlNGNlYS01NTU1LTQ1MGEtYmNlZS0yNTE2NDk5YWM2MjEiLCJpZCI6MTc5Njk2LCJpYXQiOjE3MDA1NDcwMjV9.qcl4AH2731cfFd0-I1ZLUINPXqvglLkDFD-UGR2zU5M
diff --git a/.env.production b/.env.production
index aca80bd..184ae38 100644
--- a/.env.production
+++ b/.env.production
@@ -1,3 +1,13 @@
+###
+ # @Author       : yuan
+ # @Date         : 2025-06-26 15:18:36
+ # @LastEditors  : yuan
+ # @LastEditTime : 2025-07-01 16:34:42
+ # @FilePath     : \.env.production
+ # @Description  : 
+ # Copyright 2025 OBKoro1, All Rights Reserved. 
+ # 2025-06-26 15:18:36
+### 
 NODE_ENV = 'production'
 
 #生产环境配置
@@ -27,9 +37,16 @@
 VITE_APP_AIRLINE_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
 
 # 图片存放地址
-VITE_APP_TERRAIN_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/all_terrain
+VITE_APP_TERRAIN_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket/ztzf_terrain/all_terrain
+
 # 算法仓库图片地址
 VITE_APP_PICTURE_URL = https://wrj.shuixiongit.com/aiskyminio/cloud-bucket
 
 # 是否在打包时开启压缩,支持 gzip 和 brotli
 VITE_BUILD_COMPRESS = gzip
+
+#页面基础路径
+# VITE_APP_BASE_COMMAND = /drone-web-manage/
+#天地图token 浏览器端口
+VITE_APP_TDT_TOKEN = e110584a27d506da2740edca951683f4
+VITE_APP_CESIUM_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkYTZlNGNlYS01NTU1LTQ1MGEtYmNlZS0yNTE2NDk5YWM2MjEiLCJpZCI6MTc5Njk2LCJpYXQiOjE3MDA1NDcwMjV9.qcl4AH2731cfFd0-I1ZLUINPXqvglLkDFD-UGR2zU5M
diff --git a/index.html b/index.html
index eef1ec7..f765310 100644
--- a/index.html
+++ b/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html lang="en">
+<html lang="zh-CN">
 
 <head>
   <meta charset="UTF-8" />
diff --git a/package.json b/package.json
index 2e00a88..056da91 100644
--- a/package.json
+++ b/package.json
@@ -2,10 +2,12 @@
     "name": "saber",
     "version": "4.1.0",
     "scripts": {
-        "dev": "vite --mode development",
+        "dev": "vite --host",
+        "base": "vite --host --mode localhost",
         "prod": "vite --mode production",
         "build:test": "vite build --mode development",
         "build:prod": "vite build --mode production",
+        "build:jiangwu": "vite build --mode jiangwu",
         "serve": "vite preview --host"
     },
     "dependencies": {
diff --git a/public/fonts/SourceHanSansCN-Bold.otf b/public/fonts/SourceHanSansCN-Bold.otf
deleted file mode 100644
index 4b3429a..0000000
--- a/public/fonts/SourceHanSansCN-Bold.otf
+++ /dev/null
Binary files differ
diff --git a/public/fonts/SourceHanSansCN-Bold.woff2 b/public/fonts/SourceHanSansCN-Bold.woff2
new file mode 100644
index 0000000..deac255
--- /dev/null
+++ b/public/fonts/SourceHanSansCN-Bold.woff2
Binary files differ
diff --git a/public/fonts/SourceHanSansCN-Medium.otf b/public/fonts/SourceHanSansCN-Medium.otf
deleted file mode 100644
index 53e03e0..0000000
--- a/public/fonts/SourceHanSansCN-Medium.otf
+++ /dev/null
Binary files differ
diff --git a/public/fonts/SourceHanSansCN-Regular.otf b/public/fonts/SourceHanSansCN-Regular.otf
deleted file mode 100644
index 886f82f..0000000
--- a/public/fonts/SourceHanSansCN-Regular.otf
+++ /dev/null
Binary files differ
diff --git a/public/fonts/SourceHanSansCN-Regular.woff2 b/public/fonts/SourceHanSansCN-Regular.woff2
new file mode 100644
index 0000000..1f71f8e
--- /dev/null
+++ b/public/fonts/SourceHanSansCN-Regular.woff2
Binary files differ
diff --git a/public/fonts/font.css b/public/fonts/font.css
index f429581..9451657 100644
--- a/public/fonts/font.css
+++ b/public/fonts/font.css
@@ -1,47 +1,36 @@
 @font-face {
   font-family: "Source Han Sans CN";
-  src: url("SourceHanSansCN-Regular.otf") format("opentype");
+  src: url("SourceHanSansCN-Regular.woff2") format("opentype");
   font-weight: 400;
   font-style: normal;
+  font-display: swap;
 }
 
 @font-face {
   font-family: "Source Han Sans CN";
-  src: url("SourceHanSansCN-Medium.otf") format("opentype");
-  font-weight: 500;
-  font-style: normal;
-}
-
-@font-face {
-  font-family: "Source Han Sans CN";
-  src: url("SourceHanSansCN-Bold.otf") format("opentype") ;
+  src: url("SourceHanSansCN-Bold.woff2") format("opentype") ;
   font-weight: 700;
   font-style: normal;
+  font-display: swap;
 }
 
 
 @font-face {
   font-family: "Segoe UI";
-  src: url("SourceHanSansCN-Regular.otf") format("opentype");
+  src: url("SourceHanSansCN-Regular.woff2") format("opentype");
   font-weight: 400;
   font-style: normal;
+  font-display: swap;
 }
+
 
 @font-face {
   font-family: "Segoe UI";
-  src: url("SourceHanSansCN-Medium.otf") format("opentype");
-  font-weight: 500;
-  font-style: normal;
-}
-
-@font-face {
-  font-family: "Segoe UI";
-  src: url("SourceHanSansCN-Bold.otf") format("opentype") ;
+  src: url("SourceHanSansCN-Bold.woff2") format("opentype") ;
   font-weight: 700;
   font-style: normal;
+  font-display: swap;
 }
-
-
 
 
 /* 额外的标题字体 */
@@ -50,4 +39,5 @@
   src: url("YouSheBiaoTiHei.TTF") format("truetype");
   font-weight: normal;
   font-style: normal;
+  font-display: swap;
 }
diff --git a/src/api/dataCenter/dataCenter.js b/src/api/dataCenter/dataCenter.js
index e520c23..2c0a1a4 100644
--- a/src/api/dataCenter/dataCenter.js
+++ b/src/api/dataCenter/dataCenter.js
@@ -2,7 +2,7 @@
 // 列表接口
 export const getaiImagesPageAPI = (data,params) => {
     return request({
-		url: `/blade-resource//attach/attachmentsPage`,
+		url: `/blade-resource/attach/attachmentsPage`,
 		method: 'post',
 		data,params
 	})
@@ -63,4 +63,4 @@
 			jobId,
 		  },
 	})
-}
\ No newline at end of file
+}
diff --git a/src/api/helpCenter/helpCenter.js b/src/api/helpCenter/helpCenter.js
new file mode 100644
index 0000000..f38c23c
--- /dev/null
+++ b/src/api/helpCenter/helpCenter.js
@@ -0,0 +1,27 @@
+import request from '@/axios';
+// 文件上传
+export const uploadFileAPI = (data,params) => {
+    return request({
+		url: `/blade-resource/oss/endpoint/put-file`,
+		method: 'post',
+		data,params
+	})
+  };
+
+// 列表
+export const listDataAPI = () => {
+    return request({
+		url: `/blade-system/helpCenter/list`,
+		method: 'get',
+		
+	})
+  };
+
+//更新
+export const updataDataAPI = (data,params) => {
+    return request({
+		url: `/blade-system/helpCenter/update`,
+		method: 'put',
+		data,params
+	})
+  };
diff --git a/src/assets/images/helpCenter/helpIcon.png b/src/assets/images/helpCenter/helpIcon.png
new file mode 100644
index 0000000..18cc524
--- /dev/null
+++ b/src/assets/images/helpCenter/helpIcon.png
Binary files differ
diff --git a/src/assets/images/task/qxzx.png b/src/assets/images/task/qxzx.png
index 221f66f..b3cf5b0 100644
--- a/src/assets/images/task/qxzx.png
+++ b/src/assets/images/task/qxzx.png
Binary files differ
diff --git a/src/assets/images/task/zxz.png b/src/assets/images/task/zxz.png
index 7081996..2390bdf 100644
--- a/src/assets/images/task/zxz.png
+++ b/src/assets/images/task/zxz.png
Binary files differ
diff --git a/src/assets/images/uoload-success.png b/src/assets/images/uoload-success.png
index 903fb38..d8f7d0b 100644
--- a/src/assets/images/uoload-success.png
+++ b/src/assets/images/uoload-success.png
Binary files differ
diff --git a/src/assets/images/upload-error.png b/src/assets/images/upload-error.png
index 7b4ee58..4fd7c2c 100644
--- a/src/assets/images/upload-error.png
+++ b/src/assets/images/upload-error.png
Binary files differ
diff --git a/src/axios.js b/src/axios.js
index 979b7c0..d9ad49d 100644
--- a/src/axios.js
+++ b/src/axios.js
@@ -34,7 +34,7 @@
 	baseUrl
 } from '@/config/env';
 import crypto from '@/utils/crypto';
-
+const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
 // 全局未授权错误提示状态,只提示一次
 let isErrorShown = false;
 
@@ -170,9 +170,10 @@
 					removeToken();
 					removeRefreshToken();
 					// 重定向到登录页
-					store.dispatch('FedLogOut').then(() => router.push({
-						path: '/login'
-					}));
+					// store.dispatch('FedLogOut').then(() => router.push({
+					// 	path: '/login'
+					// }));
+					store.dispatch('FedLogOut').then(() =>  window.location.replace(`${adminUrl}#/login`));
 					return Promise.reject(new Error(message));
 				});
 		}
@@ -190,9 +191,10 @@
 			removeToken();
 			removeRefreshToken();
 			// 重定向到登录页
-			store.dispatch('FedLogOut').then(() => router.push({
-				path: '/login'
-			}));
+			// store.dispatch('FedLogOut').then(() => router.push({
+			// 	path: '/login'
+			// }));
+			store.dispatch('FedLogOut').then(() =>  window.location.replace(`${adminUrl}#/login`));
 			return Promise.reject(new Error(message));
 		}
 		// 如果请求为oauth2错误码则首次报错时提示
diff --git a/src/buildConfig/buildConfig/config.default.js b/src/buildConfig/buildConfig/config.default.js
new file mode 100644
index 0000000..d34e0fa
--- /dev/null
+++ b/src/buildConfig/buildConfig/config.default.js
@@ -0,0 +1,5 @@
+export default function getBaseConfig () {
+	return {
+		loginTitle: '中图智飞低空智能感知网平台',  //登陆页面标题
+	}
+}
\ No newline at end of file
diff --git a/src/buildConfig/buildConfig/config.jiangwu.js b/src/buildConfig/buildConfig/config.jiangwu.js
new file mode 100644
index 0000000..f13287c
--- /dev/null
+++ b/src/buildConfig/buildConfig/config.jiangwu.js
@@ -0,0 +1,12 @@
+export default function getBaseConfig () {
+	return {
+		userLoginTitle (key) {
+			return '大吉山钨业无人机安防监测平台'
+		},
+
+		loginTitle: '大吉山钨业无人机安防监测平台',
+
+
+	
+	}
+}
\ No newline at end of file
diff --git a/src/buildConfig/config.js b/src/buildConfig/config.js
new file mode 100644
index 0000000..698cc2c
--- /dev/null
+++ b/src/buildConfig/config.js
@@ -0,0 +1,14 @@
+
+// 直接导入所有配置文件
+import jiangwuConfig from '@/buildConfig/buildConfig/config.jiangwu.js'
+import defaultConfig from '@/buildConfig/buildConfig/config.default.js'
+
+// 根据环境变量选择配置
+const env = import.meta.env.VITE_APP_ENV || 'default'
+const configMap = {
+	jiangwu: jiangwuConfig,
+	default: defaultConfig
+}
+
+// 导出配置函数
+export default configMap[env] || configMap.default
\ No newline at end of file
diff --git a/src/components/basic-container/main.vue b/src/components/basic-container/main.vue
index 6a357d5..43a90ae 100644
--- a/src/components/basic-container/main.vue
+++ b/src/components/basic-container/main.vue
@@ -1,3 +1,13 @@
+<!--
+ * @Author       : yuan
+ * @Date         : 2025-06-14 15:19:16
+ * @LastEditors  : yuan
+ * @LastEditTime : 2025-06-27 14:34:02
+ * @FilePath     : \src\components\basic-container\main.vue
+ * @Description  : 
+ * Copyright 2025 OBKoro1, All Rights Reserved. 
+ * 2025-06-14 15:19:16
+-->
 <template>
   <div class="basic-container" :style="styleName" :class="{ 'basic-container--block': block }">
     <el-card class="basic-container__card">
@@ -23,25 +33,41 @@
     },
   },
   computed: {
-    styleName() {
+    styleName () {
       return {
         borderRadius: `${this.radius}px`,
         background: this.background,
-      };
+      }
     },
   },
-};
+}
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .basic-container {
-  padding: 0 10px;
-  box-sizing: border-box;
+  height: 0;
+  flex: 1;
+
+  padding: 10px;
+  // box-sizing: border-box;
   // height: 100%;
 
-  .basic-container__card{
+  .basic-container__card {
     height: 100% !important;
-    overflow: auto;
+    overflow: hidden;
+
+    .el-card__body {
+      display: flex;
+      flex-direction: column;
+      height: 100% !important;
+      overflow: hidden;
+      box-sizing: border-box;
+
+      &>div {
+        height: 0;
+        flex: 1;
+      }
+    }
   }
 
   &--block {
diff --git a/src/components/basic-main-content/main.vue b/src/components/basic-main-content/main.vue
new file mode 100644
index 0000000..071a567
--- /dev/null
+++ b/src/components/basic-main-content/main.vue
@@ -0,0 +1,49 @@
+<!--
+ * @Author       : yuan
+ * @Date         : 2025-06-14 15:19:16
+ * @LastEditors  : yuan
+ * @LastEditTime : 2025-06-27 14:33:15
+ * @FilePath     : \src\components\basic-main-content\main.vue
+ * @Description  : 
+ * Copyright 2025 OBKoro1, All Rights Reserved. 
+ * 2025-06-14 15:19:16
+-->
+<template>
+  <div class="basic-main-content">
+    <slot></slot>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'basicMainContent',
+  props: {
+    radius: {
+      type: [String, Number],
+      default: 10,
+    },
+    background: {
+      type: String,
+    },
+    block: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  computed: {
+    styleName () {
+      return {
+        borderRadius: `${this.radius}px`,
+        background: this.background,
+      }
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.basic-main-content {
+  height: 0;
+  flex: 1;
+}
+</style>
diff --git a/src/components/wel-container/main.vue b/src/components/wel-container/main.vue
new file mode 100644
index 0000000..5ae84fd
--- /dev/null
+++ b/src/components/wel-container/main.vue
@@ -0,0 +1,84 @@
+<template>
+  <div class="wel-container" :style="styleName" :class="{ 'wel-container--block': block }">
+    <el-card class="wel-container__card">
+      <slot></slot>
+    </el-card>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'welContainer',
+  props: {
+    radius: {
+      type: [String, Number],
+      default: 10,
+    },
+    background: {
+      type: String,
+    },
+    block: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  computed: {
+    styleName () {
+      return {
+        borderRadius: `${this.radius}px`,
+        background: this.background,
+      }
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.wel-container {
+  height: 0;
+  flex: 1;
+  padding-top: 0 !important;
+
+  // box-sizing: border-box;
+  // height: 100%;
+  .el-card {
+    background-color: transparent !important;
+  }
+
+  .wel-container__card {
+    height: 100% !important;
+    overflow: hidden;
+
+    :deep(.el-card__body) {
+      display: flex;
+      flex-direction: column;
+      height: 100% !important;
+      overflow: hidden;
+      box-sizing: border-box;
+      padding: 10px !important;
+      padding-top: 0 !important;
+
+      &>div {
+        height: 0;
+        flex: 1;
+      }
+    }
+  }
+
+  &--block {
+    height: 100%;
+
+    .wel-container__card {
+      height: 100%;
+    }
+  }
+
+  &__card {
+    width: 100%;
+  }
+
+  &:first-child {
+    padding-top: 0;
+  }
+}
+</style>
diff --git a/src/main.js b/src/main.js
index e24d589..886400b 100644
--- a/src/main.js
+++ b/src/main.js
@@ -30,6 +30,9 @@
 import avueUeditor from 'avue-plugin-ueditor'
 import basicBlock from 'components/basic-block/main.vue'
 import basicContainer from 'components/basic-container/main.vue'
+import welContainer from 'components/wel-container/main.vue'
+import basicMainContent from 'components/basic-main-content/main.vue'
+
 import thirdRegister from './components/third-register/main.vue'
 import NfDesignBase from '@saber/nf-design-base-elp'
 import flowDesign from './components/flow-design/main.vue'
@@ -49,7 +52,7 @@
 window.DC = Object.create(DC)
 import { onResize } from '@/utils/rem'
 onResize()
-const { VITE_APP_BASE,VITE_APP_CESIUM_TOKEN } = import.meta.env
+const { VITE_APP_BASE, VITE_APP_CESIUM_TOKEN } = import.meta.env
 window.CESIUM_BASE_URL = `${VITE_APP_BASE}/cesiumPu`
 Cesium.Ion.defaultAccessToken = VITE_APP_CESIUM_TOKEN
 
@@ -86,6 +89,9 @@
     app.component(key, component)
 }
 app.component('basicContainer', basicContainer)
+app.component('welContainer', welContainer)
+app.component('basicMainContent', basicMainContent)
+
 app.component('basicBlock', basicBlock)
 app.component('thirdRegister', thirdRegister)
 app.component('flowDesign', flowDesign)
@@ -95,6 +101,9 @@
 app.config.globalProperties.$dayjs = dayjs
 app.config.globalProperties.website = website
 app.config.globalProperties.getScreen = getScreen
+app.config.globalProperties.pxToVh = height => height / 10.8 + 'vh'
+app.config.globalProperties.pxToRem = width => width * 0.1 + 'rem'
+
 app.use(error)
 app.use(i18n)
 app.use(store)
diff --git a/src/option/job/jobinfo.js b/src/option/job/jobinfo.js
index 167c814..369bcf4 100644
--- a/src/option/job/jobinfo.js
+++ b/src/option/job/jobinfo.js
@@ -19,7 +19,7 @@
     label: '工作流',
     value: 5,
   },
-];
+]
 
 export const executeTypeDic = [
   {
@@ -34,7 +34,7 @@
     label: 'MapReduce',
     value: 3,
   },
-];
+]
 
 export const processorTypeDic = [
   {
@@ -45,7 +45,7 @@
     label: '外部处理器(动态加载)',
     value: 4,
   },
-];
+]
 
 export const dispatchStrategyDic = [
   {
@@ -56,7 +56,7 @@
     label: 'RANDOM',
     value: 2,
   },
-];
+]
 
 export const enableDic = [
   {
@@ -67,7 +67,7 @@
     label: '启用',
     value: 1,
   },
-];
+]
 
 export const logTypeDic = [
   {
@@ -90,7 +90,7 @@
     label: 'NULL',
     value: 999,
   },
-];
+]
 
 export const logLevelDic = [
   {
@@ -113,7 +113,7 @@
     label: 'OFF',
     value: 99,
   },
-];
+]
 
 export default {
   tip: false,
@@ -129,6 +129,10 @@
   dialogWidth: 1200,
   dialogClickModal: false,
   tabs: true,
+
+  height: 'auto',
+  calcHeight: 20,
+
   column: [
     {
       label: '任务应用',
@@ -141,6 +145,7 @@
       },
       search: true,
       display: false,
+      showOverflowTooltip: true,
     },
     {
       label: '任务ID',
@@ -149,6 +154,7 @@
       search: true,
       width: 80,
       display: false,
+      showOverflowTooltip: true,
     },
     {
       label: '任务名称',
@@ -157,6 +163,7 @@
       search: true,
       width: 200,
       display: false,
+      showOverflowTooltip: true,
     },
     {
       label: '定时信息',
@@ -173,6 +180,7 @@
       ],
       width: 120,
       display: false,
+      showOverflowTooltip: true,
     },
     {
       label: '执行类型',
@@ -189,6 +197,7 @@
       ],
       width: 110,
       display: false,
+      showOverflowTooltip: true,
     },
     {
       label: '处理器类型',
@@ -205,6 +214,7 @@
       ],
       width: 180,
       display: false,
+      showOverflowTooltip: true,
     },
     {
       label: '任务状态',
@@ -215,6 +225,7 @@
       slot: true,
       width: 100,
       display: false,
+      showOverflowTooltip: true,
     },
   ],
   group: [
@@ -510,4 +521,4 @@
       ],
     },
   ],
-};
+}
diff --git a/src/option/job/jobserver.js b/src/option/job/jobserver.js
index 5ac5689..ebf0fc2 100644
--- a/src/option/job/jobserver.js
+++ b/src/option/job/jobserver.js
@@ -1,3 +1,13 @@
+/*
+ * @Author       : yuan
+ * @Date         : 2025-06-14 15:19:16
+ * @LastEditors  : yuan
+ * @LastEditTime : 2025-06-26 17:24:02
+ * @FilePath     : \src\option\job\jobserver.js
+ * @Description  : 
+ * Copyright 2025 OBKoro1, All Rights Reserved. 
+ * 2025-06-14 15:19:16
+ */
 export default {
   tip: false,
   searchShow: true,
@@ -10,6 +20,9 @@
   labelWidth: 100,
   menuWidth: 350,
   dialogClickModal: false,
+
+  height: 'auto',
+  calcHeight: 20,
   column: [
     {
       label: '服务名称',
@@ -73,4 +86,4 @@
       span: 24,
     },
   ],
-};
+}
diff --git a/src/option/system/dict.js b/src/option/system/dict.js
index 7a2cd7c..e64065b 100644
--- a/src/option/system/dict.js
+++ b/src/option/system/dict.js
@@ -9,6 +9,10 @@
   menuWidth: 250,
   dialogWidth: 880,
   dialogClickModal: false,
+
+  height: 'auto',
+  calcHeight: 20,
+
   column: [
     {
       label: '字典编号',
@@ -83,7 +87,7 @@
       hide: true,
     },
   ],
-};
+}
 
 export const optionChild = {
   tip: false,
@@ -203,4 +207,4 @@
       hide: true,
     },
   ],
-};
+}
diff --git a/src/option/system/dictbiz.js b/src/option/system/dictbiz.js
index 2b3bce3..e3a2742 100644
--- a/src/option/system/dictbiz.js
+++ b/src/option/system/dictbiz.js
@@ -9,6 +9,10 @@
   menuWidth: 250,
   dialogWidth: 880,
   dialogClickModal: false,
+
+  height: 'auto',
+  calcHeight: 20,
+
   column: [
     {
       label: '字典编号',
@@ -84,7 +88,7 @@
       hide: true,
     },
   ],
-};
+}
 
 export const optionChild = {
   tip: false,
@@ -204,4 +208,4 @@
       hide: true,
     },
   ],
-};
+}
diff --git a/src/page/index/index.vue b/src/page/index/index.vue
index c925305..c0b819c 100644
--- a/src/page/index/index.vue
+++ b/src/page/index/index.vue
@@ -13,9 +13,9 @@
         <div class="tags-box">
           <tags />
         </div>
-        <search class="avue-view" v-show="isSearch"></search>
+        <search class="main-avue-view-container" v-show="isSearch"></search>
         <!-- 主体视图层 -->
-        <div id="avue-view" v-show="!isSearch" v-if="isRefresh">
+        <div class="main-avue-view-container" v-show="!isSearch" v-if="isRefresh">
           <router-view #="{ Component }">
             <keep-alive :include="$store.getters.tagsKeep">
               <component :is="Component" />
@@ -29,15 +29,15 @@
 </template>
 
 <script>
-import index from '@/mixins/index';
-import wechat from './wechat.vue';
+import index from '@/mixins/index'
+import wechat from './wechat.vue'
 //import { validatenull } from 'utils/validate';
-import { mapGetters } from 'vuex';
-import tags from './tags.vue';
-import search from './search.vue';
-import logo from './logo.vue';
-import top from './top/index.vue';
-import sidebar from './sidebar/index.vue';
+import { mapGetters } from 'vuex'
+import tags from './tags.vue'
+import search from './search.vue'
+import logo from './logo.vue'
+import top from './top/index.vue'
+import sidebar from './sidebar/index.vue'
 
 export default {
   mixins: [index],
@@ -50,10 +50,10 @@
     wechat,
   },
   name: 'index',
-  provide() {
+  provide () {
     return {
       index: this,
-    };
+    }
   },
   computed: {
     ...mapGetters([
@@ -65,27 +65,27 @@
       'menu',
       'setting',
     ]),
-    validSidebar() {
+    validSidebar () {
       return !(
         (this.$route.meta || {}).menu === false || (this.$route.query || {}).menu === 'false'
-      );
+      )
     },
   },
   props: [],
   methods: {
     //打开菜单
-    openMenu(item = {}) {
+    openMenu (item = {}) {
       this.$store.dispatch('GetMenu', item.id).then(data => {
         if (data.length !== 0) {
           this.$router.$avueRouter.formatRoutes(data, true)
 
           // 获取url里面的redirect
-          const redirect = decodeURIComponent(this.$route.query.redirect || '');
-          if (redirect){
-            console.log('redirect',redirect);
-            const [path, queryString] = redirect.split('?');
-            const query = queryString ? Object.fromEntries(new URLSearchParams(queryString)) : {};
-            this.$router.push({ path,query})
+          const redirect = decodeURIComponent(this.$route.query.redirect || '')
+          if (redirect) {
+            console.log('redirect', redirect)
+            const [path, queryString] = redirect.split('?')
+            const query = queryString ? Object.fromEntries(new URLSearchParams(queryString)) : {}
+            this.$router.push({ path, query })
           }
         }
         //当点击顶部菜单后默认打开第一个菜单
@@ -109,15 +109,13 @@
             }, itemActive.meta)
           });
         }*/
-      });
+      })
     },
   },
-};
+}
 </script>
 
 <style lang="scss" scoped>
-:deep(.basic-container){
-height: none !important;}
 // #avue-view{
 //   :deep(){
 //     .avue-crud__body{
@@ -129,9 +127,10 @@
 //   }
 // }
 
-.tags-box{
+.tags-box {
   background: transparent;
   padding: 0 10px;
   --el-color-primary: rgba(20, 65, 255, 1);
+    height: pxToVh(55);
 }
 </style>
diff --git a/src/page/index/top/index.vue b/src/page/index/top/index.vue
index 1ebd127..9026c9a 100644
--- a/src/page/index/top/index.vue
+++ b/src/page/index/top/index.vue
@@ -7,18 +7,18 @@
       </div>
     </div>
     <div class="top-bar__title">
-<!--      <top-menu ref="topMenu" v-if="setting.menu"></top-menu>-->
+<!--<top-menu ref="topMenu" v-if="setting.menu"></top-menu>-->
       <top-search class="top-bar__item" v-if="setting.search"></top-search>
     </div>
     <div class="top-bar__right">
       <div class="icon-box">
         <top-lock v-if="setting.lock"/>
-        <top-qna title="帮助中心"/>
+        <top-qna />
         <top-full v-if="setting.fullscreen" title="全屏"/>
-        <img @click="jumpMH" src="@/assets/images/mh.png" alt="进入门户" title="进入门户" width="20" height="20">
+        <img class="gateway" @click="jumpMH" src="@/assets/images/mh.png" alt="进入门户" title="进入门户" width="20" height="20">
       </div>
       <div class="top-user">
-        <img class="top-bar__img" :src="userInfo.avatar " />
+        <img class="top-bar__img" :src="userInfo.avatar "  alt=""/>
 
         <el-dropdown>
           <span class="el-dropdown-link">
@@ -102,7 +102,9 @@
         type: 'warning',
       }).then(() => {
         this.$store.dispatch('LogOut').then(() => {
-          this.$router.push({ path: '/login' })
+          // this.$router.push({ path: '/login' })
+          const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
+		  window.location.replace(`${adminUrl}#/login`)
         })
       })
     },
@@ -133,6 +135,7 @@
   flex: 1;
   display: flex;
   align-items: center;
+  height: pxToVh(80);
 }
 
 .top-bar__right {
@@ -145,6 +148,10 @@
     display: flex;
     align-items: center;
     gap: 0 20px;
+    .gateway{
+      width: 25px;
+      height: 25px;
+    }
     >*{
       cursor: pointer;
     }
diff --git a/src/page/index/top/top-qna.vue b/src/page/index/top/top-qna.vue
index 89435d5..5c5b028 100644
--- a/src/page/index/top/top-qna.vue
+++ b/src/page/index/top/top-qna.vue
@@ -1,66 +1,84 @@
 <template>
-  <div class="top-qna" @mouseenter="disableTooltip" @mouseleave="enableTooltip">
-    <el-tooltip :disabled="tooltipDisabled" content="帮助中心" placement="bottom">
-      <el-icon @click="showHelp" class="help-icon">
+  <div class="top-qna">
+    <el-dropdown @command="dropdownClick">
+      <!-- <img class="help-icon" alt="" src="@/assets/images/helpCenter/helpIcon.png" /> -->
+      <el-icon class="help-icon" color="#707070" size="17">
         <QuestionFilled />
       </el-icon>
-    </el-tooltip>
-    <el-dialog v-model="dialogVisible" title="帮助中心" width="30%" @close="closeDialog">
-      <div class="dialog-content">
-        <div class="qa-item">
-          <span class="qa-title">Q1:智飞机场 2 支持哪些无人机?</span>
-          <span class="qa-text">
-            A1:智飞机场 2 仅支持 DJI Matrice 3D 系列无人机。
-          </span>
-        </div>
-        <div class="qa-item">
-          <span class="qa-title">Q2:智飞机场 2 如何应对意外断电?</span>
-          <span class="qa-text">
-            A2:若发生意外断电,机场仍可借助内置蓄电池独立工作超 5 小时,为飞行器预留充足的返航降落时间。
-            断电后,机场不支持飞行器充电、空调、舱盖加热、风速计加热等功能,请及时排查故障。
-          </span>
-        </div>
-        <div class="qa-item">
-          <span class="qa-title">Q3:智飞机场 2 和第一代智飞机场有什么区别?</span>
-          <span class="qa-text">
-            A3:相对于第一代智飞机场,智飞机场 2 在体积、重量上大幅下降,不仅轻量化、易部署,
-            且具备更强大的作业能力和云端智能功能,大幅降低了无人值守作业门槛,作业效率和质量也上升至全新高度。
-          </span>
-        </div>
-      </div>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="closeDialog">关闭</el-button>
-        </span>
+      <template #dropdown>
+        <el-dropdown-menu>
+          <el-dropdown-item command="guide">入门指南</el-dropdown-item>
+          <el-dropdown-item command="systemupdate">系统更新</el-dropdown-item>
+        </el-dropdown-menu>
       </template>
-    </el-dialog>
+    </el-dropdown>
   </div>
 </template>
 
-<script>
-export default {
-  name: 'top-qna',
-  data() {
-    return {
-      dialogVisible: false, // 确保初始值为 false
-      tooltipDisabled: false, // 控制 tooltip 是否显示
-    };
-  },
-  methods: {
-    showHelp() {
-      this.dialogVisible = true;
-    },
-    closeDialog() {
-      this.dialogVisible = false;
-    },
-    disableTooltip() {
-      this.tooltipDisabled = true; // 禁用 tooltip
-    },
-    enableTooltip() {
-      this.tooltipDisabled = false; // 启用 tooltip
-    },
-  },
+<script setup>
+import { listDataAPI } from '@/api/helpCenter/helpCenter';
+import { useRouter } from 'vue-router';
+import { ElMessage } from 'element-plus';
+const router = useRouter();
+const systemupdateFilePath = ref(null);
+const rumenPath = ref(null);
+const fileData = ref([]);
+const loading = ref(false);
+const getlistDataAPI = async () => {
+  loading.value = true;
+  try {
+    const res = await listDataAPI();
+    if (res.data.code === 200 && res.data.data) {
+      fileData.value = res.data.data;
+      const systemUpdateItem = res.data.data.find(item => item.id === 4); //系统更新
+      const rumenItem = res.data.data.find(item => item.id === 2); //入门指南
+
+      if (systemUpdateItem) {
+        systemupdateFilePath.value = systemUpdateItem.filePath;
+      } else {
+        console.warn('暂无系统更新');
+      }
+
+      if (rumenItem) {
+        rumenPath.value = rumenItem.filePath;
+      } else {
+        console.warn('暂无入门指南');
+      }
+    } else {
+      ElMessage.error('获取帮助数据失败');
+    }
+  } catch (error) {
+    console.error('获取数据出错:', error);
+    ElMessage.error('请求失败');
+  } finally {
+    loading.value = false;
+  }
 };
+const dropdownClick = val => {
+  if (loading.value) {
+    ElMessage.warning('数据正在加载,请稍后');
+    return;
+  }
+
+  if (val === 'guide') {
+    if (!rumenPath.value) {
+      ElMessage.warning('暂无入门指南文件');
+      return;
+    }
+
+    window.open(rumenPath.value, '_blank');
+  } else if (val === 'systemupdate') {
+    if (!systemupdateFilePath.value) {
+      ElMessage.warning('暂无系统更新文件');
+      return;
+    }
+    window.open(systemupdateFilePath.value, '_blank');
+  }
+};
+
+onMounted(() => {
+  getlistDataAPI();
+});
 </script>
 
 <style lang="scss" scoped>
@@ -70,57 +88,12 @@
   font-size: 18px;
   justify-content: center;
   cursor: pointer;
-}
-
-/* 优化弹出框样式 */
-:deep(.el-dialog) {
-  border-radius: 8px; /* 圆角边框 */
-  overflow: visible; /* 防止内容溢出 */
-  .el-dialog__header {
-    padding: 15px 20px;
-    border-bottom: 1px solid #e8e8e8; /* 标题下边框 */
-    .el-dialog__title {
-      font-size: 16px;
-      font-weight: bold;
-      color: #333;
-    }
+  .help-icon {
+    width: 25px;
+    height: 25px;
   }
-  .el-dialog__body {
-    padding: 20px;
-    max-height: none; /* 取消高度限制 */
-    overflow: visible; /* 取消滚动条 */
-    word-wrap: break-word; /* 自动换行 */
-    word-break: break-word; /* 防止长单词溢出 */
-    white-space: normal; /* 确保文字自动换行 */
-  }
-  .el-dialog__footer {
-    padding: 10px 20px;
-    border-top: 1px solid #e8e8e8; /* 底部上边框 */
-    text-align: right;
-  }
-}
-
-/* 优化内容样式 */
-.dialog-content {
-  .qa-item {
-    margin-bottom: 15px;
-    padding: 10px;
-    border: 1px solid #e8e8e8; /* 边框 */
-    border-radius: 4px; /* 圆角 */
-    background-color: #f9f9f9; /* 背景色 */
-    .qa-title {
-      font-size: 14px;
-      font-weight: bold;
-      color: #333;
-      display: block; /* 确保换行 */
-      margin-bottom: 5px;
-    }
-    .qa-text {
-      font-size: 14px;
-      color: #666;
-      line-height: 1.6; /* 行间距 */
-      display: block; /* 确保换行 */
-    }
+  .theme-white .el-dropdown {
+    color: none !important;
   }
 }
 </style>
diff --git a/src/page/login/index.vue b/src/page/login/index.vue
index 839ea1d..4453760 100644
--- a/src/page/login/index.vue
+++ b/src/page/login/index.vue
@@ -39,7 +39,8 @@
 import { getQueryString, getTopUrl } from '@/utils/util';
 import { getDetail } from '@/api/system/sysConfig'
 import website from '@/config/website';
-
+import getBaseConfig from '@/buildConfig/config'
+const { loginTitle} = getBaseConfig()
 export default {
   name: 'login',
   components: {
@@ -51,7 +52,7 @@
   data() {
     return {
       login:{
-        info: '中图智绘低空无人机监测网平台'
+        info: loginTitle
       },
       website: website,
       time: '',
@@ -72,7 +73,10 @@
   created() {
     this.handleLogin();
     this.getTime();
+   if(!loginTitle) { 
     this.getSysConfigInfo();
+  }
+ 
   },
   mounted() {},
   computed: {
@@ -85,6 +89,7 @@
       let sysConfigId = this.$route.query?.id || 1;
       getDetail(sysConfigId).then(res=>{
         this.login.info = res.data.data.name
+
       })
     },
     getTime() {
diff --git a/src/permission.js b/src/permission.js
index f12dc4e..5272458 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -18,7 +18,7 @@
 NProgress.configure({ showSpinner: false })
 const lockPage = '/lock' //锁屏页
 const urlParams = getUrlParams(window.location.href)
-
+const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
 function findRouteByPath (routes, targetPath) {
   // 遍历数组中的每个路由对象
   for (const route of routes) {
@@ -93,9 +93,10 @@
     } else {
       const systemToken = store.getters.token || urlParams?.token
       if (systemToken === 0) {
-        store.dispatch('FedLogOut').then(() => {
-          next({ path: '/login' })
-        })
+        // store.dispatch('FedLogOut').then(() => {
+        //   next({ path: '/login' })
+        // })
+        store.dispatch('FedLogOut').then(() =>  window.location.replace(`${adminUrl}#/login`));
       } else {
         const meta = to.meta || {}
         const query = to.query || {}
@@ -120,7 +121,8 @@
     if (meta.isAuth === false) {
       next()
     } else {
-      next('/login')
+      // next('/login')
+      window.location.replace(`${adminUrl}#/login`)
     }
   }
 })
diff --git a/src/router/views/index.js b/src/router/views/index.js
index d2da43f..568b2c8 100644
--- a/src/router/views/index.js
+++ b/src/router/views/index.js
@@ -141,4 +141,20 @@
       },
     ],
   },
+
+  {
+    path: '/helpCenter',
+    component: Layout,
+    redirect: '/system/helpCenter',
+    children: [
+      {
+        path: 'system',
+        name: '帮助中心',
+        meta: {
+          i18n: 'info',
+        },
+        component: () => import(/* webpackChunkName: "views" */ '@/views/system/helpCenter.vue'),
+      },
+    ],
+  },
 ];
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 3b6a410..ee2940d 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -39,7 +39,7 @@
     token: getStore({ name: 'token' }) || '',
     refreshToken: getStore({ name: 'refreshToken' }) || '',
     parentDeptInfo: getStore({ name: 'parentDeptInfo' }) || '',
-   
+
   },
   actions: {
     //根据用户名登录
diff --git a/src/styles/base.scss b/src/styles/base.scss
new file mode 100644
index 0000000..f8d2671
--- /dev/null
+++ b/src/styles/base.scss
@@ -0,0 +1,111 @@
+.manage-flex {
+    display: flex;
+}
+
+.manage-f-d-c {
+    flex-direction: column;
+}
+
+.manage-flex-1 {
+    flex: 1;
+}
+
+.manage-flex-2 {
+    flex: 2;
+}
+
+.manage-flex-3 {
+    flex: 3;
+}
+
+.manage-flex-4 {
+    flex: 4;
+}
+
+.manage-flex-5 {
+    flex: 5;
+}
+
+.manage-flex-6 {
+    flex: 6;
+}
+
+.manage-flex-7 {
+    flex: 7;
+}
+
+.manage-flex-8 {
+    flex: 8;
+}
+
+.manage-flex-9 {
+    flex: 9;
+}
+
+.manage-w-0 {
+    width: 0;
+}
+
+.manage-w-100 {
+    width: 100%;
+}
+
+.manage-h-0 {
+    height: 0;
+}
+
+.manage-h-100 {
+    height: 100%;
+}
+
+.manage-m-all-10 {
+    margin: 10px;
+}
+
+.manage-m-t-0 {
+    margin-top: 0px;
+}
+
+.manage-m-t-10 {
+    margin-top: 10px;
+}
+
+.manage-m-t-20 {
+    margin-top: 20px;
+}
+
+.manage-p-all-10 {
+    padding: 10px;
+}
+
+.manage-p-all-16 {
+    padding: 16px;
+}
+
+.manage-p-all-20 {
+    padding: 20px;
+}
+
+.manage-p-t-0 {
+    padding-top: 0;
+}
+
+.manage-p-b-0 {
+    padding-bottom: 0;
+}
+
+.manage-b-c-w {
+    background-color: white;
+}
+
+.manage-b-r-5 {
+    border-radius: 5px;
+}
+
+.manage-overflow-h {
+    overflow: hidden;
+}
+
+.manage-box-s-b-b {
+    box-sizing: border-box;
+}
\ No newline at end of file
diff --git a/src/styles/common.scss b/src/styles/common.scss
index 488a42d..86695a3 100644
--- a/src/styles/common.scss
+++ b/src/styles/common.scss
@@ -1,5 +1,6 @@
 // 全局变量
 @import './variables.scss';
+@import './base.scss';
 
 a {
   text-decoration: none;
@@ -20,9 +21,9 @@
 
 .avue-layout {
   display: flex;
-  height: 1080px;
-  width: 1920px;
-  background: url("@/assets/images/layoutBg.png")  no-repeat center / 100% 100%;
+  width: 100%;
+  height: 100%;
+  background: url("@/assets/images/layoutBg.png") no-repeat center / 100% 100%;
   overflow: hidden;
 
   &--horizontal {
@@ -85,9 +86,12 @@
   margin-bottom: 0;
 }
 
-.avue-view {
-  width: 100%;
-  box-sizing: border-box;
+.main-avue-view-container {
+  height: 0;
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
 }
 
 .avue-footer {
@@ -155,7 +159,7 @@
   }
 }
 
-.ztzf-cesium{
+.ztzf-cesium {
   .cesium-viewer {
     height: 100%;
     overflow: hidden;
@@ -179,4 +183,4 @@
   .cesium-viewer-bottom {
     display: none;
   }
-}
+}
\ No newline at end of file
diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss
index a9a7ece..47078bb 100644
--- a/src/styles/element-ui.scss
+++ b/src/styles/element-ui.scss
@@ -31,12 +31,20 @@
   padding: 0 !important;
 }
 
-.el-dropdown-menu__item--divided:before, .el-menu, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-sub-menu .el-sub-menu__title:hover {
+.el-dropdown-menu__item--divided:before,
+.el-menu,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,
+.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover {
   background-color: transparent;
 }
 
 
-.el-dropdown-menu__item--divided:before, .el-menu, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-sub-menu .el-sub-menu__title:hover {
+.el-dropdown-menu__item--divided:before,
+.el-menu,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,
+.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover {
   background-color: transparent !important;
 }
 
@@ -49,11 +57,13 @@
   background-color: transparent;
 }
 
-.el-button.is-text:not(.is-disabled):focus, .el-button.is-text:not(.is-disabled):hover {
+.el-button.is-text:not(.is-disabled):focus,
+.el-button.is-text:not(.is-disabled):hover {
   background-color: transparent;
 }
 
-.avue-icon i, .avue-icon svg {
+.avue-icon i,
+.avue-icon svg {
   line-height: 20px;
 }
 
@@ -66,36 +76,43 @@
   justify-content: space-between;
 
   .el-dialog {
-      position: relative;
-      padding: 0;
+    position: relative;
+    padding: 0;
+    overflow: hidden;
+
+    .el-dialog__body {
+      width: 100%;
+      height: 100%;
+
+      iframe {
+        width: 100%;
+        height: 100%;
+      }
+    }
+
+    .el-dialog__header {
+      height: 0;
       overflow: hidden;
+      padding: 0;
 
-      .el-dialog__body {
-          width: 100%;
-          height: 100%;
+      .el-dialog__headerbtn {
+        position: absolute;
+        left: 0;
+        top: 14px;
 
-          iframe {
-              width: 100%;
-              height: 100%;
-          }
+        .el-dialog__close {
+          color: #fff;
+          font-size: 35px;
+          z-index: 99;
+        }
       }
+    }
+  }
+}
 
-      .el-dialog__header {
-          height: 0;
-          overflow: hidden;
-          padding: 0;
-
-          .el-dialog__headerbtn {
-              position: absolute;
-              left: 0;
-              top: 14px;
-
-              .el-dialog__close {
-                  color: #fff;
-                  font-size: 35px;
-                  z-index: 99;
-              }
-          }
-      }
+.ztzf-drawer-body-basic-container {
+  .el-drawer__body {
+    display: flex;
+    flex-direction: column;
   }
 }
\ No newline at end of file
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
index ef29df7..8c395ec 100644
--- a/src/styles/variables.scss
+++ b/src/styles/variables.scss
@@ -1,3 +1,7 @@
 $sidebar_width: 230px;
 $sidebar_collapse: 60px;
 $top_height: 50px;
+
+@function pxToVh($px) {
+  @return calc($px / 1080) * 100vh;
+}
diff --git a/src/utils/cesium/publicCesium.js b/src/utils/cesium/publicCesium.js
index d511963..a5e96b1 100644
--- a/src/utils/cesium/publicCesium.js
+++ b/src/utils/cesium/publicCesium.js
@@ -70,7 +70,7 @@
 			baseLayer: false,
 			fullscreenButton: false,
 		}
-		
+
 		this.viewer = new Viewer(options.dom, viewerOptions)
 
 		this.viewer.imageryLayers.removeAll()
@@ -84,7 +84,7 @@
 
 		if (terrain) {
 			try {
-				Cesium.CesiumTerrainProvider.fromUrl(`${import.meta.env.VITE_APP_TERRAIN_URL}/all_terrain`, {
+				Cesium.CesiumTerrainProvider.fromUrl(`${import.meta.env.VITE_APP_TERRAIN_URL}`, {
 					requestVertexNormals: true, // 启用地形法线增强立体感
 					requestWaterMask: true, // 启用水体遮罩效果
 				}).then(terrainProvider => {
diff --git a/src/views/algorithmRepository/algorithmRepository.vue b/src/views/algorithmRepository/algorithmRepository.vue
index 2898bd2..ad3ee3a 100644
--- a/src/views/algorithmRepository/algorithmRepository.vue
+++ b/src/views/algorithmRepository/algorithmRepository.vue
@@ -42,7 +42,10 @@
                 v-model="taskData"
                 placeholder="请选择日期"
                 @change="changeselect"
+                  clearable
+                 
               />
+                <!-- @clear="handleDateClear" -->
             </div>
             <div class="item">
               <div class="itemchild">机巢查询:</div>
@@ -58,18 +61,19 @@
           </div>
         </div>
 
-        <div
+       <div  v-if="detailData.length > 0" class="pictureBox">
+         <div
           class="pictureitem"
-          v-if="detailData.length > 0"
+         
           v-loading="loading"
           element-loading-text="加载中"
         >
           <div class="imgitem" v-for="(item, index) in detailData" :key="index">
             <el-image
               ref="imageRef"
-              :src="item.url"
+              :src="getSmallImg(item.url)"
               show-progress
-              :preview-src-list="detailData.map(i => i.url)"
+              :preview-src-list="[getShowImg(item.url)]"
               fit="cover"
             />
 
@@ -79,6 +83,7 @@
             </div>
           </div>
         </div>
+       </div>
         <el-empty class="custom-empty" v-else>
           <template #description>
             <span class="custom-text">暂无数据</span>
@@ -88,7 +93,7 @@
         <el-pagination
           class="pageStyle"
           background
-          :page-sizes="[10, 20, 30, 50]"
+          :page-sizes="[15, 20, 30, 50]"
           v-model:current-page="params.current"
           v-model:page-size="params.size"
           layout="total, prev, pager, next,sizes, jumper"
@@ -102,12 +107,10 @@
 </template>
 
 <script setup>
-defineOptions({
-  name: 'algorithmRepository',
-});
+
 import { getDictionaryByCode } from '@/api/system/dictbiz';
 import { getalgorithmList, selectDeviceList } from '@/api/algorithm';
-import { getSmallImg } from '@/utils/util';
+import { getSmallImg,getShowImg } from '@/utils/util';
 import { useRouter } from 'vue-router';
 const router = useRouter();
 const baseUrl = import.meta.env.VITE_APP_PICTURE_URL;
@@ -124,13 +127,9 @@
   device_name: '',
   name: '',
   current: 1,
-  size: 10,
+  size: 15,
 });
 
-// const getSmallImg = (url) => {
-
-// 	return url ? encodeURI(url.substring(0, url.lastIndexOf('.')) + '_small' + url.substring(url.lastIndexOf('.')))  : ''
-// }
 // 请求字典字段
 let AlgorithmData = ref([]);
 const detailData = ref([]);
@@ -157,7 +156,15 @@
 };
 // 详情
 const getList = () => {
-  getalgorithmList(params.value).then(res => {
+const detailParams={
+   ai_type_key: params.value.ai_type_key,
+  start_date:params.value.start_date,
+  end_date: params.value.end_date,
+  device_name: params.value.device_name,
+  name:params.value.name,
+}
+  getalgorithmList(detailParams,{  current: params.value.current,
+    size: params.value.size,}).then(res => {
     loading.value = true;
     detailData.value = res.data.data.records;
     total.value = res.data.data.total;
@@ -177,19 +184,31 @@
   params.value.start_date = taskData.value.length ? `${taskData.value[0]} 00:00:00` : null;
   params.value.end_date = taskData.value.length ? `${taskData.value[1]} 23:59:59` : null;
 };
-const handleSearch = () => {
+// 处理日期清空
+const handleDateClear = () => {
+  taskData.value = ''; // 清空绑定的日期数据
+  params.value.start_date = null; // 重置开始日期参数
+  params.value.end_date = null; // 重置结束日期参数
   getList();
 };
+const handleSearch = () => {
+  getList();
+  
+};
 const handleReset = () => {
+taskData.value =''
   params.value.start_date = null;
   params.value.end_date = null;
   params.value.device_name = '';
   params.value.name = '';
   getList();
+  
 };
 const goback = () => {
   showDetail.value = false;
   activeItem.value = null;
+  params.value.current =1
+  params.value.size=15
 };
 // 分页大小改变
 const handleSizeChange = val => {
@@ -208,15 +227,19 @@
 </script>
 
 <style scoped lang="scss">
+.algorithContainer {
+height: 100%;
+overflow: auto;
+}
 .algorithItem {
-  padding: 20px;
+  // padding: 20px;
   display: grid;
   grid-template-columns: repeat(5, 1fr);
-  gap: 53px;
+  // gap: 13px;
   text-align: center;
   vertical-align: middle;
   .item {
-    height: 300px;
+    height: 267px;
     display: flex;
     flex-direction: column;
     justify-content: center;
@@ -231,11 +254,12 @@
     .imgicon {
       width: 100px;
       height: 100px;
-      margin-bottom: 47px;
+      margin-bottom: 17px;
     }
     &:hover {
       background: url('/src/assets/images/ht-sfbg-hover.png') no-repeat center;
       background-size: 100% 100%;
+      cursor: pointer;
     }
     &.active-bg {
       background: url('/src/assets/images/ht-sfbg-click.png') no-repeat center;
@@ -275,18 +299,24 @@
 }
 .algorithItemDetail {
   padding: 20px;
-
+    
+    .pictureBox {
+    // height: 625px;
+       height: pxToVh(760);
+    overflow: auto;
+    }
   .pictureitem {
+
     display: grid;
     grid-template-columns: repeat(5, 1fr);
-    gap: 24px;
+    gap: 14px;
 
     .imgitem {
       border-radius: 12px 12px 0 0;
       overflow: hidden;
       .el-image {
         width: 100%;
-        height: 200px;
+        height: 170px;
         display: block;
         margin: 0;
         padding: 0;
@@ -295,7 +325,7 @@
         display: flex;
         justify-content: space-between;
         align-items: center;
-        height: 42px;
+        height: 35px;
         border-radius: 0 0 12px 12px;
         overflow: hidden;
         background: linear-gradient(180deg, #ffffff 0%, #e5edff 100%);
diff --git a/src/views/authority/apiscope.vue b/src/views/authority/apiscope.vue
index 32c2d0e..f0159ff 100644
--- a/src/views/authority/apiscope.vue
+++ b/src/views/authority/apiscope.vue
@@ -1,39 +1,17 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      ref="crud"
-      v-model="form"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      @row-del="rowDel"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-      @tree-load="treeLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
+      :permission="permissionList" :before-open="beforeOpen" @row-del="rowDel" @row-update="rowUpdate"
+      @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
+      @tree-load="treeLoad">
       <template #menu="{ row }">
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-setting"
-          v-if="permission.api_scope_setting"
-          plain
-          style="border: 0; background-color: transparent !important"
-          @click.stop="handleDataScope(row)"
-          >权限配置
+        <el-button type="primary" text icon="el-icon-setting" v-if="permission.api_scope_setting" plain
+          style="border: 0; background-color: transparent !important" @click.stop="handleDataScope(row)">权限配置
         </el-button>
       </template>
       <template #name="{ row }">
-        <i :class="row.source" class="namei"/>
+        <i :class="row.source" class="namei" />
         <span>{{ row.name }}</span>
       </template>
       <template #source="{ row }">
@@ -42,36 +20,16 @@
         </div>
       </template>
     </avue-crud>
-    <el-drawer
-      :title="`[${scopeMenuName}] 接口权限配置`"
-      v-model="drawerVisible"
-      :direction="direction"
-      append-to-body
-      :before-close="handleDrawerClose"
-      size="1000px"
-    >
+    <el-drawer :title="`[${scopeMenuName}] 接口权限配置`" v-model="drawerVisible" :direction="direction" append-to-body
+      :before-close="handleDrawerClose" size="1000px">
       <basic-container>
-        <avue-crud
-          :option="optionScope"
-          :data="dataScope"
-          :page="pageScope"
-          v-model="formScope"
-          :table-loading="scopeLoading"
-          ref="crudScope"
-          @row-del="rowDelScope"
-          @row-update="rowUpdateScope"
-          @row-save="rowSaveScope"
-          :before-open="beforeOpenScope"
-          @search-change="searchChangeScope"
-          @search-reset="searchResetScope"
-          @selection-change="selectionChangeScope"
-          @current-change="currentChangeScope"
-          @size-change="sizeChangeScope"
-          @on-load="onLoadScope"
-        >
+        <avue-crud :option="optionScope" :data="dataScope" :page="pageScope" v-model="formScope"
+          :table-loading="scopeLoading" ref="crudScope" @row-del="rowDelScope" @row-update="rowUpdateScope"
+          @row-save="rowSaveScope" :before-open="beforeOpenScope" @search-change="searchChangeScope"
+          @search-reset="searchResetScope" @selection-change="selectionChangeScope" @current-change="currentChangeScope"
+          @size-change="sizeChangeScope" @on-load="onLoadScope">
           <template #menu-left>
-            <el-button type="danger" icon="el-icon-delete" plain @click="handleDeleteScope"
-              >删 除
+            <el-button type="danger" icon="el-icon-delete" plain @click="handleDeleteScope">删 除
             </el-button>
           </template>
           <template #scopeType="{ row }">
@@ -84,19 +42,19 @@
 </template>
 
 <script>
-import { add, remove, update, getLazyMenuList, getMenu } from '@/api/system/menu';
+import { add, remove, update, getLazyMenuList, getMenu } from '@/api/system/menu'
 import {
   addApiScope,
   removeApiScope,
   updateApiScope,
   getListApiScope,
   getMenuApiScope,
-} from '@/api/system/scope';
-import { mapGetters } from 'vuex';
-import iconList from '@/config/iconList';
+} from '@/api/system/scope'
+import { mapGetters } from 'vuex'
+import iconList from '@/config/iconList'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       selectionList: [],
@@ -131,6 +89,10 @@
         delBtn: false,
         menuWidth: 150,
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '菜单名称',
@@ -386,108 +348,108 @@
         ],
       },
       dataScope: [],
-    };
+    }
   },
 
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.menu_add, false),
         viewBtn: this.validData(this.permission.menu_view, false),
         delBtn: this.validData(this.permission.menu_delete, false),
         editBtn: this.validData(this.permission.menu_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
-    scopeIds() {
-      let ids = [];
+    scopeIds () {
+      let ids = []
       this.selectionListScope.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
     // 菜单管理模块
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.parentId = 0;
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.parentId = 0
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.parentId = '';
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.parentId = ''
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -495,119 +457,119 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getMenu(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
       getLazyMenuList(this.parentId, Object.assign(params, this.query)).then(res => {
-        this.data = res.data.data;
-        this.loading = false;
-        this.selectionClear();
-      });
+        this.data = res.data.data
+        this.loading = false
+        this.selectionClear()
+      })
     },
-    treeLoad(tree, treeNode, resolve) {
-      const parentId = tree.id;
+    treeLoad (tree, treeNode, resolve) {
+      const parentId = tree.id
       getLazyMenuList(parentId).then(res => {
-        resolve(res.data.data);
-      });
+        resolve(res.data.data)
+      })
     },
     // 数据权限模块
-    handleDataScope(row) {
-      this.drawerVisible = true;
-      this.scopeMenuId = row.id;
-      this.scopeMenuName = row.name;
-      this.onLoadScope(this.pageScope);
+    handleDataScope (row) {
+      this.drawerVisible = true
+      this.scopeMenuId = row.id
+      this.scopeMenuName = row.name
+      this.onLoadScope(this.pageScope)
     },
-    handleDrawerClose(hide) {
-      hide();
+    handleDrawerClose (hide) {
+      hide()
     },
-    rowSaveScope(row, done, loading) {
+    rowSaveScope (row, done, loading) {
       row = {
         ...row,
         menuId: this.scopeMenuId,
-      };
+      }
       addApiScope(row).then(
         () => {
-          this.onLoadScope(this.pageScope);
+          this.onLoadScope(this.pageScope)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdateScope(row, index, done, loading) {
+    rowUpdateScope (row, index, done, loading) {
       row = {
         ...row,
         menuId: this.scopeMenuId,
-      };
+      }
       updateApiScope(row).then(
         () => {
-          this.onLoadScope(this.pageScope);
+          this.onLoadScope(this.pageScope)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDelScope(row) {
+    rowDelScope (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return removeApiScope(row.id);
+          return removeApiScope(row.id)
         })
         .then(() => {
-          this.onLoadScope(this.pageScope);
+          this.onLoadScope(this.pageScope)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    handleDeleteScope() {
+    handleDeleteScope () {
       if (this.selectionListScope.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -615,71 +577,63 @@
         type: 'warning',
       })
         .then(() => {
-          return removeApiScope(this.scopeIds);
+          return removeApiScope(this.scopeIds)
         })
         .then(() => {
-          this.onLoadScope(this.pageScope);
+          this.onLoadScope(this.pageScope)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crudScope.toggleSelection();
-        });
+          })
+          this.$refs.crudScope.toggleSelection()
+        })
     },
-    beforeOpenScope(done, type) {
+    beforeOpenScope (done, type) {
       if (['edit', 'view'].includes(type)) {
         getMenuApiScope(this.formScope.id).then(res => {
-          this.formScope = res.data.data;
-        });
+          this.formScope = res.data.data
+        })
       }
-      done();
+      done()
     },
-    searchResetScope() {
-      this.onLoadScope(this.pageScope);
+    searchResetScope () {
+      this.onLoadScope(this.pageScope)
     },
-    searchChangeScope(params, done) {
-      this.onLoadScope(this.pageScope, params);
-      done();
+    searchChangeScope (params, done) {
+      this.onLoadScope(this.pageScope, params)
+      done()
     },
-    selectionChangeScope(list) {
-      this.selectionListScope = list;
+    selectionChangeScope (list) {
+      this.selectionListScope = list
     },
-    currentChangeScope(currentPage) {
-      this.pageScope.currentPage = currentPage;
+    currentChangeScope (currentPage) {
+      this.pageScope.currentPage = currentPage
     },
-    sizeChangeScope(pageSize) {
-      this.pageScope.pageSize = pageSize;
+    sizeChangeScope (pageSize) {
+      this.pageScope.pageSize = pageSize
     },
-    onLoadScope(page, params = {}) {
-      this.scopeLoading = true;
+    onLoadScope (page, params = {}) {
+      this.scopeLoading = true
       const values = {
         ...params,
         menuId: this.scopeMenuId,
-      };
+      }
       getListApiScope(page.currentPage, page.pageSize, Object.assign(values, this.query)).then(
         res => {
-          const data = res.data.data;
-          this.pageScope.total = data.total;
-          this.dataScope = data.records;
-          this.selectionListScope = [];
-          this.scopeLoading = false;
+          const data = res.data.data
+          this.pageScope.total = data.total
+          this.dataScope = data.records
+          this.selectionListScope = []
+          this.scopeLoading = false
         }
-      );
+      )
     },
   },
-};
+}
 </script>
 
 <style scoped lang="scss">
 .namei {
   margin-right: 5px;
 }
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
 </style>
\ No newline at end of file
diff --git a/src/views/authority/datascope.vue b/src/views/authority/datascope.vue
index f159d3f..10b4f8c 100644
--- a/src/views/authority/datascope.vue
+++ b/src/views/authority/datascope.vue
@@ -1,40 +1,17 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      ref="crud"
-      v-model="form"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      :before-close="beforeClose"
-      @row-del="rowDel"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-      @tree-load="treeLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
+      :permission="permissionList" :before-open="beforeOpen" :before-close="beforeClose" @row-del="rowDel"
+      @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset"
+      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad" @tree-load="treeLoad">
       <template #menu="{ row }">
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-setting"
-          v-if="permission.data_scope_setting"
-          plain
-          style="border: 0; background-color: transparent !important"
-          @click.stop="handleDataScope(row)"
-          >权限配置
+        <el-button type="primary" text icon="el-icon-setting" v-if="permission.data_scope_setting" plain
+          style="border: 0; background-color: transparent !important" @click.stop="handleDataScope(row)">权限配置
         </el-button>
       </template>
       <template #name="{ row }">
-        <i :class="row.source" class="namei"  />
+        <i :class="row.source" class="namei" />
         <span>{{ row.name }}</span>
       </template>
       <template #source="{ row }">
@@ -43,36 +20,16 @@
         </div>
       </template>
     </avue-crud>
-    <el-drawer
-      :title="`[${scopeMenuName}] 数据权限配置`"
-      v-model="drawerVisible"
-      :direction="direction"
-      append-to-body
-      :before-close="handleDrawerClose"
-      size="1000px"
-    >
+    <el-drawer :title="`[${scopeMenuName}] 数据权限配置`" v-model="drawerVisible" :direction="direction" append-to-body
+      :before-close="handleDrawerClose" size="1000px">
       <basic-container>
-        <avue-crud
-          :option="optionScope"
-          :data="dataScope"
-          :page="pageScope"
-          v-model="formScope"
-          :table-loading="scopeLoading"
-          ref="crudScope"
-          @row-del="rowDelScope"
-          @row-update="rowUpdateScope"
-          @row-save="rowSaveScope"
-          :before-open="beforeOpenScope"
-          @search-change="searchChangeScope"
-          @search-reset="searchResetScope"
-          @selection-change="selectionChangeScope"
-          @current-change="currentChangeScope"
-          @size-change="sizeChangeScope"
-          @on-load="onLoadScope"
-        >
+        <avue-crud :option="optionScope" :data="dataScope" :page="pageScope" v-model="formScope"
+          :table-loading="scopeLoading" ref="crudScope" @row-del="rowDelScope" @row-update="rowUpdateScope"
+          @row-save="rowSaveScope" :before-open="beforeOpenScope" @search-change="searchChangeScope"
+          @search-reset="searchResetScope" @selection-change="selectionChangeScope" @current-change="currentChangeScope"
+          @size-change="sizeChangeScope" @on-load="onLoadScope">
           <template #menu-left>
-            <el-button type="danger" icon="el-icon-delete" plain @click="handleDeleteScope"
-              >删 除
+            <el-button type="danger" icon="el-icon-delete" plain @click="handleDeleteScope">删 除
             </el-button>
           </template>
           <template #scopeType="{ row }">
@@ -85,20 +42,20 @@
 </template>
 
 <script>
-import { add, remove, update, getLazyMenuList, getMenu } from '@/api/system/menu';
+import { add, remove, update, getLazyMenuList, getMenu } from '@/api/system/menu'
 import {
   addDataScope,
   removeDataScope,
   updateDataScope,
   getListDataScope,
   getMenuDataScope,
-} from '@/api/system/scope';
-import { mapGetters } from 'vuex';
-import iconList from '@/config/iconList';
-import func from '@/utils/func';
+} from '@/api/system/scope'
+import { mapGetters } from 'vuex'
+import iconList from '@/config/iconList'
+import func from '@/utils/func'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       selectionList: [],
@@ -135,6 +92,10 @@
         delBtn: false,
         menuWidth: 150,
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '菜单名称',
@@ -427,150 +388,150 @@
         ],
       },
       dataScope: [],
-    };
+    }
   },
   watch: {
-    'formScope.scopeType'() {
-      this.initScope();
+    'formScope.scopeType' () {
+      this.initScope()
     },
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.menu_add, false),
         viewBtn: this.validData(this.permission.menu_view, false),
         delBtn: this.validData(this.permission.menu_delete, false),
         editBtn: this.validData(this.permission.menu_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
-    scopeIds() {
-      let ids = [];
+    scopeIds () {
+      let ids = []
       this.selectionListScope.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    initScope() {
-      const scopeType = func.toInt(this.formScope.scopeType);
-      const watchMode = this.watchMode;
+    initScope () {
+      const scopeType = func.toInt(this.formScope.scopeType)
+      const watchMode = this.watchMode
       let column = '-',
-        name = '暂无';
+        name = '暂无'
       if (scopeType === 1) {
-        column = '-';
-        name = '全部可见';
+        column = '-'
+        name = '全部可见'
       } else if (scopeType === 2) {
-        column = 'create_user';
-        name = '本人可见';
+        column = 'create_user'
+        name = '本人可见'
       } else if (scopeType === 3) {
-        column = 'create_dept';
-        name = '所在机构可见';
+        column = 'create_dept'
+        name = '所在机构可见'
       } else if (scopeType === 4) {
-        column = 'create_dept';
-        name = '所在机构可见及子级可见';
+        column = 'create_dept'
+        name = '所在机构可见及子级可见'
       } else if (scopeType === 5) {
-        column = '';
-        name = '自定义';
+        column = ''
+        name = '自定义'
       }
       this.$refs.crudScope.option.column.filter(item => {
         if (watchMode) {
           if (item.prop === 'scopeName') {
-            this.formScope.scopeName = `${this.scopeMenuName} [${name}]`;
+            this.formScope.scopeName = `${this.scopeMenuName} [${name}]`
           }
           if (item.prop === 'resourceCode') {
-            this.formScope.resourceCode = this.scopeMenuCode;
+            this.formScope.resourceCode = this.scopeMenuCode
           }
           if (item.prop === 'scopeColumn') {
-            this.formScope.scopeColumn = column;
+            this.formScope.scopeColumn = column
           }
         }
         if (item.prop === 'scopeValue') {
-          item.display = scopeType === 5;
+          item.display = scopeType === 5
         }
-      });
+      })
     },
     // 菜单管理模块
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.parentId = 0;
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.parentId = 0
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.parentId = '';
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.parentId = ''
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -578,124 +539,124 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getMenu(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    beforeClose(done) {
-      this.formScope = {};
-      done();
+    beforeClose (done) {
+      this.formScope = {}
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
       getLazyMenuList(this.parentId, Object.assign(params, this.query)).then(res => {
-        this.data = res.data.data;
-        this.loading = false;
-        this.selectionClear();
-      });
+        this.data = res.data.data
+        this.loading = false
+        this.selectionClear()
+      })
     },
-    treeLoad(tree, treeNode, resolve) {
-      const parentId = tree.id;
+    treeLoad (tree, treeNode, resolve) {
+      const parentId = tree.id
       getLazyMenuList(parentId).then(res => {
-        resolve(res.data.data);
-      });
+        resolve(res.data.data)
+      })
     },
     // 数据权限模块
-    handleDataScope(row) {
-      this.drawerVisible = true;
-      this.scopeMenuId = row.id;
-      this.scopeMenuCode = row.code;
-      this.scopeMenuName = row.name;
-      this.onLoadScope(this.pageScope);
+    handleDataScope (row) {
+      this.drawerVisible = true
+      this.scopeMenuId = row.id
+      this.scopeMenuCode = row.code
+      this.scopeMenuName = row.name
+      this.onLoadScope(this.pageScope)
     },
-    handleDrawerClose(hide) {
-      hide();
+    handleDrawerClose (hide) {
+      hide()
     },
-    rowSaveScope(row, done, loading) {
+    rowSaveScope (row, done, loading) {
       row = {
         ...row,
         menuId: this.scopeMenuId,
-      };
+      }
       addDataScope(row).then(
         () => {
-          this.onLoadScope(this.pageScope);
+          this.onLoadScope(this.pageScope)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdateScope(row, index, done, loading) {
+    rowUpdateScope (row, index, done, loading) {
       row = {
         ...row,
         menuId: this.scopeMenuId,
-      };
+      }
       updateDataScope(row).then(
         () => {
-          this.onLoadScope(this.pageScope);
+          this.onLoadScope(this.pageScope)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDelScope(row) {
+    rowDelScope (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return removeDataScope(row.id);
+          return removeDataScope(row.id)
         })
         .then(() => {
-          this.onLoadScope(this.pageScope);
+          this.onLoadScope(this.pageScope)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    handleDeleteScope() {
+    handleDeleteScope () {
       if (this.selectionListScope.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -703,76 +664,68 @@
         type: 'warning',
       })
         .then(() => {
-          return removeDataScope(this.scopeIds);
+          return removeDataScope(this.scopeIds)
         })
         .then(() => {
-          this.onLoadScope(this.pageScope);
+          this.onLoadScope(this.pageScope)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crudScope.toggleSelection();
-        });
+          })
+          this.$refs.crudScope.toggleSelection()
+        })
     },
-    beforeOpenScope(done, type) {
+    beforeOpenScope (done, type) {
       if (['add'].includes(type)) {
-        this.watchMode = true;
-        this.initScope();
+        this.watchMode = true
+        this.initScope()
       }
       if (['edit', 'view'].includes(type)) {
-        this.watchMode = false;
+        this.watchMode = false
         getMenuDataScope(this.formScope.id).then(res => {
-          this.formScope = res.data.data;
-        });
+          this.formScope = res.data.data
+        })
       }
-      done();
+      done()
     },
-    searchResetScope() {
-      this.onLoadScope(this.pageScope);
+    searchResetScope () {
+      this.onLoadScope(this.pageScope)
     },
-    searchChangeScope(params, done) {
-      this.onLoadScope(this.pageScope, params);
-      done();
+    searchChangeScope (params, done) {
+      this.onLoadScope(this.pageScope, params)
+      done()
     },
-    selectionChangeScope(list) {
-      this.selectionListScope = list;
+    selectionChangeScope (list) {
+      this.selectionListScope = list
     },
-    currentChangeScope(currentPage) {
-      this.pageScope.currentPage = currentPage;
+    currentChangeScope (currentPage) {
+      this.pageScope.currentPage = currentPage
     },
-    sizeChangeScope(pageSize) {
-      this.pageScope.pageSize = pageSize;
+    sizeChangeScope (pageSize) {
+      this.pageScope.pageSize = pageSize
     },
-    onLoadScope(page, params = {}) {
-      this.scopeLoading = true;
+    onLoadScope (page, params = {}) {
+      this.scopeLoading = true
       const values = {
         ...params,
         menuId: this.scopeMenuId,
-      };
+      }
       getListDataScope(page.currentPage, page.pageSize, Object.assign(values, this.query)).then(
         res => {
-          const data = res.data.data;
-          this.pageScope.total = data.total;
-          this.dataScope = data.records;
-          this.selectionListScope = [];
-          this.scopeLoading = false;
+          const data = res.data.data
+          this.pageScope.total = data.total
+          this.dataScope = data.records
+          this.selectionListScope = []
+          this.scopeLoading = false
         }
-      );
+      )
     },
   },
-};
+}
 </script>
 
 <style scoped lang="scss">
 .namei {
   margin-right: 5px;
 }
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
 </style>
\ No newline at end of file
diff --git a/src/views/authority/role.vue b/src/views/authority/role.vue
index 9fe617b..65400e6 100644
--- a/src/views/authority/role.vue
+++ b/src/views/authority/role.vue
@@ -1,39 +1,13 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      ref="crud"
-      v-model="form"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      @row-del="rowDel"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
+      :permission="permissionList" :before-open="beforeOpen" @row-del="rowDel" @row-update="rowUpdate"
+      @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
       <template #menu-left>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          v-if="permission.role_delete"
-          plain
-          @click="handleDelete"
-          >删 除
+        <el-button type="danger" icon="el-icon-delete" v-if="permission.role_delete" plain @click="handleDelete">删 除
         </el-button>
-        <el-button
-          icon="el-icon-setting"
-          v-if="userInfo.role_name.includes('admin')"
-          @click="handleRole"
-          plain
-          >权限设置
+        <el-button icon="el-icon-setting" v-if="userInfo.role_name.includes('admin')" @click="handleRole" plain>权限设置
         </el-button>
         <!--  -->
       </template>
@@ -41,14 +15,8 @@
     <el-dialog title="角色权限配置" append-to-body v-model="box" width="345px">
       <el-tabs type="border-card">
         <el-tab-pane label="菜单权限">
-          <el-tree
-            :data="menuGrantList"
-            show-checkbox
-            node-key="id"
-            ref="treeMenu"
-            :default-checked-keys="menuTreeObj"
-            :props="props"
-          >
+          <el-tree :data="menuGrantList" show-checkbox node-key="id" ref="treeMenu" :default-checked-keys="menuTreeObj"
+            :props="props">
           </el-tree>
         </el-tab-pane>
         <!-- <el-tab-pane label="数据权限">
@@ -94,12 +62,12 @@
   grantTree,
   remove,
   update,
-} from '@/api/system/role';
-import { mapGetters } from 'vuex';
-import website from '@/config/website';
+} from '@/api/system/role'
+import { mapGetters } from 'vuex'
+import website from '@/config/website'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       box: false,
@@ -134,6 +102,10 @@
         viewBtn: true,
         dialogWidth: 900,
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '角色名称',
@@ -218,152 +190,152 @@
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['userInfo', 'permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.role_add, false),
         viewBtn: this.validData(this.permission.role_view, false),
         delBtn: this.validData(this.permission.role_delete, false),
         editBtn: this.validData(this.permission.role_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
-    idsArray() {
-      let ids = [];
+    idsArray () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids;
+        ids.push(ele.id)
+      })
+      return ids
     },
   },
   methods: {
-    initData(roleId) {
+    initData (roleId) {
       getRoleTreeById(roleId).then(res => {
-        const column = this.findObject(this.option.column, 'parentId');
-        column.dicData = res.data.data;
-      });
+        const column = this.findObject(this.option.column, 'parentId')
+        column.dicData = res.data.data
+      })
     },
-    submit() {
-      const menuList = this.$refs.treeMenu.getCheckedKeys();
+    submit () {
+      const menuList = this.$refs.treeMenu.getCheckedKeys()
       // const dataScopeList = this.$refs.treeDataScope.getCheckedKeys();
-      const dataScopeList = [];
+      const dataScopeList = []
       // const apiScopeList = this.$refs.treeApiScope.getCheckedKeys();
-      const apiScopeList = [];
+      const apiScopeList = []
       grant(this.idsArray, menuList, dataScopeList, apiScopeList).then(() => {
-        this.box = false;
+        this.box = false
         this.$message({
           type: 'success',
           message: '操作成功!',
-        });
-        this.onLoad(this.page);
-      });
+        })
+        this.onLoad(this.page)
+      })
     },
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
 
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['add', 'edit'].includes(type)) {
-        this.initData(this.form.id);
+        this.initData(this.form.id)
       }
-      done();
+      done()
     },
-    handleRole() {
+    handleRole () {
       if (this.selectionList.length !== 1) {
-        this.$message.warning('只能选择一条数据');
-        return;
+        this.$message.warning('只能选择一条数据')
+        return
       }
-      this.menuTreeObj = [];
-      this.dataScopeTreeObj = [];
-      this.apiScopeTreeObj = [];
+      this.menuTreeObj = []
+      this.dataScopeTreeObj = []
+      this.apiScopeTreeObj = []
       grantTree().then(res => {
-        this.menuGrantList = res.data.data.menu;
-        this.dataScopeGrantList = res.data.data.dataScope;
-        this.apiScopeGrantList = res.data.data.apiScope;
+        this.menuGrantList = res.data.data.menu
+        this.dataScopeGrantList = res.data.data.dataScope
+        this.apiScopeGrantList = res.data.data.apiScope
         getRole(this.ids).then(res => {
-          this.menuTreeObj = res.data.data.menu;
-          this.dataScopeTreeObj = res.data.data.dataScope;
-          this.apiScopeTreeObj = res.data.data.apiScope;
-          this.box = true;
-        });
-      });
+          this.menuTreeObj = res.data.data.menu
+          this.dataScopeTreeObj = res.data.data.dataScope
+          this.apiScopeTreeObj = res.data.data.apiScope
+          this.box = true
+        })
+      })
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -371,44 +343,35 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
       getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
-        this.data = res.data.data;
-        this.loading = false;
-        this.selectionClear();
-      });
+        this.data = res.data.data
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
\ No newline at end of file
+<style scoped lang="scss"></style>
\ No newline at end of file
diff --git a/src/views/base/region.vue b/src/views/base/region.vue
index 012b64e..79c0f49 100644
--- a/src/views/base/region.vue
+++ b/src/views/base/region.vue
@@ -1,111 +1,93 @@
 <template>
-  <el-row>
-    <el-col :span="9">
-      <div class="box">
+  <div class="manage-p-all-10 manage-p-t-0 manage-h-0 manage-flex-1 manage-flex">
+    <div
+      class="manage-p-all-20 manage-flex-2 manage-h-100 manage-b-r-5 manage-box-s-b-b manage-overflow-h manage-b-c-w">
+      <div class="box ">
         <el-scrollbar>
-          <basic-container>
+          <div class="manage-w-100 manage-h-100">
             <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick" />
-          </basic-container>
+          </div>
         </el-scrollbar>
       </div>
-    </el-col>
-    <el-col :span="15">
-      <basic-container>
-        <el-button-group>
-          <el-button
-            v-if="permission.region_add"
-            type="primary"
-            icon="el-icon-plus"
-            @click="addChildren"
-            >新增下级
-          </el-button>
-          <el-button
-            v-if="permission.region_delete"
-            type="primary"
-            icon="el-icon-delete"
-            @click="handleDelete"
-            >删除
-          </el-button>
-          <el-button
-            v-if="permission.region_import"
-            type="primary"
-            icon="el-icon-upload"
-            @click="handleImport"
-            >导入
-          </el-button>
-          <el-button
-            v-if="permission.region_export"
-            type="primary"
-            icon="el-icon-download"
-            @click="handleExport"
-            >导出
-          </el-button>
-          <el-button
-            v-if="permission.region_debug"
-            type="primary"
-            icon="el-icon-video-play"
-            @click="handleDebug"
-            >调试
-          </el-button>
-        </el-button-group>
-      </basic-container>
-      <basic-container>
-        <avue-form ref="form" :option="regionOption" v-model="regionForm" @submit="handleSubmit">
-          <template #code="{}">
-            <el-input placeholder="请输入 区划子编号" v-model="regionForm.subCode">
-              <template #prepend>{{ regionForm.parentCode }}</template>
-            </el-input>
-          </template>
-        </avue-form>
-        <el-dialog title="行政区划数据导入" append-to-body v-model="excelBox" width="555px">
-          <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
-            <template #excelTemplate>
-              <el-button type="primary" @click="handleTemplate">
-                点击下载<i class="el-icon-download el-icon--right"></i>
-              </el-button>
+    </div>
+
+    <div
+      class="manage-p-all-10 manage-p-t-0 manage-p-b-0 manage-flex-4 manage-h-100 manage-flex manage-box-s-b-b manage-f-d-c">
+      <div class="manage-p-all-20 manage-flex manage-f-d-c manage-h-100 manage-box-s-b-b manage-b-c-w manage-b-r-5">
+        <div>
+          <el-button-group>
+            <el-button v-if="permission.region_add" type="primary" icon="el-icon-plus" @click="addChildren">新增下级
+            </el-button>
+            <el-button v-if="permission.region_delete" type="primary" icon="el-icon-delete" @click="handleDelete">删除
+            </el-button>
+            <el-button v-if="permission.region_import" type="primary" icon="el-icon-upload" @click="handleImport">导入
+            </el-button>
+            <el-button v-if="permission.region_export" type="primary" icon="el-icon-download" @click="handleExport">导出
+            </el-button>
+            <el-button v-if="permission.region_debug" type="primary" icon="el-icon-video-play" @click="handleDebug">调试
+            </el-button>
+          </el-button-group>
+        </div>
+
+        <div class="manage-m-t-20 manage-h-0 manage-flex-1 ">
+          <avue-form ref="form" :option="regionOption" v-model="regionForm" @submit="handleSubmit">
+            <template #code="{ }">
+              <el-input placeholder="请输入 区划子编号" v-model="regionForm.subCode">
+                <template #prepend>{{ regionForm.parentCode }}</template>
+              </el-input>
             </template>
           </avue-form>
-        </el-dialog>
-        <el-dialog title="行政区划数据调试" append-to-body v-model="debugBox" width="350px">
-          <avue-form :option="debugOption" v-model="debugForm" />
-        </el-dialog>
-      </basic-container>
-    </el-col>
-  </el-row>
+          <el-dialog title="行政区划数据导入" append-to-body v-model="excelBox" width="555px">
+            <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+              <template #excelTemplate>
+                <el-button type="primary" @click="handleTemplate">
+                  点击下载<i class="el-icon-download el-icon--right"></i>
+                </el-button>
+              </template>
+            </avue-form>
+          </el-dialog>
+          <el-dialog title="行政区划数据调试" append-to-body v-model="debugBox" width="350px">
+            <avue-form :option="debugOption" v-model="debugForm" />
+          </el-dialog>
+        </div>
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
-import { getLazyTree, getDetail, submit, remove } from '@/api/base/region';
-import { exportBlob } from '@/api/common';
-import { mapGetters } from 'vuex';
-import { validatenull } from '@/utils/validate';
-import { downloadXls } from '@/utils/util';
-import { getToken } from '@/utils/auth';
-import NProgress from 'nprogress';
-import 'nprogress/nprogress.css';
+import { getLazyTree, getDetail, submit, remove } from '@/api/base/region'
+import { exportBlob } from '@/api/common'
+import { mapGetters } from 'vuex'
+import { validatenull } from '@/utils/validate'
+import { downloadXls } from '@/utils/util'
+import { getToken } from '@/utils/auth'
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
 
 export default {
-  data() {
+  data () {
     return {
       topCode: '00',
       treeCode: '',
       treeParentCode: '',
+      loading: null,
       treeData: [],
       treeOption: {
         nodeKey: 'id',
         lazy: true,
         treeLoad: function (node, resolve) {
-          const parentCode = node.level === 0 ? '000000000000' : node.data.id;
+          const parentCode = node.level === 0 ? '000000000000' : node.data.id
           getLazyTree(parentCode).then(res => {
             resolve(
               res.data.data.map(item => {
                 return {
                   ...item,
                   leaf: !item.hasChildren,
-                };
+                }
               })
-            );
-          });
+            )
+          })
         },
         addBtn: false,
         menu: false,
@@ -310,96 +292,99 @@
           },
         ],
       },
-    };
+    }
   },
   watch: {
-    'regionForm.subCode'() {
-      this.regionForm.code = this.regionForm.parentCode + this.regionForm.subCode;
+    'regionForm.subCode' () {
+      this.regionForm.code = this.regionForm.parentCode + this.regionForm.subCode
     },
-    'excelForm.isCovered'() {
+    'excelForm.isCovered' () {
       if (this.excelForm.isCovered !== '') {
-        const column = this.findObject(this.excelOption.column, 'excelFile');
-        column.action = `/blade-system/region/import-region?isCovered=${this.excelForm.isCovered}`;
+        const column = this.findObject(this.excelOption.column, 'excelFile')
+        column.action = `/blade-system/region/import-region?isCovered=${this.excelForm.isCovered}`
       }
     },
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.region_add, false),
         viewBtn: this.validData(this.permission.region_view, false),
         delBtn: this.validData(this.permission.region_delete, false),
         editBtn: this.validData(this.permission.region_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    initTree() {
-      this.treeData = [];
+    initTree () {
+      this.treeData = []
       getLazyTree(this.topCode).then(res => {
         this.treeData = res.data.data.map(item => {
           return {
             ...item,
             leaf: !item.hasChildren,
-          };
-        });
-      });
+          }
+        })
+      })
     },
-    nodeClick(data) {
-      const column = this.findObject(this.regionOption.column, 'parentCode');
-      column.disabled = true;
-      this.treeCode = data.id;
-      this.treeParentCode = data.parentId;
+    nodeClick (data) {
+      const column = this.findObject(this.regionOption.column, 'parentCode')
+      column.disabled = true
+      this.treeCode = data.id
+      this.treeParentCode = data.parentId
       getDetail(this.treeCode).then(res => {
-        this.regionForm = res.data.data;
-        this.regionForm.subCode = this.regionForm.code.replace(this.regionForm.parentCode, '');
-      });
+        this.regionForm = res.data.data
+        this.regionForm.subCode = this.regionForm.code.replace(this.regionForm.parentCode, '')
+      })
     },
-    addChildren() {
+    addChildren () {
       if (validatenull(this.regionForm.code) || validatenull(this.regionForm.name)) {
-        this.$message.warning('请先选择一项区划');
-        return;
+        this.$message.warning('请先选择一项区划')
+        return
       }
-      this.regionForm.parentCode = this.regionForm.code;
-      this.regionForm.parentName = this.regionForm.name;
-      this.regionForm.code = '';
-      this.regionForm.subCode = '';
-      this.regionForm.name = '';
+      this.regionForm.parentCode = this.regionForm.code
+      this.regionForm.parentName = this.regionForm.name
+      this.regionForm.code = ''
+      this.regionForm.subCode = ''
+      this.regionForm.name = ''
       this.regionForm.regionLevel =
-        this.regionForm.regionLevel === 5 ? 5 : this.regionForm.regionLevel + 1;
+        this.regionForm.regionLevel === 5 ? 5 : this.regionForm.regionLevel + 1
     },
-    handleSubmit(form, done, loading) {
-      const parentCode = form.parentCode === this.topCode ? '' : form.parentCode;
-      form.code = parentCode + form.subCode;
+    handleSubmit (form, done, loading) {
+      const parentCode = form.parentCode === this.topCode ? '' : form.parentCode
+      // form.code = parentCode + form.subCode;
+      form.code = form.subCode
       submit(form).then(
         () => {
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.initTree();
-          this.regionForm.subCode = '';
-          this.$refs.form.resetForm();
-          done();
+          })
+          this.initTree()
+          this.regionForm.subCode = ''
+          this.$refs.form.resetForm()
+          done()
+          console.log('成功')
+
         },
         error => {
-          loading();
-          window.console.log(error);
+          // loading();
+          window.console.log(error)
         }
-      );
+      )
     },
-    handleDelete() {
+    handleDelete () {
       if (validatenull(this.regionForm.code)) {
-        this.$message.warning('请先选择一项区划');
-        return;
+        this.$message.warning('请先选择一项区划')
+        return
       }
       this.$confirm(`确定将 [${this.regionForm.name}] 数据删除?`, {
         confirmButtonText: '确定',
@@ -407,66 +392,66 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.treeCode);
+          return remove(this.treeCode)
         })
         .then(() => {
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.initTree();
-          this.regionForm.subCode = '';
-          this.$refs.form.resetForm();
-        });
+          })
+          this.initTree()
+          this.regionForm.subCode = ''
+          this.$refs.form.resetForm()
+        })
     },
-    uploadAfter(res, done, loading, column) {
-      window.console.log(column);
-      this.excelBox = false;
-      this.initTree();
-      done();
+    uploadAfter (res, done, loading, column) {
+      window.console.log(column)
+      this.excelBox = false
+      this.initTree()
+      done()
     },
-    handleDebug() {
-      this.debugBox = true;
+    handleDebug () {
+      this.debugBox = true
     },
-    handleImport() {
-      this.excelBox = true;
+    handleImport () {
+      this.excelBox = true
     },
-    handleExport() {
+    handleExport () {
       this.$confirm('是否导出行政区划数据?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       }).then(() => {
-        NProgress.start();
+        NProgress.start()
         exportBlob(
           `/blade-system/region/export-region?${this.website.tokenHeader}=${getToken()}`
         ).then(res => {
-          downloadXls(res.data, `行政区划数据${this.$dayjs().format('YYYY-MM-DD HH:mm:ss')}.xlsx`);
-          NProgress.done();
-        });
-      });
+          downloadXls(res.data, `行政区划数据${this.$dayjs().format('YYYY-MM-DD HH:mm:ss')}.xlsx`)
+          NProgress.done()
+        })
+      })
     },
-    handleTemplate() {
+    handleTemplate () {
       exportBlob(
         `/blade-system/region/export-template?${this.website.tokenHeader}=${getToken()}`
       ).then(res => {
-        downloadXls(res.data, '行政区划模板.xlsx');
-      });
+        downloadXls(res.data, '行政区划模板.xlsx')
+      })
     },
   },
-};
+}
 </script>
 
-<style>
+<style lang="scss" scoped>
 .box {
-  height: 800px;
-}
-
-.el-scrollbar {
   height: 100%;
 }
 
-.box .el-scrollbar__wrap {
-  overflow: scroll;
+::v-deep(.el-scrollbar) {
+  height: 100%;
+
+  .el-scrollbar__wrap {
+    overflow: auto;
+  }
 }
 </style>
diff --git a/src/views/dataCenter/components/dataCenterMap.vue b/src/views/dataCenter/components/dataCenterMap.vue
index 39930fd..cc787c7 100644
--- a/src/views/dataCenter/components/dataCenterMap.vue
+++ b/src/views/dataCenter/components/dataCenterMap.vue
@@ -111,13 +111,11 @@
   restoreAllIcons();
   if (currentClickEntity.billboard) {
     const status = currentClickEntity?.properties?._customData?._value?.data.status;
-    console.log('stayus', currentClickEntity?.properties?._customData?._value?.data);
     currentClickEntity.billboard.image =
       status === 1 || status === null ? activeIcon : getEventActiveImage(status);
     currentClickEntity.billboard.scale = 1; // 可选缩放效果
     activeEntity.value = currentClickEntity;
   }
-
   removeLabel();
   viewer.scene.postRender.addEventListener(labelBoxUpdate);
 };
@@ -128,7 +126,6 @@
   handler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas);
   handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK);
 };
-
 // 清除所有数据点实体
 const clearDataPoints = () => {
   if (!viewer) return;
@@ -138,7 +135,6 @@
   dataPointEntities.value = [];
   activeEntity.value = null;
 };
-
 const removeHandler = () => {
   handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
   handler?.destroy();
@@ -147,11 +143,7 @@
 
 const renderDataPoint = mapList => {
   if (!viewer || !mapList?.length) return;
-
-  // 清除旧实体
   clearDataPoints();
-
-  // 添加新实体
   mapList.forEach((item, index) => {
     const entity = viewer?.entities.add({
       id: `dataCenter-point-${index}-${Date.now()}`,
@@ -210,12 +202,9 @@
     viewerRef.value = viewer;
 
     isViewerReady.value = true;
-
     // 初始化事件处理器
     handlerInit();
     isMapInitialized.value = true;
-    console.log('地图初始化完成');
-    // 初始化后立即渲染已有数据
     if (dataPointList.value.length > 0) {
       renderDataPoint(dataPointList.value);
     }
@@ -243,9 +232,7 @@
   try {
     const res = await getMapInfoAPI(ids);
     dataPointList.value = res.data.data || [];
-    console.log('dataPointList.value', dataPointList.value);
-
-    // 确保地图已初始化后再渲染
+   
     if (isMapInitialized.value && viewer) {
       renderDataPoint(dataPointList.value);
     }
@@ -255,13 +242,7 @@
 };
 const isViewerReady = ref(false);
 
-/**
- * 初始化标注添加
- * @param data 数据
- */
 const initEntityOrPopup = data => {
-  console.log('data', data);
-
   //地图点在范围内
   watch(
     () => isMapInitialized.value,
diff --git a/src/views/dataCenter/components/searchData.vue b/src/views/dataCenter/components/searchData.vue
index b2ec5a7..e73a238 100644
--- a/src/views/dataCenter/components/searchData.vue
+++ b/src/views/dataCenter/components/searchData.vue
@@ -73,6 +73,7 @@
         </el-form-item>
         <el-form-item label="文件类别:">
           <el-select
+            :disabled="disabled"
             :teleported="false"
             v-model="searchForm.photoType"
             placeholder="请选择"
@@ -98,8 +99,12 @@
       </div>
       <div class="search-first">
         <div class="search-btn">
-          <el-button type="primary" icon="el-icon-download" @click="allDownloadFun">全部下载</el-button>
-          <el-button type="success" plain icon="el-icon-download" @click="downloadFun">下载</el-button>
+          <el-button type="primary" icon="el-icon-download" @click="allDownloadFun"
+            >全部下载</el-button
+          >
+          <el-button type="success" plain icon="el-icon-download" @click="downloadFun"
+            >下载</el-button
+          >
         </div>
       </div>
     </el-form>
@@ -112,17 +117,34 @@
 import dayjs from 'dayjs';
 import { useStore } from 'vuex';
 import { getRegionTreeAll, getDeviceRegion, deptsByAreaCode } from '@/api/job/task';
+import { watch } from 'vue';
 const store = useStore();
 const userAreaCode = computed(() => store.getters.userInfo.detail.areaCode);
 const selectedAreaCode = computed(() => store.state.user.selectedAreaCode);
-const emit = defineEmits(['search','downFun','allDownFun']);
+const emit = defineEmits(['search', 'downFun', 'allDownFun']);
+const startTime = dayjs().subtract(6, 'day').startOf('day');
+const endTime = dayjs().endOf('day');
+const timeRange = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')];
+const dateRange = ref(timeRange);
+const timeFormat = 'YYYY-MM-DD HH:mm:ss';
+const searchForm = reactive({
+  jobName: '', //任务名称
+  name: '', //文件名称
+  areaCode: userAreaCode.value, // 区域code
+  endTime: endTime.format(timeFormat), // 结束时间
+  startTime: startTime.format(timeFormat), // 开始时间
+  deviceSn: '', // 所属机巢
+  resultType: '', //文件格式
+  photoType: '', //文件类别
+});
+const disabled = ref(false);
 const treeProps = {
   label: 'name',
   value: 'id',
   children: 'childrens',
 };
 const fileFormatOption = [
-{
+  {
     value: '',
     label: '全部',
   },
@@ -157,21 +179,17 @@
     label: '红外',
   },
 ];
-const startTime = dayjs().subtract(6, 'day').startOf('day')
-const endTime = dayjs().endOf('day')
-const timeRange = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')]
-const dateRange = ref(timeRange);
-const timeFormat = 'YYYY-MM-DD HH:mm:ss';
-const searchForm = reactive({
-  jobName: '', //任务名称
-  name: '', //文件名称
-  areaCode: userAreaCode.value, // 区域code
-  endTime:  endTime.format(timeFormat), // 结束时间
-  startTime: startTime.format(timeFormat), // 开始时间
-  deviceSn: '', // 所属机巢
-  resultType: '', //文件格式
-  photoType: '', //文件类别
-});
+watch(
+  () => searchForm.resultType,
+  newVal => {
+    if (newVal === '4') {
+      disabled.value = true;
+    } else {
+      disabled.value = false;
+    }
+  },
+  { deep: true }
+);
 
 // 部门
 let deptTreeData = ref([]);
@@ -186,9 +204,9 @@
     const start = dayjs(val[0]);
     const end = dayjs(val[1]);
     const diff = end.diff(start, 'day');
-
-    if (diff > 31) {
-      ElMessage.warning('日期范围不能超过31天');
+ const maxDays = 365;
+    if (diff > maxDays) {
+      ElMessage.warning('日期范围不能超过一年');
       dateRange.value = [];
       // 重置为默认时间范围
       setTimeout(() => {
@@ -196,12 +214,12 @@
       }, 0);
       return;
     }
-    
+
     // 更新搜索表单中的时间
     searchForm.startTime = start.format(timeFormat);
     searchForm.endTime = end.format(timeFormat);
   }
-  //handleSearch();
+
 };
 // 部门下得机巢
 const requestDockInfo = () => {
@@ -224,7 +242,7 @@
     searchForm.deviceSn = signDevice_sn.value;
   }
   // 所属部门重新请求值
- 
+
   deptData.value = [];
   getDeptsByAreaCode();
 };
@@ -256,26 +274,25 @@
 // 清空
 const handleReset = () => {
   dateRange.value = timeRange;
-searchForm.jobName = ''
-searchForm.name = ''
-searchForm.areaCode = userAreaCode.value
-searchForm.endTime = endTime.format(timeFormat)
-searchForm.startTime = startTime.format(timeFormat)
-searchForm.deviceSn = ''
-searchForm.resultType = ''
-searchForm.photoType = ''
+  searchForm.jobName = '';
+  searchForm.name = '';
+  searchForm.areaCode = userAreaCode.value;
+  searchForm.endTime = endTime.format(timeFormat);
+  searchForm.startTime = startTime.format(timeFormat);
+  searchForm.deviceSn = '';
+  searchForm.resultType = '';
+  searchForm.photoType = '';
   handleNodeClick({ id: userAreaCode.value });
   handleSearch();
-  
 };
 // 下载
-const downloadFun =()=>{
+const downloadFun = () => {
   emit('downFun');
-}
+};
 // 全部下载
-const allDownloadFun =()=>{ 
-    emit('allDownFun');
-}
+const allDownloadFun = () => {
+  emit('allDownFun');
+};
 onMounted(() => {
   requestDockInfo();
 });
diff --git a/src/views/dataCenter/dataCenter.vue b/src/views/dataCenter/dataCenter.vue
index df7483b..c12fd85 100644
--- a/src/views/dataCenter/dataCenter.vue
+++ b/src/views/dataCenter/dataCenter.vue
@@ -1,258 +1,259 @@
 <template>
-  <div class="dataCenter-table">
-    <searchData
-      @search="searchClick"
-      @downFun="downloadFile"
-      @allDownFun="aLLDownloadFile"
-    ></searchData>
-    <!-- 表格部分 -->
-    <div class="dataTable">
-      <el-table
-        v-loading="loadings"
-        element-loading-text="加载中"
-        stripe
-        :data="tableData"
-        class="custom-header"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" />
-        <el-table-column label="序号" type="index" width="60">
-          <template #default="{ $index }">
-            {{
-              ($index + 1 + (jobListParams.current - 1) * jobListParams.size)
-                .toString()
-                .padStart(2, '0')
-            }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="regionName" label="所属区域" v-if="!isDistrictLevel">
-          <template #default="scope">
-            <span>{{ processAddress(scope.row.regionName) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column property="nestName" label="所属机巢" />
-        <el-table-column property="jobName" label="任务名称" show-overflow-tooltip />
-        <el-table-column prop="nickName" label="文件名称" show-overflow-tooltip />
-        <el-table-column property="link" label="缩图" width="120">
-          <template #default="scope">
-            <img
-              class="quanjing"
-              @click="clickpanorama(scope.row)"
-              v-if="scope.row?.resultType === 5"
-              :src="scope.row?.smallUrl"
-              alt=""
-            />
-            <img
-              v-else-if="scope.row?.resultType === 1"
-              :src="convertVideoUrlToThumbnail(scope.row?.link)"
-              alt=""
-              class="imageBox"
-              @click="enterFullScreen(scope.row)"
-            />
-            <!-- 正射 -->
-            <img
-              v-else-if="scope.row?.resultType === 4"
-              :src="getzsSmallImg(scope.row?.link)"
-              alt=""
-              class="imageBox"
-            />
-            <el-image
-              v-else
-              :src="scope.row?.smallUrl"
-              :preview-src-list="[scope.row?.showUrl]"
-              fit="cover"
-              preview-teleported
-            />
-          </template>
-        </el-table-column>
-        <el-table-column prop="jobTime" label="任务时间" />
-        <el-table-column property="photoType" label="文件类别">
-          <template #default="scope">
-            <span>{{ photoTypeMap[scope.row.photoType] }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column property="resultType" label="文件格式">
-          <template #default="{ row }">
-            <span>{{ resultTypeMap[row?.resultType] }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="操作" width="150" align="center">
-          <template #default="scope">
-            <span class="look" @click="lookDetail(scope.row)">查看</span>
-            <span class="delete" @click="deleteDetail(scope.row)" v-if="scope.row.resultType !== 2"
-              >删除</span
-            >
+  <div
+    class="manage-m-all-10 manage-m-t-0 manage-p-all-20 manage-h-0 manage-flex-1 manage-flex manage-f-d-c manage-b-r-5 manage-b-c-w"
+  >
+    <div class="dataCenter-table">
+      <searchData
+        @search="searchClick"
+        @downFun="downloadFile"
+        @allDownFun="aLLDownloadFile"
+      ></searchData>
+      <!-- 表格部分 -->
+      <div class="dataTable">
+        <el-table
+          v-loading="loadings"
+          element-loading-text="加载中"
+          stripe
+          :data="tableData"
+          class="custom-header"
+          @selection-change="handleSelectionChange"
+        >
+          <el-table-column type="selection" width="55" />
+          <el-table-column label="序号" type="index" width="60">
+            <template #default="{ $index }">
+              {{
+                ($index + 1 + (jobListParams.current - 1) * jobListParams.size)
+                  .toString()
+                  .padStart(2, '0')
+              }}
+            </template>
+          </el-table-column>
+          <el-table-column prop="regionName" label="所属区域" v-if="!isDistrictLevel">
+            <template #default="scope">
+              <span>{{ processAddress(scope.row.regionName) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column property="nestName" label="所属机巢" />
+          <el-table-column property="jobName" label="任务名称" show-overflow-tooltip />
+          <el-table-column prop="nickName" label="文件名称" show-overflow-tooltip />
+          <el-table-column property="link" label="缩略图" width="120">
+            <template #default="scope">
+              <img
+                class="quanjing"
+                @click="clickpanorama(scope.row)"
+                v-if="scope.row?.resultType === 5"
+                :src="scope.row?.smallUrl"
+                alt=""
+              />
+              <img
+                v-else-if="scope.row?.resultType === 1"
+                :src="convertVideoUrlToThumbnail(scope.row?.link)"
+                alt=""
+                class="imageBox"
+                @click="enterFullScreen(scope.row)"
+              />
+              <!-- 正射 -->
+              <el-image
+                v-else-if="scope.row?.resultType === 4"
+                :src="getzsSmallImg(scope.row?.link)"
+                :preview-src-list="[getzsSmallImg(scope.row?.link)]"
+                fit="cover"
+                preview-teleported
+              />
+              <el-image
+                v-else
+                :src="scope.row?.smallUrl"
+                :preview-src-list="[scope.row?.showUrl]"
+                fit="cover"
+                preview-teleported
+              />
+            </template>
+          </el-table-column>
+          <el-table-column prop="jobTime" label="任务时间" />
+          <el-table-column property="photoType" label="文件类别">
+            <template #default="scope">   
+              <span>{{
+                photoTypeMap[scope.row.photoType] ? photoTypeMap[scope.row.photoType] : '--'
+              }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column property="resultType" label="文件格式">
+            <template #default="{ row }">
+              <span>{{ resultTypeMap[row?.resultType] }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="150" align="center">
+            <template #default="scope">
+              <span class="look" @click="lookDetail(scope.row)">查看</span>
+              <span
+                class="delete"
+                @click="deleteDetail(scope.row)"
+                v-if="scope.row.resultType !== 2"
+                >删除</span
+              >
 
-            <span
-              class="location"
-              @click="positionDetail(scope.row)"
-              v-if="shouldShowLocation(scope.row)"
-              >定位</span
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-    </div>
-    <!-- 分页 -->
-    <div class="pagination">
-      <el-pagination
-        v-model:current-page="jobListParams.current"
-        v-model:page-size="jobListParams.size"
-        :page-sizes="[10, 20, 30, 40]"
-        background
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="total"
-        @size-change="handleSizeChange"
-        @current-change="handleCurrentChange"
-      />
-    </div>
-    <!-- 查看弹框 -->
-    <el-dialog v-model="dialogVisible" width="60%" append-to-body @close="dialogClose">
-      <template #header="{ titleId, titleClass }">
-        <div class="my-header">
-          <h4 :id="titleId" :class="titleClass">{{ detailTitle }}</h4>
+              <span
+                class="location"
+                @click="positionDetail(scope.row)"
+                v-if="shouldShowLocation(scope.row)"
+                >定位</span
+              >
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+      <!-- 分页 -->
+      <div class="pagination">
+        <el-pagination
+          v-model:current-page="jobListParams.current"
+          v-model:page-size="jobListParams.size"
+          :page-sizes="[10, 20, 30, 40]"
+          background
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+      <!-- 查看弹框 -->
+      <el-dialog
+        v-model="dialogVisible"
+        width="60%"
+        append-to-body
+        @close="dialogClose"
+        align-center
+      >
+        <template #header="{ titleId, titleClass }">
+          <div class="my-header">
+            <!-- <h4 :id="titleId" :class="titleClass">{{ detailTitle }}</h4> -->
+            <h4 :id="titleId" :class="titleClass">详情</h4>
+          </div>
+        </template>
+        <div class="detailContainer">
+          <div class="leftImg">
+            <!-- 视频 -->
+            <video
+              v-if="dialogDetailList?.resultType === 1"
+              style="width: 100%"
+              class="videoItem"
+              ref="videoRefs"
+              controls
+              autoplay
+              :src="dialogDetailList.link"
+            ></video>
+            <!-- 地图 -->
+            <div
+              v-else-if="dialogDetailList?.resultType === 4"
+              id="detaildataCenterMap"
+              class="ztzf-cesium"
+            ></div>
+            <img v-else :src="getSmallImg(dialogDetailList?.link)" alt="" />
+          </div>
+          <div class="rightDetail">
+            <div class="title">
+              <div class="inputEdit">
+                文件名称:<span class="fileTitle" v-if="!dialogDetailList?.checkedinput">{{
+                  dialogDetailList?.nickName ? dialogDetailList?.nickName : '--'
+                }}</span>
+                <el-input
+                  v-else
+                  v-model="dialogDetailList.nickName"
+                  @blur="saveTitle(dialogDetailList)"
+                  @keyup.enter="saveTitle(dialogDetailList)"
+                  class="title-input"
+                  clearable
+                />
+                <span class="editname" @click="editTitle(dialogDetailList)"
+                  ><el-icon> <Edit /> </el-icon
+                ></span>
+              </div>
+            </div>
+            <div>任务名称:{{ dialogDetailList?.jobName ? dialogDetailList?.jobName : '--' }}</div>
+            <div>
+              所属区域:{{ dialogDetailList?.regionName ? dialogDetailList?.regionName : '--' }}
+            </div>
+            <div>
+              拍摄机巢:{{ dialogDetailList?.nestName ? dialogDetailList?.nestName : '--' }}
+            </div>
+            <div v-if="dialogDetailList?.resultType != 4">
+              照片位置:{{ _.round(dialogDetailList?.longitude, 3) }},{{
+                _.round(dialogDetailList?.latitude, 3)
+              }}
+            </div>
+            <div>任务时间:{{ dialogDetailList?.jobTime ? dialogDetailList?.jobTime : '--' }}</div>
+            <div>
+              拍摄时间:{{ dialogDetailList?.createTime ? dialogDetailList?.createTime : '--' }}
+            </div>
+            <div>
+              文件类型:{{
+                photoTypeMap[dialogDetailList?.photoType]
+                  ? photoTypeMap[dialogDetailList?.photoType]
+                  : '--'
+              }}
+            </div>
+            <div>
+              文件格式:{{
+                resultTypeMap[dialogDetailList?.resultType]
+                  ? resultTypeMap[dialogDetailList?.resultType]
+                  : '--'
+              }}
+            </div>
+            <div>
+              文件大小:{{
+                bytesToMB(dialogDetailList?.attachSize)
+                  ? bytesToMB(dialogDetailList?.attachSize)
+                  : '--'
+              }}
+            </div>
+            <div>
+              <el-button
+                type="success"
+                plain
+                icon="el-icon-download"
+                @click="detailDownLoad(dialogDetailList)"
+                >下载</el-button
+              >
+            </div>
+          </div>
         </div>
-      </template>
-      <div class="detailContainer">
-        <div class="leftImg">
-          <!-- <img
-            v-if="dialogDetailList?.resultType === 1"
-            :src="convertVideoUrlToThumbnail(dialogDetailList?.link)"
-            alt=""
-            class="imageBox"
-          /> -->
-          <!-- 视频 -->
+      </el-dialog>
+      <!-- 全景预览 -->
+      <PanoramaPopup
+        v-model:panoramaParamsShow="panoramaParamsShow"
+        v-model:panoramaParamsUrl="panoramaParamsUrl"
+      >
+      </PanoramaPopup>
+      <!-- 视频预览 -->
+      <el-dialog
+        :title="currentVideoTitle"
+        modal-class="videoDialog"
+        append-to-body
+        width="54%"
+        v-model="VideoShow"
+        :close-on-click-modal="false"
+        :destroy-on-close="true"
+        @close="currentVideoIndex = -1"
+      >
+        <div class="video-container">
           <video
-            v-if="dialogDetailList?.resultType === 1"
             style="width: 100%"
-            class="imageBox"
+            class="videoBox"
             ref="videoRefs"
             controls
             autoplay
-            :src="dialogDetailList.link"
+            :src="currentVideoUrl"
           ></video>
-          <!-- 全景 -->
-           <!-- <img
-              class="quanjing"
-              @click="clickpanorama(dialogDetailList)"
-              v-else-if="dialogDetailList?.resultType === 5"
-              :src="dialogDetailList?.resultType?.smallUrl"
-              alt=""
-            /> -->
-          <!-- 地图 -->
-          <div
-            v-else-if="dialogDetailList?.resultType === 4"
-            id="detaildataCenterMap"
-            class="ztzf-cesium"
-          ></div>
-          <img v-else :src="getSmallImg(dialogDetailList?.link)" alt="" />
         </div>
-        <div class="rightDetail">
-          <div class="title">
-            <div class="inputEdit">
-              文件名称:<span class="fileTitle" v-if="!dialogDetailList?.checkedinput">{{
-                dialogDetailList?.nickName ? dialogDetailList?.nickName : '--'
-              }}</span>
-              <el-input
-                v-else
-                v-model="dialogDetailList.nickName"
-                @keyup.enter="saveTitle()"
-                class="title-input"
-                clearable
-              />
-            </div>
-            <div class="editname">
-              <span v-if="!dialogDetailList?.checkedinput" @click="editTitle(dialogDetailList)"
-                ><el-icon><Edit /></el-icon
-              ></span>
-              <div v-else class="suffixBoxEdit">
-                <div class="editText" @click="submitEditSuffix(dialogDetailList)">✔</div>
-                <div class="editText" @click="cancelEditSuffix(dialogDetailList)">✖</div>
-              </div>
-            </div>
-          </div>
-          <div>任务名称:{{ dialogDetailList?.jobName ? dialogDetailList?.jobName : '--' }}</div>
-          <div>
-            所属区域:{{ dialogDetailList?.regionName ? dialogDetailList?.regionName : '--' }}
-          </div>
-          <div>拍摄机巢:{{ dialogDetailList?.nestName ? dialogDetailList?.nestName : '--' }}</div>
-          <div>
-            照片位置:{{ _.round(dialogDetailList?.longitude, 3) }},{{
-              _.round(dialogDetailList?.latitude, 3)
-            }}
-          </div>
-          <div>任务时间:{{ dialogDetailList?.jobTime ? dialogDetailList?.jobTime : '--' }}</div>
-          <div>
-            拍摄时间:{{ dialogDetailList?.createTime ? dialogDetailList?.createTime : '--' }}
-          </div>
-          <div>
-            文件类型:{{
-              photoTypeMap[dialogDetailList?.photoType]
-                ? photoTypeMap[dialogDetailList?.photoType]
-                : '--'
-            }}
-          </div>
-          <div>
-            文件格式:{{
-              resultTypeMap[dialogDetailList?.resultType]
-                ? resultTypeMap[dialogDetailList?.resultType]
-                : '--'
-            }}
-          </div>
-          <div>
-            照片文件大小:{{
-              bytesToMB(dialogDetailList?.attachSize)
-                ? bytesToMB(dialogDetailList?.attachSize)
-                : '--'
-            }}
-          </div>
-          <div>
-            <el-button
-              type="success"
-              plain
-              icon="el-icon-download"
-              @click="detailDownLoad(dialogDetailList)"
-              >下载</el-button
-            >
-          </div>
-        </div>
-      </div>
-    </el-dialog>
-    <!-- 全景预览 -->
-    <PanoramaPopup
-      v-model:panoramaParamsShow="panoramaParamsShow"
-      v-model:panoramaParamsUrl="panoramaParamsUrl"
-    ></PanoramaPopup>
-    <!-- 视频预览 -->
-    <el-dialog
-      :title="currentVideoTitle"
-      modal-class="videoDialog"
-      append-to-body
-      width="54%"
-      v-model="VideoShow"
-      :close-on-click-modal="false"
-      :destroy-on-close="true"
-      @close="currentVideoIndex = -1"
-    >
-      <div class="video-container">
-        <video
-          style="width: 100%"
-          class="videoBox"
-          ref="videoRefs"
-          controls
-          autoplay
-          :src="currentVideoUrl"
-        ></video>
-      </div>
-    </el-dialog>
-    <!-- 地图弹框 -->
-    <dataCenterMap
-      ref="mapComponent"
-      v-model:show="dataCenterMapVisible"
-      :jobId="jobId"
-      @lookDetail="lookDetail"
-      :dotData="mapList"
-    ></dataCenterMap>
+      </el-dialog>
+      <!-- 地图弹框 -->
+      <dataCenterMap
+        ref="mapComponent"
+        v-model:show="dataCenterMapVisible"
+        :jobId="jobId"
+        @lookDetail="lookDetail"
+        :dotData="mapList"
+      ></dataCenterMap>
+    </div>
   </div>
 </template>
 
@@ -268,12 +269,10 @@
 const isShow = defineModel('show');
 const viewerRef = shallowRef(null);
 let viewer = null;
-
 const viewInstance = shallowRef(null);
 const store = useStore();
 const currentAreaPosition = ref({ height: 1987280, latitude: 27.636112, longitude: 115.732975 });
 let handler = null;
-
 import EventBus from '@/utils/eventBus';
 import dataCenterMap from '@/views/dataCenter/components/dataCenterMap.vue';
 import PanoramaPopup from '@/components/PanoramaPopup/PanoramaPopup.vue'; //全景
@@ -294,7 +293,7 @@
 import dayjs from 'dayjs';
 
 function bytesToMB(bytes, decimalPlaces = 2) {
-  if (typeof bytes !== 'number' || bytes < 0) return '无效输入';
+  if (typeof bytes !== 'number' || bytes < 0) return '0';
   return (bytes / 1048576).toFixed(decimalPlaces) + ' MB';
 }
 // 视频一帧
@@ -328,24 +327,20 @@
 // 处理区域名称的函数
 function processAddress(str) {
   if (!str) return '';
-
   const parts = str.split(',');
-
   // 省级账号:显示市和区(去除省级)
   if (isProvinceLevel.value) {
     return parts.filter(part => !part.endsWith('省')).join(',');
   }
-
   // 市级账号:只显示区(去除省和市)
   if (isCityLevel.value) {
     return parts.filter(part => !part.endsWith('省') && !part.endsWith('市')).join(',');
   }
-
   // 区县级账号:不显示区域信息(在模板中已隐藏该列)
   return '';
 }
 const showRegionColumn = computed(() => {
-  // 检查表格数据中是否有任何行的 regionName 处理后不为空
+  // 是否显示列
   return tableData.value.some(row => {
     const processed = processAddress(row.regionName || '');
     return processed !== '';
@@ -388,8 +383,12 @@
     orderByCreateTime: jobListParams.orderByCreateTime,
     ...jobListParams.searchParams,
   };
-  getaiImagesPageAPI(params, { current: jobListParams.current, size: jobListParams.size }).then(
-    res => {
+
+  getaiImagesPageAPI(params, {
+    current: jobListParams.current,
+    size: jobListParams.size,
+  })
+    .then(res => {
       total.value = res.data.data.total;
       tableData.value = res.data.data.records.map(i => ({
         ...i,
@@ -399,10 +398,14 @@
         showUrl: getShowImg(i?.link),
         file_name: i.name.split('/').pop(),
       }));
-
-      loadings.value = false;
-    }
-  );
+    })
+    .catch(error => {
+      // 可选:这里可以添加错误处理逻辑
+      console.error('获取数据失败:', error);
+    })
+    .finally(() => {
+      loadings.value = false; // 无论成功失败都会执行
+    });
 };
 // 查询
 const searchClick = params => {
@@ -463,9 +466,8 @@
   if (!list?.length) return ElMessage.warning('请选择文件');
   if (list.length === 1) {
     list.forEach((item, index) => {
-      setTimeout(() => {
-        aLinkDownload(item.url, item?.nickName);
-      }, index * 500); // 每个文件下载间隔50毫秒
+      const suffix = item.url.split('.').pop();
+      aLinkDownload(item.url, item.nickName + '.' + suffix);
     });
   } else {
     loading = ElLoading.service({ background: 'rgba(0, 0, 0, 0.5)', text: '打包中,请稍等...' });
@@ -494,7 +496,8 @@
   fileDownload();
 };
 const detailDownLoad = val => {
-  aLinkDownload(val.link, val?.nickName);
+  const suffix = val.link?.split('.').pop();
+  aLinkDownload(val.link, val?.nickName + '.' + suffix);
 };
 // 全部下载
 const aLLDownloadFile = () => {
@@ -534,14 +537,7 @@
   val.checkedinput = true;
   fileNameedit.value = val?.nickName;
 };
-// 取消
-const cancelEditSuffix = item => {
-  item.nickName = fileNameedit.value;
-  item.checkedinput = false;
-};
-const submitEditSuffix = item => {
-  saveTitle(item);
-};
+
 // 通用空值检查函数
 const validateNickname = (name, fieldName) => {
   if (!name || name.trim() === '') {
@@ -588,7 +584,6 @@
 const isMapInitialized = ref(false); //地图加载
 const initMap = () => {
   if (viewer || isMapInitialized.value) return;
-
   const container = document.getElementById('detaildataCenterMap');
   if (!container) {
     console.error('地图容器未找到');
@@ -602,10 +597,7 @@
   });
   viewer = viewInstance.value.getViewer();
   viewerRef.value = viewer;
-
   isMapInitialized.value = true;
-
-  // console.log('地图初始化完成');
 };
 // 判断是否是正射
 function isTifFile(filename) {
@@ -631,8 +623,6 @@
       dialogVisible.value = true;
       detailTitle.value = val.nickName;
       dialogDetailList.value = val;
-      console.log('3333', detailTitle.value, dialogDetailList.value);
-
       await nextTick();
       initMap();
       positiongeom.value = res.data.data.geom;
@@ -644,7 +634,6 @@
             url: `${import.meta.env.VITE_APP_AREA_NAME}/webodm${res.data.data.orthoimageApi}?jwt=${
               res.data.data.odmToken.split(' ')[1]
             }`,
-            // maximumLevel: 12,
           })
         );
         yxShowBox.value = true;
@@ -663,8 +652,12 @@
             const viewer = viewInstance.value.getViewer();
             if (viewer && viewer.camera) {
               viewer.camera.flyToBoundingSphere(boundingSphere, {
-                duration: 0, // 飞行动画持续时间(秒)
-                offset: new Cesium.HeadingPitchRange(0, -0.5, boundingSphere.radius * 1.5),
+                duration: 0, // 增加动画时间使过渡更平滑
+                offset: new Cesium.HeadingPitchRange(
+                  Cesium.Math.toRadians(-45), // 航向角:-45度(东北方向)
+                  Cesium.Math.toRadians(-90), // 俯仰角:-30度(向下倾斜30度)
+                  boundingSphere.radius * 2.5 // 距离:2.5倍半径
+                ),
               });
             } else {
               console.error('无法获取有效的 Viewer 或 camera 对象');
@@ -722,32 +715,40 @@
 
 <style scoped lang="scss">
 .dataCenter-table {
-  margin: 0 18px 16px 10px;
-  background-color: #ffffff;
-  padding: 14px 18px;
+  height: 0;
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+
   .dataTable {
-    height: 700px;
+    height: 0;
+    flex: 1;
     overflow: auto;
+
     .look {
       color: #1c5cff;
       cursor: pointer;
       margin-right: 10px;
     }
+
     .delete {
       color: #ff241c;
       margin-right: 10px;
       cursor: pointer;
     }
+
     .location {
       color: #19876d;
       cursor: pointer;
     }
   }
+
   .pagination {
     display: flex;
     justify-content: end;
     margin-top: 20px;
   }
+
   .quanjing,
   .el-image,
   .imageBox {
@@ -755,54 +756,74 @@
     width: 76px;
     height: 72px;
   }
+
   .videoDialog :deep(.el-dialog) {
     height: 600px;
     width: 54%;
   }
+
   .video-container {
     width: 100%;
-    aspect-ratio: 16/9; /* 按视频比例设置(如16:9) */
-    overflow: hidden; /* 隐藏溢出部分 */
+    aspect-ratio: 16/9;
+    /* 按视频比例设置(如16:9) */
+    overflow: hidden;
+    /* 隐藏溢出部分 */
   }
+
   .videoBox {
     width: 100%;
     height: 100%;
-    object-fit: contain; /* 保持比例完整显示 */
+    object-fit: contain;
+    /* 保持比例完整显示 */
     display: block;
   }
 }
+
 :deep(.custom-header th.el-table__cell) {
   color: rgba(0, 0, 0, 0.85);
 }
+
 // 弹框
 .detailContainer {
   display: flex;
   justify-content: space-between;
+  align-items: center;
   .leftImg {
     width: 70%;
     height: 500px;
+    overflow: hidden;
     img {
       width: 100%;
       height: 100%;
+    }
+    .videoItem {
+      width: 100%;
+      height: 100%;
+      object-fit: cover;
     }
     #detaildataCenterMap {
       width: 100%;
       height: 100%;
     }
   }
+
   .rightDetail {
     width: 30%;
     padding-left: 40px;
+
     .title {
       display: flex;
       margin: 0 !important;
+
       .editname {
         cursor: pointer;
       }
+
       .inputEdit {
         display: flex;
         align-items: center;
         width: 100%;
+
         .fileTitle {
           width: 70%;
           white-space: nowrap;
@@ -811,46 +832,57 @@
         }
       }
     }
+
     div {
       margin-bottom: 20px;
     }
   }
 }
+
 .my-header :deep(.el-dialog__title) {
   margin: 0 !important;
   height: 19px;
 }
+
 .my-header {
   display: flex;
   align-items: center;
+
   .el-button {
     margin-left: 20px;
   }
 }
+
 .title-input {
   margin-bottom: 0 !important;
   width: 70%;
 }
+
 .editname {
   margin-bottom: 0 !important;
 }
+
 .suffixBoxEdit {
   display: flex;
   // align-items: center;
   justify-content: space-between;
   margin-bottom: 0 !important;
   font-size: 16px;
+
   > .editText {
     cursor: pointer;
     margin-right: 6px;
+
     &:hover {
       transform: scale(1.2);
     }
   }
+
   .editimg {
     cursor: pointer;
     width: 15px;
     height: 15px;
+
     &:hover {
       transform: scale(1.2);
     }
diff --git a/src/views/device/addDevice.vue b/src/views/device/addDevice.vue
index 52b0b32..88a8a89 100644
--- a/src/views/device/addDevice.vue
+++ b/src/views/device/addDevice.vue
@@ -1,20 +1,20 @@
 <template>
     <basic-container>
-        <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" ref="crud" @row-del="rowDel"
-            v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave"
+        <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" ref="crud"
+            @row-del="rowDel" v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave"
             :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset"
             @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
             @refresh-change="refreshChange" @on-load="onLoad">
 
             <template #menu="scope">
-                <el-button type="primary" text icon="el-icon-copy-document" @click.stop="copyInfo(scope.row, scope.index)"
-                    v-if="userInfo.role_name.includes('admin')">复制
+                <el-button type="primary" text icon="el-icon-copy-document"
+                    @click.stop="copyInfo(scope.row, scope.index)" v-if="userInfo.role_name.includes('admin')">复制
                 </el-button>
             </template>
         </avue-crud>
     </basic-container>
 </template>
-  
+
 <script>
 import {
     getList,
@@ -22,21 +22,21 @@
     update,
     add,
     getDetail,
-} from '@/api/device/workspaces';
+} from '@/api/device/workspaces'
 
-import { getLazyTree } from '@/api/base/region';
+import { getLazyTree } from '@/api/base/region'
 
-import { mapGetters } from 'vuex';
-import { getWebsocketUrl } from '@/websocket/util/config';
-import ConnectWebSocket from '@/websocket';
-import { $Clipboard } from "@smallwei/avue";
+import { mapGetters } from 'vuex'
+import { getWebsocketUrl } from '@/websocket/util/config'
+import ConnectWebSocket from '@/websocket'
+import { $Clipboard } from "@smallwei/avue"
 
 
 export default {
     components: {
     },
 
-    data() {
+    data () {
         return {
             // 用于记录已经创建的websocket,防止重复创建
             webSocketIdSet: new Set(),
@@ -65,8 +65,7 @@
                 menuWidth: 300,
                 lazy: true,
                 tree: true,
-                // height: '460',
-                // calcHeight: 32,
+
                 // dialogWidth: 1050,
                 tip: false,
                 searchShow: true,
@@ -79,6 +78,9 @@
                 addBtn: true,
                 dialogClickModal: false,
                 grid: false,
+
+                height: 'auto',
+                calcHeight: 20,
                 column: [
                     {
                         label: '工作空间名称',
@@ -197,39 +199,39 @@
             },
             data: [],
 
-        };
+        }
     },
     computed: {
         ...mapGetters(['userInfo', 'permission']),
-        permissionList() {
+        permissionList () {
             return {
                 addBtn: this.validData(this.permission.airport_add, false),
                 viewBtn: this.validData(this.permission.airport_view, true),
                 delBtn: this.validData(this.permission.airport_delete, false),
                 editBtn: this.validData(this.permission.airport_edit, false),
-            };
+            }
         },
-        ids() {
-            let ids = [];
+        ids () {
+            let ids = []
             this.selectionList.forEach(ele => {
-                ids.push(ele.id);
-            });
-            return ids.join(',');
+                ids.push(ele.id)
+            })
+            return ids.join(',')
         },
     },
-    destroyed() {
+    destroyed () {
         this.websocketMap.forEach((k, v) => {
             if (null != v) {
                 v.close()
                 this.websocketMap.delete(k)
                 this.webSocketIdSet.delete(k)
             }
-        });
+        })
     },
     methods: {
 
-        copyInfo(row, index) {
-            if(import.meta.env.VITE_APP_ENV==='development'){
+        copyInfo (row, index) {
+            if (import.meta.env.VITE_APP_ENV === 'development') {
                 // alert('地址'+import.meta.env.VITE_APP_ENV);
                 let params = `
             host: tcp://139.196.74.78:1883
@@ -238,111 +240,112 @@
             组织id:${row.bing_id}  
             设备码:${row.bind_code}  
             机场名称:${row.workspace_name}   
-            aircrattName:${row.workspace_desc}`;
-            $Clipboard({
-                text: params,
-            }).then(() => {
-                this.$message.success("复制成功");
-            }).catch(() => {
-                this.$message.error("复制失败");
-            });
-        }else{
-            // alert('地址'+import.meta.env.VITE_APP_ENV);
-            let params = `
+            aircrattName:${row.workspace_desc}`
+                $Clipboard({
+                    text: params,
+                }).then(() => {
+                    this.$message.success("复制成功")
+                }).catch(() => {
+                    this.$message.error("复制失败")
+                })
+            } else {
+                // alert('地址'+import.meta.env.VITE_APP_ENV);
+                let params = `
             host: tcp://101.132.85.201:1883 
             账号:drone  
             密码:drone@123
             组织id:${row.bing_id}  
             设备码:${row.bind_code}  
             机场名称:${row.workspace_name}   
-            aircrattName:${row.workspace_desc}`;
-            $Clipboard({
-                text: params,
-            }).then(() => {
-                this.$message.success("复制成功");
-            }).catch(() => {
-                this.$message.error("复制失败");
-            });}
+            aircrattName:${row.workspace_desc}`
+                $Clipboard({
+                    text: params,
+                }).then(() => {
+                    this.$message.success("复制成功")
+                }).catch(() => {
+                    this.$message.error("复制失败")
+                })
+            }
         },
-        init() {
-            this.onLoad(this.page);
+        init () {
+            this.onLoad(this.page)
         },
 
-        handleOpenRemoteDebugging(row) {
-            this.curDeviceInfo = row;
-            this.remoteDebuggingShow = true;
+        handleOpenRemoteDebugging (row) {
+            this.curDeviceInfo = row
+            this.remoteDebuggingShow = true
         },
 
-        rowSave(row, done, loading) {
+        rowSave (row, done, loading) {
             add(row).then(
                 () => {
-                    this.onLoad(this.page);
+                    this.onLoad(this.page)
                     this.$message({
                         type: 'success',
                         message: '操作成功!',
-                    });
-                    done();
+                    })
+                    done()
                 },
                 error => {
-                    window.console.log(error);
-                    loading();
+                    window.console.log(error)
+                    loading()
                 }
-            );
+            )
         },
-        rowUpdate(row, index, done, loading) {
+        rowUpdate (row, index, done, loading) {
             update(row).then(
                 () => {
-                    this.onLoad(this.page);
+                    this.onLoad(this.page)
                     this.$message({
                         type: 'success',
                         message: '操作成功!',
-                    });
-                    done();
+                    })
+                    done()
                 },
                 error => {
-                    window.console.log(error);
-                    loading();
+                    window.console.log(error)
+                    loading()
                 }
-            );
+            )
         },
-        rowDel(row) {
+        rowDel (row) {
             this.$confirm('确定将选择数据删除?', {
                 confirmButtonText: '确定',
                 cancelButtonText: '取消',
                 type: 'warning',
             })
                 .then(() => {
-                    return remove(row.id);
+                    return remove(row.id)
                 })
                 .then(() => {
-                    this.onLoad(this.page);
+                    this.onLoad(this.page)
                     this.$message({
                         type: 'success',
                         message: '操作成功!',
-                    });
-                });
+                    })
+                })
         },
-        searchReset() {
-            this.query = {};
-            this.onLoad(this.page);
+        searchReset () {
+            this.query = {}
+            this.onLoad(this.page)
         },
-        searchChange(params, done) {
-            this.query = params;
-            this.page.currentPage = 1;
-            this.onLoad(this.page, params);
-            done();
+        searchChange (params, done) {
+            this.query = params
+            this.page.currentPage = 1
+            this.onLoad(this.page, params)
+            done()
         },
-        selectionChange(list) {
-            this.selectionList = list;
+        selectionChange (list) {
+            this.selectionList = list
         },
-        selectionClear() {
-            this.selectionList = [];
-            this.$refs.crud.toggleSelection();
+        selectionClear () {
+            this.selectionList = []
+            this.$refs.crud.toggleSelection()
         },
-        handleDelete() {
+        handleDelete () {
             if (this.selectionList.length === 0) {
-                this.$message.warning('请选择至少一条数据');
-                return;
+                this.$message.warning('请选择至少一条数据')
+                return
             }
             this.$confirm('确定将选择数据删除?', {
                 confirmButtonText: '确定',
@@ -350,86 +353,78 @@
                 type: 'warning',
             })
                 .then(() => {
-                    return remove(this.ids);
+                    return remove(this.ids)
                 })
                 .then(() => {
-                    this.onLoad(this.page);
+                    this.onLoad(this.page)
                     this.$message({
                         type: 'success',
                         message: '操作成功!',
-                    });
-                    this.$refs.crud.toggleSelection();
-                });
+                    })
+                    this.$refs.crud.toggleSelection()
+                })
         },
-        beforeOpen(done, type) {
+        beforeOpen (done, type) {
             if (['edit', 'view'].includes(type)) {
                 getDetail(this.form.id).then(res => {
-                    this.form = res.data.data;
-                });
+                    this.form = res.data.data
+                })
             }
-            done();
+            done()
         },
-        currentChange(currentPage) {
-            this.page.currentPage = currentPage;
+        currentChange (currentPage) {
+            this.page.currentPage = currentPage
         },
-        sizeChange(pageSize) {
-            this.page.pageSize = pageSize;
+        sizeChange (pageSize) {
+            this.page.pageSize = pageSize
         },
-        refreshChange() {
-            this.onLoad(this.page, this.query);
+        refreshChange () {
+            this.onLoad(this.page, this.query)
         },
-        onLoad(page, params = {}) {
-            const { releaseTimeRange } = this.query;
+        onLoad (page, params = {}) {
+            const { releaseTimeRange } = this.query
             let values = {
                 ...params,
                 ...this.query,
-            };
+            }
             if (releaseTimeRange) {
                 values = {
                     ...values,
                     releaseTime_datege: releaseTimeRange[0],
                     releaseTime_datelt: releaseTimeRange[1],
-                };
-                values.releaseTimeRange = null;
+                }
+                values.releaseTimeRange = null
             }
-            values['type'] = 1;
-            this.loading = true;
+            values['type'] = 1
+            this.loading = true
             getList(page.currentPage, page.pageSize, values).then(res => {
-                const data = res.data.data;
-                this.page.total = data.total;
+                const data = res.data.data
+                this.page.total = data.total
                 // data.records.forEach(e => {
                 //     e['hasChildren'] = e.has_children;
                 //     if (e.firmware_status == 4) {
                 //         this.connectWebSocket(e);
                 //     }
                 // });
-                this.data = data.records;
-                this.loading = false;
-                this.selectionClear();
-            });
+                this.data = data.records
+                this.loading = false
+                this.selectionClear()
+            })
         },
-        treeLoad(tree, treeNode, resolve) {
+        treeLoad (tree, treeNode, resolve) {
             var params = {
                 childSn: tree.child_sn,
-            };
+            }
             getList(1, 10, params).then(res => {
-                const data = res.data.data.records;
-                resolve(data);
-            });
+                const data = res.data.data.records
+                resolve(data)
+            })
         },
     },
-};
+}
 </script>
-  
+
 <style lang="scss" scoped>
- :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
 .firmware_status {
     background-color: aqua;
     border-radius: 4px;
@@ -448,5 +443,4 @@
         border-color: #409eff;
     }
 }
-</style>
-  
\ No newline at end of file
+</style>
\ No newline at end of file
diff --git a/src/views/device/airport.vue b/src/views/device/airport.vue
index 7083e01..5d2415f 100644
--- a/src/views/device/airport.vue
+++ b/src/views/device/airport.vue
@@ -1,5 +1,5 @@
 <template>
-  <basic-container>
+  <basic-main-content>
     <avue-crud
       :option="option"
       :table-loading="loading"
@@ -185,6 +185,7 @@
     </el-dialog>
 
     <el-drawer
+      class="ztzf-drawer-body-basic-container"
       title="机场授权管理"
       size="60%"
       append-to-body
@@ -202,7 +203,7 @@
       >
       </DockControlPanel>
     </el-drawer>
-  </basic-container>
+  </basic-main-content>
 </template>
 
 <script>
@@ -270,8 +271,7 @@
       option: {
         lazy: true,
         tree: true,
-        height: '460',
-        calcHeight: 32,
+
         dialogWidth: 1050,
         tip: false,
         searchShow: true,
@@ -284,6 +284,10 @@
         addBtn: false,
         dialogClickModal: false,
         grid: false,
+
+        height: 'auto',
+        calcHeight: 180,
+
         column: [
           {
             label: '设备型号',
@@ -428,10 +432,20 @@
           },
           {
             label: '行政区划',
+            prop: 'area_name',
+            hide: true,
+            editDisplay: false, //编辑显示
+            viewDisplay: true, //查看显示
+            labelWidth: 130,
+          },
+          {
+            label: '行政区划',
             prop: 'area_code',
             type: 'cascader',
             labelWidth: 130,
             hide: true,
+            editDisplay: true,
+            viewDisplay: false,
             props: {
               label: 'title',
               value: 'value',
@@ -494,6 +508,26 @@
               }
             },
           },
+
+          {
+            hide: true,
+            label: '保险有效期',
+            prop: 'duration_of_insurance',
+            labelWidth: 130,
+            type: 'daterange',
+            format: 'YYYY-MM-DD',
+            valueFormat: 'YYYY-MM-DD HH:mm:ss',
+            startPlaceholder: '保险开始日期',
+            endPlaceholder: '保险结束日期',
+            rules: [
+              {
+                required: true,
+                message: '请选择保险有效期',
+                trigger: 'blur',
+              },
+            ],
+          },
+
           {
             label: '在线时间',
             prop: 'login_time',
@@ -513,14 +547,25 @@
               },
             ],
           },
+           {
+            label: '在线状态',
+            prop: 'cnstatus',
+            hide: true,
+            addDisplay: false,
+            editDisplay: false,
+            viewDisplay: true,
+            labelWidth: 130,
+          },
           {
             label: '在线状态',
             prop: 'status',
             addDisplay: false,
             editDisplay: false,
+             viewDisplay: false,
             labelWidth: 130,
             slot: true,
             width: 100,
+
             rules: [
               {
                 required: true,
@@ -531,12 +576,24 @@
           },
           {
             label: '机场状态',
-            prop: 'mode_code',
+            prop: 'cnmode_code',
+            hide: true,
             addDisplay: false,
             editDisplay: false,
+            viewDisplay: true,
+            labelWidth: 130,
+          },
+          {
+            label: '机场状态',
+            prop: 'mode_code',
+
+            addDisplay: false,
+            editDisplay: false,
+            viewDisplay: false,
             labelWidth: 130,
             slot: true,
             width: 100,
+
             rules: [
               {
                 required: true,
@@ -566,10 +623,10 @@
     ...mapGetters(['permission']),
     permissionList() {
       return {
-        addBtn: this.validData(this.permission.airport_add, true),
-        viewBtn: this.validData(this.permission.airport_view, true),
-        delBtn: this.validData(this.permission.airport_delete, true),
-        editBtn: this.validData(this.permission.airport_edit, true),
+        addBtn: this.validData(this.permission.air_add, true),
+        viewBtn: this.validData(this.permission.air_view, true),
+        delBtn: this.validData(this.permission.air_delete, true),
+        editBtn: this.validData(this.permission.air_edit, true),
       };
     },
     ids() {
@@ -967,7 +1024,11 @@
       const submitData = {
         ...row,
         area_code: row.area_code.split(',').pop(),
+        insure_start_time: row.duration_of_insurance[0],
+        insure_expired_time: row.duration_of_insurance[1],
       };
+
+      delete submitData.duration_of_insurance;
 
       update(submitData).then(
         () => {
@@ -1065,10 +1126,16 @@
           this.form = {
             ...data,
             area_code: this.getFullAreaCode(data.area_code),
+            area_name: this.form.area_name,
+            cnmode_code: this.getDockModeText(this.form.mode_code),
+            cnstatus:this.form.status === false ? '离线':'在线',
+            duration_of_insurance: [data?.insure_start_time || '', data?.insure_expired_time || ''],
           };
+          console.log('this.form', this.form);
+
+          done();
         });
       }
-      done();
     },
     currentChange(currentPage) {
       this.page.currentPage = currentPage;
@@ -1129,40 +1196,48 @@
   color: #40cb8b;
   font-size: 13px;
 }
+
 .status1 {
   float: right;
   color: #8492a6;
   font-size: 13px;
 }
+
 .online {
   margin-left: 5px;
 }
+
 .onlineStatus1 {
   display: flex;
   flex-direction: column;
   align-items: center;
 }
+
 .onlineStatus {
   display: flex;
   flex-direction: row;
   align-items: center;
 }
+
 .onlineStatus-dot {
   width: 15px;
   height: 15px;
   background-color: #40cb8b;
   border-radius: 50%;
 }
+
 .onlineStatus-dot1 {
   width: 15px;
   height: 15px;
   background-color: #de5e5e;
   border-radius: 50%;
 }
+
 .firmware_status {
   background-color: aqua;
   border-radius: 4px;
 }
+
 .firmware_status:hover {
   cursor: pointer;
   /* color: aqua; */
@@ -1170,6 +1245,7 @@
 
 .active-element {
   cursor: pointer;
+
   &:hover {
     background-color: #409eff;
     border-color: #409eff;
diff --git a/src/views/device/components/devicePerShare.vue b/src/views/device/components/devicePerShare.vue
index 0abf44a..2ee9ac6 100644
--- a/src/views/device/components/devicePerShare.vue
+++ b/src/views/device/components/devicePerShare.vue
@@ -1,35 +1,20 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      v-model:page="page"
-      ref="crud"
-      @row-del="rowDel"
-      v-model="form"
-      :permission="permissionList"
-      @row-save="rowSave"
-      @row-update="rowUpdate"
-      :before-open="beforeOpen"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" ref="crud" @row-del="rowDel"
+      v-model="form" :permission="permissionList" @row-save="rowSave" @row-update="rowUpdate" :before-open="beforeOpen"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange">
     </avue-crud>
   </basic-container>
 </template>
 
 <script>
-import { getList, remove, add, update } from '@/api/device/devicePerShare';
-import { getDeptTreeByNotItself } from '@/api/system/dept';
-import { mapGetters } from 'vuex';
+import { getList, remove, add, update } from '@/api/device/devicePerShare'
+import { getDeptTreeByNotItself } from '@/api/system/dept'
+import { mapGetters } from 'vuex'
 
 export default {
-  data() {
+  data () {
     return {
       deptId: '',
       deviceSn: '',
@@ -58,6 +43,10 @@
         excelBtn: false,
         dialogClickModal: false,
         grid: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '授权单位',
@@ -136,118 +125,118 @@
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.airport_add, true),
         viewBtn: this.validData(this.permission.airport_view, true),
         delBtn: this.validData(this.permission.airport_delete, true),
         editBtn: this.validData(this.permission.airport_edit, true),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    init(data) {
-      this.deptId = data.dept_id;
-      this.deviceSn = data.device_sn;
-      this.getDeptTreeInfo();
-      this.getLoadPage(this.page);
+    init (data) {
+      this.deptId = data.dept_id
+      this.deviceSn = data.device_sn
+      this.getDeptTreeInfo()
+      this.getLoadPage(this.page)
     },
-    getDeptTreeInfo() {
+    getDeptTreeInfo () {
       getDeptTreeByNotItself(this.deptId, this.deviceSn).then(res => {
-        const column = this.findObject(this.option.column, 'deptId');
-        this.deptTreeData = res.data.data;
-        column.dicData = res.data.data;
-      });
+        const column = this.findObject(this.option.column, 'deptId')
+        this.deptTreeData = res.data.data
+        column.dicData = res.data.data
+      })
     },
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       // 添加毫秒级时间戳
-      row['createTime'] = Date.now();
-      row['deviceSn'] = this.deviceSn;
+      row['createTime'] = Date.now()
+      row['deviceSn'] = this.deviceSn
 
       add(row).then(
         () => {
-          this.initFlag = false;
-          this.getLoadPage(this.page);
-          this.getDeptTreeInfo();
+          this.initFlag = false
+          this.getLoadPage(this.page)
+          this.getDeptTreeInfo()
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
-      row['device_sn'] = this.deviceSn;
+    rowUpdate (row, index, done, loading) {
+      row['device_sn'] = this.deviceSn
       update(row).then(
         () => {
-          this.getLoadPage(this.page);
+          this.getLoadPage(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.getDeptTreeInfo();
-          this.getLoadPage(this.page);
+          this.getDeptTreeInfo()
+          this.getLoadPage(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.getLoadPage(this.page);
+    searchReset () {
+      this.query = {}
+      this.getLoadPage(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.getLoadPage(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.getLoadPage(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -255,48 +244,48 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.getLoadPage(this.page);
+          this.getLoadPage(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
-      done();
+    beforeOpen (done, type) {
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
-      this.getLoadPage(this.page, this.query); // 添加数据刷新
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
+      this.getLoadPage(this.page, this.query) // 添加数据刷新
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
-      this.page.currentPage = 1; // 每页条数改变时,重置到第一页
-      this.getLoadPage(this.page, this.query); // 添加数据刷新
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
+      this.page.currentPage = 1 // 每页条数改变时,重置到第一页
+      this.getLoadPage(this.page, this.query) // 添加数据刷新
     },
-    refreshChange() {
-      this.getLoadPage(this.page, this.query);
+    refreshChange () {
+      this.getLoadPage(this.page, this.query)
     },
-    getLoadPage(page, params = {}) {
-      params['deviceSn'] = this.deviceSn;
-      this.loading = true;
+    getLoadPage (page, params = {}) {
+      params['deviceSn'] = this.deviceSn
+      this.loading = true
       getList(page.currentPage, page.pageSize, params).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
       }).catch(err => {
-        console.error('加载数据失败:', err);
-        this.loading = false;
-      });
+        console.error('加载数据失败:', err)
+        this.loading = false
+      })
     },
   },
-};
+}
 </script>
 
 <style>
@@ -304,6 +293,7 @@
   background-color: aqua;
   border-radius: 4px;
 }
+
 .firmware_status:hover {
   cursor: pointer;
 }
diff --git a/src/views/device/components/firmwareManage.vue b/src/views/device/components/firmwareManage.vue
index d5cba3b..95e8534 100644
--- a/src/views/device/components/firmwareManage.vue
+++ b/src/views/device/components/firmwareManage.vue
@@ -113,6 +113,9 @@
         excelBtn: false,
         dialogClickModal: false,
         grid: false,
+
+        height: 'auto',
+        calcHeight: 20,
         column: [
           {
             label: '设备名称',
@@ -429,13 +432,4 @@
   /* color: aqua; */
 }
 </style>
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/device/devicePerMenu.vue b/src/views/device/devicePerMenu.vue
index c550713..ca5ae19 100644
--- a/src/views/device/devicePerMenu.vue
+++ b/src/views/device/devicePerMenu.vue
@@ -1,35 +1,19 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      v-model:page="page"
-      ref="crud"
-      @row-del="rowDel"
-      v-model="form"
-      :permission="permissionList"
-      @row-save="rowSave"
-      @row-update="rowUpdate"
-      :before-open="beforeOpen"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" ref="crud" @row-del="rowDel"
+      v-model="form" :permission="permissionList" @row-save="rowSave" @row-update="rowUpdate" :before-open="beforeOpen"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
     </avue-crud>
   </basic-container>
 </template>
 
 <script>
-import { getList, remove, add, update } from '@/api/device/devicePerMenu';
-import { mapGetters } from 'vuex';
+import { getList, remove, add, update } from '@/api/device/devicePerMenu'
+import { mapGetters } from 'vuex'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -53,6 +37,10 @@
         excelBtn: false,
         dialogClickModal: false,
         grid: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '名称',
@@ -165,98 +153,98 @@
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.device_per_menu_add, true),
         viewBtn: this.validData(this.permission.device_per_menu_view, true),
         delBtn: this.validData(this.permission.device_per_menu_delete, true),
         editBtn: this.validData(this.permission.device_per_menu_edit, true),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.initFlag = false;
-          this.onLoad(this.page);
+          this.initFlag = false
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -264,41 +252,41 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
-      done();
+    beforeOpen (done, type) {
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
       getList(page.currentPage, page.pageSize, params).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
 
 <style>
@@ -306,19 +294,10 @@
   background-color: aqua;
   border-radius: 4px;
 }
+
 .firmware_status:hover {
   cursor: pointer;
   /* color: aqua; */
 }
 </style>
-<style scoped lang="scss">
-
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/device/fly.vue b/src/views/device/fly.vue
index 2fd28b2..eb7fdb0 100644
--- a/src/views/device/fly.vue
+++ b/src/views/device/fly.vue
@@ -1,34 +1,13 @@
 <template>
-  <basic-container>
-    <avue-crud
-      id="device"
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      :page="page"
-      @update:page="handlePageChange"
-      ref="crud"
-      @row-del="rowDel"
-      v-model="form"
-      :permission="permissionList"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      :before-open="beforeOpen"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-    >
+  <basic-main-content>
+    <avue-crud id="device" :option="option" :table-loading="loading" :data="data" :page="page"
+      @update:page="handlePageChange" ref="crud" @row-del="rowDel" v-model="form" :permission="permissionList"
+      @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen" @search-change="searchChange"
+      @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
+      @size-change="sizeChange" @refresh-change="refreshChange">
       <template #menu-left>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          plain
-          v-if="permission.workspace_delete"
-          @click="handleDelete"
-          >删 除
+        <el-button type="danger" icon="el-icon-delete" plain v-if="permission.workspace_delete" @click="handleDelete">删
+          除
         </el-button>
       </template>
       <template #dept_name="{ row }">
@@ -37,7 +16,7 @@
       <template #status="{ row }">
         <div v-if="row.status == true" class="onlineStatus">
           <div class="onlineStatus-dot"></div>
-          <span class="online" >在线</span>
+          <span class="online">在线</span>
         </div>
         <div v-if="row.status == false" class="onlineStatus">
           <div class="onlineStatus-dot1"></div>
@@ -45,13 +24,8 @@
         </div>
       </template>
       <template #menu="scope">
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-setting"
-          v-if="permission.operate_password_set"
-          @click.stop="handleOperatePassword(scope.row, scope.index)"
-          >操控密码设置
+        <el-button type="primary" text icon="el-icon-setting" v-if="permission.operate_password_set"
+          @click.stop="handleOperatePassword(scope.row, scope.index)">操控密码设置
         </el-button>
         <!-- <el-button
           type="primary"
@@ -64,28 +38,12 @@
       </template>
     </avue-crud>
     <el-dialog title="操控密码设置" append-to-body v-model="operatePasswordSetBox" width="455px">
-      <el-form
-        :model="passwordForm"
-        ref="passwordForm"
-        label-width="80px"
-        :rules="rules"
-        v-loading="loadingForm"
-      >
+      <el-form :model="passwordForm" ref="passwordForm" label-width="80px" :rules="rules" v-loading="loadingForm">
         <el-form-item label="密码" prop="password">
-          <el-input
-            type="password"
-            v-model="passwordForm.password"
-            placeholder="请输入密码"
-            show-password
-          ></el-input>
+          <el-input type="password" v-model="passwordForm.password" placeholder="请输入密码" show-password></el-input>
         </el-form-item>
         <el-form-item label="确认密码" prop="password2">
-          <el-input
-            type="password"
-            v-model="passwordForm.password2"
-            placeholder="请输入确认密码"
-            show-password
-          ></el-input>
+          <el-input type="password" v-model="passwordForm.password2" placeholder="请输入确认密码" show-password></el-input>
         </el-form-item>
       </el-form>
       <template #footer>
@@ -98,7 +56,7 @@
     <el-dialog title="操控密码查看" append-to-body v-model="operatePasswordViewBox" width="455px">
       <el-input v-model="operate_password" disabled></el-input>
     </el-dialog>
-  </basic-container>
+  </basic-main-content>
 </template>
 
 <script>
@@ -110,27 +68,27 @@
   getDetail,
   getOperatePassword,
   operatePasswordUpdate,
-} from '@/api/device/device';
-import { mapGetters } from 'vuex';
+} from '@/api/device/device'
+import { mapGetters } from 'vuex'
 
 export default {
-  data() {
+  data () {
     const validatePass = (rule, value, callback) => {
       if (value === '') {
-        callback(new Error('请输入密码'));
+        callback(new Error('请输入密码'))
       } else {
-        callback();
+        callback()
       }
-    };
+    }
     const validatePass2 = (rule, value, callback) => {
       if (value === '') {
-        callback(new Error('请再次输入密码'));
+        callback(new Error('请再次输入密码'))
       } else if (value !== this.passwordForm.password) {
-        callback(new Error('两次输入密码不一致!'));
+        callback(new Error('两次输入密码不一致!'))
       } else {
-        callback();
+        callback()
       }
-    };
+    }
     return {
       loadingForm: false,
       rules: {
@@ -155,8 +113,6 @@
       },
       selectionList: [],
       option: {
-        // height: '460',
-        // calcHeight: 32,
         // dialogWidth: 950,
         tip: false,
         searchShow: true,
@@ -169,6 +125,10 @@
         excelBtn: false,
         dialogClickModal: false,
         grid: false,
+
+        height: 'auto',
+        calcHeight: 180,
+
         column: [
           {
             label: '设备型号',
@@ -331,144 +291,144 @@
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.fly_add, true),
         viewBtn: this.validData(this.permission.fly_view, true),
         delBtn: this.validData(this.permission.fly_delete, true),
         editBtn: this.validData(this.permission.fly_edit, true),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
     // 设置无人机操作密码
-    setOperatePasswordConfirm() {
-      var that = this;
+    setOperatePasswordConfirm () {
+      var that = this
       this.$refs.passwordForm.validate(valid => {
         if (valid) {
-          this.loadingForm = true;
+          this.loadingForm = true
           const data = {
             id: this.passwordForm.id,
             operate_password: this.passwordForm.password,
-          };
+          }
           // 提交
           operatePasswordUpdate(data).then(res => {
-            this.loadingForm = false;
-            this.operatePasswordSetBox = false;
-            that.passwordForm = {};
-            this.onLoad(this.page);
+            this.loadingForm = false
+            this.operatePasswordSetBox = false
+            that.passwordForm = {}
+            this.onLoad(this.page)
             this.$message({
               type: 'success',
               message: '操作成功!',
-            });
-          });
+            })
+          })
         } else {
-          console.log('error submit!!');
-          return false;
+          console.log('error submit!!')
+          return false
         }
-      });
+      })
     },
     // 操作密码设置
-    handleOperatePassword(row) {
-      this.operatePasswordSetBox = true;
-      this.passwordForm.id = row.id;
+    handleOperatePassword (row) {
+      this.operatePasswordSetBox = true
+      this.passwordForm.id = row.id
     },
-    viewOperatePassword(row) {
-      this.operatePasswordViewBox = true;
+    viewOperatePassword (row) {
+      this.operatePasswordViewBox = true
       // 查询密码
       getOperatePassword(row.id).then(res => {
-        this.operate_password = res.data.data;
-      });
+        this.operate_password = res.data.data
+      })
     },
-    init() {
+    init () {
       (this.page = {
         pageSize: 10,
         currentPage: 1,
         total: 0,
       }),
-        this.onLoad(this.page);
+        this.onLoad(this.page)
     },
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -476,67 +436,67 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    handlePageChange(val) {
-      this.page = val;
-      this.onLoad(this.page);
+    handlePageChange (val) {
+      this.page = val
+      this.onLoad(this.page)
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
-      this.onLoad(this.page);
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
+      this.onLoad(this.page)
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
-      this.page.currentPage = 1;
-      this.onLoad(this.page);
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
+      this.page.currentPage = 1
+      this.onLoad(this.page)
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      const { releaseTimeRange } = this.query;
+    onLoad (page, params = {}) {
+      const { releaseTimeRange } = this.query
       let values = {
         ...params,
         ...this.query,
-      };
+      }
       if (releaseTimeRange) {
         values = {
           ...values,
           releaseTime_datege: releaseTimeRange[0],
           releaseTime_datelt: releaseTimeRange[1],
-        };
-        values.releaseTimeRange = null;
+        }
+        values.releaseTimeRange = null
       }
-      values['domain'] = 0;
-      this.loading = true;
+      values['domain'] = 0
+      this.loading = true
       getList(page.currentPage, page.pageSize, values).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
 
 <style lang="scss" scoped>
@@ -544,25 +504,30 @@
   height: 655px !important;
   overflow: auto;
 }
+
 .online {
   margin-left: 5px;
 }
+
 .onlineStatus1 {
   display: flex;
   flex-direction: column;
   align-items: center;
 }
+
 .onlineStatus {
   display: flex;
   flex-direction: row;
   align-items: center;
 }
+
 .onlineStatus-dot {
   width: 15px;
   height: 15px;
   background-color: #40cb8b;
   border-radius: 50%;
 }
+
 .onlineStatus-dot1 {
   width: 15px;
   height: 15px;
diff --git a/src/views/device/index.vue b/src/views/device/index.vue
index 35f066c..d9ef307 100644
--- a/src/views/device/index.vue
+++ b/src/views/device/index.vue
@@ -1,12 +1,12 @@
 <!--
- * @Author: shuishen 1109946754@qq.com
- * @Date: 2024-09-09 11:40:40
- * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-09-09 12:02:50
- * @FilePath: \drone-web-manage\src\views\device\index.vue
- * @Description: 
- * 
- * Copyright (c) 2024 by shuishen, All Rights Reserved. 
+ * @Author       : yuan
+ * @Date         : 2025-04-27 21:01:20
+ * @LastEditors  : yuan
+ * @LastEditTime : 2025-06-25 16:23:45
+ * @FilePath     : \src\views\device\index.vue
+ * @Description  : 
+ * Copyright 2025 OBKoro1, All Rights Reserved. 
+ * 2025-04-27 21:01:20
 -->
 <template>
   <basic-container>
@@ -22,47 +22,75 @@
 </template>
 
 <script>
-import { mapGetters } from 'vuex';
-import airport from './airport.vue';
-import fly from './fly.vue';
+import { mapGetters } from 'vuex'
+import airport from './airport.vue'
+import fly from './fly.vue'
 export default {
   components: { airport, fly },
-  data() {
+  data () {
     return {
       activeName: '1',
       form: {},
       query: {},
       loading: true,
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
-      return {};
+    permissionList () {
+      return {}
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
-  created(){
+  created () {
     // 默认打开机场页面
   },
   methods: {
-    handleClick(tab, event) {
+    handleClick (tab, event) {
       if (tab.index == 1) {
-        this.$refs.fly.init();
+        this.$refs.fly.init()
       }
       if (tab.index == 0) {
-        this.$refs.airport.init();
+        this.$refs.airport.init()
       }
     },
   },
-};
+}
 </script>
 
-<style></style>
+<style lang="scss" scoped>
+::v-deep(.el-tabs) {
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+
+  .el-tabs__header {
+    order: 1;
+  }
+
+  .el-tabs__content {
+    order: 2;
+  }
+
+  .el-tabs__content {
+    height: 0;
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+
+    .el-tab-pane {
+      height: 0;
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+    }
+  }
+}
+</style>
diff --git a/src/views/job/components/SearchBox.vue b/src/views/job/components/SearchBox.vue
index 899b99d..89ccc3c 100644
--- a/src/views/job/components/SearchBox.vue
+++ b/src/views/job/components/SearchBox.vue
@@ -59,7 +59,7 @@
         </el-form-item>
         <el-form-item label="任务算法:" v-if="isExpand" class="taskAlgorithm">
           <TaskAlgorithmBusiness
-            :setWidth="162"
+            :setWidth="222"
             :showAlgorithm="true"
             @algorithmChange="algorithmChange"
           />
@@ -451,6 +451,7 @@
     .el-form-item {
       margin-bottom: 0;
       width: 233px;
+      	margin-right: 20px;
 
       .el-form-item__label {
         color: #363636;
diff --git a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
index 2972cfa..ec6ddd4 100644
--- a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
+++ b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
@@ -3,16 +3,11 @@
 	<div class="task-intermediate-content">
 		<SearchBox @search="searchClick" @addTask="handleAddTask"></SearchBox>
 		<div class="task-table">
-			<el-table
-			stripe
-				:data="jobListData"
-				:row-class-name="tableRowClassName"
-				:row-style="{ height: '54px', fontSize: '14px', 'text-align': 'center' }"
-				:header-cell-style="{ 'text-align': 'center', height: '36px', fontSize: '14px' }"
-			>
+			<el-table border :data="jobListData" class="custom-header">
 				<el-table-column label="序号" type="index" width="60">
 					<template #default="{ $index }">
-						{{ ($index + 1 + (jobListParams.current - 1) * jobListParams.size).toString().padStart(2, '0') }}
+						{{ ($index + 1 + (jobListParams.current - 1) * jobListParams.size).toString().padStart(2,
+							'0') }}
 					</template>
 				</el-table-column>
 				<el-table-column prop="job_info_num" label="任务编号" show-overflow-tooltip align="center" />
@@ -22,22 +17,20 @@
 				<el-table-column prop="ai_type_str" label="关联算法" show-overflow-tooltip align="center" />
 				<el-table-column label="任务状态" align="center">
 					<template #default="scope">
-						<span
-							:style="{
-								color:
-									scope.row.status === 1
-										? '#ffe17e'
-										: scope.row.status === 2
-										? '#ffa768'
+						<span :style="{
+							color:
+								scope.row.status === 1
+									? '#00CDC2'
+									: scope.row.status === 2
+										? '#FF720F'
 										: scope.row.status === 3
-										? '#8effac'
-										: scope.row.status === 5
-										? '#FF4848'
-										: scope.row.status === 7
-										? '#A6A6A6'
-										: '',
-							}"
-						>
+											? '#00AA2D'
+											: scope.row.status === 5
+												? '#FF4848'
+												: scope.row.status === 7
+													? '#A6A6A6'
+													: '',
+						}">
 							{{ scope.row.status ? getStatusText(scope.row.status) : '' }}
 						</span>
 					</template>
@@ -53,10 +46,11 @@
 						<span>{{ scope.row.event_number ? scope.row.event_number : '/' }}</span>
 					</template>
 				</el-table-column>
-				<el-table-column prop="cycle_time_value" label="任务时间" />
-				<el-table-column prop="creator_name" label="创建人" align="center" />
+				<el-table-column prop="cycle_time_value" label="任务时间" show-overflow-tooltip />
+				<el-table-column prop="creator_name" label="创建人" align="center" show-overflow-tooltip />
 				<el-table-column label="操作" width="200" align="center">
 					<template #default="scope">
+<<<<<<< HEAD
 						<div
 							v-if="scope.row.status === 2"
 							class="btnItem"
@@ -73,6 +67,14 @@
 							type="primary"
 							@click="cancelTask(scope.row)"
 						>
+=======
+						<div v-if="scope.row.status === 2" class="btnItem turnBack" link type="primary"
+							@click="turnBack(scope.row)">
+							返航
+						</div>
+						<div v-if="scope.row.status === 1" class="btnItem cancelTask" link type="primary"
+							@click="cancelTask(scope.row)">
+>>>>>>> 28c246747fe4214c22f3df73ad62b3cd2668dc3c
 							取消任务
 						</div>
 						<div class="btnItem" link type="primary" @click="handleDetail(scope.row)">查看</div>
@@ -105,18 +107,10 @@
 		:wayLineJodInfoId="rowData.id"
 	/> -->
 	<!-- 历史任务详情 -->
-	<DeviceJobDetails
-		v-if="isShowDeviceJobDetails"
-		v-model:show="isShowDeviceJobDetails"
-		:wayLineJodInfoId="rowData.id"
-		:batchNo="rowData.batch_no"
-	/>
-	<CancelTaskDialog
-		ref="cancelTaskDialogRef"
-		v-model:isShowCancelTask="isShowCancelTask"
-		:row-data="rowData"
-		@refresh="getJobList"
-	/>
+	<DeviceJobDetails v-if="isShowDeviceJobDetails" v-model:show="isShowDeviceJobDetails" :wayLineJodInfoId="rowData.id"
+		:batchNo="rowData.batch_no" />
+	<CancelTaskDialog ref="cancelTaskDialogRef" v-model:isShowCancelTask="isShowCancelTask" :row-data="rowData"
+		@refresh="getJobList" />
 </template>
 
 <script setup>
@@ -244,15 +238,23 @@
 
 <style lang="scss" scoped>
 .task-intermediate-content {
-	margin: 0 18px 16px 10px;
+	height: 0;
+	flex: 1;
+	margin: 0 10px 10px 10px;
 	background-color: #ffffff;
-	padding: 14px 18px;
+	padding: 20px;
+	border-radius: 5px;
+	display: flex;
+	flex-direction: column;
+
 	// 表格
 	.task-table {
-		height: 580px;
+		height: 0;
+		flex: 1;
 		margin-top: 18px;
 		overflow: auto;
 	}
+
 	.btnItem {
 		height: 27px;
 		line-height: 27px;
@@ -271,24 +273,39 @@
 			border: 1px solid #ffa500;
 			color: #ffa500;
 		}
+
 		&.cancelTask {
-			border: 1px solid #3efe96;
-			color: #3efe96;
+			border: 1px solid #00AA2D;
+			color: #00AA2D;
 		}
 	}
-	:deep(.el-table) {
-			--el-table-tr-bg-color: #ffffff;
-			--el-table-striped-bg-color: #EFEFEF;
-			
-			.el-table__body tr.el-table__row--striped td {
-				background-color: var(--el-table-striped-bg-color);
-			}
-	}
+
+	// :deep(.el-table) {
+	// 		--el-table-tr-bg-color: #ffffff;
+	// 		--el-table-striped-bg-color: #EFEFEF;
+
+	// 		.el-table__body tr.el-table__row--striped td {
+	// 			background-color: var(--el-table-striped-bg-color);
+	// 		}
+	// }
 	// 分页
+	:deep(.custom-header th.el-table__cell) {
+		color: rgba(0, 0, 0, 0.85);
+	}
+
+	:deep(.el-table td.el-table__cell) {
+		color: #606266;
+	}
+
 	:deep(.el-pagination) {
 		display: flex;
+<<<<<<< HEAD
 		justify-content: right;
+=======
+		justify-content: flex-end;
+>>>>>>> 28c246747fe4214c22f3df73ad62b3cd2668dc3c
 	}
+
 	:deep(.el-pagination button) {
 		background: center center no-repeat none !important;
 		color: #8eb8ea !important;
diff --git a/src/views/job/components/TaskTop/TaskEvent.vue b/src/views/job/components/TaskTop/TaskEvent.vue
index aa3895d..dcc40cd 100644
--- a/src/views/job/components/TaskTop/TaskEvent.vue
+++ b/src/views/job/components/TaskTop/TaskEvent.vue
@@ -81,7 +81,7 @@
 		{
 			name: '任务',
 			type: 'bar',
-			barWidth: 8,
+			barWidth: 6,
 			itemStyle: {
 				color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 					{ offset: 0, color: '#FF8902' },
@@ -92,7 +92,7 @@
 		{
 			name: '事件',
 			type: 'bar',
-			barWidth: 8,
+			barWidth: 6,
 			itemStyle: {
 				color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 					{ offset: 0, color: '#4363FF' },
@@ -132,11 +132,13 @@
 
 <style lang="scss" scoped>
 .task-event {
-width: 529px;
+	width: 0;
+	flex: 1;
 	height: 100%;
-	margin-left: 9px;
+	margin-left: 10px;
 	background: #FFFFFF;
 	border-radius: 8px 8px 8px 8px;
+
 	.title {
 		padding: 10px 0 10px 16px;
 		width: 144px;
@@ -147,11 +149,12 @@
 		color: #363636;
 		line-height: 18px;
 	}
+
 	.chart {
 		padding: 6px 0px;
 		width: 100%;
 		height: 166px;
-		
+
 	}
 }
 </style>
diff --git a/src/views/job/components/TaskTop/TaskIndustry.vue b/src/views/job/components/TaskTop/TaskIndustry.vue
index 5509958..75d26c8 100644
--- a/src/views/job/components/TaskTop/TaskIndustry.vue
+++ b/src/views/job/components/TaskTop/TaskIndustry.vue
@@ -38,17 +38,12 @@
 		{
 			name: '机巢事件统计',
 			type: 'pie',
-			roseType: 'radius',
-			radius: ['20%', '70%'],
-			center: ['50%', '45%'],
+			// roseType: 'radius',
+			radius: ['40%', '70%'],
+			// center: ['50%', '45%'],
+			// radius: '70%', // 设置饼图的半径
+			center: ['50%', '50%'], // 调整饼图位置
 			data: [],
-			// [
-			//   { name: '国土类', value: 0, itemStyle: { color: '#3D7FFF' } },
-			//   { name: '城管类', value: 0, itemStyle: { color: '#8277E9' } },
-			//   { name: '消防类', value: 0, itemStyle: { color: '#FFB77E' } },
-			//   { name: '林业类', value: 0, itemStyle: { color: '#44D7B6' } },
-			//   { name: '公安类', value: 0, itemStyle: { color: '#62F4FF' } }
-			// ],
 			label: {
 				show: true,
 				position: 'outside',
@@ -101,11 +96,12 @@
 
 <style lang="scss" scoped>
 .task-industry {
-width: 276px;
+	width: 276px;
 	height: 100%;
 	background: #FFFFFF;
 	border-radius: 8px 8px 8px 8px;
-	margin-left: 9px;
+	margin-left: 10px;
+
 	.title {
 		font-family: Segoe UI, Segoe UI;
 		padding: 10px 0 10px 16px;
@@ -116,6 +112,7 @@
 		color: #363636;
 		line-height: 18px;
 	}
+
 	.chart {
 		width: 100%;
 		height: 180px;
diff --git a/src/views/job/components/TaskTop/TaskTime.vue b/src/views/job/components/TaskTop/TaskTime.vue
index 4b26167..310f361 100644
--- a/src/views/job/components/TaskTop/TaskTime.vue
+++ b/src/views/job/components/TaskTop/TaskTime.vue
@@ -142,9 +142,10 @@
 .task-time {
 	width: 529px;
 	height: 100%;
-	margin-left: 9px;
+	margin-left: 10px;
 	background: #FFFFFF;
 	border-radius: 8px 8px 8px 8px;
+
 	.title {
 		padding: 10px 0 10px 16px;
 		width: 96px;
@@ -155,6 +156,7 @@
 		color: #363636;
 		line-height: 18px;
 	}
+
 	.chart {
 		padding: 6px 0px;
 		width: 100%;
diff --git a/src/views/job/components/TaskTop/TaskTop.vue b/src/views/job/components/TaskTop/TaskTop.vue
index e3fbe31..68b8a6b 100644
--- a/src/views/job/components/TaskTop/TaskTop.vue
+++ b/src/views/job/components/TaskTop/TaskTop.vue
@@ -1,8 +1,16 @@
+<!--
+ * @Author       : yuan
+ * @Date         : 2025-06-14 15:19:16
+ * @LastEditors  : yuan
+ * @LastEditTime : 2025-06-26 11:46:38
+ * @FilePath     : \src\views\job\components\TaskTop\TaskTop.vue
+ * @Description  : 
+ * Copyright 2025 OBKoro1, All Rights Reserved. 
+ * 2025-06-14 15:19:16
+-->
 <template>
 	<div class="task-top">
 		<!--时间 天气-->
-		<common-weather />
-		<UserOperate />
 		<div class="statistical-chart">
 			<TaskTotal />
 			<TaskIndustry />
@@ -14,8 +22,6 @@
 
 <script setup>
 import { pxToRem } from '@/utils/rem'
-// import CommonWeather from '@/components/CommonWeather.vue'
-// import UserOperate from '@/components/UserOperate.vue'
 import TaskTotal from './TaskTotal.vue'
 import TaskIndustry from './TaskIndustry.vue'
 import TaskTime from './TaskTime.vue'
@@ -25,12 +31,14 @@
 <style lang="scss" scoped>
 .task-top {
 	position: relative;
-	margin-bottom: 6px;
+	display: flex;
+
 	.statistical-chart {
 		margin-left: 10px;
-		margin-right: 40px;
+		margin-right: 10px;
 		display: flex;
-		width:100%;
+		width: 0;
+		flex: 1;
 		height: 216px;
 		box-sizing: border-box;
 		margin-bottom: 10px;
diff --git a/src/views/job/components/TaskTop/TaskTotal.vue b/src/views/job/components/TaskTop/TaskTotal.vue
index 20ac749..84de5a7 100644
--- a/src/views/job/components/TaskTop/TaskTotal.vue
+++ b/src/views/job/components/TaskTop/TaskTotal.vue
@@ -40,10 +40,10 @@
 const list = ref([
 	{ name: '计划执行', value: '0', color: '#1C5CFF', img: jhzxpng },
 	{ name: '已执行', value: '0', color: '#00AA2D', img: yzxpng },
-	{ name: '执行中', value: '0', color: '#FFA768', img:  zxzpng},
+	{ name: '执行中', value: '0', color: '#FF720F', img:  zxzpng},
 	{ name: '执行失败', value: '0', color: '#FF4848', img: zxsbpng },
 	{ name: '待执行', value: '0', color: '#00CDC2', img: dzxpng },
-	{ name: '取消执行', value: '0', color: '#A6A6A6', img: qxzxpng },
+	{ name: '取消执行', value: '0', color: '#373333', img: qxzxpng },
 ])
 
 // 获取任务统计总数
diff --git a/src/views/job/jobinfo.vue b/src/views/job/jobinfo.vue
index db38193..3eb74cf 100644
--- a/src/views/job/jobinfo.vue
+++ b/src/views/job/jobinfo.vue
@@ -1,68 +1,37 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      v-model:search="search"
-      v-model:page="page"
-      v-model="form"
-      :table-loading="loading"
-      :data="data"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      ref="crud"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @row-del="rowDel"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" v-model:search="search" v-model:page="page" v-model="form" :table-loading="loading"
+      :data="data" :permission="permissionList" :before-open="beforeOpen" ref="crud" @row-update="rowUpdate"
+      @row-save="rowSave" @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
+      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad">
       <template #menu-left>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          plain
-          v-if="permission.jobinfo_delete"
-          @click="handleDelete"
-          >删 除
+        <el-button type="danger" icon="el-icon-delete" plain v-if="permission.jobinfo_delete" @click="handleDelete">删 除
         </el-button>
-        <el-button type="info" plain icon="el-icon-sort" @click="handleSync"
-          >数 据 同 步
+        <el-button type="info" plain icon="el-icon-sort" @click="handleSync">数 据 同 步
         </el-button>
       </template>
       <template #menu="scope">
-        <el-button type="primary" text icon="el-icon-video-play" @click="handleRun(scope.row)"
-          >运 行
+        <el-button type="primary" text icon="el-icon-video-play" @click="handleRun(scope.row)">运 行
         </el-button>
       </template>
       <template #enable="{ row }">
-        <el-switch
-          v-model="row.enable"
-          inline-prompt
-          @change="slotChange(row)"
-          active-text="启用"
-          inactive-text="暂停"
-          :active-value="1"
-          :inactive-value="0"
-        />
+        <el-switch v-model="row.enable" inline-prompt @change="slotChange(row)" active-text="启用" inactive-text="暂停"
+          :active-value="1" :inactive-value="0" />
       </template>
     </avue-crud>
   </basic-container>
 </template>
 
 <script>
-import { getList, getDetail, add, update, remove, change, run, sync } from '@/api/job/jobinfo';
-import option from '@/option/job/jobinfo';
-import { mapGetters } from 'vuex';
-import 'nprogress/nprogress.css';
-import func from '@/utils/func';
+import { getList, getDetail, add, update, remove, change, run, sync } from '@/api/job/jobinfo'
+import option from '@/option/job/jobinfo'
+import { mapGetters } from 'vuex'
+import 'nprogress/nprogress.css'
+import func from '@/utils/func'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -76,98 +45,98 @@
       selectionList: [],
       option: option,
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.jobinfo_add, false),
         viewBtn: this.validData(this.permission.jobinfo_view, false),
         delBtn: this.validData(this.permission.jobinfo_delete, false),
         editBtn: this.validData(this.permission.jobinfo_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       if (func.isArrayAndNotEmpty(row.lifecycle)) {
-        const lifecycleStart = row.lifecycle[0];
-        const lifecycleEnd = row.lifecycle[1];
+        const lifecycleStart = row.lifecycle[0]
+        const lifecycleEnd = row.lifecycle[1]
         if (!func.isUndefined(lifecycleStart) && !func.isUndefined(lifecycleEnd)) {
-          row.lifecycle = lifecycleStart + ',' + lifecycleEnd;
+          row.lifecycle = lifecycleStart + ',' + lifecycleEnd
         }
       } else {
-        row.lifecycle = '';
+        row.lifecycle = ''
       }
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          loading();
-          window.console.log(error);
+          loading()
+          window.console.log(error)
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       if (func.isArrayAndNotEmpty(row.lifecycle)) {
-        const lifecycleStart = row.lifecycle[0];
-        const lifecycleEnd = row.lifecycle[1];
+        const lifecycleStart = row.lifecycle[0]
+        const lifecycleEnd = row.lifecycle[1]
         if (!func.isUndefined(lifecycleStart) && !func.isUndefined(lifecycleEnd)) {
-          row.lifecycle = lifecycleStart + ',' + lifecycleEnd;
+          row.lifecycle = lifecycleStart + ',' + lifecycleEnd
         }
-      }else{
+      } else {
         row.lifecycle = ""
       }
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          loading();
-          console.log(error);
+          loading()
+          console.log(error)
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -175,130 +144,121 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    handleSync() {
+    handleSync () {
       this.$confirm('确定进行数据双向同步?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return sync();
+          return sync()
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    handleRun(row) {
+    handleRun (row) {
       this.$confirm('运行后将创建一个实例执行,是否继续?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return run(row);
+          return run(row)
         })
         .then(() => {
           this.$message({
             type: 'success',
             message: '运行成功!',
-          });
-        });
+          })
+        })
     },
-    slotChange(row) {
+    slotChange (row) {
       if (!row.id) {
-        return;
+        return
       }
       change(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
+          })
         },
         error => {
-          window.console.log(error);
+          window.console.log(error)
         }
-      );
+      )
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page) {
-      this.loading = true;
+    onLoad (page) {
+      this.loading = true
 
-      const { jobServerId, jobName } = this.query;
+      const { jobServerId, jobName } = this.query
 
       let values = {
         jobServerId_like: jobServerId,
         jobName_like: jobName,
-      };
+      }
 
       getList(page.currentPage, page.pageSize, values).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/job/jobserver.vue b/src/views/job/jobserver.vue
index d0a9975..29567a9 100644
--- a/src/views/job/jobserver.vue
+++ b/src/views/job/jobserver.vue
@@ -1,42 +1,19 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      v-model:search="search"
-      v-model:page="page"
-      v-model="form"
-      :table-loading="loading"
-      :data="data"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      ref="crud"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @row-del="rowDel"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" v-model:search="search" v-model:page="page" v-model="form" :table-loading="loading"
+      :data="data" :permission="permissionList" :before-open="beforeOpen" ref="crud" @row-update="rowUpdate"
+      @row-save="rowSave" @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
+      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad">
       <template #menu-left>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          plain
-          v-if="permission.jobserver_delete"
-          @click="handleDelete"
-          >删 除
+        <el-button type="danger" icon="el-icon-delete" plain v-if="permission.jobserver_delete" @click="handleDelete">删
+          除
         </el-button>
-        <el-button type="info" plain icon="el-icon-sort" @click="handleSync"
-          >数 据 同 步
+        <el-button type="info" plain icon="el-icon-sort" @click="handleSync">数 据 同 步
         </el-button>
       </template>
       <template #menu="scope">
-        <el-button type="primary" text icon="el-icon-video-play" @click="handleLink(scope.row)"
-          >服务跳转
+        <el-button type="primary" text icon="el-icon-video-play" @click="handleLink(scope.row)">服务跳转
         </el-button>
       </template>
     </avue-crud>
@@ -44,14 +21,14 @@
 </template>
 
 <script>
-import { getList, getDetail, add, update, remove, sync } from '@/api/job/jobserver';
-import option from '@/option/job/jobserver';
-import { mapGetters } from 'vuex';
-import 'nprogress/nprogress.css';
-import func from '@/utils/func';
+import { getList, getDetail, add, update, remove, sync } from '@/api/job/jobserver'
+import option from '@/option/job/jobserver'
+import { mapGetters } from 'vuex'
+import 'nprogress/nprogress.css'
+import func from '@/utils/func'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -65,80 +42,80 @@
       selectionList: [],
       option: option,
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.jobserver_add, false),
         viewBtn: this.validData(this.permission.jobserver_view, false),
         delBtn: this.validData(this.permission.jobserver_delete, false),
         editBtn: this.validData(this.permission.jobserver_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          loading();
-          window.console.log(error);
+          loading()
+          window.console.log(error)
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          loading();
-          console.log(error);
+          loading()
+          console.log(error)
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -146,100 +123,91 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    handleLink(row) {
-      window.open(func.formatUrl(row.jobServerUrl));
+    handleLink (row) {
+      window.open(func.formatUrl(row.jobServerUrl))
     },
-    handleSync() {
+    handleSync () {
       this.$confirm('确定进行数据双向同步?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return sync();
+          return sync()
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page) {
-      this.loading = true;
+    onLoad (page) {
+      this.loading = true
 
-      const { jobServerName, jobAppName } = this.query;
+      const { jobServerName, jobAppName } = this.query
 
       let values = {
         jobServerName_like: jobServerName,
         jobAppName_like: jobAppName,
-      };
+      }
 
       getList(page.currentPage, page.pageSize, values).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/job/jobstatistics.vue b/src/views/job/jobstatistics.vue
index 13f4fb1..e09e321 100644
--- a/src/views/job/jobstatistics.vue
+++ b/src/views/job/jobstatistics.vue
@@ -1,14 +1,11 @@
 <script setup>
-import TaskTop from "@/views/job/components/TaskTop/TaskTop.vue";
-import TaskIntermediateContent from "@/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue";
+import TaskTop from "@/views/job/components/TaskTop/TaskTop.vue"
+import TaskIntermediateContent from "@/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue"
 </script>
 
 <template>
-  <TaskTop/>
+  <TaskTop />
   <TaskIntermediateContent />
 </template>
 
-
-<style scoped lang="scss">
-
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/license/license.vue b/src/views/license/license.vue
index 7365e8a..16ab9ed 100644
--- a/src/views/license/license.vue
+++ b/src/views/license/license.vue
@@ -1,32 +1,15 @@
 <template>
     <basic-container>
-        
-        <avue-crud 
-            :option="option" 
-            :table-loading="loading" 
-            :data="data" 
-            v-model:page="page" 
-            ref="crud" 
-            @row-del="rowDel"
-            v-model="form" 
-            :permission="permissionList" 
-            @row-update="rowUpdate" 
-            @row-save="rowSave"
-            :before-open="beforeOpen" 
-            @search-change="searchChange" 
-            @search-reset="searchReset"
-            @selection-change="selectionChange" 
-            @current-change="currentChange" 
-            @size-change="sizeChange"
-            @refresh-change="refreshChange" 
-            @on-load="onLoad">
-            
+
+        <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" ref="crud"
+            @row-del="rowDel" v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave"
+            :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset"
+            @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+            @refresh-change="refreshChange" @on-load="onLoad">
+
             <!-- 自定义证书地址列 -->
             <template #url="scope">
-                <el-link 
-                    :href="scope.row.url" 
-                    target="_blank" 
-                    type="primary">
+                <el-link :href="scope.row.url" target="_blank" type="primary">
                     下载密钥
                 </el-link>
             </template>
@@ -34,7 +17,7 @@
             <!-- 自定义过期时间列 -->
             <template #expireDay="scope">
                 <span :style="{ color: isExpired(scope.row.expireDay) ? 'red' : 'inherit' }">
-                    {{ formatExpireDay(scope.row.expireDay,scope.row.licenseType) }}
+                    {{ formatExpireDay(scope.row.expireDay, scope.row.licenseType) }}
                 </span>
             </template>
 
@@ -52,21 +35,16 @@
                 </span>
             </template>
             <template #menu-left>
-            <el-button type="primary" icon="el-icon-plus"
-              @click="createLicenseShow()">新 增
-            </el-button>
+                <el-button type="primary" icon="el-icon-plus" @click="createLicenseShow()">新 增
+                </el-button>
             </template>
         </avue-crud>
 
         <!-- 新增弹窗 -->
-        <el-dialog title="新增 License" 
-      v-model="addDialogVisible"
-      width="70%"
-      :close-on-click-modal="false"
-      @close="resetForm"
-    >
+        <el-dialog title="新增 License" v-model="addDialogVisible" width="70%" :close-on-click-modal="false"
+            @close="resetForm">
             <el-form :model="newLicense" ref="licenseForm" label-width="120px">
-                <el-form-item label="机构ID" prop="licenseId" >
+                <el-form-item label="机构ID" prop="licenseId">
                     <el-input v-model="newLicense.licenseId" />
                 </el-form-item>
                 <el-form-item label="机构名称" prop="licenseName" required>
@@ -78,7 +56,7 @@
                         <el-option label="验证过期时间" :value="2" />
                     </el-select>
                 </el-form-item>
-                <el-form-item v-if="newLicense.licenseType==2" label="过期时间" prop="expireDay">
+                <el-form-item v-if="newLicense.licenseType == 2" label="过期时间" prop="expireDay">
                     <el-date-picker v-model="newLicense.expireDay" type="date" placeholder="选择日期" />
                 </el-form-item>
                 <el-form-item label="设备数量" prop="printClientCount">
@@ -86,13 +64,8 @@
                         <el-radio :label="-1">不限制</el-radio>
                         <el-radio :label="1">限制</el-radio>
                     </el-radio-group>
-                    <el-input-number
-                        v-if="deviceLimit === 1"
-                        v-model="newLicense.printClientCount"
-                        :min="0"
-                        placeholder="请输入数量"
-                        style="margin-top: 10px;"
-                    />
+                    <el-input-number v-if="deviceLimit === 1" v-model="newLicense.printClientCount" :min="0"
+                        placeholder="请输入数量" style="margin-top: 10px;" />
                 </el-form-item>
                 <el-form-item label="是否校验机器码" prop="checkMachineCode">
                     <el-switch v-model="newLicense.checkMachineCode" />
@@ -106,21 +79,21 @@
             </el-form>
             <template #footer>
                 <div class="dialog-footer">
-                <el-button @click="addDialogVisible = false">取消</el-button>
-                <el-button type="primary" @click="createLicense">保存</el-button>
+                    <el-button @click="addDialogVisible = false">取消</el-button>
+                    <el-button type="primary" @click="createLicense">保存</el-button>
                 </div>
             </template>
-            
+
         </el-dialog>
     </basic-container>
 </template>
 
 <script>
-import { getList, add } from '@/api/license/license';
-import { mapGetters } from 'vuex';
+import { getList, add } from '@/api/license/license'
+import { mapGetters } from 'vuex'
 
 export default {
-    data() {
+    data () {
         return {
             loading: true,
             page: {
@@ -153,10 +126,14 @@
                 viewBtn: true,
                 selection: false,
                 excelBtn: false,
-              addBtnText: '新建license',
-                 addBtn: true,
+                addBtnText: '新建license',
+                addBtn: true,
                 dialogClickModal: false,
                 grid: false,
+
+                height: 'auto',
+                calcHeight: 20,
+
                 column: [
                     {
                         label: '机构ID',
@@ -289,89 +266,88 @@
                 ],
             },
             data: [],
-        };
+        }
     },
     computed: {
         ...mapGetters(['userInfo', 'permission']),
-        permissionList() {
+        permissionList () {
             return {
                 addBtn: this.validData(this.permission.license_add, false),
                 viewBtn: this.validData(this.permission.license_view, true),
                 delBtn: this.validData(this.permission.license_delete, false),
                 editBtn: this.validData(this.permission.license_edit, false),
-            };
+            }
         },
     },
     methods: {
-        isExpired(expireDay) {
-            const now = new Date();
-            return new Date(expireDay) < now;
+        isExpired (expireDay) {
+            const now = new Date()
+            return new Date(expireDay) < now
         },
-        formatExpireDay(expireDay,licenseType) {
-            if (licenseType==2&& this.isExpired(expireDay)) {
-                return `${expireDay} (已过期)`;
+        formatExpireDay (expireDay, licenseType) {
+            if (licenseType == 2 && this.isExpired(expireDay)) {
+                return `${expireDay} (已过期)`
             }
-            if(licenseType==1){
-                return `永久`;
+            if (licenseType == 1) {
+                return `永久`
             }
-            return expireDay;
+            return expireDay
         },
-        rowSave(row, done, loading) {
+        rowSave (row, done, loading) {
             add(row).then(
                 () => {
-                    this.onLoad(this.page);
+                    this.onLoad(this.page)
                     this.$message({
                         type: 'success',
                         message: '操作成功!',
-                    });
-                    done();
+                    })
+                    done()
                 },
                 error => {
-                    console.error(error);
-                    loading();
+                    console.error(error)
+                    loading()
                 }
-            );
+            )
         },
-        createLicenseShow(){
-                    this.addDialogVisible = true; 
+        createLicenseShow () {
+            this.addDialogVisible = true
         },
-        createLicense() {
+        createLicense () {
             // 格式化过期时间
             if (this.newLicense.expireDay) {
-                this.newLicense.expireDay = this.formatDate(this.newLicense.expireDay);
-                console.log(this.newLicense.expireDay);
-          
-          }
+                this.newLicense.expireDay = this.formatDate(this.newLicense.expireDay)
+                console.log(this.newLicense.expireDay)
+
+            }
 
             // 保存数据
             add(this.newLicense).then(() => {
-                this.$message.success('新增成功');
-                this.addDialogVisible = false;
-                this.onLoad(this.page);
+                this.$message.success('新增成功')
+                this.addDialogVisible = false
+                this.onLoad(this.page)
             }).catch(error => {
-                console.error(error);
-                this.$message.error('新增失败');
-            });
+                console.error(error)
+                this.$message.error('新增失败')
+            })
         },
-        formatDate(date) {
-            const d = new Date(date);
-            const year = d.getFullYear();
-            const month = String(d.getMonth() + 1).padStart(2, '0');
-            const day = String(d.getDate()).padStart(2, '0');
-            return `${year}-${month}-${day}`;
+        formatDate (date) {
+            const d = new Date(date)
+            const year = d.getFullYear()
+            const month = String(d.getMonth() + 1).padStart(2, '0')
+            const day = String(d.getDate()).padStart(2, '0')
+            return `${year}-${month}-${day}`
         },
-        onLoad(page, params = {}) {
-            this.loading = true;
+        onLoad (page, params = {}) {
+            this.loading = true
             getList(page.currentPage, page.pageSize, params).then(res => {
-                const data = res.data.data;
-                this.page.total = data.total;
-                this.data = data.records;
-                this.loading = false;
-            });
+                const data = res.data.data
+                this.page.total = data.total
+                this.data = data.records
+                this.loading = false
+            })
         },
     },
-};
+}
 </script>
 
-<style lang="scss" scoped>
-</style>
+<style lang="scss" scoped></style>
diff --git a/src/views/monitor/log/api.vue b/src/views/monitor/log/api.vue
index 5e74765..159ec99 100644
--- a/src/views/monitor/log/api.vue
+++ b/src/views/monitor/log/api.vue
@@ -1,31 +1,19 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      ref="crud"
-      v-model="form"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      v-model:page="page"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
+      :permission="permissionList" :before-open="beforeOpen" v-model:page="page" @search-change="searchChange"
+      @search-reset="searchReset" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad">
     </avue-crud>
   </basic-container>
 </template>
 
 <script>
-import { getApiList, getApiLogs } from '@/api/logs';
-import { mapGetters } from 'vuex';
+import { getApiList, getApiLogs } from '@/api/logs'
+import { mapGetters } from 'vuex'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       selectionList: [],
@@ -50,6 +38,10 @@
         delBtn: false,
         menuWidth: 120,
         dialogType: 'drawer',
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '操作名称',
@@ -120,14 +112,14 @@
             label: '操作时间',
             prop: 'daterange',
             type: 'daterange',
-            search:true,
+            search: true,
             searchRange: true,
-            searchSpan:6,
+            searchSpan: 6,
             format: 'YYYY-MM-DD',
             valueFormat: 'YYYY-MM-DD',
             startPlaceholder: '开始时间',
             endPlaceholder: '结束时间',
-            viewDisplay:false,
+            viewDisplay: false,
             hide: true,
             rules: [
               {
@@ -145,78 +137,69 @@
         ],
       },
       data: [],
-    };
+    }
   },
 
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         viewBtn: this.validData(this.permission.log_api_view, false),
-      };
+      }
     },
   },
   methods: {
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getApiLogs(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      const { daterange } = this.query;
+    onLoad (page, params = {}) {
+      const { daterange } = this.query
       let values = {
         ...params,
         ...this.query,
-      };
+      }
       if (daterange) {
         values = {
           ...values,
           startTime: daterange[0],
           endTime: daterange[1],
-        };
-        values.daterange = null;
+        }
+        values.daterange = null
       }
-      this.loading = true;
+      this.loading = true
       getApiList(page.currentPage, page.pageSize, values).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+      })
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/monitor/log/error.vue b/src/views/monitor/log/error.vue
index 6bfa8da..724eafb 100644
--- a/src/views/monitor/log/error.vue
+++ b/src/views/monitor/log/error.vue
@@ -1,31 +1,19 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      ref="crud"
-      :before-open="beforeOpen"
-      v-model="form"
-      :permission="permissionList"
-      v-model:page="page"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" :before-open="beforeOpen"
+      v-model="form" :permission="permissionList" v-model:page="page" @search-change="searchChange"
+      @search-reset="searchReset" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad">
     </avue-crud>
   </basic-container>
 </template>
 
 <script>
-import { getErrorList, getErrorLogs } from '@/api/logs';
-import { mapGetters } from 'vuex';
+import { getErrorList, getErrorLogs } from '@/api/logs'
+import { mapGetters } from 'vuex'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       selectionList: [],
@@ -37,8 +25,6 @@
         total: 0,
       },
       option: {
-        // height: 'auto',
-        // calcHeight: 32,
         tip: false,
         searchShow: true,
         searchMenuSpan: 6,
@@ -50,12 +36,16 @@
         delBtn: false,
         menuWidth: 120,
         dialogType: 'drawer',
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '服务名称',
             prop: 'serviceId',
             search: true,
-            searchSpan:4,
+            searchSpan: 4,
             width: '120',
           },
 
@@ -82,13 +72,13 @@
             label: '请求接口',
             prop: 'requestUri',
             search: true,
-            searchSpan:6,
+            searchSpan: 6,
           },
           {
             label: '操作人',
             prop: 'createBy',
             search: true,
-            searchSpan:4,
+            searchSpan: 4,
             width: '120',
           },
           {
@@ -121,68 +111,59 @@
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         viewBtn: this.validData(this.permission.log_error_view, false),
-      };
+      }
     },
   },
   methods: {
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getErrorLogs(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
+    onLoad (page, params = {}) {
       let values = {
         ...params,
         ...this.query,
-      };
-      this.loading = true;
+      }
+      this.loading = true
       getErrorList(page.currentPage, page.pageSize, values).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+      })
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/odm/task.vue b/src/views/odm/task.vue
index f979c9e..63e57f4 100644
--- a/src/views/odm/task.vue
+++ b/src/views/odm/task.vue
@@ -1,25 +1,9 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      v-model:page="page"
-      ref="crud"
-      @row-del="rowDel"
-      v-model="form"
-      :permission="permissionList"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      :before-open="beforeOpen"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" ref="crud" @row-del="rowDel"
+      v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
       <template #menu-left>
         <!-- <el-button
           type="danger"
@@ -37,21 +21,13 @@
         {{ formatSeconds(row.processingTime) }}
       </template>
       <template #menu="scope">
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-guide"
+        <el-button type="primary" text icon="el-icon-guide"
           v-if="permission.odm_task_handle && scope.row.taskId == null"
-          @click.stop="atHandle(scope.row, scope.index)"
-          >立即启动
+          @click.stop="atHandle(scope.row, scope.index)">立即启动
         </el-button>
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-refresh-right"
+        <el-button type="primary" text icon="el-icon-refresh-right"
           v-if="(permission.odm_task_handle && scope.row.status == 30) || scope.row.status == 50"
-          @click.stop="restartHandle(scope.row, scope.index)"
-          >重新启动
+          @click.stop="restartHandle(scope.row, scope.index)">重新启动
         </el-button>
       </template>
     </avue-crud>
@@ -59,12 +35,12 @@
 </template>
 
 <script>
-import { getList, remove, update, add, createOdmTask, restartOdmTask } from '@/api/odm/task';
-import { tourStrategies } from 'element-plus';
-import { mapGetters } from 'vuex';
+import { getList, remove, update, add, createOdmTask, restartOdmTask } from '@/api/odm/task'
+import { tourStrategies } from 'element-plus'
+import { mapGetters } from 'vuex'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -90,14 +66,18 @@
         dialogClickModal: false,
         grid: false,
         menuWidth: 260,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '任务名称',
             prop: 'taskName',
             search: true,
-            searchSpan:4,
+            searchSpan: 4,
             labelWidth: 130,
-            searchPlaceholder:"任务名称",
+            searchPlaceholder: "任务名称",
             rules: [
               {
                 required: true,
@@ -137,7 +117,7 @@
             prop: 'waylineJobId',
             addDisplay: false,
             editDisplay: false,
-            hide:true,
+            hide: true,
             labelWidth: 130,
             width: 160,
           },
@@ -149,7 +129,7 @@
             searchSpan: 3,
             width: 100,
             labelWidth: 130,
-            searchPlaceholder:"任务类型",
+            searchPlaceholder: "任务类型",
             dicData: [
               {
                 label: '航测',
@@ -193,7 +173,7 @@
             search: true,
             searchSpan: 3,
             labelWidth: 130,
-            searchPlaceholder:"任务状态",
+            searchPlaceholder: "任务状态",
             width: 90,
             dicData: [
               {
@@ -237,178 +217,178 @@
           {
             label: '飞行任务完成时间',
             prop: 'completedTime',
-            type:"date",
+            type: "date",
             addDisplay: false,
             editDisplay: false,
-            searchPlaceholder:"任务完成时间",
+            searchPlaceholder: "任务完成时间",
             labelWidth: 130,
-            search:true,
-            searchSpan:4,
-            searchLabelWidth:130,
+            search: true,
+            searchSpan: 4,
+            searchLabelWidth: 130,
             valueFormat: 'YYYY-MM-DD',
             width: 160,
           },
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         viewBtn: this.validData(this.permission.odm_task_view, true),
         delBtn: this.validData(this.permission.odm_task_delete, true),
         // editBtn: this.validData(this.permission.workspace_edit, true),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
     // 立即处理
-    atHandle(row) {
-      createOdmTask(row.waylineJobId,row.gsd).then(
+    atHandle (row) {
+      createOdmTask(row.waylineJobId, row.gsd).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
     // 重启启动
-    restartHandle(row) {
+    restartHandle (row) {
       if (!row.taskName) {
         this.$message({
           type: 'error',
           message: '该航线任务已删除,无法进行重启启动!',
-        });
-        return;
+        })
+        return
       }
       restartOdmTask(row.taskId).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
     // 时间格式化
-    formatSeconds(value) {
+    formatSeconds (value) {
       // 如果value不是数字或者小于0,则直接返回'00:00:00'
       if (isNaN(value) || value < 0) {
-        return '00:00:00';
+        return '00:00:00'
       }
 
       // 计算小时、分钟和秒
-      let seconds = Math.floor(value / 1000);
-      let minutes = Math.floor(seconds / 60);
-      let hours = Math.floor(minutes / 60);
+      let seconds = Math.floor(value / 1000)
+      let minutes = Math.floor(seconds / 60)
+      let hours = Math.floor(minutes / 60)
 
       // 格式化为两位数字的字符串
-      seconds %= 60;
-      minutes %= 60;
+      seconds %= 60
+      minutes %= 60
 
       const formattedTime = `${this.padZero(hours)}:${this.padZero(minutes)}:${this.padZero(
         seconds
-      )}`;
+      )}`
 
       // 返回格式化后的时间字符串
-      return formattedTime;
+      return formattedTime
     },
     // 函数用于在数字不足两位数时,在前面补零
-    padZero(value) {
-      return String(value).padStart(2, '0');
+    padZero (value) {
+      return String(value).padStart(2, '0')
     },
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -416,68 +396,59 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       // if (['edit', 'view'].includes(type)) {
       //   getDetail(this.form.id).then(res => {
       //     this.form = res.data.data;
       //   });
       // }
-      done();
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      const { releaseTimeRange } = this.query;
+    onLoad (page, params = {}) {
+      const { releaseTimeRange } = this.query
       let values = {
         ...params,
         ...this.query,
-      };
+      }
       if (releaseTimeRange) {
         values = {
           ...values,
           releaseTime_datege: releaseTimeRange[0],
           releaseTime_datelt: releaseTimeRange[1],
-        };
-        values.releaseTimeRange = null;
+        }
+        values.releaseTimeRange = null
       }
-      this.loading = true;
+      this.loading = true
       getList(page.currentPage, page.pageSize, values).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/resource/attach.vue b/src/views/resource/attach.vue
index 3b1ed06..29bebe0 100644
--- a/src/views/resource/attach.vue
+++ b/src/views/resource/attach.vue
@@ -1,49 +1,18 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      v-model:page="page"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      v-model="form"
-      ref="crud"
-      @row-del="rowDel"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" :permission="permissionList"
+      :before-open="beforeOpen" v-model="form" ref="crud" @row-del="rowDel" @search-change="searchChange"
+      @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
+      @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
       <template #menu-left>
-        <el-button
-          type="primary"
-          plain
-          v-if="permission.attach_upload"
-          icon="el-icon-upload"
-          @click="handleUpload"
-          >上 传
+        <el-button type="primary" plain v-if="permission.attach_upload" icon="el-icon-upload" @click="handleUpload">上 传
         </el-button>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          plain
-          v-if="permission.attach_delete"
-          @click="handleDelete"
-          >删 除
+        <el-button type="danger" icon="el-icon-delete" plain v-if="permission.attach_delete" @click="handleDelete">删 除
         </el-button>
       </template>
       <template #menu="scope">
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-download"
-          v-if="permission.attach_download"
-          @click="handleDownload(scope.row)"
-          >下载
+        <el-button type="primary" text icon="el-icon-download" v-if="permission.attach_download"
+          @click="handleDownload(scope.row)">下载
         </el-button>
       </template>
       <template #attachSize="{ row }">
@@ -58,12 +27,12 @@
 </template>
 
 <script>
-import { getList, getDetail, removeAttachAndData } from '@/api/resource/attach';
-import { mapGetters } from 'vuex';
-import func from '@/utils/func';
+import { getList, getDetail, removeAttachAndData } from '@/api/resource/attach'
+import { mapGetters } from 'vuex'
+import func from '@/utils/func'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -85,6 +54,9 @@
         // grid: true,
         selection: true,
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
         column: [
           {
             label: '附件地址',
@@ -112,7 +84,7 @@
             label: '附件名称',
             prop: 'name',
             search: true,
-            searchSpan:4,
+            searchSpan: 4,
             rules: [
               {
                 required: true,
@@ -125,7 +97,7 @@
             label: '附件原名',
             prop: 'originalName',
             search: true,
-            searchSpan:4,
+            searchSpan: 4,
             rules: [
               {
                 required: true,
@@ -138,8 +110,8 @@
             label: '附件拓展名',
             prop: 'extension',
             search: true,
-            searchSpan:4,
-            searchLabelWidth:95,
+            searchSpan: 4,
+            searchLabelWidth: 95,
             rules: [
               {
                 required: true,
@@ -168,14 +140,14 @@
             label: '创建日期',
             prop: 'daterange',
             type: 'daterange',
-            search:true,
+            search: true,
             searchRange: true,
-            searchSpan:6,
+            searchSpan: 6,
             format: 'YYYY-MM-DD',
             valueFormat: 'YYYY-MM-DD',
             startPlaceholder: '开始时间',
             endPlaceholder: '结束时间',
-            viewDisplay:false,
+            viewDisplay: false,
             hide: true,
             rules: [
               {
@@ -207,63 +179,63 @@
           },
         ],
       },
-    };
+    }
   },
   computed: {
-    func() {
-      return func;
+    func () {
+      return func
     },
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: false,
         editBtn: false,
         viewBtn: false,
         delBtn: this.validData(this.permission.attach_delete, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    handleUpload() {
-      this.attachBox = true;
+    handleUpload () {
+      this.attachBox = true
     },
-    uploadAfter(res, done, loading, column) {
-      window.console.log(column);
-      this.attachBox = false;
-      this.refreshChange();
-      done();
+    uploadAfter (res, done, loading, column) {
+      window.console.log(column)
+      this.attachBox = false
+      this.refreshChange()
+      done()
     },
-    handleDownload(row) {
-      window.open(`${row.link}`);
+    handleDownload (row) {
+      window.open(`${row.link}`)
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据及对应的文件删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return removeAttachAndData(row.id);
+          return removeAttachAndData(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据及对应的文件删除?', {
         confirmButtonText: '确定',
@@ -271,85 +243,76 @@
         type: 'warning',
       })
         .then(() => {
-          return removeAttachAndData(this.ids);
+          return removeAttachAndData(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      const { daterange } = this.query;
+    onLoad (page, params = {}) {
+      const { daterange } = this.query
       let values = {
         ...params,
         ...this.query,
-      };
+      }
       if (daterange) {
         values = {
           ...values,
           startTime: daterange[0],
           endTime: daterange[1],
-        };
-        values.daterange = null;
+        }
+        values.daterange = null
       }
-      this.loading = true;
+      this.loading = true
       getList(page.currentPage, page.pageSize, values).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/resource/media.vue b/src/views/resource/media.vue
index 69faecc..52aade7 100644
--- a/src/views/resource/media.vue
+++ b/src/views/resource/media.vue
@@ -28,19 +28,19 @@
 </template>
 
 <script>
-import JSZip from 'jszip';
-import { getMedia, deleteAllFile } from '@/api/resource/media';
-import { getAirportList } from '@/api/device/device';
-import { mapGetters } from 'vuex';
-import func from '@/utils/func';
+import JSZip from 'jszip'
+import { getMedia, deleteAllFile } from '@/api/resource/media'
+import { getAirportList } from '@/api/device/device'
+import { mapGetters } from 'vuex'
+import func from '@/utils/func'
 
 export default {
-  data() {
-    const endDate = new Date();
-    const startDate = new Date();
-    startDate.setMonth(startDate.getMonth() - 1);
-    const defaultStartDate = `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`;
-    const defaultEndDate = `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`;
+  data () {
+    const endDate = new Date()
+    const startDate = new Date()
+    startDate.setMonth(startDate.getMonth() - 1)
+    const defaultStartDate = `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`
+    const defaultEndDate = `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`
 
     return {
       form: {},
@@ -66,6 +66,9 @@
         selection: true,
         dialogClickModal: false,
         delBtn: false,
+
+        height: 'auto',
+        calcHeight: 20,
         column: [
           { label: '机场选择', prop: 'airportNickname', type: 'select', search: true, searchSpan: 5, dicData: [], props: { label: 'nickname', value: 'nickname' }, hide: true },
           { label: '创建日期', prop: 'daterange', type: 'daterange', search: true, searchRange: true, searchSpan: 6, format: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD', startPlaceholder: '开始时间', endPlaceholder: '结束时间', viewDisplay: false, hide: true, searchValue: [defaultStartDate, defaultEndDate] },
@@ -87,152 +90,152 @@
       },
       domainUrl: '',
       isDownloading: false, // 控制按钮加载状态
-    };
+    }
   },
   computed: {
-    func() { return func; },
+    func () { return func },
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: false,
         editBtn: false,
         viewBtn: this.validData(this.permission.attach_view, false),
         delBtn: this.validData(this.permission.attach_delete, false),
-      };
+      }
     },
-    ids() { return this.selectionList.map(ele => ele.id).join(','); },
+    ids () { return this.selectionList.map(ele => ele.id).join(',') },
   },
-  mounted() {
-    this.loadAirportList();
-    this.$refs.crud.setSearch({ daterange: this.query.daterange });
-    this.onLoad(this.page, this.query);
+  mounted () {
+    this.loadAirportList()
+    this.$refs.crud.setSearch({ daterange: this.query.daterange })
+    this.onLoad(this.page, this.query)
   },
   methods: {
-    loadAirportList() {
+    loadAirportList () {
       getAirportList().then(res => {
-        const airportData = res.data.data || [];
-        const airportColumn = this.option.column.find(col => col.prop === 'airportNickname');
+        const airportData = res.data.data || []
+        const airportColumn = this.option.column.find(col => col.prop === 'airportNickname')
         if (airportColumn) {
           airportColumn.dicData = airportData.map(item => ({
             nickname: item.nickname,
             workspace_id: item.workspace_id,
-          }));
+          }))
         }
       }).catch(error => {
-        console.error('加载机场列表时出错:', error);
-      });
+        console.error('加载机场列表时出错:', error)
+      })
     },
-    handleUpload() {
-      this.taskBox = true;
+    handleUpload () {
+      this.taskBox = true
     },
-    uploadAfter(res, done) {
-      this.taskBox = false;
-      this.refreshChange();
-      done();
+    uploadAfter (res, done) {
+      this.taskBox = false
+      this.refreshChange()
+      done()
     },
-    async handleRowDownload(row) {
-      const mediaUrl = this.domainUrl + row.object_key;
+    async handleRowDownload (row) {
+      const mediaUrl = this.domainUrl + row.object_key
       try {
-        const response = await fetch(mediaUrl);
-        if (!response.ok) throw new Error('文件下载失败');
-        const blob = await response.blob();
-        const url = window.URL.createObjectURL(blob);
-        const link = document.createElement('a');
-        link.href = url;
-        link.download = row.file_name || 'download';
-        document.body.appendChild(link);
-        link.click();
-        document.body.removeChild(link);
-        window.URL.revokeObjectURL(url);
-        this.$message({ type: 'success', message: '文件下载成功: ' + row.file_name });
+        const response = await fetch(mediaUrl)
+        if (!response.ok) throw new Error('文件下载失败')
+        const blob = await response.blob()
+        const url = window.URL.createObjectURL(blob)
+        const link = document.createElement('a')
+        link.href = url
+        link.download = row.file_name || 'download'
+        document.body.appendChild(link)
+        link.click()
+        document.body.removeChild(link)
+        window.URL.revokeObjectURL(url)
+        this.$message({ type: 'success', message: '文件下载成功: ' + row.file_name })
       } catch (error) {
-        console.error('下载文件时出错:', error);
-        this.$message({ type: 'error', message: '下载失败: ' + error.message });
+        console.error('下载文件时出错:', error)
+        this.$message({ type: 'error', message: '下载失败: ' + error.message })
       }
     },
-    handleRowDelete(row) {
+    handleRowDelete (row) {
       this.$confirm('确定删除此文件?', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' })
         .then(() => deleteAllFile(row.id))
         .then(() => {
-          this.onLoad(this.page);
-          this.$message({ type: 'success', message: '删除成功!' });
+          this.onLoad(this.page)
+          this.$message({ type: 'success', message: '删除成功!' })
         })
         .catch(error => {
-          console.error('删除文件时出错:', error);
-          this.$message({ type: 'error', message: '删除失败,请稍后重试!' });
-        });
+          console.error('删除文件时出错:', error)
+          this.$message({ type: 'error', message: '删除失败,请稍后重试!' })
+        })
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据及对应的文件删除?', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' })
         .then(() => deleteAllFile(row.id))
         .then(() => {
-          this.onLoad(this.page);
-          this.$message({ type: 'success', message: '操作成功!' });
-        });
+          this.onLoad(this.page)
+          this.$message({ type: 'success', message: '操作成功!' })
+        })
     },
-    searchReset() {
-      const endDate = new Date();
-      const startDate = new Date();
-      startDate.setMonth(startDate.getMonth() - 1);
-      const defaultStartDate = `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`;
-      const defaultEndDate = `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`;
-      this.query = { daterange: [defaultStartDate, defaultEndDate] };
-      this.selectedWorkspaceId = null;
-      this.$refs.crud.setSearch({ daterange: this.query.daterange });
-      this.onLoad(this.page, this.query);
+    searchReset () {
+      const endDate = new Date()
+      const startDate = new Date()
+      startDate.setMonth(startDate.getMonth() - 1)
+      const defaultStartDate = `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`
+      const defaultEndDate = `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`
+      this.query = { daterange: [defaultStartDate, defaultEndDate] }
+      this.selectedWorkspaceId = null
+      this.$refs.crud.setSearch({ daterange: this.query.daterange })
+      this.onLoad(this.page, this.query)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      const airportColumn = this.option.column.find(col => col.prop === 'airportNickname');
-      const selectedAirport = airportColumn.dicData.find(item => item.nickname === params.airportNickname);
-      this.selectedWorkspaceId = selectedAirport ? selectedAirport.workspace_id : null;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      const airportColumn = this.option.column.find(col => col.prop === 'airportNickname')
+      const selectedAirport = airportColumn.dicData.find(item => item.nickname === params.airportNickname)
+      this.selectedWorkspaceId = selectedAirport ? selectedAirport.workspace_id : null
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
-      this.onLoad(this.page, this.query);
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
+      this.onLoad(this.page, this.query)
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
-      this.onLoad(this.page, this.query);
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
+      this.onLoad(this.page, this.query)
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
-      const { daterange } = params;
-      let create_time = null;
-      let end_time = null;
+    onLoad (page, params = {}) {
+      this.loading = true
+      const { daterange } = params
+      let create_time = null
+      let end_time = null
 
       if (daterange && Array.isArray(daterange) && daterange.length === 2) {
-        const startStr = daterange[0];
-        const endStr = daterange[1];
-        const startDate = new Date(startStr + ' 00:00:00').getTime();
-        const endDate = new Date(endStr + ' 23:59:59').getTime();
+        const startStr = daterange[0]
+        const endStr = daterange[1]
+        const startDate = new Date(startStr + ' 00:00:00').getTime()
+        const endDate = new Date(endStr + ' 23:59:59').getTime()
         if (!isNaN(startDate) && !isNaN(endDate)) {
-          create_time = startDate;
-          end_time = endDate;
+          create_time = startDate
+          end_time = endDate
         }
       }
 
-      let values = { ...params, ...this.query };
-      if (daterange) values.daterange = null;
+      let values = { ...params, ...this.query }
+      if (daterange) values.daterange = null
 
       getMedia(page.currentPage, page.pageSize, this.selectedWorkspaceId || null, create_time, end_time)
         .then(res => {
-          const data = res.data;
+          const data = res.data
           if (data && data.data && data.data.list) {
-            this.page.total = data.data.pagination.total;
+            this.page.total = data.data.pagination.total
             this.data = data.data.list.map(item => ({
               job_name: item.job_name,
               file_name: item.file_name,
@@ -241,118 +244,109 @@
               payload: item.payload,
               airportNickname: item.airportNickname,
               id: item.id,
-            }));
-            this.domainUrl = data.data.list.length > 0 ? data.data.list[0].domain_url : 'http://localhost:2888/manage/resource';
+            }))
+            this.domainUrl = data.data.list.length > 0 ? data.data.list[0].domain_url : 'http://localhost:2888/manage/resource'
           } else {
-            this.data = [];
+            this.data = []
           }
-          this.loading = false;
-          this.selectionClear();
-          this.$refs.crud.refreshTable();
+          this.loading = false
+          this.selectionClear()
+          this.$refs.crud.refreshTable()
         })
         .catch(error => {
-          this.loading = false;
-          console.error('加载媒体数据时出错:', error);
-        });
+          this.loading = false
+          console.error('加载媒体数据时出错:', error)
+        })
     },
-    formatCreateTime(createTime) {
-      if (typeof createTime !== 'number' || isNaN(createTime)) return '';
-      const timestamp = createTime < 10000000000 ? createTime * 1000 : createTime;
-      const date = new Date(timestamp);
-      if (isNaN(date.getTime())) return '';
-      const year = date.getFullYear();
-      const month = String(date.getMonth() + 1).padStart(2, '0');
-      const day = String(date.getDate()).padStart(2, '0');
-      const hours = String(date.getHours()).padStart(2, '0');
-      const minutes = String(date.getMinutes()).padStart(2, '0');
-      const seconds = String(date.getSeconds()).padStart(2, '0');
-      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+    formatCreateTime (createTime) {
+      if (typeof createTime !== 'number' || isNaN(createTime)) return ''
+      const timestamp = createTime < 10000000000 ? createTime * 1000 : createTime
+      const date = new Date(timestamp)
+      if (isNaN(date.getTime())) return ''
+      const year = date.getFullYear()
+      const month = String(date.getMonth() + 1).padStart(2, '0')
+      const day = String(date.getDate()).padStart(2, '0')
+      const hours = String(date.getHours()).padStart(2, '0')
+      const minutes = String(date.getMinutes()).padStart(2, '0')
+      const seconds = String(date.getSeconds()).padStart(2, '0')
+      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
     },
-    handleRowView(row) {
-      const mediaUrl = this.domainUrl + row.object_key;
-      const mediaType = this.getMediaType(row.object_key);
+    handleRowView (row) {
+      const mediaUrl = this.domainUrl + row.object_key
+      const mediaType = this.getMediaType(row.object_key)
       if (mediaType === 'image' || mediaType === 'video') {
-        window.open(mediaUrl, '_blank');
+        window.open(mediaUrl, '_blank')
       }
     },
-    getMediaType(objectKey) {
-      const extension = objectKey.split('.').pop().toLowerCase();
-      if (['jpg', 'jpeg', 'png', 'gif'].includes(extension)) return 'image';
-      if (['mp4', 'avi', 'mov'].includes(extension)) return 'video';
-      return 'unknown';
+    getMediaType (objectKey) {
+      const extension = objectKey.split('.').pop().toLowerCase()
+      if (['jpg', 'jpeg', 'png', 'gif'].includes(extension)) return 'image'
+      if (['mp4', 'avi', 'mov'].includes(extension)) return 'video'
+      return 'unknown'
     },
-    showVideo(url) {
-      this.taskBox = true;
-      this.taskForm = { videoUrl: url };
+    showVideo (url) {
+      this.taskBox = true
+      this.taskForm = { videoUrl: url }
       this.taskOption = {
         submitBtn: false,
         emptyBtn: false,
         column: [
           { label: '视频播放', prop: 'videoUrl', type: 'video', span: 24, props: { controls: true, autoplay: false } },
         ],
-      };
+      }
     },
-    validData(val, def) {
-      return typeof val !== 'undefined' ? val : def;
+    validData (val, def) {
+      return typeof val !== 'undefined' ? val : def
     },
-    async handleZipDownload() {
+    async handleZipDownload () {
       if (this.selectionList.length === 0) {
-        this.$message({ type: 'warning', message: '请先选择需要下载的文件' });
-        return;
+        this.$message({ type: 'warning', message: '请先选择需要下载的文件' })
+        return
       }
 
-      this.isDownloading = true;
+      this.isDownloading = true
 
       try {
-        const zip = new JSZip();
+        const zip = new JSZip()
         const files = this.selectionList.map(item => ({
           url: this.domainUrl + item.object_key,
           name: item.file_name
-        }));
+        }))
 
         const fetchPromises = files.map(async file => {
-          const response = await fetch(file.url, { cache: 'force-cache' });
-          if (!response.ok) throw new Error(`下载文件 ${file.name} 失败`);
-          const blob = await response.blob();
-          zip.file(file.name, blob);
-        });
+          const response = await fetch(file.url, { cache: 'force-cache' })
+          if (!response.ok) throw new Error(`下载文件 ${file.name} 失败`)
+          const blob = await response.blob()
+          zip.file(file.name, blob)
+        })
 
-        await Promise.all(fetchPromises);
+        await Promise.all(fetchPromises)
 
         const content = await zip.generateAsync({
           type: 'blob',
           compression: 'DEFLATE',
           compressionOptions: { level: 1 }
-        });
+        })
 
-        const url = window.URL.createObjectURL(content);
-        const link = document.createElement('a');
-        link.href = url;
-        link.download = `media_files_${new Date().toISOString().slice(0, 10)}_${new Date().getTime()}.zip`;
-        document.body.appendChild(link);
-        link.click();
-        document.body.removeChild(link);
-        window.URL.revokeObjectURL(url);
+        const url = window.URL.createObjectURL(content)
+        const link = document.createElement('a')
+        link.href = url
+        link.download = `media_files_${new Date().toISOString().slice(0, 10)}_${new Date().getTime()}.zip`
+        document.body.appendChild(link)
+        link.click()
+        document.body.removeChild(link)
+        window.URL.revokeObjectURL(url)
 
-        this.$message({ type: 'success', message: `成功下载 ${this.selectionList.length} 个文件` });
+        this.$message({ type: 'success', message: `成功下载 ${this.selectionList.length} 个文件` })
       } catch (error) {
-        console.error('压缩下载失败:', error);
-        this.$message({ type: 'error', message: '压缩下载失败: ' + error.message });
+        console.error('压缩下载失败:', error)
+        this.$message({ type: 'error', message: '压缩下载失败: ' + error.message })
       } finally {
-        this.isDownloading = false;
+        this.isDownloading = false
       }
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/resource/oss.vue b/src/views/resource/oss.vue
index a775b58..4e86013 100644
--- a/src/views/resource/oss.vue
+++ b/src/views/resource/oss.vue
@@ -1,59 +1,22 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      v-model:page="page"
-      :permission="permissionList"
-      v-model="form"
-      ref="crud"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @row-del="rowDel"
-      :before-open="beforeOpen"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" :permission="permissionList"
+      v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel" :before-open="beforeOpen"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
       <template #menu-left>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          plain
-          v-if="permission.oss_delete"
-          @click="handleDelete"
-          >删 除
+        <el-button type="danger" icon="el-icon-delete" plain v-if="permission.oss_delete" @click="handleDelete">删 除
         </el-button>
       </template>
       <template #menu="scope">
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-video-play"
-          v-if="userInfo.role_name.includes('admin')"
-          @click="handleDebug(scope.row)"
-          >调试
+        <el-button type="primary" text icon="el-icon-video-play" v-if="userInfo.role_name.includes('admin')"
+          @click="handleDebug(scope.row)">调试
         </el-button>
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-circle-check"
-          v-if="scope.row.status==1 && permission.oss_enable"
-          @click.stop="handleEnable(scope.row)"
-          >启用
+        <el-button type="primary" text icon="el-icon-circle-check" v-if="scope.row.status == 1 && permission.oss_enable"
+          @click.stop="handleEnable(scope.row)">启用
         </el-button>
-        <el-button
-          type="primary"
-          text
-          icon="VideoPause"
-          v-if="scope.row.status==2 && permission.oss_enable"
-          @click.stop="handleDisable(scope.row)"
-          >禁用
+        <el-button type="primary" text icon="VideoPause" v-if="scope.row.status == 2 && permission.oss_enable"
+          @click.stop="handleDisable(scope.row)">禁用
         </el-button>
       </template>
       <template #status="{ row }">
@@ -70,12 +33,12 @@
 </template>
 
 <script>
-import { getListPage, getDetail, add, update, remove, enable, disable } from '@/api/resource/oss';
-import { mapGetters } from 'vuex';
-import func from '@/utils/func';
+import { getListPage, getDetail, add, update, remove, enable, disable } from '@/api/resource/oss'
+import { mapGetters } from 'vuex'
+import func from '@/utils/func'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -100,6 +63,9 @@
         labelWidth: 100,
         dialogWidth: 880,
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
         column: [
           {
             label: '分类',
@@ -108,7 +74,7 @@
             span: 24,
             width: 120,
             searchLabelWidth: 50,
-            searchSpan:3,
+            searchSpan: 3,
             row: true,
             dicUrl: '/blade-system/dict/dictionary?code=oss',
             props: {
@@ -132,7 +98,7 @@
             prop: 'name',
             span: 24,
             search: true,
-            searchSpan:5,
+            searchSpan: 5,
             rules: [
               {
                 required: true,
@@ -148,7 +114,7 @@
             width: 120,
             searchLabelWidth: 100,
             search: true,
-            searchSpan:4,
+            searchSpan: 4,
             rules: [
               {
                 required: true,
@@ -194,7 +160,7 @@
             prop: 'accessKey',
             span: 24,
             search: true,
-            searchSpan:5,
+            searchSpan: 5,
             searchLabelWidth: 100,
             overHidden: true,
             rules: [
@@ -228,7 +194,7 @@
           {
             label: '过期时间',
             prop: 'expire',
-            type:"number",
+            type: "number",
             span: 24,
             hide: true,
             rules: [
@@ -299,162 +265,162 @@
           },
         ],
       },
-    };
+    }
   },
   watch: {
-    'form.category'() {
-      const category = func.toInt(this.form.category);
+    'form.category' () {
+      const category = func.toInt(this.form.category)
       this.$refs.crud.option.column.filter(item => {
         if (item.prop === 'appId') {
-          item.display = category === 4;
+          item.display = category === 4
         }
         // if (item.prop === 'region') {
         //   item.display = category === 4 || category === 5;
         // }
-      });
+      })
     },
-    'debugForm.code'() {
-      const column = this.findObject(this.debugOption.column, 'backgroundUrl');
-      column.action = `/blade-resource/oss/endpoint/put-file?code=${this.debugForm.code}`;
+    'debugForm.code' () {
+      const column = this.findObject(this.debugOption.column, 'backgroundUrl')
+      column.action = `/blade-resource/oss/endpoint/put-file?code=${this.debugForm.code}`
     },
   },
   computed: {
     ...mapGetters(['userInfo', 'permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.oss_add),
         viewBtn: this.validData(this.permission.oss_view),
         delBtn: this.validData(this.permission.oss_delete),
         editBtn: this.validData(this.permission.oss_edit),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleEnable(row) {
+    handleEnable (row) {
       this.$confirm('是否确定启用这条配置?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return enable(row.id);
+          return enable(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    handleDisable(row){
+    handleDisable (row) {
       this.$confirm('是否确定禁用用这条配置?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return disable(row.id);
+          return disable(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    handleDebug(row) {
-      this.box = true;
-      this.debugForm.code = row.ossCode;
-      this.debugForm.backgroundUrl = '';
+    handleDebug (row) {
+      this.box = true
+      this.debugForm.code = row.ossCode
+      this.debugForm.backgroundUrl = ''
     },
-    handleSubmit(form, done) {
+    handleSubmit (form, done) {
       this.$message({
         type: 'success',
         message: `获取到图片地址:[${form.backgroundUrl}]`,
-      });
-      done();
+      })
+      done()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -462,54 +428,45 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
       getListPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
\ No newline at end of file
+<style scoped lang="scss"></style>
\ No newline at end of file
diff --git a/src/views/resource/wayline.vue b/src/views/resource/wayline.vue
index ac0ebf4..57551c1 100644
--- a/src/views/resource/wayline.vue
+++ b/src/views/resource/wayline.vue
@@ -1,40 +1,29 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      v-model:page="page"
-      :permission="permissionList"
-      v-model="form"
-      ref="crud"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad">
+    <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" :permission="permissionList"
+      v-model="form" ref="crud" @search-change="searchChange" @search-reset="searchReset"
+      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad">
     </avue-crud>
   </basic-container>
 </template>
 
 <script>
-import { getJobsByUser } from '@/api/resource/wayline';
-import { getAirportList } from '@/api/device/device';
-import { mapGetters } from 'vuex';
-import func from '@/utils/func';
+import { getJobsByUser } from '@/api/resource/wayline'
+import { getAirportList } from '@/api/device/device'
+import { mapGetters } from 'vuex'
+import func from '@/utils/func'
 
 export default {
-  data() {
+  data () {
     // 计算默认的开始和结束日期
-    const endDate = new Date(); // 当前日期
-    const startDate = new Date(); // 一个月前的日期
-    startDate.setMonth(startDate.getMonth() - 1);
+    const endDate = new Date() // 当前日期
+    const startDate = new Date() // 一个月前的日期
+    startDate.setMonth(startDate.getMonth() - 1)
 
     // 格式化为 YYYY-MM-DD 字符串
-    const defaultStartDate = `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`;
-    const defaultEndDate = `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`;
+    const defaultStartDate = `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`
+    const defaultEndDate = `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`
 
     return {
       form: {},
@@ -59,6 +48,9 @@
         selection: true,
         dialogClickModal: false,
         menu: false, // 禁用默认操作列
+
+        height: 'auto',
+        calcHeight: 20,
         column: [
           {
             label: '机场选择',
@@ -115,131 +107,131 @@
             label: '错误原因',
             prop: 'reason',
             formatter: (row) => {
-              return [4, 5].includes(row.status) ? row.reason || '未知' : '';
+              return [4, 5].includes(row.status) ? row.reason || '未知' : ''
             },
           },
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: false,
         editBtn: false,
         viewBtn: this.validData(this.permission.attach_view, false),
         delBtn: this.validData(this.permission.attach_delete, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.job_id);
-      });
-      return ids.join(',');
+        ids.push(ele.job_id)
+      })
+      return ids.join(',')
     },
   },
-  mounted() {
-    this.loadAirportList();
+  mounted () {
+    this.loadAirportList()
     // 初始化时手动触发搜索,以确保默认值生效
-    this.$refs.crud.searchChange(this.query);
-    this.onLoad(this.page, this.query);
+    this.$refs.crud.searchChange(this.query)
+    this.onLoad(this.page, this.query)
   },
   methods: {
-    loadAirportList() {
+    loadAirportList () {
       getAirportList().then(res => {
-        const airportData = res.data.data || [];
-        const airportColumn = this.option.column.find(col => col.prop === 'dock_name');
+        const airportData = res.data.data || []
+        const airportColumn = this.option.column.find(col => col.prop === 'dock_name')
         if (airportColumn) {
           airportColumn.dicData = airportData.map(item => ({
             nickname: item.nickname,
             workspace_id: item.workspace_id,
-          }));
+          }))
         }
       }).catch(error => {
         // 处理错误
-      });
+      })
     },
-    searchReset() {
+    searchReset () {
       // 重置时恢复默认时间范围
-      const endDate = new Date();
-      const startDate = new Date();
-      startDate.setMonth(startDate.getMonth() - 1);
-      const defaultStartDate = `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`;
-      const defaultEndDate = `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`;
+      const endDate = new Date()
+      const startDate = new Date()
+      startDate.setMonth(startDate.getMonth() - 1)
+      const defaultStartDate = `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`
+      const defaultEndDate = `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`
       this.query = {
         daterange: [defaultStartDate, defaultEndDate]
-      };
-      this.selectedWorkspaceId = null;
+      }
+      this.selectedWorkspaceId = null
       // 更新 searchValue 以确保界面重置后显示默认值
-      const daterangeColumn = this.option.column.find(col => col.prop === 'daterange');
-      daterangeColumn.searchValue = [defaultStartDate, defaultEndDate];
-      this.onLoad(this.page, this.query);
+      const daterangeColumn = this.option.column.find(col => col.prop === 'daterange')
+      daterangeColumn.searchValue = [defaultStartDate, defaultEndDate]
+      this.onLoad(this.page, this.query)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
 
-      const airportColumn = this.option.column.find(col => col.prop === 'dock_name');
-      const selectedAirport = airportColumn.dicData.find(item => item.nickname === params.dock_name);
-      this.selectedWorkspaceId = selectedAirport ? selectedAirport.workspace_id : null;
+      const airportColumn = this.option.column.find(col => col.prop === 'dock_name')
+      const selectedAirport = airportColumn.dicData.find(item => item.nickname === params.dock_name)
+      this.selectedWorkspaceId = selectedAirport ? selectedAirport.workspace_id : null
 
-      const { daterange } = params;
-      let startTime = null;
-      let endTime = null;
+      const { daterange } = params
+      let startTime = null
+      let endTime = null
       if (daterange && Array.isArray(daterange) && daterange.length === 2) {
-        startTime = this.formatTime(daterange[0]);
-        endTime = this.formatTime(daterange[1]);
+        startTime = this.formatTime(daterange[0])
+        endTime = this.formatTime(daterange[1])
       }
 
       if (startTime && isNaN(new Date(startTime).getTime())) {
-        startTime = null;
+        startTime = null
       }
       if (endTime && isNaN(new Date(endTime).getTime())) {
-        endTime = null;
+        endTime = null
       }
 
-      this.onLoad(this.page, params);
-      if (done) done();
+      this.onLoad(this.page, params)
+      if (done) done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
-      this.onLoad(this.page, this.query);
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
+      this.onLoad(this.page, this.query)
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
-      this.onLoad(this.page, this.query);
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
+      this.onLoad(this.page, this.query)
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
 
-      const workspaceId = this.selectedWorkspaceId || null;
-      const { daterange } = params;
-      let startTime = null;
-      let endTime = null;
+      const workspaceId = this.selectedWorkspaceId || null
+      const { daterange } = params
+      let startTime = null
+      let endTime = null
 
       if (daterange && Array.isArray(daterange) && daterange.length === 2) {
-        startTime = this.formatTime(daterange[0]);
-        endTime = this.formatTime(daterange[1]);
+        startTime = this.formatTime(daterange[0])
+        endTime = this.formatTime(daterange[1])
       }
 
       if (startTime && isNaN(new Date(startTime).getTime())) {
-        startTime = null;
+        startTime = null
       }
       if (endTime && isNaN(new Date(endTime).getTime())) {
-        endTime = null;
+        endTime = null
       }
 
       getJobsByUser(
@@ -251,10 +243,10 @@
         endTime,
         params.job_name || null
       ).then(res => {
-        const responseData = res.data;
+        const responseData = res.data
 
         if (responseData && responseData.data && Array.isArray(responseData.data.list)) {
-          this.page.total = responseData.data.pagination.total || responseData.data.list.length;
+          this.page.total = responseData.data.pagination.total || responseData.data.list.length
           this.data = responseData.data.list.map(item => ({
             job_id: item.job_id,
             job_name: item.job_name,
@@ -265,53 +257,44 @@
             reason: item.reason,
             begin_time: item.begin_time,
             completed_time: item.completed_time,
-          }));
+          }))
         } else {
-          this.data = [];
-          this.page.total = 0;
+          this.data = []
+          this.page.total = 0
         }
 
-        this.loading = false;
-        this.selectionClear();
+        this.loading = false
+        this.selectionClear()
       }).catch(error => {
-        this.loading = false;
-        this.data = [];
-        this.page.total = 0;
-      });
+        this.loading = false
+        this.data = []
+        this.page.total = 0
+      })
     },
-    formatTime(time) {
-      if (!time) return '';
-      let date;
+    formatTime (time) {
+      if (!time) return ''
+      let date
       if (typeof time === 'number') {
-        date = new Date(time < 10000000000 ? time * 1000 : time);
+        date = new Date(time < 10000000000 ? time * 1000 : time)
       } else if (typeof time === 'string') {
-        date = new Date(time);
+        date = new Date(time)
       }
       if (isNaN(date.getTime())) {
-        return null;
+        return null
       }
-      const year = date.getFullYear();
-      const month = String(date.getMonth() + 1).padStart(2, '0');
-      const day = String(date.getDate()).padStart(2, '0');
-      const hours = String(date.getHours()).padStart(2, '0');
-      const minutes = String(date.getMinutes()).padStart(2, '0');
-      const seconds = String(date.getSeconds()).padStart(2, '0');
-      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+      const year = date.getFullYear()
+      const month = String(date.getMonth() + 1).padStart(2, '0')
+      const day = String(date.getDate()).padStart(2, '0')
+      const hours = String(date.getHours()).padStart(2, '0')
+      const minutes = String(date.getMinutes()).padStart(2, '0')
+      const seconds = String(date.getSeconds()).padStart(2, '0')
+      return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
     },
-    validData(val, def) {
-      return typeof val !== 'undefined' ? val : def;
+    validData (val, def) {
+      return typeof val !== 'undefined' ? val : def
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/resource/waylineFile.vue b/src/views/resource/waylineFile.vue
index 412fe53..597623d 100644
--- a/src/views/resource/waylineFile.vue
+++ b/src/views/resource/waylineFile.vue
@@ -1,30 +1,20 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      :page.sync="page"
-      v-model="form"
-      ref="crud"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" v-model="form" ref="crud"
+      @search-change="searchChange" @search-reset="searchReset" @current-change="currentChange"
+      @size-change="sizeChange" @refresh-change="refreshChange">
     </avue-crud>
   </basic-container>
 </template>
 
 <script>
-import { getWaylineFileByUser } from '@/api/resource/waylineFile';
-import { getAirportList } from '@/api/device/device';
+import { getWaylineFileByUser } from '@/api/resource/waylineFile'
+import { getAirportList } from '@/api/device/device'
 
 export default {
   name: 'WaylineFile',
-  data() {
-    const { defaultStartDate, defaultEndDate } = this.getDefaultDates();
+  data () {
+    const { defaultStartDate, defaultEndDate } = this.getDefaultDates()
     return {
       form: {},
       query: { name: '', dock_name: '', daterange: [defaultStartDate, defaultEndDate] },
@@ -40,6 +30,9 @@
         index: true,
         menu: false,
         page: true,
+
+        height: 'auto',
+        calcHeight: 20,
         column: [
           {
             label: '机场选择',
@@ -86,53 +79,53 @@
           },
         ],
       },
-    };
+    }
   },
-  mounted() {
-    this.fetchAirports();
-    this.fetchData(this.page, this.query); // 初次加载包含默认时间范围
+  mounted () {
+    this.fetchAirports()
+    this.fetchData(this.page, this.query) // 初次加载包含默认时间范围
   },
   methods: {
-    getDefaultDates() {
-      const endDate = new Date();
-      const startDate = new Date();
-      startDate.setMonth(startDate.getMonth() - 1);
+    getDefaultDates () {
+      const endDate = new Date()
+      const startDate = new Date()
+      startDate.setMonth(startDate.getMonth() - 1)
       // 结束时间设定为当天 23:59:59
-      endDate.setHours(23, 59, 59, 999);
+      endDate.setHours(23, 59, 59, 999)
 
       return {
         defaultStartDate: `${startDate.getFullYear()}-${String(startDate.getMonth() + 1).padStart(2, '0')}-${String(startDate.getDate()).padStart(2, '0')}`,
         defaultEndDate: `${endDate.getFullYear()}-${String(endDate.getMonth() + 1).padStart(2, '0')}-${String(endDate.getDate()).padStart(2, '0')}`,
-      };
+      }
     },
-    async fetchAirports() {
+    async fetchAirports () {
       try {
-        const res = await getAirportList();
-        const airportData = res.data.data || [];
-        const airportColumn = this.option.column.find((col) => col.prop === 'dock_name');
+        const res = await getAirportList()
+        const airportData = res.data.data || []
+        const airportColumn = this.option.column.find((col) => col.prop === 'dock_name')
         if (airportColumn) {
           airportColumn.dicData = airportData.map((item) => ({
             nickname: item.nickname,
             workspace_id: item.workspace_id,
-          }));
+          }))
         }
       } catch (error) {
-        console.error('加载机场列表失败:', error);
+        console.error('加载机场列表失败:', error)
       }
     },
-    async fetchData(page, params = {}) {
-      this.loading = true;
-      const { name, dock_name, daterange } = params;
-      const workspaceId = this.selectedWorkspaceId || null;
+    async fetchData (page, params = {}) {
+      this.loading = true
+      const { name, dock_name, daterange } = params
+      const workspaceId = this.selectedWorkspaceId || null
 
       // 时间范围处理
-      const startDate = new Date(daterange[0]);
-      let endDate = new Date(daterange[1]);
+      const startDate = new Date(daterange[0])
+      let endDate = new Date(daterange[1])
       // 结束时间始终设定为当天 23:59:59
-      endDate.setHours(23, 59, 59, 999);
+      endDate.setHours(23, 59, 59, 999)
 
-      const startTime = isNaN(startDate.getTime()) ? null : startDate.getTime();
-      const endTime = isNaN(endDate.getTime()) ? null : endDate.getTime();
+      const startTime = isNaN(startDate.getTime()) ? null : startDate.getTime()
+      const endTime = isNaN(endDate.getTime()) ? null : endDate.getTime()
 
       const requestParams = {
         workspaceId,
@@ -141,9 +134,9 @@
         endTime,
         page: page.currentPage,
         pageSize: page.pageSize,
-      };
+      }
 
-      console.log('请求参数:', requestParams);
+      console.log('请求参数:', requestParams)
 
       try {
         const res = await getWaylineFileByUser(
@@ -153,8 +146,8 @@
           requestParams.endTime,
           requestParams.page,
           requestParams.pageSize
-        );
-        const responseData = res.data;
+        )
+        const responseData = res.data
 
         if (responseData?.code === 0 && Array.isArray(responseData.data?.list)) {
           this.data = responseData.data.list.map((item) => ({
@@ -163,80 +156,72 @@
             wayline_type: item.wayline_type,
             user_name: item.user_name,
             update_time: item.update_time,
-          }));
-          this.page.total = responseData.data.pagination?.total || responseData.data.list.length;
-          this.page.currentPage = page.currentPage;
-          console.log('返回数据条数:', this.data.length);
-          console.log('当前页码:', this.page.currentPage);
-          console.log('总条数:', this.page.total);
+          }))
+          this.page.total = responseData.data.pagination?.total || responseData.data.list.length
+          this.page.currentPage = page.currentPage
+          console.log('返回数据条数:', this.data.length)
+          console.log('当前页码:', this.page.currentPage)
+          console.log('总条数:', this.page.total)
         } else {
-          this.data = [];
-          this.page.total = 0;
+          this.data = []
+          this.page.total = 0
         }
       } catch (error) {
-        console.error('加载数据失败:', error);
-        this.data = [];
-        this.page.total = 0;
+        console.error('加载数据失败:', error)
+        this.data = []
+        this.page.total = 0
       } finally {
-        this.loading = false;
+        this.loading = false
       }
     },
-    searchChange(params, done) {
-      this.query = { ...params };
-      const airportColumn = this.option.column.find((col) => col.prop === 'dock_name');
-      const selectedAirport = airportColumn.dicData.find((item) => item.nickname === params.dock_name);
-      this.selectedWorkspaceId = selectedAirport ? selectedAirport.workspace_id : null;
-      this.page.currentPage = 1;
-      this.fetchData(this.page, this.query);
-      done();
+    searchChange (params, done) {
+      this.query = { ...params }
+      const airportColumn = this.option.column.find((col) => col.prop === 'dock_name')
+      const selectedAirport = airportColumn.dicData.find((item) => item.nickname === params.dock_name)
+      this.selectedWorkspaceId = selectedAirport ? selectedAirport.workspace_id : null
+      this.page.currentPage = 1
+      this.fetchData(this.page, this.query)
+      done()
     },
-    searchReset() {
-      const { defaultStartDate, defaultEndDate } = this.getDefaultDates();
-      this.query = { name: '', dock_name: '', daterange: [defaultStartDate, defaultEndDate] };
-      this.selectedWorkspaceId = null;
-      const daterangeColumn = this.option.column.find((col) => col.prop === 'daterange');
-      daterangeColumn.searchValue = [defaultStartDate, defaultEndDate];
-      this.page.currentPage = 1;
-      this.fetchData(this.page, this.query);
+    searchReset () {
+      const { defaultStartDate, defaultEndDate } = this.getDefaultDates()
+      this.query = { name: '', dock_name: '', daterange: [defaultStartDate, defaultEndDate] }
+      this.selectedWorkspaceId = null
+      const daterangeColumn = this.option.column.find((col) => col.prop === 'daterange')
+      daterangeColumn.searchValue = [defaultStartDate, defaultEndDate]
+      this.page.currentPage = 1
+      this.fetchData(this.page, this.query)
     },
-    currentChange(currentPage) {
-      console.log('切换页码至:', currentPage);
-      this.page.currentPage = currentPage;
-      this.fetchData(this.page, this.query);
+    currentChange (currentPage) {
+      console.log('切换页码至:', currentPage)
+      this.page.currentPage = currentPage
+      this.fetchData(this.page, this.query)
     },
-    sizeChange(pageSize) {
-      console.log('每页条数改为:', pageSize);
-      this.page.pageSize = pageSize;
-      this.page.currentPage = 1;
-      this.fetchData(this.page, this.query);
+    sizeChange (pageSize) {
+      console.log('每页条数改为:', pageSize)
+      this.page.pageSize = pageSize
+      this.page.currentPage = 1
+      this.fetchData(this.page, this.query)
     },
-    refreshChange() {
-      this.fetchData(this.page, this.query);
+    refreshChange () {
+      this.fetchData(this.page, this.query)
     },
-    formatTime(time) {
-      if (!time) return '';
-      const date = new Date(time < 10000000000 ? time * 1000 : time);
-      if (isNaN(date.getTime())) return '无效时间';
-      return date.toLocaleString('zh-CN', { hour12: false }).replace(/\//g, '-');
+    formatTime (time) {
+      if (!time) return ''
+      const date = new Date(time < 10000000000 ? time * 1000 : time)
+      if (isNaN(date.getTime())) return '无效时间'
+      return date.toLocaleString('zh-CN', { hour12: false }).replace(/\//g, '-')
     },
-    formatWaylineType(type) {
-      const typeMap = { '0': '普通航线', '1': '图斑举证航线', '2': '航测航线', '3': '航点航线', '4': '正射举证航线' };
-      return typeMap[type] || '未知';
+    formatWaylineType (type) {
+      const typeMap = { '0': '普通航线', '1': '图斑举证航线', '2': '航测航线', '3': '航点航线', '4': '正射举证航线' }
+      return typeMap[type] || '未知'
     },
   },
-};
+}
 </script>
 
 <style scoped lang="scss">
 .avue-crud .el-table {
   max-height: none !important;
 }
- :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
 </style>
diff --git a/src/views/system/client.vue b/src/views/system/client.vue
index b715202..49a6cf0 100644
--- a/src/views/system/client.vue
+++ b/src/views/system/client.vue
@@ -1,33 +1,12 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      v-model:page="page"
-      @row-del="rowDel"
-      v-model="form"
-      ref="crud"
-      :permission="permissionList"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      :before-open="beforeOpen"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" @row-del="rowDel"
+      v-model="form" ref="crud" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave"
+      :before-open="beforeOpen" @search-change="searchChange" @search-reset="searchReset"
+      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad">
       <template #menu-left>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          plain
-          v-if="permission.client_delete"
-          @click="handleDelete"
-          >删 除
+        <el-button type="danger" icon="el-icon-delete" plain v-if="permission.client_delete" @click="handleDelete">删 除
         </el-button>
       </template>
     </avue-crud>
@@ -35,11 +14,11 @@
 </template>
 
 <script>
-import { getList, getDetail, add, update, remove } from '@/api/system/client';
-import { mapGetters } from 'vuex';
+import { getList, getDetail, add, update, remove } from '@/api/system/client'
+import { mapGetters } from 'vuex'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -60,6 +39,10 @@
         grid: true,
         selection: true,
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '应用id',
@@ -240,97 +223,97 @@
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.client_add),
         viewBtn: this.validData(this.permission.client_view),
         delBtn: this.validData(this.permission.client_delete),
         editBtn: this.validData(this.permission.client_edit),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -338,55 +321,46 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
       getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
\ No newline at end of file
+<style scoped lang="scss"></style>
\ No newline at end of file
diff --git a/src/views/system/dept.vue b/src/views/system/dept.vue
index 9475470..93d87a8 100644
--- a/src/views/system/dept.vue
+++ b/src/views/system/dept.vue
@@ -1,45 +1,18 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      ref="crud"
-      v-model="form"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      :before-close="beforeClose"
-      @row-del="rowDel"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-      @tree-load="treeLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
+      :permission="permissionList" :before-open="beforeOpen" :before-close="beforeClose" @row-del="rowDel"
+      @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset"
+      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad" @tree-load="treeLoad">
       <template #menu-left>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          v-if="permission.dept_delete"
-          plain
-          @click="handleDelete"
-        >
+        <el-button type="danger" icon="el-icon-delete" v-if="permission.dept_delete" plain @click="handleDelete">
           删除
         </el-button>
       </template>
       <template #menu="scope">
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-plus"
-          @click.stop="handleAdd(scope.row, scope.index)"
-          v-if="userInfo.role_name.includes('admin')"
-        >
+        <el-button type="primary" text icon="el-icon-plus" @click.stop="handleAdd(scope.row, scope.index)"
+          v-if="userInfo.role_name.includes('admin')">
           新增子项
         </el-button>
       </template>
@@ -63,13 +36,13 @@
   add,
   getDept,
   getDeptTree,
-} from '@/api/system/dept';
-import { getLazyTree } from '@/api/base/region';
-import { mapGetters } from 'vuex';
-import website from '@/config/website';
+} from '@/api/system/dept'
+import { getLazyTree } from '@/api/base/region'
+import { mapGetters } from 'vuex'
+import website from '@/config/website'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       selectionList: [],
@@ -94,6 +67,10 @@
         viewBtn: true,
         menuWidth: 320,
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '机构名称',
@@ -239,23 +216,23 @@
             ],
             change: ({ value }) => {
               if (!value) {
-                this.form.areaCode = null; // 未选择时置为空
+                this.form.areaCode = null // 未选择时置为空
               } else {
                 // 如果 value 是逗号分隔的字符串,拆分并取最后一个值
                 if (typeof value === 'string' && value.includes(',')) {
-                  const codes = value.split(',');
-                  this.form.areaCode = codes[codes.length - 1];
+                  const codes = value.split(',')
+                  this.form.areaCode = codes[codes.length - 1]
                 } else {
-                  this.form.areaCode = value; // 直接使用单一值
+                  this.form.areaCode = value // 直接使用单一值
                 }
               }
-              console.log('cascader change value:', value);
-              console.log('处理后的区县编码:', this.form.areaCode);
+              console.log('cascader change value:', value)
+              console.log('处理后的区县编码:', this.form.areaCode)
             },
             lazy: true,
-            lazyLoad(node, resolve) {
-              let level = node.level;
-              let list = [];
+            lazyLoad (node, resolve) {
+              let level = node.level
+              let list = []
               let callback = () => {
                 resolve(
                   (list || []).map(ele => ({
@@ -263,26 +240,26 @@
                     value: ele.value, // 保持原始值类型(字符串)
                     leaf: level >= 2, // 县级为最后一级
                   }))
-                );
-              };
+                )
+              }
 
               if (level === 0) {
                 getLazyTree('000000000000').then(res => {
-                  list = res.data.data;
-                  callback();
-                });
+                  list = res.data.data
+                  callback()
+                })
               } else if (level === 1) {
                 getLazyTree(node.value).then(res => {
-                  list = res.data.data;
-                  callback();
-                });
+                  list = res.data.data
+                  callback()
+                })
               } else if (level === 2) {
                 getLazyTree(node.value).then(res => {
-                  list = res.data.data;
-                  callback();
-                });
+                  list = res.data.data
+                  callback()
+                })
               } else {
-                callback();
+                callback()
               }
             },
           },
@@ -302,148 +279,148 @@
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['userInfo', 'permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.dept_add, false),
         viewBtn: this.validData(this.permission.dept_view, false),
         delBtn: this.validData(this.permission.dept_delete, false),
         editBtn: this.validData(this.permission.dept_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    initData() {
+    initData () {
       getDeptTree().then(res => {
-        const column = this.findObject(this.option.column, 'parentId');
-        column.dicData = res.data.data;
-      });
+        const column = this.findObject(this.option.column, 'parentId')
+        column.dicData = res.data.data
+      })
     },
-    handleAdd(row) {
-      this.parentId = row.id;
-      const column = this.findObject(this.option.column, 'parentId');
-      column.value = row.id;
-      column.addDisabled = true;
-      this.form.areaCode = null; // 初始化为空
-      this.$refs.crud.rowAdd();
+    handleAdd (row) {
+      this.parentId = row.id
+      const column = this.findObject(this.option.column, 'parentId')
+      column.value = row.id
+      column.addDisabled = true
+      this.form.areaCode = null // 初始化为空
+      this.$refs.crud.rowAdd()
     },
-    validateSubmitData(row) {
+    validateSubmitData (row) {
       if (!row.areaCode) {
-        this.$message.warning('请选择行政区划');
-        return false;
+        this.$message.warning('请选择行政区划')
+        return false
       }
-      return true;
+      return true
     },
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       if (!this.validateSubmitData(row)) {
-        loading();
-        return;
+        loading()
+        return
       }
-      console.log('--- Start rowSave ---');
-      console.log('Form data before save:', this.form);
+      console.log('--- Start rowSave ---')
+      console.log('Form data before save:', this.form)
 
       // 处理 areaCode,确保只取最后一个值
-      let areaCode = this.form.areaCode;
+      let areaCode = this.form.areaCode
       if (Array.isArray(areaCode)) {
-        areaCode = areaCode[areaCode.length - 1]; // 数组取最后一个
+        areaCode = areaCode[areaCode.length - 1] // 数组取最后一个
       } else if (typeof areaCode === 'string' && areaCode.includes(',')) {
-        const codes = areaCode.split(',');
-        areaCode = codes[codes.length - 1]; // 字符串拆分取最后一个
+        const codes = areaCode.split(',')
+        areaCode = codes[codes.length - 1] // 字符串拆分取最后一个
       }
-      row.areaCode = areaCode || null; // 确保非空
+      row.areaCode = areaCode || null // 确保非空
 
-      console.log('Row data before submit:', row);
+      console.log('Row data before submit:', row)
 
       add(row).then(
         res => {
-          console.log('Save response:', res.data);
-          const data = res.data.data;
-          row.id = data.id;
-          row.deptCategoryName = data.deptCategoryName;
-          row.tenantId = data.tenantId;
+          console.log('Save response:', res.data)
+          const data = res.data.data
+          row.id = data.id
+          row.deptCategoryName = data.deptCategoryName
+          row.tenantId = data.tenantId
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.onLoad(this.page);
-          done(row);
+          })
+          this.onLoad(this.page)
+          done(row)
         },
         error => {
-          console.log('Save error:', error);
-          this.loading = false;
-          loading();
+          console.log('Save error:', error)
+          this.loading = false
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       if (!this.validateSubmitData(row)) {
-        loading();
-        return;
+        loading()
+        return
       }
-      console.log('--- Start rowUpdate ---');
+      console.log('--- Start rowUpdate ---')
 
       // 提交时只使用县级代码
       const submitData = {
         ...row,
         areaCode: row.areaCode.split(',').pop(), // 取最后一个代码(县级)
-      };
+      }
 
-      console.log('Row data before submit:', row);
+      console.log('Row data before submit:', row)
 
       update(submitData)
         .then(
           res => {
-            console.log('Update response:', res.data);
+            console.log('Update response:', res.data)
             this.$message({
               type: 'success',
               message: '操作成功!',
-            });
-            this.onLoad(this.page);
-            done(row);
+            })
+            this.onLoad(this.page)
+            done(row)
           },
           error => {
-            console.log('Update error:', error);
-            this.loading = false;
-            loading();
+            console.log('Update error:', error)
+            this.loading = false
+            loading()
           }
         )
         .catch(error => {
-          console.log('Update promise rejected:', error);
-          this.loading = false;
-        });
+          console.log('Update promise rejected:', error)
+          this.loading = false
+        })
     },
-    rowDel(row, index, done) {
+    rowDel (row, index, done) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.onLoad(this.page);
-          done(row);
-        });
+          })
+          this.onLoad(this.page)
+          done(row)
+        })
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -451,153 +428,153 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.data = [];
-          this.parentId = 0;
-          this.$refs.crud.refreshTable();
-          this.$refs.crud.toggleSelection();
-          this.onLoad(this.page);
+          this.data = []
+          this.parentId = 0
+          this.$refs.crud.refreshTable()
+          this.$refs.crud.toggleSelection()
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.parentId = 0;
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.parentId = 0
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.parentId = '';
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.parentId = ''
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
     // 修改 beforeOpen 方法
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['add', 'edit'].includes(type)) {
-        this.initData();
+        this.initData()
       }
       if (['edit', 'view'].includes(type)) {
         getDept(this.form.id).then(res => {
-          const data = res.data.data;
-          const areaCode = data.areaCode;
-          const areaName = data.areaName;
+          const data = res.data.data
+          const areaCode = data.areaCode
+          const areaName = data.areaName
 
           // 生成完整的行政区划代码(考虑不同级别)
-          const fullAreaCode = this.getFullAreaCode(areaCode);
+          const fullAreaCode = this.getFullAreaCode(areaCode)
 
           this.form = Object.assign({}, data, {
             hasChildren: this.form.hasChildren,
             areaCode: fullAreaCode,
             areaName: areaName || '',
-          });
+          })
 
           // 调试输出
           console.log('回显数据:', {
             originalAreaCode: areaCode,
             fullAreaCode: fullAreaCode,
             areaName: areaName,
-          });
-        });
+          })
+        })
       } else if (type === 'add') {
-        this.form.areaCode = '';
-        this.form.areaName = '';
+        this.form.areaCode = ''
+        this.form.areaName = ''
       }
-      done();
+      done()
     },
-    beforeClose(done) {
-      this.parentId = '';
-      const column = this.findObject(this.option.column, 'parentId');
-      column.value = '';
-      column.addDisabled = false;
-      this.form.areaCode = null;
-      done();
+    beforeClose (done) {
+      this.parentId = ''
+      const column = this.findObject(this.option.column, 'parentId')
+      column.value = ''
+      column.addDisabled = false
+      this.form.areaCode = null
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
-      this.onLoad(this.page);
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
+      this.onLoad(this.page)
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
-      this.onLoad(this.page);
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
+      this.onLoad(this.page)
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
-      console.log('onLoad triggered with page:', page, 'params:', params);
-      console.log('Current parentId:', this.parentId, 'query:', this.query);
+    onLoad (page, params = {}) {
+      this.loading = true
+      console.log('onLoad triggered with page:', page, 'params:', params)
+      console.log('Current parentId:', this.parentId, 'query:', this.query)
       getLazyList(this.parentId, Object.assign(params, this.query))
         .then(res => {
-          console.log('onLoad response:', res.data);
+          console.log('onLoad response:', res.data)
           // 处理 areaCode,确保是单一字符串
           const data = (res.data.data || []).map(item => {
-            const fullAreaCode = this.getFullAreaCode(item.areaCode);
+            const fullAreaCode = this.getFullAreaCode(item.areaCode)
             return {
               ...item,
               // 保存完整的行政区划代码
               areaCode: fullAreaCode,
               // 使用原始的县级代码作为实际值
               originalAreaCode: item.areaCode,
-            };
-          });
-          this.data = data;
-          this.loading = false;
-          this.selectionClear();
-          console.log('Table data after onLoad:', this.data);
+            }
+          })
+          this.data = data
+          this.loading = false
+          this.selectionClear()
+          console.log('Table data after onLoad:', this.data)
         })
         .catch(error => {
-          console.log('onLoad error:', error);
-          this.loading = false;
-          this.data = this.data; // 保留当前数据
-          console.log('Table data after onLoad error:', this.data);
-        });
+          console.log('onLoad error:', error)
+          this.loading = false
+          this.data = this.data // 保留当前数据
+          console.log('Table data after onLoad error:', this.data)
+        })
     },
-    treeLoad(tree, treeNode, resolve) {
+    treeLoad (tree, treeNode, resolve) {
       getChildLazyTree({ parentId: tree.id }).then(res => {
-        resolve(res.data.data);
-      });
+        resolve(res.data.data)
+      })
     },
     // 修改 getFullAreaCode 方法
-    getFullAreaCode(areaCode) {
-      if (!areaCode) return '';
+    getFullAreaCode (areaCode) {
+      if (!areaCode) return ''
 
       // 根据编码长度判断层级
-      const code = areaCode.toString();
+      const code = areaCode.toString()
 
       // 如果已经是完整的逗号分隔格式,直接返回
-      if (code.includes(',')) return code;
+      if (code.includes(',')) return code
 
       // 处理不同级别的编码
       if (code.endsWith('0000000000')) {
         // 省级编码
-        return code;
+        return code
       } else if (code.endsWith('00000000') && !code.endsWith('0000000000')) {
         // 市级编码
-        const provinceCode = code.substring(0, 2) + '0000000000';
-        return `${provinceCode},${code}`;
+        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}`;
+        const provinceCode = code.substring(0, 2) + '0000000000'
+        const cityCode = code.substring(0, 4) + '00000000'
+        return `${provinceCode},${cityCode},${code}`
       }
     },
   },
-};
+}
 </script>
 
 <style></style>
diff --git a/src/views/system/dict.vue b/src/views/system/dict.vue
index b56026a..bcd7282 100644
--- a/src/views/system/dict.vue
+++ b/src/views/system/dict.vue
@@ -449,12 +449,4 @@
 };
 </script>
 <style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
 </style>
\ No newline at end of file
diff --git a/src/views/system/helpCenter.vue b/src/views/system/helpCenter.vue
new file mode 100644
index 0000000..2fae289
--- /dev/null
+++ b/src/views/system/helpCenter.vue
@@ -0,0 +1,162 @@
+<template>
+  <basic-container>
+    <div class="helpContainer">
+      <el-table
+        class="custom-table"
+        :data="helpData"
+        style="width: 100%"
+        :row-class-name="tableRowClassName"
+      >
+        <el-table-column label="序号" type="index" width="100">
+          <template #default="{ $index }">
+            {{ $index + 1 }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="levelOneType" label="一级类别" />
+        <el-table-column prop="levelTwoType" label="二级类别" />
+        <el-table-column prop="uploadUser" label="上传者" />
+        <el-table-column prop="createTime" label="上传时间" />
+        <el-table-column label="操作" width="150" align="center">
+          <template #default="scope">
+            <span class="look" @click="clickDetail(scope.row)" v-if="permission.helpCenterLook"
+              >查看</span
+            >
+            <el-upload
+              style="display: inline-block"
+              :show-file-list="false"
+              :before-upload="file => onUploadFileBefore(file, scope.row)"
+              :limit="1"
+              accept=".pdf"
+            >
+              <span class="uploads" v-if="permission.helpCenterUpload">上传</span>
+            </el-upload>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+  </basic-container>
+</template>
+
+<script setup>
+import { uploadFileAPI, listDataAPI, updataDataAPI } from '@/api/helpCenter/helpCenter';
+import { ElMessage } from 'element-plus';
+import { computed, onMounted } from 'vue';
+const helpData = ref([]);
+
+import { useStore } from 'vuex';
+const store = useStore();
+const permission = computed(() => store.state.user.permission);
+// 表格隔行变色
+const tableRowClassName = ({ row, rowIndex }) => {
+  if (rowIndex % 2 === 1) {
+    return 'warning-row';
+  } else {
+    return 'success-row';
+  }
+};
+const getlistDataAPI = () => {
+  listDataAPI().then(res => {
+    helpData.value = res.data.data;
+  });
+};
+// 查看
+// const clickDetail = row => {
+//   if (!row.filePath) {
+//     ElMessage.warning('没有可预览的文件');
+//     return;
+//   }
+//   fetch(row.filePath)
+//     .then(response => response.blob())
+//     .then(res => {
+//       let blob = new Blob([res], { type: 'application/pdf' });
+//       // pdfurl即转化后的结果
+//       let pdfurl = window.URL.createObjectURL(blob);
+//       // 新标签页打开,即可预览并下载
+//       window.open(pdfurl);
+//     });
+// };
+const clickDetail = val => {
+  const filePath = val.filePath;
+  if (!val.filePath) {
+    ElMessage.warning('没有可预览的文件');
+    return;
+  }
+  window.open(filePath, '_blank');
+};
+// 文件上传
+const onUploadFileBefore = (file, row) => {
+  const fileFormat = file.name?.split('.')[1];
+  if (fileFormat !== 'pdf') return ElMessage.error('请上传pdf格式的文件');
+  const formData = new FormData();
+  formData.append('file', file, file.name);
+
+  uploadFileAPI(formData).then(res => {
+    if (res.data.code === 200) {
+      const params = {
+        id: row.id,
+        filePath: res.data.data.link,
+      };
+      ElMessage.success('上传成功');
+      updataDataAPI(params);
+    } else {
+      ElMessage.error('上传失败');
+    }
+    getlistDataAPI();
+  });
+};
+onMounted(() => {
+  getlistDataAPI();
+});
+</script>
+<style lang="scss">
+.helpContainer {
+  .el-table .success-row {
+    --el-table-tr-bg-color: #fff;
+  }
+  .el-table .warning-row {
+    --el-table-tr-bg-color: #f3f6ff;
+  }
+}
+</style>
+<style scoped lang="scss">
+/* 表头样式 */
+.custom-table :deep(.el-table__header) th {
+  height: 70px;
+  font-family: Source Han Sans CN, Source Han Sans CN;
+  font-weight: bold;
+  font-size: 14px;
+  color: #49556e;
+  background-color: #f3f6ff;
+  text-align: center;
+}
+
+/* 行样式 */
+.custom-table :deep(.el-table__body) tr {
+  height: 70px;
+  font-family: Source Han Sans CN, Source Han Sans CN;
+  font-weight: 400;
+  font-size: 14px;
+  color: #363636;
+  text-align: center;
+}
+.custom-table :deep(.el-table__body) td.el-table__cell {
+  text-align: center;
+}
+.helpContainer {
+  height: 100%;
+  .look {
+    font-family: Source Han Sans CN, Source Han Sans CN;
+    color: #1c5cff;
+    cursor: pointer;
+    margin-right: 15px;
+    font-size: 14px;
+  }
+  .uploads {
+    font-family: Source Han Sans CN, Source Han Sans CN;
+    font-weight: 400;
+    font-size: 14px;
+    color: #19876d;
+    cursor: pointer;
+  }
+}
+</style>
diff --git a/src/views/system/menu.vue b/src/views/system/menu.vue
index a3e3037..a78e8d8 100644
--- a/src/views/system/menu.vue
+++ b/src/views/system/menu.vue
@@ -1,48 +1,21 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      ref="crud"
-      v-model="form"
-      :permission="permissionList"
-      :before-open="beforeOpen"
-      :before-close="beforeClose"
-      @row-del="rowDel"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-      @tree-load="treeLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" ref="crud" v-model="form"
+      :permission="permissionList" :before-open="beforeOpen" :before-close="beforeClose" @row-del="rowDel"
+      @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange" @search-reset="searchReset"
+      @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+      @refresh-change="refreshChange" @on-load="onLoad" @tree-load="treeLoad">
       <template #menu-left>
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          v-if="permission.menu_delete"
-          plain
-          @click="handleDelete"
-          >删 除
+        <el-button type="danger" icon="el-icon-delete" v-if="permission.menu_delete" plain @click="handleDelete">删 除
         </el-button>
       </template>
       <template #menu="scope">
-        <el-button
-          type="primary"
-          text
-          icon="el-icon-plus"
-          @click.stop="handleAdd(scope.row, scope.index)"
-          v-if="userInfo.role_name.includes('admin') && scope.row.category === 1"
-          >新增子项
+        <el-button type="primary" text icon="el-icon-plus" @click.stop="handleAdd(scope.row, scope.index)"
+          v-if="userInfo.role_name.includes('admin') && scope.row.category === 1">新增子项
         </el-button>
       </template>
       <template #name="{ row }">
-        <i class="namei" :class="row.source"  />
+        <i class="namei" :class="row.source" />
         <span>{{ row.name }}</span>
       </template>
       <template #source="{ row }">
@@ -55,14 +28,14 @@
 </template>
 
 <script>
-import { getLazyList, remove, update, add, getMenu } from '@/api/system/menu';
-import { mapGetters } from 'vuex';
-import iconList from '@/config/iconList';
-import func from '@/utils/func';
-import { getMenuTree } from '@/api/system/menu';
+import { getLazyList, remove, update, add, getMenu } from '@/api/system/menu'
+import { mapGetters } from 'vuex'
+import iconList from '@/config/iconList'
+import func from '@/utils/func'
+import { getMenuTree } from '@/api/system/menu'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -88,6 +61,10 @@
         viewBtn: true,
         menuWidth: 320,
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '菜单名称',
@@ -287,110 +264,110 @@
         ],
       },
       data: [],
-    };
+    }
   },
   watch: {
-    'form.category'() {
-      const category = func.toInt(this.form.category);
+    'form.category' () {
+      const category = func.toInt(this.form.category)
       this.$refs.crud.option.column.filter(item => {
         if (item.prop === 'path') {
-          item.rules[0].required = category === 1;
+          item.rules[0].required = category === 1
         }
         if (item.prop === 'isOpen') {
-          item.disabled = category === 2;
+          item.disabled = category === 2
         }
-      });
+      })
     },
   },
   computed: {
     ...mapGetters(['userInfo', 'permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.menu_add, false),
         viewBtn: this.validData(this.permission.menu_view, false),
         delBtn: this.validData(this.permission.menu_delete, false),
         editBtn: this.validData(this.permission.menu_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    initData() {
+    initData () {
       getMenuTree().then(res => {
-        const column = this.findObject(this.option.column, 'parentId');
-        column.dicData = res.data.data;
-      });
+        const column = this.findObject(this.option.column, 'parentId')
+        column.dicData = res.data.data
+      })
     },
-    handleAdd(row) {
-      this.parentId = row.id;
-      const column = this.findObject(this.option.column, 'parentId');
-      column.value = row.id;
-      column.addDisabled = true;
-      this.$refs.crud.rowAdd();
+    handleAdd (row) {
+      this.parentId = row.id
+      const column = this.findObject(this.option.column, 'parentId')
+      column.value = row.id
+      column.addDisabled = true
+      this.$refs.crud.rowAdd()
     },
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         res => {
           // 获取新增数据的相关字段
-          const data = res.data.data;
-          row.id = data.id;
+          const data = res.data.data
+          row.id = data.id
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
+          })
           // 数据回调进行刷新
-          done(row);
+          done(row)
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
+          })
           // 数据回调进行刷新
-          done(row);
+          done(row)
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row, index, done) {
+    rowDel (row, index, done) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
+          })
           // 数据回调进行刷新
-          done(row);
-        });
+          done(row)
+        })
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -398,86 +375,86 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
           // 刷新表格数据并重载
-          this.data = [];
-          this.parentId = 0;
-          this.$refs.crud.refreshTable();
-          this.$refs.crud.toggleSelection();
+          this.data = []
+          this.parentId = 0
+          this.$refs.crud.refreshTable()
+          this.$refs.crud.toggleSelection()
           // 表格数据重载
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.parentId = 0;
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.parentId = 0
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.parentId = '';
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.parentId = ''
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['add', 'edit'].includes(type)) {
-        this.initData();
+        this.initData()
       }
       if (['edit', 'view'].includes(type)) {
         getMenu(this.form.id).then(res => {
           this.form = Object.assign(res.data.data, {
             hasChildren: this.form.hasChildren,
-          });
-        });
+          })
+        })
       }
-      done();
+      done()
     },
-    beforeClose(done) {
-      this.parentId = '';
-      const column = this.findObject(this.option.column, 'parentId');
-      column.value = '';
-      column.addDisabled = false;
-      done();
+    beforeClose (done) {
+      this.parentId = ''
+      const column = this.findObject(this.option.column, 'parentId')
+      column.value = ''
+      column.addDisabled = false
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
       getLazyList(this.parentId, Object.assign(params, this.query)).then(res => {
-        this.data = res.data.data;
-        this.loading = false;
-        this.selectionClear();
-      });
+        this.data = res.data.data
+        this.loading = false
+        this.selectionClear()
+      })
     },
-    treeLoad(tree, treeNode, resolve) {
-      const parentId = tree.id;
+    treeLoad (tree, treeNode, resolve) {
+      const parentId = tree.id
       getLazyList(parentId).then(res => {
-        resolve(res.data.data);
-      });
+        resolve(res.data.data)
+      })
     },
   },
-};
+}
 </script>
 
 
@@ -485,12 +462,4 @@
 .namei {
   margin-right: 5px;
 }
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
 </style>
\ No newline at end of file
diff --git a/src/views/system/sysConfig.vue b/src/views/system/sysConfig.vue
index 193164a..7fdc560 100644
--- a/src/views/system/sysConfig.vue
+++ b/src/views/system/sysConfig.vue
@@ -1,64 +1,31 @@
 <template>
   <basic-container>
-    <avue-crud
-      :option="option"
-      :table-loading="loading"
-      :data="data"
-      v-model:page="page"
-      ref="crud"
-      @row-del="rowDel"
-      v-model="form"
-      :permission="permissionList"
-      @row-update="rowUpdate"
-      @row-save="rowSave"
-      :before-open="beforeOpen"
-      @search-change="searchChange"
-      @search-reset="searchReset"
-      @selection-change="selectionChange"
-      @current-change="currentChange"
-      @size-change="sizeChange"
-      @refresh-change="refreshChange"
-      @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" ref="crud" @row-del="rowDel"
+      v-model="form" :permission="permissionList" @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
       <template #menu-left>
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          v-if="permissionList.addBtn"
-          @click="$refs.crud.rowAdd()"
-        >新增</el-button>
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          v-if="permissionList.delBtn"
-          @click="handleDelete"
-        >删除</el-button>
+        <el-button type="primary" icon="el-icon-plus" v-if="permissionList.addBtn"
+          @click="$refs.crud.rowAdd()">新增</el-button>
+        <el-button type="danger" plain icon="el-icon-delete" v-if="permissionList.delBtn"
+          @click="handleDelete">删除</el-button>
       </template>
       <template #menu="{ row, index }">
-        <el-button
-          type="text"
-          icon="el-icon-view"
-          v-if="permissionList.viewBtn"
-          @click.stop="$refs.crud.rowView(row, index)"
-        >查看</el-button>
-        <el-button
-          type="text"
-          icon="el-icon-edit"
-          v-if="permissionList.editBtn"
-          @click.stop="$refs.crud.rowEdit(row, index)"
-        >编辑</el-button>
+        <el-button type="text" icon="el-icon-view" v-if="permissionList.viewBtn"
+          @click.stop="$refs.crud.rowView(row, index)">查看</el-button>
+        <el-button type="text" icon="el-icon-edit" v-if="permissionList.editBtn"
+          @click.stop="$refs.crud.rowEdit(row, index)">编辑</el-button>
       </template>
     </avue-crud>
   </basic-container>
 </template>
 
 <script>
-import { getList, remove, update, add, getDetail } from '@/api/system/sysConfig';
-import { mapGetters } from 'vuex';
+import { getList, remove, update, add, getDetail } from '@/api/system/sysConfig'
+import { mapGetters } from 'vuex'
 
 export default {
-  data() {
+  data () {
     return {
       form: {},
       query: {},
@@ -85,6 +52,10 @@
         excelBtn: true,
         dialogClickModal: false,
         grid: false,
+
+        height: 'auto',
+        calcHeight: 20,
+
         column: [
           {
             label: '系统名称',
@@ -149,97 +120,97 @@
         ],
       },
       data: [],
-    };
+    }
   },
   computed: {
     ...mapGetters(['permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.permission.sysConfig_add,
         viewBtn: this.permission.sysConfig_view,
         delBtn: this.permission.sysConfig_delete,
         editBtn: this.permission.sysConfig_edit,
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
   methods: {
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       add(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
+    rowUpdate (row, index, done, loading) {
       update(row).then(
         () => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -247,68 +218,59 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getDetail(this.form.id).then(res => {
-          this.form = res.data.data;
-        });
+          this.form = res.data.data
+        })
       }
-      done();
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      const { releaseTimeRange } = this.query;
+    onLoad (page, params = {}) {
+      const { releaseTimeRange } = this.query
       let values = {
         ...params,
         ...this.query,
-      };
+      }
       if (releaseTimeRange) {
         values = {
           ...values,
           releaseTime_datege: releaseTimeRange[0],
           releaseTime_datelt: releaseTimeRange[1],
-        };
-        values.releaseTimeRange = null;
+        }
+        values.releaseTimeRange = null
       }
-      this.loading = true;
+      this.loading = true
       getList(page.currentPage, page.pageSize, values).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
   },
-};
+}
 </script>
 
-<style scoped lang="scss">
-  :deep(){
-    .avue-crud__body{
-      .el-form{
-        height: 745px;
-        overflow: auto;
-      }
-    }
-  }
-</style>
+<style scoped lang="scss"></style>
diff --git a/src/views/system/user.vue b/src/views/system/user.vue
index ffe6b58..09c1674 100644
--- a/src/views/system/user.vue
+++ b/src/views/system/user.vue
@@ -1,16 +1,19 @@
 <template>
-  <el-row>
-    <el-col :span="5">
-      <div class="box">
+  <div class="manage-p-all-10 manage-p-t-0 manage-h-0 manage-flex-1 manage-flex">
+    <div
+      class="manage-p-all-20 manage-flex-2 manage-h-100 manage-b-r-5 manage-box-s-b-b manage-overflow-h manage-b-c-w">
+      <div class="box ">
         <el-scrollbar>
-          <basic-container>
+          <div class="manage-w-100 manage-h-100">
             <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick" />
-          </basic-container>
+          </div>
         </el-scrollbar>
       </div>
-    </el-col>
-    <el-col :span="19">
-      <basic-container>
+    </div>
+
+    <div
+      class="manage-p-all-10 manage-p-t-0 manage-p-b-0 manage-flex-9 manage-h-100 manage-flex manage-box-s-b-b manage-f-d-c">
+      <div class="manage-p-all-20 manage-h-100 manage-box-s-b-b manage-b-c-w  manage-b-r-5">
         <avue-crud :option="option" v-model:search="search" :table-loading="loading" :data="data" ref="crud"
           v-model="form" :permission="permissionList" @row-del="rowDel" @row-update="rowUpdate" @row-save="rowSave"
           :before-open="beforeOpen" v-model:page="page" @search-change="searchChange" @search-reset="searchReset"
@@ -26,8 +29,8 @@
             <el-button type="primary" plain icon="el-icon-operation"
               v-if="userInfo.role_name.includes('admin') && !auditMode" @click="handleAudit">审 核
             </el-button>
-            <el-button type="success" plain icon="el-icon-check" v-if="userInfo.role_name.includes('admin') && auditMode"
-              @click="handleAuditPass">通 过
+            <el-button type="success" plain icon="el-icon-check"
+              v-if="userInfo.role_name.includes('admin') && auditMode" @click="handleAuditPass">通 过
             </el-button>
             <el-button type="danger" plain icon="el-icon-close" v-if="userInfo.role_name.includes('admin') && auditMode"
               @click="handleAuditRefuse">拒 绝
@@ -41,8 +44,8 @@
             <el-button type="info" plain v-if="permission.user_reset && !auditMode" icon="el-icon-refresh"
               @click="handleReset">密码重置
             </el-button>
-            <el-button type="info" plain v-if="userInfo.role_name.includes('admin') && !auditMode" icon="el-icon-setting"
-              @click="handlePlatform">平台配置
+            <el-button type="info" plain v-if="userInfo.role_name.includes('admin') && !auditMode"
+              icon="el-icon-setting" @click="handlePlatform">平台配置
             </el-button>
             <el-button type="info" plain v-if="userInfo.role_name.includes('admin') && !auditMode"
               icon="el-icon-coordinate" @click="handleLock">账号解封
@@ -66,7 +69,7 @@
           <template #userTypeName="{ row }">
             <el-tag>{{ row.userTypeName }}</el-tag>
           </template>
-         
+
         </avue-crud>
         <el-dialog title="用户角色配置" append-to-body v-model="roleBox" width="345px">
           <el-tree :data="roleGrantList" show-checkbox check-strictly default-expand-all node-key="id" ref="treeRole"
@@ -103,9 +106,9 @@
             </template>
           </avue-crud>
         </el-dialog>
-      </basic-container>
-    </el-col>
-  </el-row>
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
@@ -122,37 +125,37 @@
   unlock,
   auditPass,
   auditRefuse,
-} from '@/api/system/user';
-import { exportBlob } from '@/api/common';
-import { getDeptTree, getDeptLazyTree } from '@/api/system/dept';
-import { getRoleTree } from '@/api/system/role';
-import { getPostList } from '@/api/system/post';
-import { mapGetters } from 'vuex';
-import website from '@/config/website';
-import { getToken } from '@/utils/auth';
-import { downloadXls } from '@/utils/util';
-import NProgress from 'nprogress';
-import 'nprogress/nprogress.css';
-import func from '@/utils/func';
+} from '@/api/system/user'
+import { exportBlob } from '@/api/common'
+import { getDeptTree, getDeptLazyTree } from '@/api/system/dept'
+import { getRoleTree } from '@/api/system/role'
+import { getPostList } from '@/api/system/post'
+import { mapGetters } from 'vuex'
+import website from '@/config/website'
+import { getToken } from '@/utils/auth'
+import { downloadXls } from '@/utils/util'
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import func from '@/utils/func'
 
 export default {
-  data() {
+  data () {
     const validatePass = (rule, value, callback) => {
       if (value === '') {
-        callback(new Error('请输入密码'));
+        callback(new Error('请输入密码'))
       } else {
-        callback();
+        callback()
       }
-    };
+    }
     const validatePass2 = (rule, value, callback) => {
       if (value === '') {
-        callback(new Error('请再次输入密码'));
+        callback(new Error('请再次输入密码'))
       } else if (value !== this.form.password) {
-        callback(new Error('两次输入密码不一致!'));
+        callback(new Error('两次输入密码不一致!'))
       } else {
-        callback();
+        callback()
       }
-    };
+    }
     return {
       form: {
         flightStartTime: null, // 飞行事件开始时间
@@ -194,11 +197,11 @@
         nodeKey: 'id',
         lazy: true,
         treeLoad: function (node, resolve) {
-          const parentId = node.level === 0 ? 0 : node.data.id;
-          console.log(node,666)
+          const parentId = node.level === 0 ? 0 : node.data.id
+          console.log(node, 666)
           const param = {
-            parentId:parentId,
-            level:node.level
+            parentId: parentId,
+            level: node.level
           }
           getDeptLazyTree(param).then(res => {
             resolve(
@@ -206,10 +209,10 @@
                 return {
                   ...item,
                   leaf: !item.hasChildren,
-                };
+                }
               })
-            );
-          });
+            )
+          })
         },
         addBtn: false,
         menu: false,
@@ -222,8 +225,6 @@
         },
       },
       option: {
-        // height: 'auto',
-        // calcHeight: 140,
         tip: false,
         searchShow: true,
         searchMenuSpan: 6,
@@ -234,6 +235,9 @@
         viewBtn: true,
         dialogType: 'drawer',
         dialogClickModal: false,
+
+        height: 'auto',
+        calcHeight: 20,
         column: [
           {
             label: '登录账号',
@@ -367,7 +371,7 @@
                 viewDisplay: false,
                 rules: [{ required: true, validator: validatePass2, trigger: 'blur' }],
               },
-            
+
             ],
           },
           {
@@ -501,32 +505,32 @@
                   },
                 ],
               },
-             
+
             ],
           },
-           {
+          {
             label: '登录限制',
             prop: '',
             icon: 'el-icon-s-custom',
             column: [
-               {
+              {
                 label: '到期时间',
                 prop: 'expireTime',
                 type: 'datetime',
                 format: 'YYYY-MM-DD HH:mm:ss',
                 valueFormat: 'YYYY-MM-DD HH:mm:ss',
               },
-                {
+              {
                 label: '次数限制',
                 prop: 'maxLoginNum',
                 type: 'input',
               },
 
-               {
+              {
                 label: '飞行开始时间',
                 prop: 'flightStartTime',
-               type: 'time',
-                 format: 'HH:mm',
+                type: 'time',
+                format: 'HH:mm',
                 valueFormat: 'HH:mm',
                 rules: [
                   {
@@ -550,9 +554,9 @@
                   },
                 ],
               },
-        
-               
-      
+
+
+
             ],
           },
         ],
@@ -683,206 +687,206 @@
           },
         ],
       },
-    };
+    }
   },
   watch: {
-    'form.tenantId'() {
+    'form.tenantId' () {
       if (this.form.tenantId !== '' && this.initFlag) {
-        this.initData(this.form.tenantId);
+        this.initData(this.form.tenantId)
       }
     },
-    'excelForm.isCovered'() {
+    'excelForm.isCovered' () {
       if (this.excelForm.isCovered !== '') {
-        const column = this.findObject(this.excelOption.column, 'excelFile');
-        column.action = `/blade-system/user/import-user?isCovered=${this.excelForm.isCovered}`;
+        const column = this.findObject(this.excelOption.column, 'excelFile')
+        column.action = `/blade-system/user/import-user?isCovered=${this.excelForm.isCovered}`
       }
     },
   },
   computed: {
     ...mapGetters(['userInfo', 'permission']),
-    permissionList() {
+    permissionList () {
       return {
         addBtn: this.validData(this.permission.user_add, false),
         viewBtn: this.validData(this.permission.user_view, false),
         delBtn: this.validData(this.permission.user_delete, false),
         editBtn: this.validData(this.permission.user_edit, false),
-      };
+      }
     },
-    platformPermissionList() {
+    platformPermissionList () {
       return {
         addBtn: false,
         viewBtn: false,
         delBtn: false,
         editBtn: this.validData(this.permission.user_edit, false),
-      };
+      }
     },
-    ids() {
-      let ids = [];
+    ids () {
+      let ids = []
       this.selectionList.forEach(ele => {
-        ids.push(ele.id);
-      });
-      return ids.join(',');
+        ids.push(ele.id)
+      })
+      return ids.join(',')
     },
   },
-  mounted() {
+  mounted () {
     // 非租户模式默认加载管理组数据
     if (!website.tenantMode) {
-      this.initData(website.tenantId);
+      this.initData(website.tenantId)
     }
-    this.initData(this.form.tenantId);
+    this.initData(this.form.tenantId)
   },
   methods: {
-    nodeClick(data) {
-      this.treeDeptId = data.id;
-      this.page.currentPage = 1;
-      this.onLoad(this.page);
+    nodeClick (data) {
+      this.treeDeptId = data.id
+      this.page.currentPage = 1
+      this.onLoad(this.page)
     },
-    initData(tenantId) {
-      tenantId = '000000';
+    initData (tenantId) {
+      tenantId = '000000'
       getRoleTree(tenantId).then(res => {
-        const column = this.findObject(this.option.group, 'roleId');
-        column.dicData = res.data.data;
-      });
+        const column = this.findObject(this.option.group, 'roleId')
+        column.dicData = res.data.data
+      })
       getDeptTree(tenantId).then(res => {
-        const column = this.findObject(this.option.group, 'deptId');
-        column.dicData = res.data.data;
-      });
+        const column = this.findObject(this.option.group, 'deptId')
+        column.dicData = res.data.data
+      })
       // getPostList(tenantId).then(res => {
       //   const column = this.findObject(this.option.group, 'postId');
       //   column.dicData = res.data.data;
       // });
     },
-    submitRole() {
-      const roleList = this.$refs.treeRole.getCheckedKeys().join(',');
+    submitRole () {
+      const roleList = this.$refs.treeRole.getCheckedKeys().join(',')
       grant(this.ids, roleList).then(() => {
-        this.roleBox = false;
+        this.roleBox = false
         this.$message({
           type: 'success',
           message: '操作成功!',
-        });
-        this.onLoad(this.page);
-      });
+        })
+        this.onLoad(this.page)
+      })
     },
-    rowSave(row, done, loading) {
+    rowSave (row, done, loading) {
       // 格式化时间数据
-     
-       if (row.flightStartTime && row.flightEndTime) {
-    // 验证 flightEndTime 是否小于 flightStartTime
-   const [startHours, startMinutes] = row.flightStartTime.split(':').map(Number);
-    const [endHours, endMinutes] = row.flightEndTime.split(':').map(Number);
 
-    const startTotalMinutes = startHours * 60 + startMinutes;
-    const endTotalMinutes = endHours * 60 + endMinutes;
+      if (row.flightStartTime && row.flightEndTime) {
+        // 验证 flightEndTime 是否小于 flightStartTime
+        const [startHours, startMinutes] = row.flightStartTime.split(':').map(Number)
+        const [endHours, endMinutes] = row.flightEndTime.split(':').map(Number)
 
-    if (endTotalMinutes < startTotalMinutes) {
-        this.$message.error('飞行结束时间不能小于飞行开始时间');
-            loading();
-        return;
-    }
-       }
-    
-      row.deptId = func.join(row.deptId);
-      row.roleId = func.join(row.roleId);
-      row.postId = func.join(row.postId);
+        const startTotalMinutes = startHours * 60 + startMinutes
+        const endTotalMinutes = endHours * 60 + endMinutes
+
+        if (endTotalMinutes < startTotalMinutes) {
+          this.$message.error('飞行结束时间不能小于飞行开始时间')
+          loading()
+          return
+        }
+      }
+
+      row.deptId = func.join(row.deptId)
+      row.roleId = func.join(row.roleId)
+      row.postId = func.join(row.postId)
       row.name = row.realName
       add(row).then(
         () => {
-          this.initFlag = false;
-          this.onLoad(this.page);
+          this.initFlag = false
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowUpdate(row, index, done, loading) {
-         // 格式化时间数据
+    rowUpdate (row, index, done, loading) {
+      // 格式化时间数据
       // if (row.flightStartTime) {
       //   row.flightStartTime = this.formatTime(row.flightStartTime);
       // }
       // if (row.flightEndTime) {
       //   row.flightEndTime = this.formatTime(row.flightEndTime);
       // }
-       if (row.flightStartTime && row.flightEndTime) {
-    // 验证 flightEndTime 是否小于 flightStartTime
-   const [startHours, startMinutes] = row.flightStartTime.split(':').map(Number);
-    const [endHours, endMinutes] = row.flightEndTime.split(':').map(Number);
+      if (row.flightStartTime && row.flightEndTime) {
+        // 验证 flightEndTime 是否小于 flightStartTime
+        const [startHours, startMinutes] = row.flightStartTime.split(':').map(Number)
+        const [endHours, endMinutes] = row.flightEndTime.split(':').map(Number)
 
-    const startTotalMinutes = startHours * 60 + startMinutes;
-    const endTotalMinutes = endHours * 60 + endMinutes;
+        const startTotalMinutes = startHours * 60 + startMinutes
+        const endTotalMinutes = endHours * 60 + endMinutes
 
-    if (endTotalMinutes < startTotalMinutes) {
-        this.$message.error('飞行结束时间不能小于飞行开始时间');
-           loading();
-        return ;
+        if (endTotalMinutes < startTotalMinutes) {
+          this.$message.error('飞行结束时间不能小于飞行开始时间')
+          loading()
+          return
+        }
       }
-       }
-    
-      row.deptId = func.join(row.deptId);
-      row.roleId = func.join(row.roleId);
-      row.postId = func.join(row.postId);
+
+      row.deptId = func.join(row.deptId)
+      row.roleId = func.join(row.roleId)
+      row.postId = func.join(row.postId)
       row.name = row.realName
       update(row).then(
         () => {
-          this.initFlag = false;
-          this.onLoad(this.page);
+          this.initFlag = false
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       })
         .then(() => {
-          return remove(row.id);
+          return remove(row.id)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    searchReset() {
-      this.query = {};
-      this.treeDeptId = '';
-      this.onLoad(this.page);
+    searchReset () {
+      this.query = {}
+      this.treeDeptId = ''
+      this.onLoad(this.page)
     },
-    searchChange(params, done) {
-      this.query = params;
-      this.page.currentPage = 1;
-      this.onLoad(this.page, params);
-      done();
+    searchChange (params, done) {
+      this.query = params
+      this.page.currentPage = 1
+      this.onLoad(this.page, params)
+      done()
     },
-    selectionChange(list) {
-      this.selectionList = list;
+    selectionChange (list) {
+      this.selectionList = list
     },
-    selectionClear() {
-      this.selectionList = [];
-      this.$refs.crud.toggleSelection();
+    selectionClear () {
+      this.selectionList = []
+      this.$refs.crud.toggleSelection()
     },
-    handleDelete() {
+    handleDelete () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据删除?', {
         confirmButtonText: '确定',
@@ -890,25 +894,25 @@
         type: 'warning',
       })
         .then(() => {
-          return remove(this.ids);
+          return remove(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    handleAudit() {
-      this.auditMode = true;
-      this.onLoad(this.page, this.query);
+    handleAudit () {
+      this.auditMode = true
+      this.onLoad(this.page, this.query)
     },
-    handleAuditPass() {
+    handleAuditPass () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据通过审核?', {
         confirmButtonText: '确定',
@@ -916,21 +920,21 @@
         type: 'warning',
       })
         .then(() => {
-          return auditPass(this.ids);
+          return auditPass(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    handleAuditRefuse() {
+    handleAuditRefuse () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择数据拒绝审核?', {
         confirmButtonText: '确定',
@@ -938,25 +942,25 @@
         type: 'warning',
       })
         .then(() => {
-          return auditRefuse(this.ids);
+          return auditRefuse(this.ids)
         })
         .then(() => {
-          this.onLoad(this.page);
+          this.onLoad(this.page)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    handleAuditBack() {
-      this.auditMode = false;
-      this.onLoad(this.page, this.query);
+    handleAuditBack () {
+      this.auditMode = false
+      this.onLoad(this.page, this.query)
     },
-    handleReset() {
+    handleReset () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择账号密码重置为123456?', {
         confirmButtonText: '确定',
@@ -964,37 +968,37 @@
         type: 'warning',
       })
         .then(() => {
-          return resetPassword(this.ids);
+          return resetPassword(this.ids)
         })
         .then(() => {
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          this.$refs.crud.toggleSelection();
-        });
+          })
+          this.$refs.crud.toggleSelection()
+        })
     },
-    handleGrant() {
+    handleGrant () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
-      this.roleTreeObj = [];
+      this.roleTreeObj = []
       if (this.selectionList.length === 1) {
-        this.roleTreeObj = this.selectionList[0].roleId.split(',');
+        this.roleTreeObj = this.selectionList[0].roleId.split(',')
       }
       getRoleTree().then(res => {
-        this.roleGrantList = res.data.data;
-        this.roleBox = true;
-      });
+        this.roleGrantList = res.data.data
+        this.roleBox = true
+      })
     },
-    handlePlatform() {
-      this.platformBox = true;
+    handlePlatform () {
+      this.platformBox = true
     },
-    handleLock() {
+    handleLock () {
       if (this.selectionList.length === 0) {
-        this.$message.warning('请选择至少一条数据');
-        return;
+        this.$message.warning('请选择至少一条数据')
+        return
       }
       this.$confirm('确定将选择账号解封?', {
         confirmButtonText: '确定',
@@ -1002,180 +1006,178 @@
         type: 'warning',
       })
         .then(() => {
-          return unlock(this.ids);
+          return unlock(this.ids)
         })
         .then(() => {
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-        });
+          })
+        })
     },
-    handleImport() {
-      this.excelBox = true;
+    handleImport () {
+      this.excelBox = true
     },
-    uploadAfter(res, done, loading, column) {
-      window.console.log(column);
-      this.excelBox = false;
-      this.refreshChange();
-      done();
+    uploadAfter (res, done, loading, column) {
+      window.console.log(column)
+      this.excelBox = false
+      this.refreshChange()
+      done()
     },
-    handleExport() {
-      const account = func.toStr(this.search.account);
-      const realName = func.toStr(this.search.realName);
+    handleExport () {
+      const account = func.toStr(this.search.account)
+      const realName = func.toStr(this.search.realName)
       this.$confirm('是否导出用户数据?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning',
       }).then(() => {
-        NProgress.start();
+        NProgress.start()
         exportBlob(
           `/blade-system/user/export-user?${this.website.tokenHeader
           }=${getToken()}&account=${account}&realName=${realName}`
         ).then(res => {
-          downloadXls(res.data, `用户数据表${this.$dayjs().format('YYYY-MM-DD')}.xlsx`);
-          NProgress.done();
-        });
-      });
+          downloadXls(res.data, `用户数据表${this.$dayjs().format('YYYY-MM-DD')}.xlsx`)
+          NProgress.done()
+        })
+      })
     },
-    handleTemplate() {
+    handleTemplate () {
       exportBlob(
         `/blade-system/user/export-template?${this.website.tokenHeader}=${getToken()}`
       ).then(res => {
-        downloadXls(res.data, '用户数据模板.xlsx');
-      });
+        downloadXls(res.data, '用户数据模板.xlsx')
+      })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getUser(this.form.id).then(res => {
-          this.form = res.data.data;
+          this.form = res.data.data
           if (this.form.hasOwnProperty('deptId')) {
-            this.form.deptId = func.split(this.form.deptId);
+            this.form.deptId = func.split(this.form.deptId)
           }
           if (this.form.hasOwnProperty('roleId')) {
-            this.form.roleId = func.split(this.form.roleId);
+            this.form.roleId = func.split(this.form.roleId)
           }
           if (this.form.hasOwnProperty('postId')) {
-            this.form.postId = func.split(this.form.postId);
+            this.form.postId = func.split(this.form.postId)
           }
 
-        });
+        })
       }
-      this.initFlag = true;
-      done();
+      this.initFlag = true
+      done()
     },
-    currentChange(currentPage) {
-      this.page.currentPage = currentPage;
+    currentChange (currentPage) {
+      this.page.currentPage = currentPage
     },
-    sizeChange(pageSize) {
-      this.page.pageSize = pageSize;
+    sizeChange (pageSize) {
+      this.page.pageSize = pageSize
     },
-    refreshChange() {
-      this.onLoad(this.page, this.query);
+    refreshChange () {
+      this.onLoad(this.page, this.query)
     },
-    onLoad(page, params = {}) {
-      this.loading = true;
+    onLoad (page, params = {}) {
+      this.loading = true
       getList(
         page.currentPage,
         page.pageSize,
         Object.assign(params, this.query, { status: this.auditMode ? 0 : 1 }),
         this.treeDeptId
       ).then(res => {
-        const data = res.data.data;
-        this.page.total = data.total;
-        this.data = data.records;
-        this.loading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.page.total = data.total
+        this.data = data.records
+        this.loading = false
+        this.selectionClear()
+      })
     },
-    platformRowUpdate(row, index, done, loading) {
+    platformRowUpdate (row, index, done, loading) {
       updatePlatform(row.id, row.userType, row.userExt).then(
         () => {
-          this.platformOnLoad(this.platformPage);
+          this.platformOnLoad(this.platformPage)
           this.$message({
             type: 'success',
             message: '操作成功!',
-          });
-          done();
+          })
+          done()
         },
         error => {
-          window.console.log(error);
-          loading();
+          window.console.log(error)
+          loading()
         }
-      );
+      )
     },
-    platformBeforeOpen(done, type) {
+    platformBeforeOpen (done, type) {
       if (['edit', 'view'].includes(type)) {
         getUserPlatform(this.platformForm.id).then(res => {
-          this.platformForm = res.data.data;
-        });
+          this.platformForm = res.data.data
+        })
       }
-      done();
+      done()
     },
-    platformSearchReset() {
-      this.platformQuery = {};
-      this.platformOnLoad(this.platformPage);
+    platformSearchReset () {
+      this.platformQuery = {}
+      this.platformOnLoad(this.platformPage)
     },
-    platformSearchChange(params, done) {
-      this.platformQuery = params;
-      this.platformPage.currentPage = 1;
-      this.platformOnLoad(this.platformPage, params);
-      done();
+    platformSearchChange (params, done) {
+      this.platformQuery = params
+      this.platformPage.currentPage = 1
+      this.platformOnLoad(this.platformPage, params)
+      done()
     },
-    platformSelectionChange(list) {
-      this.platformSelectionList = list;
+    platformSelectionChange (list) {
+      this.platformSelectionList = list
     },
-    platformSelectionClear() {
-      this.platformSelectionList = [];
-      this.$refs.platformCrud.toggleSelection();
+    platformSelectionClear () {
+      this.platformSelectionList = []
+      this.$refs.platformCrud.toggleSelection()
     },
-    platformCurrentChange(currentPage) {
-      this.platformPage.currentPage = currentPage;
+    platformCurrentChange (currentPage) {
+      this.platformPage.currentPage = currentPage
     },
-    platformSizeChange(pageSize) {
-      this.platformPage.pageSize = pageSize;
+    platformSizeChange (pageSize) {
+      this.platformPage.pageSize = pageSize
     },
-    platformRefreshChange() {
-      this.platformOnLoad(this.platformPage, this.platformQuery);
+    platformRefreshChange () {
+      this.platformOnLoad(this.platformPage, this.platformQuery)
     },
-    platformOnLoad(page, params = {}) {
-      this.platformLoading = true;
+    platformOnLoad (page, params = {}) {
+      this.platformLoading = true
       getList(
         page.currentPage,
         page.pageSize,
         Object.assign(params, this.query),
         this.treeDeptId
       ).then(res => {
-        const data = res.data.data;
-        this.platformPage.total = data.total;
-        this.platformData = data.records;
-        this.platformLoading = false;
-        this.selectionClear();
-      });
+        const data = res.data.data
+        this.platformPage.total = data.total
+        this.platformData = data.records
+        this.platformLoading = false
+        this.selectionClear()
+      })
     },
-    formatTime(time) {
+    formatTime (time) {
       // 格式化时间为 HH:mm
-      const date = new Date(time);
-      const hours = String(date.getHours()).padStart(2, '0');
-      const minutes = String(date.getMinutes()).padStart(2, '0');
-      return `${hours}:${minutes}`;
+      const date = new Date(time)
+      const hours = String(date.getHours()).padStart(2, '0')
+      const minutes = String(date.getMinutes()).padStart(2, '0')
+      return `${hours}:${minutes}`
     },
   },
-};
+}
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .box {
-  height: 800px;
-}
-
-.el-scrollbar {
   height: 100%;
 }
 
-.box .el-scrollbar__wrap {
-  overflow: scroll;
+::v-deep(.el-scrollbar) {
+  height: 100%;
+
+  .el-scrollbar__wrap {
+    overflow: auto;
+  }
 }
-
-
 </style>
diff --git a/src/views/system/userinfo.vue b/src/views/system/userinfo.vue
index 9d39e51..acef2d7 100644
--- a/src/views/system/userinfo.vue
+++ b/src/views/system/userinfo.vue
@@ -111,7 +111,9 @@
     <!-- 密钥上传 -->
     <div class="upload-file" v-else-if="checked === 2">
       <img v-if="isSuccess === 'success'" :src="uploadSuccess" alt="" />
+      <div v-if="isSuccess === 'success'">上传成功</div>
       <img v-if="isSuccess === 'error'" :src="uploadError" alt="" />
+      <div v-if="isSuccess === 'error'">上传失败</div>
       <el-upload
         action="/upload"
         accept=".lic"
@@ -419,12 +421,17 @@
   .upload-btn {
     width: 93px;
     height: 38px;
-    line-height: 38px;
-    background: #1b3e6c;
+    background: #DDEBFF;
     border-radius: 8px 8px 8px 8px;
-    border: 1px solid #ffffff;
-    color: #fff;
+    border: 1px solid #409EFF;
     text-align: center;
+    font-family: Source Han Sans CN, Source Han Sans CN;
+    font-weight: bold;
+    font-size: 14px;
+    color: #228CFA;
+    line-height: 38px;
+    text-align: center;
+    margin-top: 10px;
   }
   .password-time {
     margin-top: 50px;
diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index fab04ab..514e6dd 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -4,15 +4,15 @@
  * @LastEditors: shuishen 1109946754@qq.com
  * @LastEditTime: 2025-04-28 11:38:16
  * @FilePath: \drone-web-manage\src\views\tickets\orderLog.vue
- * @Description: 
- * 
- * Copyright (c) 2025 by shuishen, All Rights Reserved. 
+ * @Description:
+ *
+ * Copyright (c) 2025 by shuishen, All Rights Reserved.
 -->
 <template>
   <basic-container>
     <el-tabs v-model="activeTab" @tab-click="handleTabChange">
       <el-tab-pane v-for="tab in filteredTabs" :key="tab.name" :label="`${tab.label} (${tab.count})`" :name="tab.name">
-        <div class="tab-content">
+        <basic-main-content>
           <!-- 查询条件筛选栏 -->
           <div class="filter-bar">
             <div class="search-bar-box">
@@ -92,7 +92,7 @@
           <!-- 表格部分 -->
           <avue-crud :data="tableData" :option="option" v-model:page="page" ref="crud" :table-loading="loading"
             @current-change="currentChange" @refresh-change="refreshChange" @on-load="onLoad"
-            @search-change="searchChange" @size-change="sizeChange">
+            @search-change="searchChange" @size-change="sizeChange" v-if="activeTab === tab.name">
             <template #menu-left>
               <el-button v-if="hasAddBtnPermission() && activeTab != 'WAIT_AUDIT'" type="primary" icon="el-icon-plus"
                 @click="handleAdd">新建工单</el-button>
@@ -111,7 +111,9 @@
                   " -->
                 <template v-if="row.status == 1">
                   <!--待审核状态-->
-                  <el-button type="text" icon="el-icon-warning" @click="orderLogRecall(row.id)">撤回</el-button>
+                  <el-button type="text" icon="el-icon-warning" v-if="hasRecallPaddingBtnPermission()"
+                    @click="orderLogRecall(row.id)">撤回</el-button>
+                  <el-button type="text" icon="el-icon-view" @click="handleViewDetail(row)">详情</el-button>
                 </template>
                 <!--已驳回-->
                 <template v-if="row.status == 2">
@@ -139,7 +141,7 @@
               </el-tooltip>
             </template>
           </avue-crud>
-        </div>
+        </basic-main-content>
       </el-tab-pane>
     </el-tabs>
 
@@ -341,7 +343,7 @@
             <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
                             @click="submitForm(0)">保存</el-button> -->
 
-            <el-button type="primary" v-if="form.status == 1 && this.permission.orderLogpass"
+            <el-button type="primary" v-if="form.status == 1 && hasPaddingBtnPermission()"
               @click="orderLogPass(form.id)">通过</el-button>
             <el-button type="danger" v-if="form.status == 1 && hasRejectionBtnPermission()"
               @click="orderLogReject(form.id)">驳回</el-button>
@@ -465,7 +467,7 @@
             <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
                             @click="submitForm(0)">保存</el-button> -->
 
-            <el-button type="primary" v-if="form.status == 1 && this.permission.orderLogpass"
+            <el-button type="primary" v-if="form.status == 1 && hasPaddingBtnPermission()"
               @click="orderLogPass(form.id)">通过</el-button>
             <el-button type="danger" v-if="form.status == 1 && hasRejectionBtnPermission()"
               @click="orderLogReject(form.id)">驳回</el-button>
@@ -566,20 +568,60 @@
         menu: true,
         menuWidth: 210,
         menuClassName: 'cur-menu',
-        column: [
-          { label: '工单编号', prop: 'job_info_num', width: 100, ellipsis: true, overHidden: true },
-          { label: '工单名称', prop: 'name', width: 100, ellipsis: true, overHidden: true },
-          { label: '工单状态', prop: 'status', width: 88 },
-          { label: '所属单位', prop: 'dept_name', width: 100, ellipsis: true },
-          { label: '发起时间', prop: 'create_time', width: 144, ellipsis: true },
-          { label: '已执行次数', prop: 'job_num', width: 96, ellipsis: true },
-          { label: '工单内容', prop: 'content', ellipsis: true, overHidden: true },
-          { label: '关联航线', prop: 'wayline_name', width: 100, ellipsis: true, overHidden: true },
-          { label: '关联算法', prop: 'ai_type_str', width: 100, ellipsis: true, overHidden: true },
-          { label: '关联机巢', prop: 'device_names', width: 100, ellipsis: true, overHidden: true },
 
-          { label: '创建人', prop: 'creator_name', width: 96, ellipsis: true, overHidden: true },
-          { label: '关联机巢', prop: 'device_names', width: 112, ellipsis: true, overHidden: true },
+        height: 'auto',
+        calcHeight: 196,
+
+        column: [
+          {
+            label: '工单编号', prop: 'job_info_num', width: 100, ellipsis: true, overHidden: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '工单名称', prop: 'name', width: 100, ellipsis: true, overHidden: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '工单状态', prop: 'status', width: 88,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '所属单位', prop: 'dept_name', width: 100, ellipsis: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '发起时间', prop: 'create_time', width: 144, ellipsis: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '已执行次数', prop: 'job_num', width: 96, ellipsis: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '工单内容', prop: 'content', ellipsis: true, overHidden: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '关联航线', prop: 'wayline_name', width: 100, ellipsis: true, overHidden: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '关联算法', prop: 'ai_type_str', width: 100, ellipsis: true, overHidden: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '关联机巢', prop: 'device_names', width: 100, ellipsis: true, overHidden: true,
+            showOverflowTooltip: true,
+          },
+
+          {
+            label: '创建人', prop: 'creator_name', width: 96, ellipsis: true, overHidden: true,
+            showOverflowTooltip: true,
+          },
+          {
+            label: '关联机巢', prop: 'device_names', width: 112, ellipsis: true, overHidden: true,
+            showOverflowTooltip: true,
+          },
           {
             label: '工单周期频次',
             prop: '',
@@ -587,6 +629,7 @@
             formatter: row => this.formatCycleTime(row),
             html: true,
             ellipsis: true,
+            showOverflowTooltip: true,
             // overHidden: true
           },
         ],
@@ -1083,7 +1126,7 @@
 
         //按照航线来
         const params = {
-          type: currentLine.wayline_type,
+          type: [2, 4, 5].includes(currentLine.wayline_type) ? 2 : 0,
           wayline_id: waylineId,
           polygon
         }
@@ -1114,6 +1157,9 @@
       let data = response.data.data
       this.$message.success('审核通过')
       this.detailVisibleCopy = false
+
+      this.page.currentPage = 1
+      this.onLoad(this.page, this.query)
     },
     /**
      * 驳回
@@ -1125,8 +1171,11 @@
       }).then(async ({ value }) => {
         let response = await orderLogReject(id, value)
         let data = response.data.data
-        this.$message.success('驳回成果')
+        this.$message.success('驳回成功')
         this.detailVisibleCopy = false
+
+        this.page.currentPage = 1
+        this.onLoad(this.page, this.query)
       })
     },
   },
@@ -1143,42 +1192,32 @@
 </script>
 
 <style lang="scss" scoped>
-:deep() {
-  .avue-crud__body {
-    .el-form {
-      height: 625px;
-      overflow: auto;
+::v-deep(.el-tabs) {
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+
+  .el-tabs__header {
+    order: 1;
+  }
+
+  .el-tabs__content {
+    order: 2;
+  }
+
+  .el-tabs__content {
+    height: 0;
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+
+    .el-tab-pane {
+      height: 0;
+      flex: 1;
+      display: flex;
+      flex-direction: column;
     }
   }
-}
-
-:deep(.el-pagination .el-select) {
-  width: 128px !important;
-}
-
-.step-timer {
-  position: absolute;
-  left: 80%;
-  top: 50%;
-  transform: translateY(-50%);
-  width: 100px;
-  margin-left: 4px;
-  color: #666;
-  font-size: 12px;
-}
-
-:deep(.el-textarea__inner) {
-  padding: 8px 12px;
-}
-
-:deep(.el-input__inner),
-:deep(.el-select),
-:deep(.el-select .el-input) {
-  width: 100%; // 确保所有输入框和选择框宽度一致
-}
-
-.tab-content {
-  padding: 10px;
 }
 
 .filter-bar {
@@ -1211,6 +1250,31 @@
   }
 }
 
+:deep(.el-pagination .el-select) {
+  width: 128px !important;
+}
+
+.step-timer {
+  position: absolute;
+  left: 80%;
+  top: 50%;
+  transform: translateY(-50%);
+  width: 100px;
+  margin-left: 4px;
+  color: #666;
+  font-size: 12px;
+}
+
+:deep(.el-textarea__inner) {
+  padding: 8px 12px;
+}
+
+:deep(.el-input__inner),
+:deep(.el-select),
+:deep(.el-select .el-input) {
+  width: 100%; // 确保所有输入框和选择框宽度一致
+}
+
 .action-bar {
   margin-bottom: 16px;
 }
@@ -1218,25 +1282,6 @@
 .el-tabs {
   :deep(.el-tabs__content) {
     overflow: visible;
-  }
-}
-
-.tab-content {
-  min-height: 200px;
-}
-
-.detail-form {
-  :deep(.el-form-item) {
-    margin-bottom: 10px;
-  }
-
-  :deep(.el-form-item__label) {
-    color: #606266;
-    font-weight: normal;
-  }
-
-  :deep(.el-form-item__content) {
-    color: #303133;
   }
 }
 
@@ -1328,12 +1373,9 @@
 
     &> ::v-deep(.el-button) {
       flex: 1;
-      max-width: 44px;
+      margin-left: 0;
       margin-right: 10px;
 
-      &:nth-child(4n) {
-        margin-left: 0;
-      }
     }
   }
 }
diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index cf827b8..8f0b377 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -2,7 +2,7 @@
   <basic-container>
     <el-tabs v-model="activeTab" @tab-click="handleTabChange">
       <el-tab-pane v-for="tab in filteredTabs" :key="tab.name" :label="`${tab.label} (${tab.count})`" :name="tab.name">
-        <div class="tab-content">
+        <basic-main-content>
           <!-- 查询条件筛选栏 -->
           <div class="filter-bar">
             <el-input v-model="filters.keyword" placeholder="请输入关键字" class="filter-item" clearable
@@ -33,7 +33,7 @@
           <!-- 表格部分 -->
           <avue-crud ref="avueCrud" v-model="tableData" :option="option" :data="tableData" v-model:page="page"
             @size-change="sizeChange" @current-change="handleCurrentChange" :table-loading="loading"
-            @selection-change="handleSelectionChange" :permission="permissionList">
+            @selection-change="handleSelectionChange" :permission="permissionList" v-if="activeTab === tab.name">
             <template #menu-left>
               <el-button v-if="(activeTab === 'all' || activeTab === 'myTickets') && permissionList.addBtn"
                 type="primary" icon="el-icon-plus" @click="handleAdd">新建工单</el-button>
@@ -53,8 +53,11 @@
                 <el-button type="text" icon="el-icon-view" @click="handleViewDetail(row)">详情</el-button>
               </template>
 
-              <el-button v-if="row.status === 4 && row.isReview !== 1" type="text" icon="el-icon-check"
-                @click="reCheck(row)">复核</el-button>
+              <template v-if="permission.tickets_repeat_review">
+                <el-button v-if="row.status === 4 && row.isReview !== 1" type="text" icon="el-icon-check"
+                           @click="reCheck(row)">复核</el-button>
+              </template>
+
             </template>
             <template #status="{ row }">
               <span :style="getStatusTagType(row.status) ? 'color:' + getStatusTagType(row.status) : ''">
@@ -69,12 +72,13 @@
               <span>{{ showIsReviewText(row) }}</span>
             </template>
           </avue-crud>
-        </div>
+        </basic-main-content>
       </el-tab-pane>
     </el-tabs>
 
     <!-- 新建工单对话框 -->
-    <el-dialog v-model="dialogVisible" title="新建工单" width="70%" :close-on-click-modal="false" @close="resetForm">
+    <el-dialog v-model="dialogVisible" v-if="dialogVisible" title="新建工单" width="70%" :close-on-click-modal="false"
+      @close="resetForm">
       <el-form :model="form" :rules="rules" ref="form" label-width="90px" class="create-ticket-form">
         <div class="form-section">
           <el-row :gutter="16">
@@ -146,11 +150,15 @@
               <el-form-item label="附件图片" prop="photos" required class="upload-wrapper">
                 <el-upload ref="upload" :action="'#'" :auto-upload="false" list-type="picture-card"
                   :on-change="handleFileChange" :on-remove="handleUploadRemove" :before-upload="beforeUpload"
-                  :file-list="form.photos" :limit="1" accept="image/*" class="create-upload">
+                  :file-list="popupShowImage(form.photos)" :limit="1" accept="image/*" class="create-upload">
                   <template v-if="form.photos.length < 1">
-                    <i class="el-icon-plus">+</i>
+                    <!-- <i class="el-icon-plus">+</i> -->
+                      <div class="el-icon-plus">
+                      <span>+</span>
+                    </div>
                   </template>
                 </el-upload>
+               
                 <div class="upload-tip">需上传含有地址信息的照片(jpg、jpeg、png),且不超过5M</div>
               </el-form-item>
             </el-col>
@@ -169,7 +177,8 @@
     <!-- 工单详情对话框 -->
     <el-dialog v-model="detailVisible" title="工单详情" width="80%" append-to-body>
       <div class="detail-container">
-        <div class="event-title-center">{{ currentDetail.orderName || '事件名称' }}</div>
+        <div class="detail-top-title">  <div class="event-title-center event-orderNumber">{{ currentDetail.orderNumber || '工单编号' }}</div>
+        <div class="event-title-center">{{ currentDetail.orderName || '事件名称' }}</div></div>
         <div v-if="totalTime" class="event-total-time">
           总耗时:{{ totalTime }}
         </div>
@@ -301,7 +310,10 @@
             :before-upload="beforeUpload" :file-list="currentDetail.photos || []" :limit="1" accept="image/*"
             class="detail-upload">
             <template v-if="!currentDetail.photos || currentDetail.photos.length < 1">
-              <i class="el-icon-plus">+</i>
+              <!-- <i class="el-icon-plus">+</i> -->
+              <div class="el-icon-plus">
+                      <span>+</span>
+                    </div>
             </template>
           </el-upload>
           <div class="el-upload__tip" v-if="hasProcessedAndOverBtnPermission()">
@@ -489,13 +501,14 @@
       @close="reCheckDialog = false">
       <div class="dialog-footer">
         <el-button type="primary" @click="reCheckConfirm(1)">人工复核</el-button>
-        <el-button type="primary" @click="reCheckConfirm(2)">AI复核</el-button>
+        <el-button type="primary" @click="reCheckConfirm(2)">无人机复核</el-button>
       </div>
     </el-dialog>
   </basic-container>
 </template>
 
 <script>
+import { getSmallImg,getShowImg } from '@/utils/util';
 import { ElMessageBox, ElLoading } from 'element-plus'
 import { calculateDefaultRange } from '@/utils/util'
 import { gcj02ToWgs84, wgs84ToGcj02 } from '@/utils/coordinateTransformation'
@@ -511,7 +524,6 @@
 } from '@/api/tickets/ticket'
 import { export_json_to_excel } from '@/utils/exportExcel'
 import geoJson from '@/assets/geoJson.json'
-
 import { mapGetters } from 'vuex'
 import { getAdcodeObj } from '@/utils/disposeData'
 function regExp (label, name) {
@@ -585,6 +597,10 @@
         addBtn: false,
         menu: true,
         page: true,
+
+        height: 'auto',
+        calcHeight: 196,
+
         column: [
           // { label: "序号", prop: "id", width: 70 },
           { label: '工单编号', prop: 'orderNumber', width: 120, overHidden: true, tooltip: true },
@@ -718,6 +734,11 @@
 
   mounted () {
     const href = this.$route.href
+    if (this.$route?.query?.status !== undefined && this.$route?.query?.status !== null){
+      this.filters.status = this.$route?.query?.status + ''
+      this.$router.replace({})
+    }
+
     let curQueryParams = {}
 
     if (href.indexOf('?') != -1 && href.split('?').length > 0) {
@@ -956,6 +977,16 @@
         return '/'
       }
     },
+
+    popupShowImage () {
+      return (list) => {
+
+        return list.map(item => ({
+          ...item,
+          url: getShowImg(item.url)
+        }))
+      }
+    }
   },
 
   methods: {
@@ -1338,6 +1369,17 @@
         if (response.data.code === 0) {
           this.$message.success('草稿保存成功')
           this.dialogVisible = false
+          this.form={
+        name: '',
+        type: '',
+        department: '',
+        handler: '',
+        algorithm: [], // 关联算法改为数组
+        location: [], // 将存储为[经度, 纬度, 地址]格式
+        address: '',
+        photos: [],
+        content: '', // 新增字段,用于存储后端返回的 content
+      },
           this.fetchTableData()
         } else {
           throw new Error(response.data.msg || '保存失败')
@@ -1351,14 +1393,10 @@
 
     handleLocationChange (val) {
       let locationValue = val.value
-      console.log('handleLocationChange', locationValue)
       if (locationValue && locationValue.length >= 2) {
         // 兼容第三项为地址
-        this.form.location = [
-          Number(locationValue[0]),
-          Number(locationValue[1]),
-          locationValue[2] || '',
-        ]
+        const [lng, lat] = gcj02ToWgs84(locationValue[0], locationValue[1])
+        this.form.location = [Number(lng), Number(lat), locationValue[2] || '',]
         this.form.address = locationValue[2] || ''
       } else {
         this.form.location = []
@@ -1471,6 +1509,8 @@
 
     handleAdd () {
       this.dialogVisible = true
+      this.mapParams.center = null
+      this.form.location = []
     },
 
     resetForm () {
@@ -1499,6 +1539,7 @@
     },
 
     async handleViewDetail (row) {
+
       // 找到当前行在tableData中的索引
       this.currentIndex = this.tableData.findIndex(item => item.id === row.id)
       // 先设置workType,直接从row读取
@@ -1548,6 +1589,8 @@
           })
         }
         this.currentDetail.status = row.status
+       
+        
       } catch (error) {
         if (this.activeTab === 'myTickets') {
           const statusArr = this.workType === 1 ? ['3', '4'] : this.fixedStatuses
@@ -1562,6 +1605,7 @@
       }
 
       this.currentDetail = detailData
+       console.log('this.currentDetail',this.currentDetail);
       this.detailVisible = true
       this.$nextTick(() => {
         if (this.$refs.MapContainer && this.$refs.MapContainer.initAddEntity) {
@@ -2050,6 +2094,7 @@
         address: row.address || '',
         content: row.content,
         photos: [],
+    
       }
 
       let curLocation = []
@@ -2451,12 +2496,51 @@
 </script>
 
 <style lang="scss" scoped>
-:deep() {
-  .avue-crud__body {
-    .el-form {
-      height: 655px;
-      overflow: auto;
+::v-deep(.el-tabs) {
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+
+  .el-tabs__header {
+    order: 1;
+  }
+
+  .el-tabs__content {
+    order: 2;
+  }
+
+  .el-tabs__content {
+    height: 0;
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+
+    .el-tab-pane {
+      height: 0;
+      flex: 1;
+      display: flex;
+      flex-direction: column;
     }
+  }
+}
+
+.filter-bar {
+  display: flex;
+  align-items: center;
+  margin-bottom: 15px;
+  flex-wrap: wrap;
+  gap: 8px; // 使用 gap 统一设置间距
+
+  .filter-item {
+    width: 160px; // 减小宽度
+  }
+
+  .date-picker {
+    width: 240px; // 日期选择器宽度适当调整
+  }
+
+  .el-button {
+    margin-left: 0; // 覆盖 element-ui 默认的按钮间距
   }
 }
 
@@ -2487,57 +2571,8 @@
   margin-bottom: 12px
 }
 
-.tab-content {
-  padding: 10px;
-}
-
-.filter-bar {
-  display: flex;
-  align-items: center;
-  margin-bottom: 15px;
-  flex-wrap: wrap;
-  gap: 8px; // 使用 gap 统一设置间距
-
-  .filter-item {
-    width: 160px; // 减小宽度
-  }
-
-  .date-picker {
-    width: 240px; // 日期选择器宽度适当调整
-  }
-
-  .el-button {
-    margin-left: 0; // 覆盖 element-ui 默认的按钮间距
-  }
-}
-
 .action-bar {
   margin-bottom: 16px;
-}
-
-.el-tabs {
-  :deep(.el-tabs__content) {
-    overflow: visible;
-  }
-}
-
-.tab-content {
-  min-height: 200px;
-}
-
-.detail-form {
-  :deep(.el-form-item) {
-    margin-bottom: 10px;
-  }
-
-  :deep(.el-form-item__label) {
-    color: #606266;
-    font-weight: normal;
-  }
-
-  :deep(.el-form-item__content) {
-    color: #303133;
-  }
 }
 
 .el-dialog {
@@ -2757,6 +2792,13 @@
 
 .detail-container {
   padding: 20px;
+  .detail-top-title {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  .event-orderNumber{
+  margin-right: 10px;}
+  }
 }
 
 .status-flow {
diff --git a/src/views/wel/components/backlog.vue b/src/views/wel/components/backlog.vue
index ad3d306..96b9061 100644
--- a/src/views/wel/components/backlog.vue
+++ b/src/views/wel/components/backlog.vue
@@ -4,33 +4,21 @@
       <div class="titleBox">
         <div class="title">待办事项</div>
         <div class="rightTab">
-          <div
-            class="titleItem"
-            :class="item.name === checked ? 'activeItem' : ''"
-            v-for="(item, index) in titleList"
-            :key="index"
-            @click="titleClick(item, index)"
-          >
+          <div class="titleItem" :class="item.name === checked ? 'activeItem' : ''" v-for="(item, index) in titleList"
+            :key="index" @click="titleClick(item, index)">
             <div>
               {{ item.name }}
-              <div class="dots" >{{ item.number >= 100 ? '99+' : item.number }}</div>
-                <!-- <div class="dots">99+</div> -->
+              <div class="dots">{{ item.number >= 100 ? '99+' : item.number }}</div>
+              <!-- <div class="dots">99+</div> -->
             </div>
           </div>
         </div>
       </div>
 
       <div class="todo-items" v-if="todos.length > 0" v-loading="loading">
-        <div
-          v-for="(item, index) in todos"
-          :key="index"
-          class="todo-item"
-          :style="getStatusStyle(item.status)"
-          @click="jumporder(item)"
-        >
-          <div
-            class="status-indicator"  
-          ><img :src="getStatus(item.status)" alt=""></div>
+        <div v-for="(item, index) in todos" :key="index" class="todo-item" :style="getStatusStyle(item.status)"
+          @click="jumporder(item)">
+          <div class="status-indicator"><img :src="getStatus(item.status)" alt=""></div>
 
           <div class="content-wrapper">
             <div class="main-content">
@@ -60,22 +48,22 @@
 </template>
 
 <script setup>
-import st7 from '@/assets/images/workbench/st7.svg';
-import db1 from '@/assets/images/workbench/db1.svg';
-import db2 from '@/assets/images/workbench/db2.svg';
-import db3 from '@/assets/images/workbench/db3.svg';
-import db4 from '@/assets/images/workbench/db4.svg';
-import db5 from '@/assets/images/workbench/db5.svg';
-import { getOrderCountApi, addOrderRecordApi, getOrderOrEventApi } from '@/api/home/index';
-import { onMounted } from 'vue';
-import { useRouter } from 'vue-router';
-import { useStore } from 'vuex';
-const zfTotal = ref(0);
-const sjTotal = ref(0);
-const router = useRouter();
-const store = useStore();
-const permission = computed(() => store.getters.permission);
-const checked = ref('事件工单');
+import st7 from '@/assets/images/workbench/st7.svg'
+import db1 from '@/assets/images/workbench/db1.svg'
+import db2 from '@/assets/images/workbench/db2.svg'
+import db3 from '@/assets/images/workbench/db3.svg'
+import db4 from '@/assets/images/workbench/db4.svg'
+import db5 from '@/assets/images/workbench/db5.svg'
+import { getOrderCountApi, addOrderRecordApi, getOrderOrEventApi } from '@/api/home/index'
+import { onMounted } from 'vue'
+import { useRouter } from 'vue-router'
+import { useStore } from 'vuex'
+const zfTotal = ref(0)
+const sjTotal = ref(0)
+const router = useRouter()
+const store = useStore()
+const permission = computed(() => store.getters.permission)
+const checked = ref('事件工单')
 const titleList = ref([
   {
     label: 'event_order_count',
@@ -87,37 +75,37 @@
     name: '智飞工单',
     number: 0,
   },
-]);
+])
 const titleClick = (item, index) => {
-  checked.value = item.name;
-  getListMatter();
-};
+  checked.value = item.name
+  getListMatter()
+}
 
-const userInfo = computed(() => store.getters.userInfo);
-const todos = ref([]);
-const loading = ref(false);
+const userInfo = computed(() => store.getters.userInfo)
+const todos = ref([])
+const loading = ref(false)
 // * 事件工单中2=待审核,0=待处理,3=处理中
 // * 智飞工单中1: 待审核,2=已驳回,3=已通过
 const statusMap = {
   0: '待处理',
   2: '待审核',
   3: '处理中',
-};
+}
 const statusMapColor = {
   0: { color: '#FF7411', backgroundImage: db3, borderLeftColor: '#FF7411' },
   2: { color: '#FF472F', backgroundImage: db1, borderLeftColor: '#FF472F' },
   3: { color: '#FFC300', backgroundImage: db4, borderLeftColor: '#FFC300' },
-};
+}
 const zfstatusMap = {
   1: '待审核',
   2: '已驳回',
   3: '已通过',
-};
+}
 const zfstatusMapColor = {
   1: { color: '#FF472F', backgroundImage: db2, borderLeftColor: '#FF472F' },
   2: { color: '#4200DD', backgroundImage: db5, borderLeftColor: '#4200DD' },
   3: { color: '#FF472F', backgroundImage: db2, borderLeftColor: '#FF472F' },
-};
+}
 // 根据状态获取图标
 // const getStatusBackground = statusIndex => {
 //   if (checked.value === '智飞工单') {
@@ -130,134 +118,145 @@
 // };
 const getStatus = statusIndex => {
   if (checked.value === '智飞工单') {
-    const style = zfstatusMapColor[statusIndex];
-    return style ? style.backgroundImage : '';
+    const style = zfstatusMapColor[statusIndex]
+    return style ? style.backgroundImage : ''
   } else {
-    const style = statusMapColor[statusIndex];
-    return style ? style.backgroundImage : '';
+    const style = statusMapColor[statusIndex]
+    return style ? style.backgroundImage : ''
   }
-};
+}
 const getStatusStyle = statusIndex => {
   if (checked.value === '智飞工单') {
     const style = zfstatusMapColor[statusIndex] || {
       color: '#999',
       borderLeftColor: '#999',
-    };
+    }
     return {
       color: style.color,
       borderLeft: `3px solid ${style.borderLeftColor}`,
-    };
+    }
   } else {
     const style = statusMapColor[statusIndex] || {
       color: '#999',
       borderLeftColor: '#999',
-    };
+    }
     return {
       color: style.color,
       borderLeft: `3px solid ${style.borderLeftColor}`,
-    };
+    }
   }
-};
+}
 // 获取状态对应的文字颜色
 const getStatusColor = statusIndex => {
   if (checked.value === '智飞工单') {
-    return zfstatusMapColor[statusIndex]?.color || '#999';
+    return zfstatusMapColor[statusIndex]?.color || '#999'
   } else {
-    return statusMapColor[statusIndex]?.color || '#999';
+    return statusMapColor[statusIndex]?.color || '#999'
   }
-};
+}
 // 跳转到对应详情页
 const jumporder = val => {
   if (checked.value === '智飞工单') {
-    const id = val.id;
-    getaddOrderRecord(id);
+    const id = val.id
+    getaddOrderRecord(id)
     router.push({
       path: `/tickets/orderLog`,
       query: {
         id,
       },
-    });
+    })
   } else {
-    getaddOrderRecord(val.id);
-    const orderNumber = val.event_num;
+    getaddOrderRecord(val.id)
+    const orderNumber = val.event_num
     router.push({
       path: `/tickets/ticket`,
       query: {
         orderNumber,
       },
-    });
+    })
   }
-};
+}
 // 标记事件工单或智飞工单已读
 const getaddOrderRecord = async id => {
-  const ticketId = id;
+  const ticketId = id
   if (checked.value === '事件工单') {
-    loading.value = true;
-    const type = 1;
-    const res = await addOrderRecordApi(type, ticketId);
+    loading.value = true
+    const type = 1
+    const res = await addOrderRecordApi(type, ticketId)
   } else if (checked.value === '智飞工单') {
-    loading.value = true;
-    const type = 2;
-    const res = await addOrderRecordApi(type, ticketId);
+    loading.value = true
+    const type = 2
+    const res = await addOrderRecordApi(type, ticketId)
   }
-};
+}
 // 获取事件工单和智飞工单的数量
 const getOrderCount = async () => {
-  const res = await getOrderCountApi(userInfo.value.detail.areaCode);
-  const data = res.data.data;
+  const res = await getOrderCountApi(userInfo.value.detail.areaCode)
+  const data = res.data.data
   titleList.value.forEach(item => {
     if (data[item.label] !== undefined) {
-      item.number = data[item.label];
+      item.number = data[item.label]
     }
-  });
-};
+  })
+}
 // 获取事件工单或者智飞工单的信息
 const getListMatter = async () => {
   if (checked.value === '事件工单') {
-    loading.value = true;
-    const type = 1;
-    const res = await getOrderOrEventApi(type, userInfo.value.detail.areaCode);
-    todos.value = res.data.data || [];
-    loading.value = false;
+    loading.value = true
+    const type = 1
+    const res = await getOrderOrEventApi(type, userInfo.value.detail.areaCode)
+    todos.value = res.data.data || []
+    loading.value = false
   } else if (checked.value === '智飞工单') {
-    loading.value = true;
-    const type = 2;
-    const res = await getOrderOrEventApi(type, userInfo.value.detail.areaCode);
-    todos.value = res.data.data || [];
-    loading.value = false;
+    loading.value = true
+    const type = 2
+    const res = await getOrderOrEventApi(type, userInfo.value.detail.areaCode)
+    todos.value = res.data.data || []
+    loading.value = false
   }
-};
+}
 
 onMounted(() => {
-  getListMatter();
-  getOrderCount();
-});
+  getListMatter()
+  getOrderCount()
+})
 </script>
-
+<style>
+.el-empty__image {
+  width: 100px !important;
+}
+</style>
 <style lang="scss" scoped>
 .bocklogBox {
   width: 100%;
-  height: 306px;
+  // height: 306px;
+  height: pxToVh(326);
   background: rgba(255, 255, 255, 0.41);
   box-shadow: 0px 3px 4px -1px rgba(125, 125, 125, 0.25);
   border-radius: 8px 8px 8px 8px;
   border: 2px solid #ffffff;
+  box-sizing: border-box;
+
   .block {
     margin: 11px 21px 13px 22px;
+
     .titleBox {
       display: flex;
       justify-content: space-between;
     }
+
     .title {
       font-family: 'Source Han Sans CN';
       font-weight: bold;
       font-size: 16px;
       color: #363636;
     }
+
     .rightTab {
       display: flex;
       text-align: center;
       padding-right: 10px;
+
       .titleItem {
         position: relative;
         font-weight: 400;
@@ -266,6 +265,7 @@
         margin-left: 18px;
         cursor: pointer;
       }
+
       .activeItem {
         border-radius: 0px 0px 0px 0px;
         font-family: Source Han Sans CN, Source Han Sans CN;
@@ -274,11 +274,13 @@
         color: #1c5cff;
         border-bottom: 2px solid #1c5cff;
       }
+
       .dots {
         width: 17px;
-        height: 17px;
+        // height: 17px;
+        height: pxToVh(17);
         border-radius: 50%;
-         background: #366fff;
+        background: #366fff;
         color: #fff;
         font-size: 9px;
         position: absolute;
@@ -287,9 +289,11 @@
         padding: 1px;
         line-height: 17px;
       }
-           .dots1 {
+
+      .dots1 {
         width: 17px;
-        height: 17px;
+        // height: 17px;
+        height: pxToVh(17);
         border-radius: 50%;
         background: none !important;
         color: #366fff !important;
@@ -301,9 +305,11 @@
         line-height: 17px;
       }
     }
+
     .todo-items {
       margin-top: 10px;
-      height: 250px;
+      // height: 250px;
+      height: pxToVh(250);
       overflow-y: scroll;
     }
 
@@ -317,7 +323,9 @@
       box-shadow: 0px 2px 4px 0px rgba(173, 173, 173, 0.18);
       transition: all 0.2s ease;
       border-left: 4px solid transparent;
-      height: 42px;
+      // height: 42px;
+      height: pxToVh(42);
+
       &:hover {
         transform: translateY(-2px);
         box-shadow: 0 3px 8px rgba(0, 0, 0, 0.05);
@@ -327,9 +335,10 @@
         margin-left: 3px;
         width: 1.6rem;
         height: 1.6rem;
-        img{
-        width: 100%;
-        height: 100%;
+
+        img {
+          width: 100%;
+          height: 100%;
         }
       }
 
@@ -359,6 +368,7 @@
           font-size: 14px;
           color: #343434;
         }
+
         .unread {
           width: 5px;
           height: 5px;
@@ -366,6 +376,7 @@
           border-radius: 50%;
           margin: 0 4px;
         }
+
         .reads {
           width: 5px;
           height: 5px;
@@ -379,10 +390,12 @@
         display: flex;
         align-items: center;
         margin-right: 42px;
+
         img {
           width: 15px;
           height: 15px;
         }
+
         .todo-date {
           font-weight: 400;
           font-size: 14px;
@@ -392,6 +405,7 @@
       }
     }
   }
+
   .custom-text {
     font-size: 14px;
     color: #7c8091;
diff --git a/src/views/wel/components/calendarBox.vue b/src/views/wel/components/calendarBox.vue
index 20ce47e..aaae5fe 100644
--- a/src/views/wel/components/calendarBox.vue
+++ b/src/views/wel/components/calendarBox.vue
@@ -5,13 +5,8 @@
         <div :class="data.isSelected ? 'is-selected' : ''">
           <div class="date-number">{{ data.day.slice(8, 10) }}</div>
           <div class="events">
-            <div
-              v-for="(event, index) in getEvents(data.day)"
-              :key="index"
-              class="event-item"
-              :class="event.type"
-              @click="jumpcalendar(event, data.day)"
-            >
+            <div v-for="(event, index) in getEvents(data.day)" :key="index" class="event-item" :class="event.type"
+              @click="jumpcalendar(event, data.day)">
               <img :src="getEventIcon(event.type)" alt="" />
               {{ event.name }}<span>{{ event.value }}</span>
             </div>
@@ -23,65 +18,65 @@
 </template>
 
 <script setup>
-import dayjs from 'dayjs';
-import { jobEventBar, getCalen } from '@/api/home/index';
-import { useRouter } from 'vue-router';
-import ev1 from '@/assets/images/workbench/ev1.svg';
-import ev2 from '@/assets/images/workbench/ev2.svg';
-import { ElMessage } from 'element-plus';
-const router = useRouter();
-const events = ref({});
+import dayjs from 'dayjs'
+import { jobEventBar, getCalen } from '@/api/home/index'
+import { useRouter } from 'vue-router'
+import ev1 from '@/assets/images/workbench/ev1.svg'
+import ev2 from '@/assets/images/workbench/ev2.svg'
+import { ElMessage } from 'element-plus'
+const router = useRouter()
+const events = ref({})
 const params = ref({
   end_date: undefined,
   start_date: undefined,
-});
+})
 const eventIcons = ref({
   'work-order': ev1,
   task: ev2,
-});
+})
 const getEventIcon = type => {
-  return eventIcons.value[type] || eventIcons.value.default;
-};
-function getCurrentMonthRange() {
+  return eventIcons.value[type] || eventIcons.value.default
+}
+function getCurrentMonthRange () {
   return {
     start_date: dayjs().startOf('month').format('YYYY-MM-DD HH:mm:ss'),
     end_date: dayjs().endOf('month').format('YYYY-MM-DD HH:mm:ss'),
-  };
+  }
 }
-const leftValue = ref(new Date());
+const leftValue = ref(new Date())
 watch(
   () => leftValue.value,
   (newV, oldV) => {
     if (newV && oldV) {
-      const newDate = dayjs(newV);
+      const newDate = dayjs(newV)
       params.value = {
         start_date: newDate.startOf('month').format('YYYY-MM-DD HH:mm:ss'),
         end_date: newDate.endOf('month').format('YYYY-MM-DD HH:mm:ss'),
-      };
-      getJobEventBar();
+      }
+      getJobEventBar()
     }
   },
   { deep: true, immediate: true }
-);
+)
 
 // 获取日期数字
 const getDate = date => {
-  return date.getDate();
-};
+  return date.getDate()
+}
 
 // 获取对应日期的事件
 const getEvents = dateString => {
-  return events.value[dateString] || [];
-};
-const monthRange = getCurrentMonthRange();
-params.value = monthRange;
+  return events.value[dateString] || []
+}
+const monthRange = getCurrentMonthRange()
+params.value = monthRange
 
 const getJobEventBar = () => {
   getCalen(params.value).then(res => {
-    if (res.data.code !== 0) return;
-    events.value = res.data.data;
-  });
-};
+    if (res.data.code !== 0) return
+    events.value = res.data.data
+  })
+}
 const jumpcalendar = (event, day) => {
   if (event.name === '工单') {
     router.push({
@@ -89,39 +84,64 @@
       query: {
         day: day,
       },
-    });
+    })
   } else {
     router.push({
       path: '/job/jobstatistics',
       query: {
         day: day,
       },
-    });
+    })
   }
-};
+}
 onMounted(() => {
-  getJobEventBar();
-});
+  getJobEventBar()
+})
 </script>
+
 <style lang="scss">
 .calenBox {
- height: 630px;
-  .el-calendar {
-    height: 100%; // 日历填充容器
+  //  height: 630px;
+  height: pxToVh(660);
+
+
+
+  // 隐藏按钮组中间按钮
+  .el-button-group>.el-button:not(:first-child):not(:last-child) {
+    display: none;
+  }
+}
+</style>
+
+<style lang="scss" scoped>
+.calenBox {
+  margin-top: 10px;
+  // height: 630px;
+  height: pxToVh(622);
+  border-radius: 10px;
+  overflow: hidden;
+  background-color: #fff;
+
+  ::v-deep(.el-calendar) {
+
+    // height: 80%; // 日历填充容器
     // 标题样式
-    &__title {
+    .el-calendar__title {
       font-weight: bold;
       font-size: 14px;
       color: #363636;
     }
 
     // 日历主体
-    &__body {
-      height: 98%; // 关键:继承父高度
-      
-      .el-calendar-table {
-        height: 90% !important; // 百分比生效
-      }
+    // &__body {
+    //   height: 98%; // 关键:继承父高度
+
+    //   .el-calendar-table {
+    //     height: 90% !important; // 百分比生效
+    //   }
+    // }
+    .el-calendar-table .el-calendar-day {
+      height: 78px !important;
     }
 
     // 选中日期样式
@@ -129,7 +149,7 @@
       background-color: #f0f7ff;
       border: 2px solid #409eff;
       border-radius: 4px;
-      
+
       .date-number {
         font-weight: bold;
         color: #409eff;
@@ -137,30 +157,18 @@
     }
   }
 
-  // 隐藏按钮组中间按钮
-  .el-button-group > .el-button:not(:first-child):not(:last-child) {
-    display: none;
-  }
-}
-</style>
-<style lang="scss" scoped>
-.calenBox {
-  margin-top: 17px;
-  height: 630px;
-  overflow: hidden;
   .event-item {
     font-size: 12px;
     // padding: 2px;
 
     border-radius: 3px;
     white-space: nowrap;
-    // overflow: hidden;
-    // text-overflow: ellipsis;
 
     &.work-order {
       font-weight: 400;
       font-size: 12px;
       color: #7b7b7b;
+
       span {
         font-weight: 600;
         font-size: 14px;
@@ -173,6 +181,7 @@
       font-weight: 400;
       font-size: 12px;
       color: #7b7b7b;
+
       span {
         font-weight: 600;
         font-size: 14px;
diff --git a/src/views/wel/components/flyratio.vue b/src/views/wel/components/flyratio.vue
index eef3091..3894a64 100644
--- a/src/views/wel/components/flyratio.vue
+++ b/src/views/wel/components/flyratio.vue
@@ -230,7 +230,8 @@
   }
   .nestCenter {
     width: 100%;
-    height: 600px;
+    // height: 600px;
+    height: pxToVh(600);
     .chart {
       width: 100%;
       height: 100%;
diff --git a/src/views/wel/components/statistics.vue b/src/views/wel/components/statistics.vue
index 295996a..ab9b6c4 100644
--- a/src/views/wel/components/statistics.vue
+++ b/src/views/wel/components/statistics.vue
@@ -198,28 +198,28 @@
 // 样式配置对象
 const statusStyles = {
   机巢保险: {
-    0: { class: 'expired', color: '#7C8091', background: '#7C8091' },
-    1: { class: 'normal', color: '#1B94FF', background: '#1B94FF' },
+    0: { class: 'expired', color: '#FFA600', background: '#FFA600' },
+    1: { class: 'normal', color: 'rgba(27, 148, 255, 1)', background: 'rgba(27, 148, 255, 1)' },
   },
 
   无人机流量: {
-    0: { class: 'offline', color: '#11CE3E', background: '#11CE3E' },
-    1: { class: 'flying', color: '#1B94FF', background: '#1B94FF' },
-    2: { class: 'flying', color: '#7C8091', background: '#7C8091' },
+    0: { class: 'offline', color: 'rgba(0, 180, 69, 1)', background: 'rgba(0, 180, 69, 1)' },
+    1: { class: 'flying', color: 'rgba(186, 186, 186, 1)', background: 'rgba(186, 186, 186, 1)' },
+    2: { class: 'flying', color: 'rgba(255, 36, 36, 1)', background: 'rgba(255, 36, 36, 1)' },
   },
   监控设备: {
-    0: { class: 'offline', color: '#bababa', background: '#bababa' },
-    1: { class: 'flying', color: '#1B94FF', background: '#1B94FF' },
+    0: { class: 'offline', color: 'rgba(186, 186, 186, 1)', background: 'rgba(186, 186, 186, 1)' },
+    1: { class: 'flying', color: 'rgba(255, 106, 0, 1)', background: 'rgba(255, 106, 0, 1)' },
   },
   移动机巢: {
-    '-1': { class: 'offline', color: '#bababa', background: '#bababa' },
-    4: { class: 'flying', color: '#1B94FF', background: '#1B94FF' },
+    '-1': { class: 'offline', color: 'rgba(186, 186, 186, 1)', background: 'rgba(186, 186, 186, 1)' },
+    4: { class: 'flying', color: 'rgba(255, 106, 0, 1)', background: 'rgba(255, 106, 0, 1)' },
   },
   // 默认样式配置
   default: {
-    0: { class: 'warning', color: '#1b94ff', background: '#1b94ff' },
-    4: { class: 'success', color: '#11ce3e', background: '#11ce3e' },
-    '-1': { class: 'success', color: '#bababa', background: '#bababa' },
+    0: { class: 'warning', color: 'rgba(0, 180, 69, 1)', background: 'rgba(0, 180, 69, 1)' },
+    4: { class: 'success', color: 'rgba(255, 106, 0, 1)', background: 'rgba(255, 106, 0, 1)' },
+    '-1': { class: 'success', color: 'rgba(186, 186, 186, 1)', background: 'rgba(186, 186, 186, 1)' },
   },
 };
 
@@ -295,7 +295,8 @@
 
 <style scoped lang="scss">
 .statistics {
-  min-height: 174px;
+  // height: 174px;
+   height: pxToVh(174);
   background: #ffffff;
   border-radius: 8px 8px 8px 8px;
   margin-bottom: 10px;
@@ -332,15 +333,15 @@
     padding: 0 14px 0 21px;
     // display: grid;
     // grid-template-columns: repeat(4, 1fr);
-    height: 80px;
+   height: pxToVh(80);
     display: flex;
     justify-content: space-around;
     :deep(.el-empty ){
       width: 60px;
-      height: 60px;
+      height: pxToVh(60);
       .el-empty__image{
       width: 60px !important;
-      height: 60px !important;}
+       height: pxToVh(60)!important;}
       .custom-text {
         font-size: 12px;
         color: #7c8091;
diff --git a/src/views/wel/index.vue b/src/views/wel/index.vue
index 6611797..ec47397 100644
--- a/src/views/wel/index.vue
+++ b/src/views/wel/index.vue
@@ -1,214 +1,208 @@
 <template>
-  <div class="workbench">
-    <div class="workleft">
-      <!-- 设备统计  -->
-      <statistics></statistics>
-      <!-- 综合统计分析 -->
-      <div class="comprehensiveCon">
-        <div class="comprehensive">
-          <div class="title">
-            <div class="name">
-              <span> 综合统计分析</span>
-              <img @click="refresh" src="/src/assets/images/workbench/st1.png" alt="" />
-              <div class="time-card">
-                <div
-                  class="card-item"
-                  :class="item === checked ? 'active' : ''"
-                  v-for="(item, index) in timeListEnum"
-                  :key="index"
-                  @click="timeClick(item, index)"
-                >
-                  {{ timeListStr[index] }}
+  <wel-container>
+    <div class="workbench">
+      <div class="workleft">
+        <!-- 设备统计  -->
+        <statistics></statistics>
+        <!-- 综合统计分析 -->
+        <div class="comprehensiveCon">
+          <div class="comprehensive">
+            <div class="title">
+              <div class="name">
+                <span> 综合统计分析</span>
+                <img @click="refresh" src="/src/assets/images/workbench/st1.png" alt="" />
+                <div class="time-card">
+                  <div class="card-item" :class="item === checked ? 'active' : ''" v-for="(item, index) in timeListEnum"
+                    :key="index" @click="timeClick(item, index)">
+                    {{ timeListStr[index] }}
+                  </div>
                 </div>
               </div>
+              <div class="arrow" @click="jumpshebei">
+                <img src="/src/assets/images/workbench/st2.png" alt="" />
+              </div>
             </div>
-            <div class="arrow" @click="jumpshebei">
-              <img src="/src/assets/images/workbench/st2.png" alt="" />
-            </div>
-          </div>
-          <div class="center">
-            <div class="centerLeft">
-              <!-- 工单统计 -->
-              <div class="workOrder">
-                <div class="card-group">
-                  <div class="main-card">
-                    <div class="card-title">
-                      <img :src="overviewImg1" alt="" />
-                      <div class="cardtotal">
-                        <p>工单统计占比</p>
-                      </div>
-                    </div>
-
-                    <div class="status-grid">
-                      <div class="status-item" v-for="(item, index) in eventTypeList" :key="index">
-                        <div class="statusCon">
-                          <div class="status-label">{{ item.name }}</div>
-                          <div class="status-value">{{ item.value }}<span>个</span></div>
-                          <div class="ratio">
-                            占比
-                            <span :style="{ color: item.color }"
-                              >{{ ((item.rate * 100) / 100).toFixed(2) }}%</span
-                            >
-                          </div>
+            <div class="center">
+              <div class="centerLeft">
+                <!-- 工单统计 -->
+                <div class="workOrder">
+                  <div class="card-group">
+                    <div class="main-card">
+                      <div class="card-title">
+                        <img :src="overviewImg1" alt="" />
+                        <div class="cardtotal">
+                          <p>工单统计占比</p>
                         </div>
-                        <img :src="item.img" alt="" />
+                      </div>
+
+                      <div class="status-grid">
+                        <div class="status-item" v-for="(item, index) in eventTypeList" :key="index">
+                          <div class="statusCon">
+                            <div class="status-label">{{ item.name }}</div>
+                            <div class="status-value">{{ item.value }}<span>个</span></div>
+                            <div class="ratio">
+                              占比
+                              <span :style="{ color: item.color }">{{ ((item.rate * 100) / 100).toFixed(2) }}%</span>
+                            </div>
+                          </div>
+                          <img :src="item.img" alt="" />
+                        </div>
                       </div>
                     </div>
                   </div>
+                  <div class="charts">
+                    <div class="chart" ref="echartsRef"></div>
+                  </div>
                 </div>
-                <div class="charts">
-                  <div class="chart" ref="echartsRef"></div>
-                </div>
-              </div>
-              <!-- 飞行统计 -->
-              <div class="flyOrder">
-                <div class="fytitle">
-                   <img :src="fy1" alt="" />
-                  <span>飞行统计</span>
-                </div>
-                <div class="flycenter">
-                  <div class="centerBox">
-                    <div class="centerItem" v-for="(itemfly, index) in flyTypeList" :key="index">
-                      <div class="flyimg"><img :src="itemfly.img" alt="" />{{ itemfly.name }}</div>
-                      <div class="flydata">
-                        <span>{{ itemfly.value }}</span
-                        >{{ unitMap[itemfly.name] }}
+                <!-- 飞行统计 -->
+                <div class="flyOrder">
+                  <div class="fytitle">
+                    <img :src="fy1" alt="" />
+                    <span>飞行统计</span>
+                  </div>
+                  <div class="flycenter">
+                    <div class="centerBox">
+                      <div class="centerItem" v-for="(itemfly, index) in flyTypeList" :key="index">
+                        <div class="flyimg"><img :src="itemfly.img" alt="" />{{ itemfly.name }}</div>
+                        <div class="flydata">
+                          <span>{{ itemfly.value }}</span>{{ unitMap[itemfly.name] }}
+                        </div>
                       </div>
                     </div>
-                  </div>
-                  <div class="lineChart">
-                    <div class="lineBox" ref="chartRef"></div>
+                    <div class="lineChart">
+                      <div class="lineBox" ref="chartRef"></div>
+                    </div>
                   </div>
                 </div>
               </div>
-            </div>
-            <div class="centerRight">
-              <flyratio :dateSelect="dateSelect"></flyratio>
+              <div class="centerRight">
+                <flyratio :dateSelect="dateSelect"></flyratio>
+              </div>
             </div>
           </div>
         </div>
       </div>
-    </div>
 
-    <div class="workright">
-      <Bocklog></Bocklog>
-      <CalenBox></CalenBox>
+      <div class="workright">
+        <Bocklog></Bocklog>
+        <CalenBox></CalenBox>
+      </div>
     </div>
-  </div>
+  </wel-container>
 </template>
 
 <script setup>
-import flyratio from './components/flyratio.vue';
-import Bocklog from './components/backlog.vue';
-import CalenBox from './components/calendarBox.vue';
-import * as echarts from 'echarts';
-import useEchartsResize from '@/hooks/useEchartsResize';
-import { mapGetters } from 'vuex';
-import { getJobEventByStatus, getJobEventTotal, getFly, getFlyTime } from '@/api/home/index';
-import overviewImg1 from '@/assets/images/workbench/tc1.png';
-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 fy1 from '@/assets/images/workbench/fy1.png';
-import flyImg1 from '@/assets/images/workbench/fy2.svg';
-import flyImg2 from '@/assets/images/workbench/fy3.svg';
-import flyImg3 from '@/assets/images/workbench/fy4.svg';
-import statistics from './components/statistics.vue';
-import { ElMessage } from 'element-plus';
-let checked = ref('CURRENT_YEAR');
-let timeListStr = ['本周', '本月', '本年'];
-let timeListEnum = ['CURRENT_WEEK', 'CURRENT_MONTH', 'CURRENT_YEAR'];
+import flyratio from './components/flyratio.vue'
+import Bocklog from './components/backlog.vue'
+import CalenBox from './components/calendarBox.vue'
+import * as echarts from 'echarts'
+import useEchartsResize from '@/hooks/useEchartsResize'
+import { mapGetters } from 'vuex'
+import { getJobEventByStatus, getJobEventTotal, getFly, getFlyTime } from '@/api/home/index'
+import overviewImg1 from '@/assets/images/workbench/tc1.png'
+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 fy1 from '@/assets/images/workbench/fy1.png'
+import flyImg1 from '@/assets/images/workbench/fy2.svg'
+import flyImg2 from '@/assets/images/workbench/fy3.svg'
+import flyImg3 from '@/assets/images/workbench/fy4.svg'
+import statistics from './components/statistics.vue'
+import { ElMessage } from 'element-plus'
+let checked = ref('CURRENT_YEAR')
+let timeListStr = ['本周', '本月', '本年']
+let timeListEnum = ['CURRENT_WEEK', 'CURRENT_MONTH', 'CURRENT_YEAR']
 const params = ref({
   date_enum: 'CURRENT_YEAR',
   device_sn: '',
   end_date: undefined,
   start_date: undefined,
-});
-const dateSelect = ref('CURRENT_YEAR');
+})
+const dateSelect = ref('CURRENT_YEAR')
 let timeClick = (item, index) => {
-  checked.value = item;
-  params.value.date_enum = item;
-  dateSelect.value = item;
-  getTypeData();
-  getFlyList();
-  getFlyTimeList();
-};
+  checked.value = item
+  params.value.date_enum = item
+  dateSelect.value = item
+  getTypeData()
+  getFlyList()
+  getFlyTimeList()
+}
 const refresh = () => {
-  params.value.date_enum = 'CURRENT_YEAR';
-  checked.value = 'CURRENT_YEAR';
-  dateSelect.value = 'CURRENT_YEAR';
-  getTypeData();
-  getFlyList();
-  getFlyTimeList();
-};
+  params.value.date_enum = 'CURRENT_YEAR'
+  checked.value = 'CURRENT_YEAR'
+  dateSelect.value = 'CURRENT_YEAR'
+  getTypeData()
+  getFlyList()
+  getFlyTimeList()
+}
 // 跳转
 const jumpshebei = () => {
-  ElMessage.warning('加急开发中...');
-};
+  ElMessage.warning('加急开发中...')
+}
 
 const eventTypeList = ref([
   { name: '待审核', value: 0, img: overviewImg2, color: '#FF472F', status: '2', rate: 0 },
   { name: '待处理', value: 0, img: overviewImg3, color: '#FF7411', status: '0', rate: 0 },
   { name: '处理中', value: 0, img: overviewImg4, color: '#FFC300', status: '3', rate: 0 },
   { name: '已完成', value: 0, img: overviewImg5, color: '#0291A1', status: '4', rate: 0 },
-]);
+])
 const keyMapping = {
   飞行时长: 'total_flight_time',
   飞行里程: 'total_flight_distance',
   任务成果: 'event_num',
-};
+}
 const unitMap = {
   飞行时长: '时',
   飞行里程: '千米',
   任务成果: '个',
-};
+}
 const flyTypeList = ref([
   { name: '飞行时长', value: 0, img: flyImg1 },
   { name: '飞行里程', value: 0, img: flyImg2 },
   { name: '任务成果', value: 0, img: flyImg3 },
-]);
+])
 
-const eventTotal = ref(0);
-const data = ref([]);
+const eventTotal = ref(0)
+const data = ref([])
 //  工单统计
 const getTypeData = () => {
   getJobEventByStatus(params.value).then(res => {
-    const resList = res?.data?.data || [];
+    const resList = res?.data?.data || []
 
     resList.forEach(item => {
       eventTypeList.value.forEach(item1 => {
         if (item1.name === item.name) {
-          item1.value = item.num;
-          item1.rate = item.rate;
+          item1.value = item.num
+          item1.rate = item.rate
         }
-      });
-    });
-    initChart(resList);
-  });
-};
+      })
+    })
+    initChart(resList)
+  })
+}
 // 飞行统计
 const getFlyList = () => {
   getFly(params.value).then(res => {
     flyTypeList.value = flyTypeList.value.map(item => ({
       ...item,
       value: res.data.data[keyMapping[item.name]] || 0,
-    }));
-  });
-};
+    }))
+  })
+}
 const getFlyTimeList = () => {
   getFlyTime(params.value).then(res => {
-    const resList = res?.data?.data || [];
-    lineCharts(resList);
-  });
-};
+    const resList = res?.data?.data || []
+    lineCharts(resList)
+  })
+}
 // 图表
-const echartsRef = ref(null);
-let { chart } = useEchartsResize(echartsRef);
-const chartRef = ref(null);
-let { chart: lineChart } = useEchartsResize(chartRef);
+const echartsRef = ref(null)
+let { chart } = useEchartsResize(echartsRef)
+const chartRef = ref(null)
+let { chart: lineChart } = useEchartsResize(chartRef)
 const initChart = val => {
-  const totalNum = val.reduce((sum, item) => sum + item.num, 0);
+  const totalNum = val.reduce((sum, item) => sum + item.num, 0)
   const data = {
     total: {
       title: '总计',
@@ -219,7 +213,7 @@
       name: item.name,
       rate: item.rate,
     })),
-  };
+  }
   const containerWidth = chart.value.clientWidth
   const isSmallScreen = containerWidth < 768 // 移动端判断
   const echartsOption = {
@@ -238,7 +232,7 @@
           font-size: 1.2rem;" class="tooltip-area">
           <p>${params.marker}${params.name}</p>
           <h4 style="margin-left: 1rem;">${params.data.rate || params.percent}%</h4>
-        </div>`;
+        </div>`
       },
     },
     legend: {
@@ -271,22 +265,22 @@
         label: {
           formatter: params => {
             // 使用 b 样式标记包裹百分比数值
-            return `{a|${params.name}}: {b|${params.data.rate}%}`;
+            return `{a|${params.name}}: {b|${params.data.rate}%}`
           },
-        fontSize: isSmallScreen ? '0.8rem' : '1.2rem', 
-         position: isSmallScreen ? 'outer' : 'outer',
+          fontSize: isSmallScreen ? '0.8rem' : '1.2rem',
+          position: isSmallScreen ? 'outer' : 'outer',
           alignTo: 'labelLine',
           overflow: 'truncate',
-           overflow: 'none', // 禁用省略号
+          overflow: 'none', // 禁用省略号
           bleedMargin: 30, // 防止标签被截断
           rich: {
             a: {
               color: 'rgba(28, 31, 35, 0.80)',
-              fontSize: isSmallScreen ? '1rem' : '1.2rem', 
+              fontSize: isSmallScreen ? '1rem' : '1.2rem',
             },
             b: {
-              color: '#1C1F23',    
-               fontSize: isSmallScreen ? '1rem' : '1.3rem',
+              color: '#1C1F23',
+              fontSize: isSmallScreen ? '1rem' : '1.3rem',
               fontWeight: 'bold',
             },
           },
@@ -303,47 +297,47 @@
         data: data.data,
       },
     ],
-  };
+  }
 
-  chart.value.setOption(echartsOption);
-};
+  chart.value.setOption(echartsOption)
+}
 
 // 折线/柱状图
 const lineCharts = bardata => {
-  const categories = bardata?.map(item => item.name); // x轴类别
-  const flight_distance = [];
-  const flight_time = [];
-  const event_num = [];
+  const categories = bardata?.map(item => item.name) // x轴类别
+  const flight_distance = []
+  const flight_time = []
+  const event_num = []
   // /遍历数据填充各系列
   bardata?.forEach(period => {
     let hasDuration = false,
       hasDistance = false,
-      hasResult = false;
+      hasResult = false
 
     period.data?.forEach(item => {
       switch (item.name) {
         case '飞行时长':
-          flight_time.push(parseFloat(item.value) || 0);
-          hasDuration = true;
-          break;
+          flight_time.push(parseFloat(item.value) || 0)
+          hasDuration = true
+          break
         case '飞行里程':
           // 转换为万公 (假设原始单位是米)
           // flight_distance.push((parseFloat(item.value) / 10 || 0));
-          flight_distance.push(parseFloat(item.value) || 0);
-          hasDistance = true;
-          break;
+          flight_distance.push(parseFloat(item.value) || 0)
+          hasDistance = true
+          break
         case '任务成果':
-          event_num.push(Number(item.value) || 0);
-          hasResult = true;
-          break;
+          event_num.push(Number(item.value) || 0)
+          hasResult = true
+          break
       }
-    });
+    })
 
     // 处理可能缺失的数据项
-    if (!hasDuration) flight_time.push(0);
-    if (!hasDistance) flight_distance.push(0);
-    if (!hasResult) event_num.push(0);
-  });
+    if (!hasDuration) flight_time.push(0)
+    if (!hasDistance) flight_distance.push(0)
+    if (!hasResult) event_num.push(0)
+  })
   var option = {
     tooltip: {
       trigger: 'item',
@@ -366,7 +360,7 @@
       itemWidth: 15,
       itemHeight: 10,
       itemGap: 25,
-       fontSize:'1.2rem'
+      fontSize: '1.2rem'
     },
     xAxis: {
       type: 'category',
@@ -378,16 +372,16 @@
       },
       axisLabel: {
         interval: 0,
-        color: '#383838', 
+        color: '#383838',
       },
     },
     yAxis: [
       {
         type: 'log',
-        name: '单位:万套',
+        name: '单位:万',
         nameTextStyle: {
           color: '#383838',
-          fontSize:'1.2rem'
+          fontSize: '1.2rem'
         },
         min: 1,
         logBase: 3,
@@ -442,7 +436,7 @@
       {
         name: '飞行时长',
         type: 'bar',
-        barWidth: '12px',
+        barWidth: '8px',
         itemStyle: {
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
             { offset: 0, color: '#29acff' },
@@ -455,7 +449,7 @@
       {
         name: '飞行里程',
         type: 'bar',
-        barWidth: '12px',
+        barWidth: '8px',
         itemStyle: {
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
             { offset: 0, color: '#01c871' },
@@ -489,19 +483,19 @@
         data: event_num,
       },
     ],
-  };
-  lineChart.value.setOption(option);
-};
+  }
+  lineChart.value.setOption(option)
+}
 onMounted(() => {
   getJobEventTotal().then(res => {
-    eventTotal.value = res?.data?.data || 0;
-  });
+    eventTotal.value = res?.data?.data || 0
+  })
 
-  getTypeData();
-  lineCharts();
-  getFlyList();
-  getFlyTimeList();
-});
+  getTypeData()
+  lineCharts()
+  getFlyList()
+  getFlyTimeList()
+})
 </script>
 
 <style>
@@ -511,24 +505,32 @@
 </style>
 <style scoped lang="scss">
 .workbench {
-  padding: 0px 20px 0 10px;
+  height: 100%;
+  flex: 1;
+  // padding: 0px 20px 0 10px;
   display: flex;
   justify-content: space-between;
-height: calc(100% - 5rem);
 }
+
 .workleft {
   width: 68%;
   margin-right: 10px;
+  height: 100%;
+
   .comprehensiveCon {
-    // height: 736px;
-    background: #ffffff;
+    background: #ffffff !important;
+    height: pxToVh(776);
     border-radius: 8px 8px 8px 8px;
+
     .comprehensive {
-      padding: 17px 14px 0 21px;
+
+      padding: 14px 14px 0 21px;
+
       .title {
         display: flex;
         justify-content: space-between;
         align-items: center;
+
         .name {
           display: flex;
           align-items: center;
@@ -536,19 +538,24 @@
           font-size: 16px;
           color: #363636;
           font-family: 'Source Han Sans CN';
+
           span {
             margin-right: 4px;
           }
+
           img {
             cursor: pointer;
           }
         }
+
         .arrow {
           cursor: pointer;
         }
+
         .time-card {
           text-align: center;
-          height: 30px;
+          // height: 30px;
+          height: pxToVh(30);
           background: #ffffff;
           border-radius: 4px 0px 0px 4px;
           border: 1px solid #e5e5e5;
@@ -558,64 +565,78 @@
           display: flex;
           width: 282px;
           margin-left: 15px;
+
           .card-item {
             width: 94px;
             height: 100%;
-            line-height: 32px;
+            line-height: 28px;
             cursor: pointer;
             font-family: 'Source Han Sans CN';
             font-weight: 400;
             font-size: 14px;
             color: #7c8091;
           }
+
           .card-item:first-child {
             border-right: 1px solid #e5e5e5;
           }
+
           .card-item:nth-child(2) {
             border-right: 1px solid #e5e5e5;
           }
+
           .card-item.active {
             color: #1441ff;
             border: 1px solid #1c5cff;
           }
         }
       }
+
       // 工、单
       .center {
         display: flex;
+
         .centerLeft {
           width: 60%;
           border-right: 1px solid #dfdfdf;
+
           .workOrder {
-            margin-top: 31px;
+            margin-top: 11px;
             display: flex;
             justify-content: space-between;
             border-bottom: 1px solid #dfdfdf;
+
             .card-group {
               width: 40%;
+
               .card-title {
                 display: flex;
-                margin-bottom: 17px;
+                margin-bottom: 10px;
                 align-items: center;
+
                 img {
                   width: 36px;
                   height: 40px;
                 }
               }
+
               .cardtotal {
                 display: flex;
                 align-items: center;
                 margin-left: 9px;
+
                 p {
                   font-weight: bold;
                   font-size: 14px;
                   color: #363636;
                 }
+
                 span {
                   font-weight: 400;
                   font-size: 14px;
                   color: #7c8091;
                 }
+
                 .total-number {
                   font-family: 'Source Han Sans CN';
 
@@ -624,38 +645,44 @@
                   color: #2a54ff;
                 }
               }
+
               .status-grid {
                 display: grid;
                 grid-template-columns: repeat(2, 1fr);
                 row-gap: 14px;
                 gap: 10px;
-                margin-bottom: 27px;
+                padding-bottom: 5px;
+
                 .status-item {
                   display: flex;
                   text-align: center;
                   justify-content: space-between;
                   height: 97px;
+                  // height: pxToVh(107);
                   max-width: 158px;
                   background: #f6f8fe;
                   border-radius: 8px 8px 8px 8px;
-                  margin-bottom: 9px;
+
                   img {
                     width: 26px;
                     height: 26px;
                     padding: 9px 10px 9px 2px;
                   }
+
                   .statusCon {
                     display: flex;
                     flex-direction: column;
                     // align-items: center;
                     padding: 5px 4px 9px 10px;
                     text-align: left;
+
                     .status-label {
                       font-weight: 400;
                       font-size: 14px;
                       text-align: left;
                       color: #383838;
                     }
+
                     .ratio {
                       font-weight: 400;
                       font-size: 12px;
@@ -663,6 +690,7 @@
                       white-space: nowrap;
                       text-align: left;
                     }
+
                     .status-value {
                       font-family: 'Source Han Sans CN';
                       font-weight: bold;
@@ -683,10 +711,12 @@
                 }
               }
             }
+
             .charts {
               margin-top: 30px;
-              width: 348px;
-              height: 242px;
+              width: 100%;
+              height: auto;
+
               .chart {
                 width: 100%;
                 height: 100%;
@@ -696,41 +726,50 @@
 
           // 飞行统计
           .flyOrder {
-            margin-top: 10px;
+            margin-top: 5px;
+
             .fytitle {
               display: flex;
               align-items: center;
+
               img {
                 width: 39px;
                 height: 38px;
               }
+
               span {
                 font-weight: bold;
                 font-size: 14px;
                 color: #363636;
               }
             }
+
             .flycenter {
-              margin-top: 22px;
+              margin-top: 13px;
+
               .centerBox {
                 display: flex;
                 justify-content: space-between;
                 margin-bottom: 10px;
+
                 .centerItem {
                   padding: 7px 7px 0 15px;
                   // width: 196px;
                   flex: 1;
-                  height: 80px;
+                  // height: 80px;
+                  height: pxToVh(80);
                   background: #f6f8fe;
                   box-shadow: 0px 5px 4px 0px #ebf1ff;
                   border-radius: 8px 8px 8px 8px;
                   border: 1px solid #ffffff;
                   margin-right: 16px;
+
                   img {
                     width: 15px;
                     height: 15px;
                     margin-right: 5px;
                   }
+
                   .flyimg {
                     display: flex;
                     align-items: center;
@@ -738,11 +777,13 @@
                     font-size: 14px;
                     color: #7c8091;
                   }
+
                   .flydata {
-                    margin-top: 15px;
+                    margin-top: 10px;
                     text-align: right;
                     font-size: 14px;
                     color: #7c8091;
+
                     span {
                       font-weight: bold;
                       font-size: 24px;
@@ -756,6 +797,7 @@
               .lineChart {
                 height: 209px;
                 width: 100%;
+
                 .lineBox {
                   width: 100%;
                   height: 100%;
@@ -764,6 +806,7 @@
             }
           }
         }
+
         .centerRight {
           width: 40%;
         }
@@ -773,6 +816,10 @@
 }
 
 .workright {
-  width: 32%;
+  width: 0;
+  flex: 1;
+  height: 100%;
+  // display: flex;
+  // flex-direction: column;
 }
 </style>
diff --git a/vite.config.mjs b/vite.config.mjs
index cbcf19c..c93c35f 100644
--- a/vite.config.mjs
+++ b/vite.config.mjs
@@ -1,20 +1,20 @@
-import { defineConfig, loadEnv } from 'vite';
-import { resolve } from 'path';
-import createVitePlugins from './vite/plugins';
+import { defineConfig, loadEnv } from 'vite'
+import { resolve } from 'path'
+import createVitePlugins from './vite/plugins'
 import postCssPxToRem from 'postcss-pxtorem'
 // https://vitejs.dev/config/
 export default ({ mode, command }) => {
-  const env = loadEnv(mode, process.cwd());
-  const { VITE_APP_ENV, VITE_APP_BASE, VITE_APP_URL } = env;
+  const env = loadEnv(mode, process.cwd())
+  const { VITE_APP_ENV, VITE_APP_BASE, VITE_APP_URL } = env
   // 判断是打生产环境包
-  const isProd = VITE_APP_ENV === 'production';
+  const isProd = VITE_APP_ENV === 'production'
 
   // 根据是否生产环境,动态设置压缩配置
   const buildConfig = {
     outDir: 'manage',
     target: 'esnext',
     minify: isProd ? 'terser' : 'esbuild', // 根据环境选择压缩工具
-  };
+  }
 
   // 如果是生产环境,添加Terser的配置
   if (isProd) {
@@ -26,7 +26,7 @@
       format: {
         comments: false, // 删除所有注释
       },
-    };
+    }
   }
   return defineConfig({
     base: VITE_APP_BASE,
@@ -36,14 +36,14 @@
       __INTLIFY_PROD_DEVTOOLS__: false,
     },
     server: {
-      // port: 2888,
+      port: 5174,
       // host: '192.168.1.178',
       proxy: {
         '/api': {
           target: VITE_APP_URL,
           changeOrigin: true,
           rewrite: path => path.replace(/^\/api/, ''),
-        },
+        }
       },
     },
     resolve: {
@@ -56,6 +56,12 @@
       },
     },
     css: {
+      preprocessorOptions: {
+        scss: {
+          api: 'modern-compiler',
+          additionalData: `@use "@/styles/variables.scss" as *;`,
+        },
+      },
       postcss: {
         plugins: [
           postCssPxToRem({
@@ -77,5 +83,5 @@
         target: 'esnext',
       },
     },
-  });
-};
+  })
+}

--
Gitblit v1.9.3