From b0530ed9211230227a8f94e394eda779d5ae5fc1 Mon Sep 17 00:00:00 2001
From: birt <2499248221@qq.com>
Date: 星期日, 13 四月 2025 01:51:52 +0800
Subject: [PATCH] birtzhang

---
 zhitan-common/src/main/java/com/zhitan/common/constant/MessageConstant.java                                       |    2 
 zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementDetailVO.java                |    2 
 zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java                                      |    2 
 zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java                 |    2 
 zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java                                            |    2 
 zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java                                         |    2 
 zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java                               |    2 
 zhitan-vue/src/components/BaseCard/BaseCard.vue                                                                   |   14 
 zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java                                               |    2 
 zhitan-vue/src/layout/components/Navbar.vue                                                                       |  197 +--
 zhitan-vue/src/layout/components/Settings/index.vue                                                               |    2 
 zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java                                                 |    2 
 zhitan-vue/src/views/dataMonitoring/historyDataTrend/index.vue                                                    |    4 
 zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementPageVO.java                  |    2 
 zhitan-vue/src/views/realtimemonitor/gatewaystatus/index.vue                                                      |  383 +++++++
 zhitan-vue/.env.development                                                                                       |    3 
 zhitan-vue/src/assets/images/login-background1.jpg                                                                |    0 
 zhitan-common/src/main/java/com/zhitan/common/utils/id/IdGenUtil.java                                             |    2 
 zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsDTO.java                              |    2 
 zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java                                        |    2 
 zhitan-system/src/main/java/com/zhitan/saving/domain/entity/PoliciesRegulationsManagement.java                    |    2 
 zhitan-vue/src/assets/images/6.png                                                                                |    0 
 zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java                                            |    2 
 zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java                                          |    6 
 zhitan-vue/src/layout/components/Sidebar/SidebarItem.vue                                                          |   10 
 zhitan-vue/src/components/LeftTree/index.vue                                                                      |   16 
 zhitan-system/src/main/java/com/zhitan/carbonemission/service/impl/CarbonEmissionServiceImpl.java                 |    2 
 zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java           |    2 
 zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java                            |    5 
 zhitan-vue/src/views/index.vue                                                                                    |  684 ++++++++----
 zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java                                           |    2 
 zhitan-vue/src/permission.js                                                                                      |   51 
 zhitan-vue/src/assets/styles/variables.module.scss                                                                |    2 
 zhitan-vue/src/components/Avatar/index.vue                                                                        |  100 +
 zhitan-vue/src/components/Breadcrumb/index.vue                                                                    |   23 
 zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java         |    2 
 zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java                                     |    2 
 zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java |    2 
 zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java                                          |    2 
 zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java                                               |    2 
 zhitan-vue/src/views/realtimemonitor/realtimemonitor/realtimemonitor.vue                                          |   20 
 zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java                                               |    2 
 zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java                                                |    2 
 zhitan-vue/src/components/TopNav/index.vue                                                                        |  326 ++++-
 zhitan-vue/src/assets/images/2.png                                                                                |    0 
 zhitan-vue/src/layout/index.vue                                                                                   |  334 +++++
 zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java                                          |    2 
 zhitan-vue/src/assets/images/login-background.png                                                                 |    0 
 zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java                                              |    2 
 zhitan-common/src/main/java/com/zhitan/common/constant/TimeTypeConst.java                                         |    2 
 zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java                                         |    2 
 zhitan-vue/src/assets/images/robot.png                                                                            |    0 
 zhitan-vue/src/assets/images/7.png                                                                                |    0 
 zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java                                          |    2 
 zhitan-vue/src/assets/styles/page.scss                                                                            |  180 +++
 zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java                                               |    2 
 zhitan-vue/src/views/energyanalysis/equipment/equipment.vue                                                       |   15 
 zhitan-vue/src/components/TagsView/index.vue                                                                      |   36 
 zhitan-vue/src/store/modules/tagsView.js                                                                          |    8 
 zhitan-vue/src/assets/styles/sidebar.scss                                                                         |   15 
 zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java                               |    2 
 zhitan-vue/src/layout/components/Sidebar/index.vue                                                                |  350 ++++++
 zhitan-vue/src/assets/images/5.png                                                                                |    0 
 zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java                          |   11 
 zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java                                                |    2 
 zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java                                             |    2 
 zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java                                       |    2 
 zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java                                     |    2 
 zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java                         |    2 
 zhitan-vue/src/assets/styles/ruoyi.scss                                                                           |    2 
 zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java                                        |    2 
 zhitan-vue/src/assets/images/3.png                                                                                |    0 
 zhitan-vue/src/layout/components/AppMain.vue                                                                      |   12 
 zhitan-vue/src/assets/images/alarm.png                                                                            |    0 
 zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java                                           |    2 
 zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java                                           |    2 
 zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java                                                |    2 
 zhitan-vue/src/store/modules/app.js                                                                               |   16 
 zhitan-vue/src/components/HeaderSearch/index.vue                                                                  |    2 
 README.md                                                                                                         |   13 
 zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java                                           |    2 
 zhitan-vue/src/router/index.js                                                                                    |    9 
 zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java                                              |    2 
 zhitan-admin/src/main/java/com/zhitan/web/controller/carbonemission/CarbonEmissionController.java                 |    2 
 zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java                                           |    2 
 zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java                                             |    2 
 zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java                                      |    4 
 zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java                               |    2 
 zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java                                             |    2 
 zhitan-vue/src/assets/icons/svg/ai.svg                                                                            |    1 
 zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java                            |    2 
 zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/QueryCompareRequest.java                     |    2 
 zhitan-vue/vite.config.js                                                                                         |    9 
 zhitan-vue/src/store/modules/permission.js                                                                        |    8 
 zhitan-admin/src/main/java/com/zhitan/AdminApplication.java                                                       |    2 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java                                         |    2 
 zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java             |    2 
 zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsManagementPageDTO.java                |    2 
 zhitan-vue/src/assets/icons/svg/bell.svg                                                                          |    1 
 zhitan-vue/src/store/modules/settings.js                                                                          |    2 
 zhitan-vue/src/views/businessconfiguration/gatewaystatus/gatewayStatus.vue                                        |   70 +
 zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java                             |    8 
 zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java                                           |    2 
 zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java                                              |    2 
 zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java                                         |    2 
 zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java                                          |    2 
 zhitan-vue/src/components/BaseCard/index.vue                                                                      |   31 
 zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java                                        |    2 
 108 files changed, 2,466 insertions(+), 635 deletions(-)

diff --git a/README.md b/README.md
index cb040dc..7f5b4ec 100644
--- a/README.md
+++ b/README.md
@@ -18,16 +18,9 @@
 閽堝瀹㈡埛鍦烘櫙锛氭斂搴溿�佸洯鍖恒�佷紒涓氥�佸伐鐭裤�佸叕鍏卞缓绛戠瓑銆�
 
 ## 銆愭敞鎰忋�戝畬鏁磋兘纰崇鐞嗗钩鍙板寘鍚笁涓儴鍒嗭紝<span style="color: red;">鏈粨搴撳彧鍖呭惈鑳界⒊骞冲彴鍚庡彴绠$悊绔�</span>
-1. 鑳界⒊骞冲彴鍚庡彴绠$悊绔細<span style="color: red;">涔熷嵆鏈」鐩兘纰冲钩鍙板悗鍙板睍绀洪儴鍒嗭紝浠g爜瀹屽锛岃繍琛屾甯搞�傞�氳繃鏈」鐩紝瀛︿範鑰呭彲浠ユ帉鎻¤兘婧愮鐞嗚涓氱殑鍔熻兘鍜屼笟鍔★紝浠ュ強鎶�鏈灦鏋勩��</span>
-2. 鏁版嵁閲囬泦绋嬪簭锛氫篃鍗砿qtt鉃★笍鏃跺簭搴撳姛鑳斤紝璇峰弬鑰僛鎴戜滑鍙︿竴涓粨搴擄紙鐐瑰嚮瓒呴摼鎺ワ級锛孧QTT閲囬泦缃戝叧](https://github.com/zhitan-cloud/zhitan-gateway)锛�
-3. 鏁版嵁娓呮礂鏈嶅姟锛氫篃鍗虫椂搴忓簱鉃★笍鍏崇郴搴擄紝瀛︿範鑰呭彲浠ヤ娇鐢╦ava鑷甫鐨刋XL job绛夎鍒掍换鍔″伐鍏疯嚜宸辨寜鐓т笟鍔″姛鑳斤紝鏉ュ疄鐜版暟鎹竻娲楁湇鍔°��
-
-## 鏂版墜蹇呰
-鏈�杩戞湁寰堝寮�鍙戞柊鎵嬪湪灏濊瘯杩愯鏈」鐩紙寰堝澶у姣曚笟鐢熻鍐欐瘯涓氳鏂囷級锛岄亣鍒颁簡涓嶅皯闂銆傝В鍐冲姙娉曪細  
-涓�鏄彲浠ュ姞鎴戝井淇★紝鎴戞媺浣犺繘寮�鍙戝井淇$兢锛屾垨鑰呬綘鑷姪鍔爍q缇ゃ�傛垜鐪嬪埌闂鏈夌┖鍩烘湰閮戒細瑙g瓟銆�   
-浜屾槸鏈」鐩簳灞傛槸鍩轰簬鑻ヤ緷锛屽ぇ瀹跺彲浠ョЩ姝ヨ嫢渚濅粨搴擄紝杩愯濂借嫢渚濈殑绀轰緥鍐嶈繃鏉ョ爺绌舵湰椤圭洰锛屼互閬垮厤鑰借澶у澶鏃堕棿锛屾垨鑰呯粰澶у閫犳垚寰堝鍥版壈銆�  
-
-鐗╄仈缃戦」鐩湰韬氨鏈変竴浜涢棬妲涳紝甯屾湜鑳藉府鍒板悇浣嶃��
+##### 1. 鑳界⒊骞冲彴鍚庡彴绠$悊绔細<span style="color: red;">涔熷嵆鏈」鐩兘纰冲钩鍙板悗鍙板睍绀洪儴鍒嗭紝浠g爜瀹屽锛岃繍琛屾甯搞�傞�氳繃鏈」鐩紝瀛︿範鑰呭彲浠ユ帉鎻¤兘婧愮鐞嗚涓氱殑鍔熻兘鍜屼笟鍔★紝浠ュ強鎶�鏈灦鏋勩��</span>
+##### 2. 鏁版嵁閲囬泦绋嬪簭锛氫篃鍗砿qtt鉃★笍鏃跺簭搴撳姛鑳斤紝璇峰弬鑰僛鎴戜滑鍙︿竴涓粨搴擄紙鐐瑰嚮瓒呴摼鎺ワ級锛孧QTT閲囬泦缃戝叧](https://github.com/zhitan-cloud/zhitan-gateway)锛涙垨鑰呭彲鍙傝�僼hingsjs绛夌煡鍚嶉」鐩紝鎴栬�呰嚜宸辩敤netty鑷繁瀹炵幇銆�
+##### 3. 鏁版嵁娓呮礂鏈嶅姟锛氫篃鍗虫椂搴忓簱鉃★笍鍏崇郴搴擄紝瀛︿範鑰呭彲浠ヤ娇鐢╦ava鑷甫鐨刋XL job绛夎鍒掍换鍔″伐鍏疯嚜宸辨寜鐓т笟鍔″姛鑳斤紝鏉ュ疄鐜版暟鎹竻娲楁湇鍔°��
 
 ## 鏂囨。--鍧囧湪wiki鐩綍
 ### github wiki鍦板潃锛歨ttps://github.com/zhitan-cloud/zhitan-ems/wiki
diff --git a/zhitan-admin/src/main/java/com/zhitan/AdminApplication.java b/zhitan-admin/src/main/java/com/zhitan/AdminApplication.java
index 2de0086..78d2460 100644
--- a/zhitan-admin/src/main/java/com/zhitan/AdminApplication.java
+++ b/zhitan-admin/src/main/java/com/zhitan/AdminApplication.java
@@ -7,7 +7,7 @@
 /**
  * 鍚姩绋嬪簭
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 public class AdminApplication
diff --git a/zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java b/zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java
index 23bb9db..e6ec658 100644
--- a/zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java
+++ b/zhitan-admin/src/main/java/com/zhitan/AdminServletInitializer.java
@@ -6,7 +6,7 @@
 /**
  * web瀹瑰櫒涓繘琛岄儴缃�
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public class AdminServletInitializer extends SpringBootServletInitializer
 {
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java
index c957455..f6f0895 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/branchanalysis/BranchEnergyAnalysisController.java
@@ -16,7 +16,7 @@
 /**
  *鏀矾鐢ㄨ兘鍒嗘瀽
  *
- * @author ZhiTan
+ * @author zt
  * @date 2025-03-26
  */
 @RestController
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/carbonemission/CarbonEmissionController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/carbonemission/CarbonEmissionController.java
index e3f58a1..be430ba 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/carbonemission/CarbonEmissionController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/carbonemission/CarbonEmissionController.java
@@ -23,7 +23,7 @@
 /**
  * 纰虫帓鏀炬牳绠桟ontroller
  *
- * @author ZhiTan
+ * @author lsk
  * @date 2024-10-29
  */
 @RestController
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java
index 286f2f9..d101c3e 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/homepage/HomePageController.java
@@ -16,7 +16,7 @@
 /**
  * HomePageController
  *
- * @author ZhiTan
+ * @author hmj
  * @date 2024-10-08
  */
 @RestController
@@ -43,7 +43,7 @@
 
     /**
      * @description: 鑳借�楄秼鍔�
-     * @author ZhiTan
+     * @author: hmj
      * @date: 2024/10/8 13:41
      */
     @GetMapping("/energyConsumptionTrend")
@@ -61,7 +61,7 @@
 
     /**
      * @description: 绉戝鑳借�楁帓鍚�
-     * @author ZhiTan
+     * @author: hmj
      * @date: 2024/10/8 13:41
      */
     @GetMapping("/energyConsumptionRanking")
@@ -78,7 +78,7 @@
 
     /**
      * @description: 宄板钩璋峰崰姣�
-     * @author ZhiTan
+     * @author: hmj
      * @date: 2024/10/8 13:41
      */
     @GetMapping("/peakValley")
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java
index 9a640a6..c948a2d 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/model/ModelNodeController.java
@@ -26,7 +26,7 @@
 /**
  * 妯″瀷鑺傜偣Controller
  *
- * @author ZhiTan
+ * @author fanxinfu
  * @date 2020-02-10
  */
 @RestController
diff --git a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java
index e7cff94..3313afc 100644
--- a/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java
+++ b/zhitan-admin/src/main/java/com/zhitan/web/controller/system/SysLoginController.java
@@ -20,7 +20,7 @@
 /**
  * 鐧诲綍楠岃瘉
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 @RestController
 public class SysLoginController
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java
index ef87e18..29acaef 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/Anonymous.java
@@ -9,7 +9,7 @@
 /**
  * 鍖垮悕璁块棶涓嶉壌鏉冩敞瑙�
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 @Target({ ElementType.METHOD, ElementType.TYPE })
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java
index d94f802..abd6701 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/DataScope.java
@@ -9,7 +9,7 @@
 /**
  * 鏁版嵁鏉冮檺杩囨护娉ㄨВ
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java
index 3548c78..b94cac9 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/DataSource.java
@@ -13,7 +13,7 @@
  *
  * 浼樺厛绾э細鍏堟柟娉曪紝鍚庣被锛屽鏋滄柟娉曡鐩栦簡绫讳笂鐨勬暟鎹簮绫诲瀷锛屼互鏂规硶鐨勪负鍑嗭紝鍚﹀垯浠ョ被涓婄殑涓哄噯
  *
- * @author ZhiTan
+ * @author zhitan
  */
 @Target({ ElementType.METHOD, ElementType.TYPE })
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java
index f80e4b5..b25aa8d 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/Excels.java
@@ -8,7 +8,7 @@
 /**
  * Excel娉ㄨВ闆�
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 @Target(ElementType.FIELD)
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java
index 0a7b3b3..d985a31 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/Log.java
@@ -11,7 +11,7 @@
 /**
  * 鑷畾涔夋搷浣滄棩蹇楄褰曟敞瑙�
  * 
- * @author ZhiTan
+ * @author zhitan
  *
  */
 @Target({ ElementType.PARAMETER, ElementType.METHOD })
diff --git a/zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java b/zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java
index c1dab75..2b3695c 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/annotation/RepeatSubmit.java
@@ -10,7 +10,7 @@
 /**
  * 鑷畾涔夋敞瑙i槻姝㈣〃鍗曢噸澶嶆彁浜�
  * 
- * @author ZhiTan
+ * @author zhitan
  *
  */
 @Inherited
diff --git a/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java b/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java
index 7b5e776..f7530a2 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/config/BaseConfig.java
@@ -6,7 +6,7 @@
 /**
  * 璇诲彇椤圭洰鐩稿叧閰嶇疆
  *
- * @author ZhiTan
+ * @author zhitan
  */
 @Component
 @ConfigurationProperties(prefix = "base")
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java
index 29d603f..f1886c2 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/CacheConstants.java
@@ -3,7 +3,7 @@
 /**
  * 缂撳瓨鐨刱ey 甯搁噺
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public class CacheConstants
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java b/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java
index df452a2..7a5bb48 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/CommonConst.java
@@ -4,7 +4,7 @@
 
 /**
  * @Description: 甯搁噺灏佽
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�02鏈�02鏃� 11:37
  */
 public class CommonConst {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java
index b581a0d..a802793 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/Constants.java
@@ -6,7 +6,7 @@
 /**
  * 閫氱敤甯搁噺淇℃伅
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public class Constants
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java
index a403fb5..7b626db 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/GenConstants.java
@@ -3,7 +3,7 @@
 /**
  * 浠g爜鐢熸垚閫氱敤甯搁噺
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public class GenConstants
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java b/zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java
index 06f59ab..3c28b7e 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/HttpStatus.java
@@ -3,7 +3,7 @@
 /**
  * 杩斿洖鐘舵�佺爜
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public class HttpStatus
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/MessageConstant.java b/zhitan-common/src/main/java/com/zhitan/common/constant/MessageConstant.java
index 513fac8..b45991a 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/MessageConstant.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/MessageConstant.java
@@ -1,7 +1,7 @@
 package com.zhitan.common.constant;
 
 /**
- * @author ZhiTan
+ * @Author DYL
  **/
 public class MessageConstant {
 
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java
index d7a7b63..7caef92 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/ScheduleConstants.java
@@ -3,7 +3,7 @@
 /**
  * 浠诲姟璋冨害閫氱敤甯搁噺
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public class ScheduleConstants
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/TimeTypeConst.java b/zhitan-common/src/main/java/com/zhitan/common/constant/TimeTypeConst.java
index dde5b66..0847ab2 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/TimeTypeConst.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/TimeTypeConst.java
@@ -2,7 +2,7 @@
 
 /**
  * @Description: 鍛ㄦ湡绫诲瀷
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�03鏈�17鏃� 12:33
  */
 public class TimeTypeConst {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java b/zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java
index 5bfb59a..1c6c912 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/constant/UserConstants.java
@@ -3,7 +3,7 @@
 /**
  * 鐢ㄦ埛甯搁噺淇℃伅
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public class UserConstants
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java
index f133609..4836a96 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/AjaxResult.java
@@ -8,7 +8,7 @@
 /**
  * 鎿嶄綔娑堟伅鎻愰啋
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public class AjaxResult extends HashMap<String, Object>
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java b/zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java
index 4270513..14ede4d 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/core/domain/BaseEntity.java
@@ -15,7 +15,7 @@
 /**
  * Entity鍩虹被
  *
- * @author ZhiTan
+ * @author zhitan
  */
 public class BaseEntity implements Serializable
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java b/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java
index d65873a..9a5b3b4 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessStatus.java
@@ -3,7 +3,7 @@
 /**
  * 鎿嶄綔鐘舵��
  * 
- * @author ZhiTan
+ * @author zhitan
  *
  */
 public enum BusinessStatus
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java
index 6759b98..33bd622 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/BusinessType.java
@@ -3,7 +3,7 @@
 /**
  * 涓氬姟鎿嶄綔绫诲瀷
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public enum BusinessType
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java b/zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java
index a84f3f2..24bc51f 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/CollectionModes.java
@@ -1,7 +1,7 @@
 package com.zhitan.common.enums;
 
 /**
- * @author ZhiTan
+ * @author 鑼冩柊瀵�
  *
  *         瀹炴椂鏁版嵁缁熻绫诲瀷.
  */
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java
index ab14d37..a0391df 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/DataSourceType.java
@@ -3,7 +3,7 @@
 /**
  * 鏁版嵁婧�
  * 
- * @author ZhiTan
+ * @author zhitan
  */
 public enum DataSourceType
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java
index 18b95d1..96a4bfc 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/DesensitizedType.java
@@ -6,7 +6,7 @@
 /**
  * 鑴辨晱绫诲瀷
  *
- * @author ZhiTan
+ * @author zhitan
  */
 public enum DesensitizedType
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java b/zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java
index 445fe8b..1039211 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/GroupTimeType.java
@@ -3,7 +3,7 @@
 /**
  * 鍒嗙粍鏃堕棿绫诲瀷
  *
- * @author ZhiTan
+ * @Author: Zhujw
  * @Date: 2023/5/24
  */
 public enum GroupTimeType {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java b/zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java
index f543799..68c73cd 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/HttpMethod.java
@@ -7,7 +7,7 @@
 /**
  * 璇锋眰鏂瑰紡
  *
- * @author ZhiTan
+ * @author zhitan
  */
 public enum HttpMethod
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java b/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java
index ab7a83d..0ad5f32 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/enums/RetrievalModes.java
@@ -1,7 +1,7 @@
 package com.zhitan.common.enums;
 
 /**
- * @author ZhiTan
+ * @author 鑼冩柊瀵�
  *
  *     鑾峰彇瀹炴椂鏁版嵁鏂瑰紡.
  */
diff --git a/zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java b/zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java
index ef9c24c..b105220 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/exception/CustomException.java
@@ -3,7 +3,7 @@
 /**
  * 鑷畾涔夊紓甯�
  * 
- * @author ZhiTan
+ * @author ruoyi
  */
 public class CustomException extends RuntimeException
 {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java
index 03bb060..50ef51b 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ChartUtils.java
@@ -9,7 +9,7 @@
 
 /**
  * @Description: 缁熻鍥剧浉鍏虫暟鎹伐鍏风被
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�04鏈�28鏃� 15:29
  */
 public class ChartUtils {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
index d953617..93d8031 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DateTimeUtil.java
@@ -14,7 +14,7 @@
 
 /**
  * @Description: 鏃堕棿宸ュ叿绫�
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�02鏈�02鏃� 12:23
  */
 @Slf4j
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java
index 767910d..e56b678 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/DoubleUtil.java
@@ -4,7 +4,7 @@
 
 /**
  * @Description: 鏁板瓧宸ュ叿绫�
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�02鏈�07鏃� 15:03
  */
 public class DoubleUtil {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java
index 8b8e746..4ab42f8 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/IntegerUtil.java
@@ -2,7 +2,7 @@
 
 /**
  * @Description: 鏁存暟鐩稿叧宸ュ叿绫�
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�03鏈�10鏃� 17:31
  */
 public class IntegerUtil {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java
index fbdc3ce..1be9af3 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/PropUtils.java
@@ -10,7 +10,7 @@
 
 /**
  * @Description: 灞炴�у�兼搷浣滃伐鍏风被
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�03鏈�07鏃� 9:57
  */
 public class PropUtils {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java b/zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java
index e83d155..c8ef27b 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/ReflectionUtils.java
@@ -8,7 +8,7 @@
 /**
  * 鍙嶅皠鐩稿叧宸ュ叿绫�
  *
- * @author ZhiTan
+ * @author Silence
  * @version 1.0
  */
 public class ReflectionUtils {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java
index 4601ef7..35522d0 100644
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/StringUtil.java
@@ -5,7 +5,7 @@
 
 /**
  * @Description: 瀛楃涓插伐鍏风被
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�02鏈�02鏃� 12:27
  */
 public class StringUtil {
diff --git a/zhitan-common/src/main/java/com/zhitan/common/utils/id/IdGenUtil.java b/zhitan-common/src/main/java/com/zhitan/common/utils/id/IdGenUtil.java
index d965fc4..6b802ae 100755
--- a/zhitan-common/src/main/java/com/zhitan/common/utils/id/IdGenUtil.java
+++ b/zhitan-common/src/main/java/com/zhitan/common/utils/id/IdGenUtil.java
@@ -6,7 +6,7 @@
 
 /**
  * 鐢熸垚ID
- * @author ZhiTan
+ * @author Geoffrey
  * @date 2024/12/31
  */
 public class IdGenUtil {
diff --git a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java
index 9a6bf64..1e6db62 100644
--- a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java
+++ b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/domain/VO/ItemizedEnergyAnalysisVO.java
@@ -8,7 +8,7 @@
 /**
  * 鍒嗛」鐢ㄨ兘鍒嗘瀽杩斿洖绫�
  *
- * @author ZhiTan
+ * @author 寮�
  */
 @Data
 public class ItemizedEnergyAnalysisVO {
diff --git a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java
index 028a793..1b895d7 100644
--- a/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/Itemizedenergyanalysis/service/impl/ItemizedEnergyAnalysisServiceImpl.java
@@ -29,7 +29,7 @@
 /**
  * 鍒嗛」鐢ㄨ兘鍒嗘瀽
  *
- * @author ZhiTan
+ * @author sys
  * @date 2025-03-25
  */
 @Service
diff --git a/zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java b/zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java
index 258b973..d6d482d 100644
--- a/zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/mapper/BranchAnalysisMapper.java
@@ -10,7 +10,7 @@
 /**
  *鏀矾鐢ㄨ兘鍒嗘瀽
  *
- * @author ZhiTan
+ * @author sys
  * @date 2021-01-11
  */
 public interface BranchAnalysisMapper {
diff --git a/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java
index 3228f0e..d5d04c3 100644
--- a/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java
+++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/IBranchAnalysisService.java
@@ -9,7 +9,7 @@
     /**
      * 鏀矾鐢ㄨ兘鍒嗘瀽
      *
-     * @author ZhiTan
+     * @author sys
      * @date 2021-01-11
      */
     BranchAnalysisVO getBranchAnalysisService(BranchAnalysisDTO dataItem);
diff --git a/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java
index 4d93f84..848a1bc 100644
--- a/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/branchanalysis/service/impl/BranchAnalysisServiceImpl.java
@@ -26,7 +26,7 @@
 /**
  * 鏀矾鐢ㄨ兘鍒嗘瀽
  *
- * @author ZhiTan
+ * @author zt
  * @date 2025-03-27
  */
 @Service
diff --git a/zhitan-system/src/main/java/com/zhitan/carbonemission/service/impl/CarbonEmissionServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/carbonemission/service/impl/CarbonEmissionServiceImpl.java
index af78a37..8cd2c33 100644
--- a/zhitan-system/src/main/java/com/zhitan/carbonemission/service/impl/CarbonEmissionServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/carbonemission/service/impl/CarbonEmissionServiceImpl.java
@@ -25,7 +25,7 @@
 /**
  * 銆愮⒊鎺掓斁鏍哥畻銆慡ervice涓氬姟灞傚鐞�
  *
- * @author ZhiTan
+ * @author lsk
  * @date 2024-10-29
  */
 @Service
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
index 3f97b01..3cd7d4e 100644
--- a/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/mapper/DataItemMapper.java
@@ -15,7 +15,7 @@
 /**
  * 闃舵鏁版嵁褰曞叆鎺ュ彛
  *
- * @author ZhiTan
+ * @author sys
  * @date 2020-03-25
  */
 public interface DataItemMapper extends BaseMapper<DataItem> {
diff --git a/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java b/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
index 942a1fb..fc3fc36 100644
--- a/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
+++ b/zhitan-system/src/main/java/com/zhitan/dataitem/service/IDataItemService.java
@@ -15,7 +15,7 @@
 /**
  * 闃舵鏁版嵁褰曞叆鎺ュ彛
  * 
- * @author ZhiTan
+ * @author sys
  * @date 2020-03-25
  */
 public interface IDataItemService {
diff --git a/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
index edaf0ea..86ce5c5 100644
--- a/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/home/service/HomePageServiceImpl.java
@@ -37,7 +37,7 @@
 /**
  * description todu
  *
- * @author ZhiTan
+ * @author hmj
  * @date 2024-10-31 18:07
  */
 @Service
@@ -76,7 +76,7 @@
             final Double tongbiCount = tongbiMap.get(energyNo).stream().map(HomeEnergyStatisticsVO::getCount).mapToDouble(Double::doubleValue).sum();
             final Double huanbiCount = huanbiMap.get(energyNo).stream().map(HomeEnergyStatisticsVO::getCount).mapToDouble(Double::doubleValue).sum();
 
-            vo.setTonCount(format2Double(count));
+            vo.setTonCount(format2Double(vo.getCount() * Double.valueOf(vo.getCoefficient())));
             if (tongbiCount != 0) {
                 vo.setTongbi(format2Double((count - tongbiCount) / tongbiCount * 100));
             } else {
diff --git a/zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java b/zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java
index ca1d279..f92f526 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/domain/ModelNode.java
@@ -13,7 +13,7 @@
 /**
  * 妯″瀷鑺傜偣瀵硅薄 model_node
  *
- * @author ZhiTan
+ * @author fanxinfu
  * @date 2020-02-10
  */
 public class ModelNode extends BaseEntity {
diff --git a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
index 320b453..56b41e1 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/mapper/ModelNodeMapper.java
@@ -19,7 +19,7 @@
 /**
  * 妯″瀷鑺傜偣Mapper鎺ュ彛
  *
- * @author ZhiTan
+ * @author fanxinfu
  * @date 2020-02-10
  */
 public interface ModelNodeMapper  extends BaseMapper<ModelNode> {
@@ -182,7 +182,7 @@
     /**
      * @description: 鏍规嵁鑺傜偣id鍜岃兘婧愮被鍨嬫煡璇㈢偣浣嶄俊鎭�
      * @param nodeId
-     * @author ZhiTan
+     * @author: hmj
      * @date: 2024/10/16 19:16
      */
     List<ModelNodeIndexInfo> getModelNodeIndexIdByNodeId(@Param("nodeId")String nodeId, @Param("energyType")String energyType);
@@ -191,7 +191,7 @@
      * @description: 鏍规嵁nodeId鏌ヨ瀛愯妭鐐圭殑鎵�鏈夌粺璁℃寚鏍�
      * @param parentId
      * @return java.util.List<com.zhitan.model.domain.vo.ModelNodeIndexInfor>
-     * @author ZhiTan
+     * @author: hmj
      * @date: 2024/10/18 16:12
      */
     List<ModelNodeIndexInfo> getModelNodeByParentId(String parentId);
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java b/zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java
index 3a2a567..490881c 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/IModelNodeService.java
@@ -15,7 +15,7 @@
 /**
  * 妯″瀷鑺傜偣Service鎺ュ彛
  *
- * @author ZhiTan
+ * @author fanxinfu
  * @date 2020-02-10
  */
 public interface IModelNodeService {
diff --git a/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java
index c54478d..cb6308b 100644
--- a/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/model/service/impl/ModelNodeServiceImpl.java
@@ -27,7 +27,7 @@
 /**
  * 妯″瀷鑺傜偣Service涓氬姟灞傚鐞�
  *
- * @author ZhiTan
+ * @author fanxinfu
  * @date 2020-02-10
  */
 @Service
diff --git a/zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsDTO.java b/zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsDTO.java
index 65deb53..7215892 100644
--- a/zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsDTO.java
+++ b/zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsDTO.java
@@ -12,7 +12,7 @@
 import java.util.Date;
 
 /**
- * @author ZhiTan
+ * @author Geoffrey
  * @date 2025/01/13
  */
 @Data
diff --git a/zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsManagementPageDTO.java b/zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsManagementPageDTO.java
index d10db03..7a563db 100644
--- a/zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsManagementPageDTO.java
+++ b/zhitan-system/src/main/java/com/zhitan/saving/domain/dto/PoliciesRegulationsManagementPageDTO.java
@@ -4,7 +4,7 @@
 import lombok.Data;
 
 /**
- * @author ZhiTan
+ * @author Geoffrey
  * @date 2025/01/13
  */
 @Data
diff --git a/zhitan-system/src/main/java/com/zhitan/saving/domain/entity/PoliciesRegulationsManagement.java b/zhitan-system/src/main/java/com/zhitan/saving/domain/entity/PoliciesRegulationsManagement.java
index 9a5a857..7490c11 100644
--- a/zhitan-system/src/main/java/com/zhitan/saving/domain/entity/PoliciesRegulationsManagement.java
+++ b/zhitan-system/src/main/java/com/zhitan/saving/domain/entity/PoliciesRegulationsManagement.java
@@ -12,7 +12,7 @@
 
 /**
  * 鏀跨瓥娉曡瀵硅薄
- * @author ZhiTan
+ * @author Geoffrey
  * @date 2025/01/13
  */
 @Data
diff --git a/zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementDetailVO.java b/zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementDetailVO.java
index 0c2e1b6..23db3c0 100644
--- a/zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementDetailVO.java
+++ b/zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementDetailVO.java
@@ -11,7 +11,7 @@
 
 /**
  * 鏀跨瓥娉曡瀵硅薄vo
- * @author ZhiTan
+ * @author Geoffrey
  * @date 2025/01/13
  */
 @Data
diff --git a/zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementPageVO.java b/zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementPageVO.java
index 8374f83..c70c802 100644
--- a/zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementPageVO.java
+++ b/zhitan-system/src/main/java/com/zhitan/saving/domain/vo/PoliciesRegulationsManagementPageVO.java
@@ -11,7 +11,7 @@
 
 /**
  * 鏀跨瓥娉曡page vo
- * @author ZhiTan
+ * @author Geoffrey
  * @date 2025/01/13
  */
 @Data
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java
index 99aada3..968c4d7 100644
--- a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/dto/FlowChartsDTO.java
@@ -55,15 +55,6 @@
         if (ObjectUtils.isEmpty(timeType)) {
             return TimeType.DAY;
         }
-        switch (timeType) {
-            case DAY:
-                return TimeType.HOUR;
-            case MONTH:
-                return TimeType.DAY;
-            case YEAR:
-                return TimeType.MONTH;
-            default:
-                return timeType;
-        }
+        return timeType;
     }
 }
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java
index 60e2e9c..a0bf88e 100644
--- a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/FlowChartsVO.java
@@ -52,11 +52,10 @@
 
     public BigDecimal getEnergyLossRatio() {
         if (BigDecimal.ZERO.compareTo(totalAccumulatedAmount) == 0
-                || BigDecimal.ZERO.compareTo(difference) == 0) {
+                || BigDecimal.ZERO.compareTo(difference) == 0){
             return BigDecimal.ZERO;
         }
-        // 鍏堣绠楁瘮渚嬶紝鍐嶄箻浠� 100 杞崲涓虹櫨鍒嗘暟
-        return energyLossRatio = difference.divide(totalAccumulatedAmount, 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2, RoundingMode.HALF_UP);
+        return energyLossRatio = difference.divide(totalAccumulatedAmount, 2, RoundingMode.HALF_UP);
     }
 
     public FlowChartsVO() {
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/QueryCompareRequest.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/QueryCompareRequest.java
index 537c136..71998cb 100644
--- a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/QueryCompareRequest.java
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/domain/vo/QueryCompareRequest.java
@@ -10,7 +10,7 @@
 
 /**
  * @Description: 鏁版嵁鏌ヨ鏉′欢瀹炰綋
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�01鏈�28鏃� 14:49
  */
 @Data
diff --git a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
index 4672b86..94fcfe6 100644
--- a/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
+++ b/zhitan-system/src/main/java/com/zhitan/statisticalAnalysis/service/impl/EnergyConsumeDataServiceImpl.java
@@ -32,7 +32,7 @@
 
 /**
  * @Description: TODO
- * @author ZhiTan
+ * @author: yxw
  * @date: 2022骞�04鏈�12鏃� 14:15
  */
 @Service
diff --git a/zhitan-vue/.env.development b/zhitan-vue/.env.development
index 8115ffc..f878550 100644
--- a/zhitan-vue/.env.development
+++ b/zhitan-vue/.env.development
@@ -5,6 +5,5 @@
 VITE_APP_ENV = 'development'
 
 # 绯荤粺/寮�鍙戠幆澧�
-# test
-VITE_APP_BASE_API = 'http://127.0.0.1:8080'
+VITE_APP_BASE_API = '/dev-api'
 
diff --git a/zhitan-vue/src/assets/icons/svg/ai.svg b/zhitan-vue/src/assets/icons/svg/ai.svg
new file mode 100644
index 0000000..efad5e4
--- /dev/null
+++ b/zhitan-vue/src/assets/icons/svg/ai.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16z"></path><path d="M12 6a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-4 6a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm8 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4z"></path></svg> 
\ No newline at end of file
diff --git a/zhitan-vue/src/assets/icons/svg/bell.svg b/zhitan-vue/src/assets/icons/svg/bell.svg
new file mode 100644
index 0000000..5ae9909
--- /dev/null
+++ b/zhitan-vue/src/assets/icons/svg/bell.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"></path><path d="M13.73 21a2 2 0 0 1-3.46 0"></path></svg> 
\ No newline at end of file
diff --git a/zhitan-vue/src/assets/images/2.png b/zhitan-vue/src/assets/images/2.png
new file mode 100644
index 0000000..8cb38c8
--- /dev/null
+++ b/zhitan-vue/src/assets/images/2.png
Binary files differ
diff --git a/zhitan-vue/src/assets/images/3.png b/zhitan-vue/src/assets/images/3.png
new file mode 100644
index 0000000..e8f3197
--- /dev/null
+++ b/zhitan-vue/src/assets/images/3.png
Binary files differ
diff --git a/zhitan-vue/src/assets/images/5.png b/zhitan-vue/src/assets/images/5.png
new file mode 100644
index 0000000..51d4ed0
--- /dev/null
+++ b/zhitan-vue/src/assets/images/5.png
Binary files differ
diff --git a/zhitan-vue/src/assets/images/6.png b/zhitan-vue/src/assets/images/6.png
new file mode 100644
index 0000000..d0773b6
--- /dev/null
+++ b/zhitan-vue/src/assets/images/6.png
Binary files differ
diff --git a/zhitan-vue/src/assets/images/7.png b/zhitan-vue/src/assets/images/7.png
new file mode 100644
index 0000000..54ef074
--- /dev/null
+++ b/zhitan-vue/src/assets/images/7.png
Binary files differ
diff --git a/zhitan-vue/src/assets/images/alarm.png b/zhitan-vue/src/assets/images/alarm.png
new file mode 100644
index 0000000..16599dd
--- /dev/null
+++ b/zhitan-vue/src/assets/images/alarm.png
Binary files differ
diff --git a/zhitan-vue/src/assets/images/login-background.png b/zhitan-vue/src/assets/images/login-background.png
new file mode 100644
index 0000000..2a09768
--- /dev/null
+++ b/zhitan-vue/src/assets/images/login-background.png
Binary files differ
diff --git a/zhitan-vue/src/assets/images/login-background.jpg b/zhitan-vue/src/assets/images/login-background1.jpg
similarity index 100%
rename from zhitan-vue/src/assets/images/login-background.jpg
rename to zhitan-vue/src/assets/images/login-background1.jpg
Binary files differ
diff --git a/zhitan-vue/src/assets/images/robot.png b/zhitan-vue/src/assets/images/robot.png
new file mode 100644
index 0000000..8320bcc
--- /dev/null
+++ b/zhitan-vue/src/assets/images/robot.png
Binary files differ
diff --git a/zhitan-vue/src/assets/styles/page.scss b/zhitan-vue/src/assets/styles/page.scss
index dfbcd09..f7fb7cc 100644
--- a/zhitan-vue/src/assets/styles/page.scss
+++ b/zhitan-vue/src/assets/styles/page.scss
@@ -4,10 +4,35 @@
       display: flex;
 
       .page-container-left {
-        width: 280px;
+        width: 220px;
         min-height: calc(100vh - 148px);
         border-right: 1px solid #1a235d;
-        background: #1F1C49;
+        background: #08234F;
+        
+        .el-tree {
+          &.el-tree--highlight-current,
+          &:not(.el-tree--highlight-current) {
+            .el-tree-node {
+              .el-tree-node__content {
+                .el-tree-node__label,
+                span {
+                  font-size: 14px !important;
+                }
+              }
+              
+              .el-tree-node__expand-icon {
+                font-size: 14px !important;
+              }
+            }
+          }
+        }
+
+        .tree-container, .tree {
+          .el-tree-node__label, 
+          .el-tree-node__content span {
+            font-size: 14px !important;
+          }
+        }
 
         .tree {
           height: calc(100vh - 170px);
@@ -26,10 +51,64 @@
     }
 
     .form-card {
-      background: #1a235d;
-      border-radius: 0px 0px 0px 0px;
-      border: 1px solid #000000;
-      padding: 18px 0 0 15px;
+      background: #08234F;
+      border-radius: 0px;
+      height: 52px;
+      line-height: 52px;
+      margin: 0 16px;
+      display: flex;
+      align-items: center;
+      
+      .el-form.el-form--inline {
+        margin-left: 10px;
+        display: flex;
+        align-items: center;
+        flex-wrap: nowrap;
+        width: 100%;
+        
+        .el-form-item {
+          margin-right: 15px;
+          margin-bottom: 0;
+          height: 32px;
+          display: flex;
+          align-items: center;
+          
+          &.is-required {
+            .el-form-item__label::before {
+              vertical-align: middle;
+            }
+          }
+          
+          .el-form-item__label {
+            height: 32px;
+            line-height: 32px;
+            color: #ffffff;
+          }
+          
+          .el-form-item__content {
+            display: flex;
+            align-items: center;
+            height: 32px;
+            line-height: 32px;
+            
+            .el-input, .el-select, .el-date-editor {
+              height: 32px;
+              line-height: 32px;
+            }
+            
+            .el-input__wrapper {
+              height: 32px;
+            }
+            
+            .el-button {
+              height: 32px;
+              line-height: 32px;
+              padding-top: 0;
+              padding-bottom: 0;
+            }
+          }
+        }
+      }
     }
 
     .table-bg-style {
@@ -88,8 +167,32 @@
         min-height: calc(100vh - 148px);
         border-right: 1px solid #fff;
         background: #f1f4fa;
+        
+        .el-tree {
+          &.el-tree--highlight-current,
+          &:not(.el-tree--highlight-current) {
+            .el-tree-node {
+              .el-tree-node__content {
+                .el-tree-node__label,
+                span {
+                  font-size: 14px !important;
+                }
+              }
+              
+              .el-tree-node__expand-icon {
+                font-size: 14px !important;
+              }
+            }
+          }
+        }
 
-        // border-right: 1px solid #1a235d;
+        .tree-container, .tree {
+          .el-tree-node__label,
+          .el-tree-node__content span {
+            font-size: 14px !important;
+          }
+        }
+
         .tree {
           height: calc(100vh - 170px) !important;
           max-height: calc(100vh - 170px) !important;
@@ -108,10 +211,56 @@
 
     .form-card {
       background: #fff;
-      // background: #F7F8FA;
-      border-radius: 0px 0px 0px 0px;
-      // border: 1px solid #000000;
-      padding: 18px 0 0 15px;
+      border-radius: 0px;
+      height: 52px;
+      line-height: 52px;
+      margin: 0 16px;
+      display: flex;
+      align-items: center;
+      
+      .el-form.el-form--inline {
+        margin-left: 10px;
+        display: flex;
+        align-items: center;
+        flex-wrap: nowrap;
+        width: 100%;
+        
+        .el-form-item {
+          margin-right: 15px;
+          margin-bottom: 0;
+          height: 32px;
+          display: flex;
+          align-items: center;
+          
+          .el-form-item__label {
+            height: 32px;
+            line-height: 32px;
+          }
+          
+          .el-form-item__content {
+            display: flex;
+            align-items: center;
+            height: 32px;
+            line-height: 32px;
+            
+            .el-input, .el-select, .el-date-editor {
+              height: 32px;
+              line-height: 32px;
+            }
+            
+            .el-input__wrapper {
+              height: 32px;
+            }
+            
+            .el-button {
+              height: 32px;
+              line-height: 32px;
+              padding-top: 0;
+              padding-bottom: 0;
+            }
+          }
+        }
+      }
     }
     
     .table-bg-style {
@@ -159,6 +308,15 @@
 
 }
 
+// 鍒犻櫎涔嬪墠娣诲姞鐨勫叏灞�鏍峰紡瑕嗙洊锛岄伩鍏嶅奖鍝嶅叏灞�
+// 淇濈暀璋冭瘯寤鸿
+/*
+鎮ㄥ彲浠ュ湪娴忚鍣ㄤ腑浣跨敤浠ヤ笅鍐呰仈鏍峰紡杩涜璋冭瘯:
+document.querySelectorAll('.page-container-left .el-tree-node__label').forEach(el => {
+  el.style.cssText = 'font-size: 14px !important';
+});
+*/
+
 .padding {
   padding: 15px;
 }
\ No newline at end of file
diff --git a/zhitan-vue/src/assets/styles/ruoyi.scss b/zhitan-vue/src/assets/styles/ruoyi.scss
index f446cf6..029d415 100644
--- a/zhitan-vue/src/assets/styles/ruoyi.scss
+++ b/zhitan-vue/src/assets/styles/ruoyi.scss
@@ -394,7 +394,7 @@
   // 鏍�
   .el-tree {
     background: transparent;
-    font-size: 16px;
+    font-size: 14px;
     color: #ffffff;
 
     .el-tree-node__content {
diff --git a/zhitan-vue/src/assets/styles/sidebar.scss b/zhitan-vue/src/assets/styles/sidebar.scss
index 4cdd9cf..a698226 100644
--- a/zhitan-vue/src/assets/styles/sidebar.scss
+++ b/zhitan-vue/src/assets/styles/sidebar.scss
@@ -1,7 +1,7 @@
 .themeDark {
   #app {
     .el-menu-item.is-active {
-      background: #3271eb !important;
+     // background: #3271eb !important;
       // border-radius: 30px 30px 30px 30px !important;
       color: #fff;
     }
@@ -30,11 +30,12 @@
       background-color: $base-menu-background;
       height: 100%;
       position: fixed;
-      top: 0;
+      top: 60px;
       bottom: 0;
       left: 0;
-      z-index: 1001;
+      z-index: 999;
       overflow: hidden;
+      background-color: #002866 !important;
       -webkit-box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
       box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
       font-family: OPPOSans, OPPOSans;
@@ -92,7 +93,7 @@
       .menu-title {
         overflow: hidden !important;
         font-weight: 400 !important;
-        font-size: 16px !important;
+        font-size: 14px !important;
       }
 
       // @media (min-width: 1440px) {
@@ -284,7 +285,7 @@
 .themeLight {
   #app {
     .el-menu-item.is-active {
-      background: #e0eafc !important;
+     
       // border-radius: 30px 30px 30px 30px !important;
     }
 
@@ -311,10 +312,10 @@
       background-color: $base-menu-background;
       height: 100%;
       position: fixed;
-      top: 0;
+      top: 60px;
       bottom: 0;
       left: 0;
-      z-index: 1001;
+      z-index: 999;
       overflow: hidden;
       -webkit-box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35);
       box-shadow: none;
diff --git a/zhitan-vue/src/assets/styles/variables.module.scss b/zhitan-vue/src/assets/styles/variables.module.scss
index b324f60..cbd7c36 100644
--- a/zhitan-vue/src/assets/styles/variables.module.scss
+++ b/zhitan-vue/src/assets/styles/variables.module.scss
@@ -42,7 +42,7 @@
 $--color-danger: #F56C6C;
 $--color-info: #909399;
 
-$base-sidebar-width: 260px;
+$base-sidebar-width: 220px;
 
 // the :export directive is the magic sauce for webpack
 // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
diff --git a/zhitan-vue/src/components/Avatar/index.vue b/zhitan-vue/src/components/Avatar/index.vue
new file mode 100644
index 0000000..bb8a375
--- /dev/null
+++ b/zhitan-vue/src/components/Avatar/index.vue
@@ -0,0 +1,100 @@
+<template>
+  <div class="avatar-container">
+    <el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click">
+      <div class="avatar-wrapper">
+        <img :src="userStore.avatar" class="user-avatar" />
+        <el-icon><caret-bottom /></el-icon>
+      </div>
+      <template #dropdown>
+        <el-dropdown-menu>
+          <router-link to="/user/profile">
+            <el-dropdown-item>涓汉涓績</el-dropdown-item>
+          </router-link>
+          <el-dropdown-item command="toggleTheme">
+            <span>椋庢牸鍒囨崲</span>
+          </el-dropdown-item>
+          <el-dropdown-item divided command="logout">
+            <span>閫�鍑虹櫥褰�</span>
+          </el-dropdown-item>
+        </el-dropdown-menu>
+      </template>
+    </el-dropdown>
+  </div>
+</template>
+
+<script setup>
+import { ElMessageBox } from "element-plus"
+import useUserStore from "@/store/modules/user"
+import useSettingsStore from "@/store/modules/settings"
+
+const userStore = useUserStore()
+const settingsStore = useSettingsStore()
+
+function handleCommand(command) {
+  switch (command) {
+    case "toggleTheme":
+      const newTheme = settingsStore.sideTheme === "theme-dark" ? "theme-light" : "theme-dark";
+      settingsStore.changeSetting({ key: "sideTheme", value: newTheme });
+      document.querySelector("body").className = newTheme === "theme-dark" ? "themeDark" : "themeLight";
+      break;
+    case "logout":
+      ElMessageBox.confirm("纭畾娉ㄩ攢骞堕��鍑虹郴缁熷悧锛�", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          userStore.logOut().then(() => {
+            location.href = "/index";
+          });
+        })
+        .catch(() => {});
+      break;
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.avatar-container {
+  margin-right: 20px;
+  
+  .avatar-wrapper {
+    margin-top: 5px;
+    position: relative;
+    display: flex;
+    align-items: center;
+    
+    .user-avatar {
+      cursor: pointer;
+      width: 40px;
+      height: 40px;
+      border-radius: 10px;
+    }
+    
+    .el-icon {
+      cursor: pointer;
+      margin-left: 8px;
+      font-size: 12px;
+      color: #ffffff;
+    }
+  }
+}
+
+.right-menu-item {
+  display: inline-block;
+  padding: 0 8px;
+  height: 100%;
+  font-size: 18px;
+  color: #ffffff;
+  vertical-align: text-bottom;
+  
+  &.hover-effect {
+    cursor: pointer;
+    transition: background 0.3s;
+    
+    &:hover {
+      background: rgba(0, 0, 0, 0.1);
+    }
+  }
+}
+</style> 
\ No newline at end of file
diff --git a/zhitan-vue/src/components/BaseCard/BaseCard.vue b/zhitan-vue/src/components/BaseCard/BaseCard.vue
index f5b431e..47c625b 100644
--- a/zhitan-vue/src/components/BaseCard/BaseCard.vue
+++ b/zhitan-vue/src/components/BaseCard/BaseCard.vue
@@ -67,6 +67,20 @@
       font-family: YouSheBiaoTiHei;
       font-size: 1.25vw; //24px;
       color: #fff;
+      position: relative;
+      padding-left: 12px;
+      
+      &::before {
+        content: '';
+        position: absolute;
+        left: 0;
+        top: 50%;
+        transform: translateY(-50%);
+        width: 5px;
+        height: 18px;
+        background-color: #3883FA;
+        border-radius: 2px;
+      }
     }
   }
 
diff --git a/zhitan-vue/src/components/BaseCard/index.vue b/zhitan-vue/src/components/BaseCard/index.vue
index f434aeb..28f172a 100644
--- a/zhitan-vue/src/components/BaseCard/index.vue
+++ b/zhitan-vue/src/components/BaseCard/index.vue
@@ -28,11 +28,26 @@
       border-radius: 7px 7px 0 0;
       padding: 20px;
       background-color: #22408c;
+      
       .name {
         font-family: OPPOSans, OPPOSans;
         font-weight: bold;
         font-size: 18px;
         color: #fff;
+        position: relative;
+        padding-left: 12px;
+        
+        &::before {
+          content: '';
+          position: absolute;
+          left: 0;
+          top: 50%;
+          transform: translateY(-50%);
+          width: 5px;
+          height: 18px;
+          background-color: #3883FA;
+          border-radius: 2px;
+        }
       }
     }
   }
@@ -46,6 +61,7 @@
     border: 1px solid #ebebeb;
     padding-bottom: 10px;
     background-color: #fff;
+    
     .mycard-title {
       display: flex;
       justify-content: flex-start;
@@ -54,11 +70,26 @@
       border-radius: 7px 7px 0 0;
       padding: 20px;
       background-color: #e7eefd;
+      
       .name {
         font-family: OPPOSans, OPPOSans;
         font-weight: bold;
         font-size: 18px;
         color: #2d2e31;
+        position: relative;
+        padding-left: 12px;
+        
+        &::before {
+          content: '';
+          position: absolute;
+          left: 0;
+          top: 50%;
+          transform: translateY(-50%);
+          width: 5px;
+          height: 18px;
+          background-color: #3883FA;
+          border-radius: 2px;
+        }
       }
     }
   }
diff --git a/zhitan-vue/src/components/Breadcrumb/index.vue b/zhitan-vue/src/components/Breadcrumb/index.vue
index 729370a..032a6fb 100644
--- a/zhitan-vue/src/components/Breadcrumb/index.vue
+++ b/zhitan-vue/src/components/Breadcrumb/index.vue
@@ -18,10 +18,11 @@
   // only show routes with meta.title
   let matched = route.matched.filter(item => item.meta && item.meta.title);
   const first = matched[0]
-  // 鍒ゆ柇鏄惁涓洪椤�
-  if (!isDashboard(first)) {
-    matched = [{ path: '/index', meta: { title: '棣栭〉' } }].concat(matched)
-  }
+  
+  // 涓嶈嚜鍔ㄦ坊鍔犻椤靛埌闈㈠寘灞戜腑
+  // if (!isDashboard(first)) {
+  //   matched = [{ path: '/index', meta: { title: '棣栭〉' } }].concat(matched)
+  // }
 
   levelList.value = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
 }
@@ -62,5 +63,19 @@
     color: #fff;
     cursor: text;
   }
+  
+  :deep(.el-breadcrumb__item) {
+    .el-breadcrumb__inner {
+      color: rgba(255, 255, 255, 0.8);
+      
+      &:hover {
+        color: #fff;
+      }
+    }
+    
+    .el-breadcrumb__separator {
+      color: rgba(255, 255, 255, 0.8);
+    }
+  }
 }
 </style>
\ No newline at end of file
diff --git a/zhitan-vue/src/components/HeaderSearch/index.vue b/zhitan-vue/src/components/HeaderSearch/index.vue
index 6ef6d2c..d47cb53 100644
--- a/zhitan-vue/src/components/HeaderSearch/index.vue
+++ b/zhitan-vue/src/components/HeaderSearch/index.vue
@@ -52,7 +52,7 @@
     window.open(path.substr(pindex, path.length), "_blank");
   } else {
     if (query) {
-      router.push({ path: path, query: JSON.parse(query) });
+      router.push({ path: path, query: query });
     } else {
       router.push(path)
     }
diff --git a/zhitan-vue/src/components/LeftTree/index.vue b/zhitan-vue/src/components/LeftTree/index.vue
index 5841bdd..79695c5 100644
--- a/zhitan-vue/src/components/LeftTree/index.vue
+++ b/zhitan-vue/src/components/LeftTree/index.vue
@@ -53,14 +53,26 @@
 getTree();
 /** 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋� */
 function getTree() {
+  // 纭繚query.value鏈夊垵濮嬪��
+  query.value = query.value || {};
+  
+  // 浼樺厛浣跨敤props涓紶鍏ョ殑ParentModelCode
   if (props.ParentModelCode) {
-    query.value = { modelCode: props.ParentModelCode };
+    query.value.modelCode = props.ParentModelCode;
+  } else if (useRoute().query.modelCode) {
+    // 鍏舵浣跨敤璺敱涓殑modelCode
+    query.value.modelCode = useRoute().query.modelCode;
   } else {
-    query.value = { ...useRoute().query };
+    // 鏈�鍚庝娇鐢ㄩ粯璁ゅ��
+    query.value.modelCode = 'JCZBK_CODE';
   }
+  
+  console.log('LeftTree getTree modelCode:', query.value.modelCode);
+  
   treeList(query.value).then((response) => {
     nodeOptions.value = response.data;
     if (response.data.length > 0) {
+      defaultExpandedKeys.value = []; // 娓呯┖宸叉湁鐨刱ey锛岄伩鍏嶉噸澶�
       response.data.map((item) => {
         defaultExpandedKeys.value.push(item.id);
       });
diff --git a/zhitan-vue/src/components/TagsView/index.vue b/zhitan-vue/src/components/TagsView/index.vue
new file mode 100644
index 0000000..d9e1c33
--- /dev/null
+++ b/zhitan-vue/src/components/TagsView/index.vue
@@ -0,0 +1,36 @@
+function isTags(route) {
+  return !route.hidden && route.name && 
+    route.name !== 'login' && 
+    route.name !== '404' && 
+    route.name !== '401' && 
+    route.name !== 'index' && 
+    route.path !== '/index' && 
+    route.path !== '/';
+} 
+
+function addTags() {
+  const { name } = route;
+  if (name) {
+    // 妫�鏌ユ槸鍚︿负棣栭〉
+    if (name === 'index' || route.path === '/index' || route.path === '/') {
+      return;
+    }
+    store.dispatch('tagsView/addView', route);
+  }
+  return false;
+} 
+
+// 鍒濆鍖栨爣绛撅紝纭繚棣栭〉涓嶈娣诲姞涓哄浐瀹氭爣绛�
+function initTags() {
+  const affixTags = filterAffixTags(routes);
+  for (const tag of affixTags) {
+    // 鎺掗櫎棣栭〉
+    if (tag.path === '/index' || tag.path === '/' || tag.name === 'Index') {
+      continue;
+    }
+    // 娣诲姞鍥哄畾鏍囩
+    if (tag.name) {
+      store.dispatch('tagsView/addVisitedView', tag);
+    }
+  }
+} 
\ No newline at end of file
diff --git a/zhitan-vue/src/components/TopNav/index.vue b/zhitan-vue/src/components/TopNav/index.vue
index 52b40ea..7c42971 100644
--- a/zhitan-vue/src/components/TopNav/index.vue
+++ b/zhitan-vue/src/components/TopNav/index.vue
@@ -1,35 +1,30 @@
 <template>
-  <el-menu
-    :default-active="activeMenu"
-    mode="horizontal"
-    @select="handleSelect"
-    :ellipsis="false"
-  >
-    <template v-for="(item, index) in topMenus">
-      <el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index" v-if="index < visibleNumber">
-        <svg-icon
-        v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
-        :icon-class="item.meta.icon"/>
-        {{ item.meta.title }}
-      </el-menu-item>
-    </template>
-
-    <!-- 椤堕儴鑿滃崟瓒呭嚭鏁伴噺鎶樺彔 -->
-    <el-sub-menu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber">
-      <template #title>鏇村鑿滃崟</template>
-      <template v-for="(item, index) in topMenus">
-        <el-menu-item
-          :index="item.path"
-          :key="index"
-          v-if="index >= visibleNumber">
-        <svg-icon
-          v-if="item.meta && item.meta.icon && item.meta.icon !== '#'"
-          :icon-class="item.meta.icon"/>
-        {{ item.meta.title }}
-        </el-menu-item>
-      </template>
-    </el-sub-menu>
-  </el-menu>
+  <div class="top-nav-container">
+    <div class="scroll-arrow left-arrow" @click="scrollLeft" v-show="canScrollLeft">
+      <el-icon><arrow-left /></el-icon>
+    </div>
+    
+    <div class="menu-container" ref="menuContainer">
+      <el-menu
+        :default-active="activeMenu"
+        mode="horizontal"
+        @select="handleSelect"
+        :ellipsis="false"
+        class="top-menu"
+        :class="{ 'theme-dark': theme === 'dark' }"
+      >
+        <template v-for="(item, index) in topMenus" :key="index">
+          <el-menu-item :style="{'--theme': theme}" :index="item.path">
+            {{ item.meta.title }}
+          </el-menu-item>
+        </template>
+      </el-menu>
+    </div>
+    
+    <div class="scroll-arrow right-arrow" @click="scrollRight" v-show="canScrollRight">
+      <el-icon><arrow-right /></el-icon>
+    </div>
+  </div>
 </template>
 
 <script setup>
@@ -38,9 +33,13 @@
 import useAppStore from '@/store/modules/app'
 import useSettingsStore from '@/store/modules/settings'
 import usePermissionStore from '@/store/modules/permission'
+import { ArrowLeft, ArrowRight } from '@element-plus/icons-vue'
 
-// 椤堕儴鏍忓垵濮嬫暟
-const visibleNumber = ref(null);
+// 婊氬姩鐩稿叧
+const menuContainer = ref(null);
+const canScrollLeft = ref(false);
+const canScrollRight = ref(false);
+
 // 褰撳墠婵�娲昏彍鍗曠殑 index
 const currentIndex = ref(null);
 // 闅愯棌渚ц竟鏍忚矾鐢�
@@ -102,9 +101,13 @@
     const tmpPath = path.substring(1, path.length);
     activePath = "/" + tmpPath.substring(0, tmpPath.indexOf("/"));
     if (!route.meta.link) {
-        appStore.toggleSideBarHide(false);
+      appStore.toggleSideBarHide(false);
     }
-  } else if(!route.children) {
+  } else if (path === '/index' || path === '/') {
+    // 棣栭〉鏃堕殣钘忎晶杈规爮
+    activePath = path;
+    appStore.toggleSideBarHide(true);
+  } else if (!route.children) {
     activePath = path;
     appStore.toggleSideBarHide(true);
   }
@@ -112,36 +115,76 @@
   return activePath;
 })
 
-function setVisibleNumber() {
-  const width = document.body.getBoundingClientRect().width / 3;
-  visibleNumber.value = parseInt(width / 85);
+function updateScrollButtons() {
+  if (!menuContainer.value) return;
+  
+  const container = menuContainer.value;
+  canScrollLeft.value = container.scrollLeft > 10;
+  canScrollRight.value = container.scrollLeft < (container.scrollWidth - container.clientWidth - 10);
+}
+
+function scrollLeft() {
+  if (!menuContainer.value) return;
+  menuContainer.value.scrollBy({ left: -200, behavior: 'smooth' });
+  setTimeout(updateScrollButtons, 300);
+}
+
+function scrollRight() {
+  if (!menuContainer.value) return;
+  menuContainer.value.scrollBy({ left: 200, behavior: 'smooth' });
+  setTimeout(updateScrollButtons, 300);
 }
 
 function handleSelect(key, keyPath) {
   currentIndex.value = key;
   const route = routers.value.find(item => item.path === key);
+  
   if (isHttp(key)) {
     // http(s):// 璺緞鏂扮獥鍙f墦寮�
     window.open(key, "_blank");
-  } else if (!route || !route.children) {
-    // 娌℃湁瀛愯矾鐢辫矾寰勫唴閮ㄦ墦寮�
+    return;
+  } 
+  
+  if (key === '/index' || key === '/') {
+    // 棣栭〉鏃舵樉绀烘姌鍙犵殑渚ц竟鏍忥紝鑰屼笉鏄殣钘�
+    router.push({ path: key });
+    appStore.showCollapsedSidebar();
+    return;
+  } 
+  
+  // 妫�鏌ユ槸鍚︽湁瀛愯矾鐢�
+  if (route && route.children && route.children.length > 0) {
+    // 鏈夊瓙璺敱锛屾樉绀轰晶杈规爮
+    activeRoutes(key);
+    const firstChild = route.children[0];
+    const path = firstChild.path.startsWith('/') ? firstChild.path : `${key}/${firstChild.path}`;
+    if (firstChild.query) {
+      router.push({ path, query: firstChild.query });
+    } else {
+      router.push({ path });
+    }
+  } else {
+    // 娌℃湁瀛愯矾鐢憋紝闅愯棌渚ц竟鏍�
     const routeMenu = childrenMenus.value.find(item => item.path === key);
     if (routeMenu && routeMenu.query) {
-      let query = JSON.parse(routeMenu.query);
-      router.push({ path: key, query: query });
+      // query 宸茬粡鍦� permission.js 涓澶勭悊涓哄璞★紝鏃犻渶鍐嶆瑙f瀽
+      router.push({ path: key, query: routeMenu.query });
     } else {
       router.push({ path: key });
     }
     appStore.toggleSideBarHide(true);
-  } else {
-    // 鏄剧ず宸︿晶鑱斿姩鑿滃崟
-    activeRoutes(key);
-    appStore.toggleSideBarHide(false);
   }
 }
 
 function activeRoutes(key) {
   let routes = [];
+  if (key === '/index' || key === '/') {
+    // 棣栭〉鏃舵樉绀烘姌鍙犵殑渚ц竟鏍忥紝鑰屼笉鏄殣钘�
+    appStore.showCollapsedSidebar();
+    return [];
+  }
+  
+  // 鏌ユ壘鍖归厤鐨勮矾鐢�
   if (childrenMenus.value && childrenMenus.value.length > 0) {
     childrenMenus.value.map((item) => {
       if (key == item.parentPath || (key == "index" && "" == item.path)) {
@@ -149,66 +192,183 @@
       }
     });
   }
+  
   if(routes.length > 0) {
+    // 鏈夊瓙璺敱锛屽垯鏄剧ず渚ц竟鏍�
     permissionStore.setSidebarRouters(routes);
+    appStore.toggleSideBarHide(false);
   } else {
+    // 娌℃湁瀛愯矾鐢憋紝闅愯棌渚ц竟鏍�
     appStore.toggleSideBarHide(true);
   }
   return routes;
 }
 
 onMounted(() => {
-  window.addEventListener('resize', setVisibleNumber)
-})
-onBeforeUnmount(() => {
-  window.removeEventListener('resize', setVisibleNumber)
+  // 鏍规嵁褰撳墠璺敱鍐冲畾鏄惁鏄剧ず渚ц竟鏍忥紝鑰屼笉鏄洿鎺ラ殣钘�
+  const currentPath = route.path;
+  if (currentPath === '/index' || currentPath === '/') {
+    // 濡傛灉褰撳墠鏄椤碉紝鑷姩璺宠浆鍒扮涓�涓姩鎬佽矾鐢�
+    if (topMenus.value.length > 0) {
+      const firstRoute = topMenus.value[0];
+      handleSelect(firstRoute.path);
+    }
+  } else {
+    // 妫�鏌ュ綋鍓嶈矾鐢辨槸鍚﹂渶瑕佹樉绀轰晶杈规爮
+    const routeConfig = routers.value.find(item => currentPath.startsWith(item.path) && item.path !== '/');
+    if (routeConfig && routeConfig.children && routeConfig.children.length > 0) {
+      // 鏈夊瓙鑿滃崟锛屾樉绀轰晶杈规爮
+      activeRoutes(routeConfig.path);
+      appStore.toggleSideBarHide(false);
+    } else {
+      // 鏃犲瓙鑿滃崟锛屽彲浠ラ殣钘忎晶杈规爮
+      appStore.toggleSideBarHide(true);
+    }
+  }
+  
+  // 鐩戝惉婊氬姩鐘舵��
+  if (menuContainer.value) {
+    menuContainer.value.addEventListener('scroll', updateScrollButtons);
+    nextTick(() => {
+      updateScrollButtons();
+    });
+  }
+  
+  window.addEventListener('resize', () => {
+    updateScrollButtons();
+  });
 })
 
-onMounted(() => {
-  setVisibleNumber()
+onBeforeUnmount(() => {
+  if (menuContainer.value) {
+    menuContainer.value.removeEventListener('scroll', updateScrollButtons);
+  }
+  window.removeEventListener('resize', updateScrollButtons);
 })
 </script>
 
 <style lang="scss">
-.topmenu-container.el-menu--horizontal > .el-menu-item {
-  float: left;
-  height: 50px !important;
-  line-height: 50px !important;
-  color: #999093 !important;
-  padding: 0 5px !important;
-  margin: 0 10px !important;
+.top-nav-container {
+  display: flex;
+  align-items: center;
+  flex: 1;
+  position: relative;
+  height: 60px;
+  overflow: hidden;
+  padding: 0 40px; /* Increase padding for arrows */
+  
+  .scroll-arrow {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    width: 28px;
+    height: 28px;
+    background: rgba(255, 255, 255, 0.2);
+    border-radius: 50%;
+    cursor: pointer;
+    color: #ffffff;
+    z-index: 20;
+    opacity: 0;
+    transition: opacity 0.3s;
+    position: absolute;
+    box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
+    
+    &:hover {
+      background: rgba(255, 255, 255, 0.3);
+    }
+    
+    &.left-arrow {
+      left: 8px;
+    }
+    
+    &.right-arrow {
+      right: 8px;
+    }
+  }
+  
+  &:hover {
+    .scroll-arrow {
+      opacity: 1;
+    }
+  }
+  
+  .menu-container {
+    width: 100%;
+    height: 100%;
+    overflow-x: auto;
+    overflow-y: hidden;
+    scrollbar-width: none; /* Firefox */
+    -ms-overflow-style: none; /* IE and Edge */
+    
+    &::-webkit-scrollbar {
+      display: none; /* Chrome, Safari, Opera */
+    }
+  }
 }
 
-.topmenu-container.el-menu--horizontal > .el-menu-item.is-active, .el-menu--horizontal > .el-sub-menu.is-active .el-submenu__title {
-  border-bottom: 2px solid #{'var(--theme)'} !important;
-  color: #303133;
+.top-menu {
+  height: 60px;
+  border-bottom: none !important;
+  white-space: nowrap;
+  background: transparent !important;
+  
+  &.theme-dark {
+    background: #002866 !important;
+  }
 }
 
-/* sub-menu item */
-.topmenu-container.el-menu--horizontal > .el-sub-menu .el-sub-menu__title {
-  float: left;
-  height: 50px !important;
-  line-height: 50px !important;
-  color: #999093 !important;
-  padding: 0 5px !important;
-  margin: 0 10px !important;
-}
-
-/* 鑳屾櫙鑹查殣钘� */
-.topmenu-container.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus, .topmenu-container.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover, .topmenu-container.el-menu--horizontal>.el-submenu .el-submenu__title:hover {
-  background-color: #ffffff !important;
+.el-menu--horizontal {
+  border-bottom: none !important;
+  
+  > .el-menu-item {
+    display: inline-block;
+    float: none;
+    height: 60px !important;
+    line-height: 60px !important;
+    color: #ffffff !important;
+    padding: 0 20px !important;
+    margin: 0 !important;
+    border-bottom: none !important;
+    position: relative;
+    font-size: 16px;
+    
+    &.is-active {
+      background-color: transparent !important;
+      color: #ffffff !important;
+      font-weight: bold;
+      
+      &::after {
+        content: '';
+        position: absolute;
+        bottom: 10px;
+        left: 50%;
+        transform: translateX(-50%);
+        width: calc(100% - 40px);
+        height: 2px;
+        background-color: #ffffff;
+      }
+    }
+    
+    &:hover {
+      background-color: rgba(255, 255, 255, 0.1) !important;
+      color: #ffffff !important;
+    }
+  }
 }
 
 /* 鍥炬爣鍙抽棿璺� */
-.topmenu-container .svg-icon {
-  margin-right: 4px;
+.svg-icon {
+  margin-right: 8px;
+  color: #ffffff;
 }
 
-/* topmenu more arrow */
-.topmenu-container .el-sub-menu .el-sub-menu__icon-arrow {
-  position: static;
-  vertical-align: middle;
-  margin-left: 8px;
-  margin-top: 0px;
+/* 棣栭〉鎸夐挳鏍峰紡 */
+.el-menu-item:first-child {
+  margin-left: 0 !important;
+  font-weight: bold;
+  
+  .svg-icon {
+    font-size: 18px;
+  }
 }
 </style>
diff --git a/zhitan-vue/src/layout/components/AppMain.vue b/zhitan-vue/src/layout/components/AppMain.vue
index 552c76d..2eaa2bb 100644
--- a/zhitan-vue/src/layout/components/AppMain.vue
+++ b/zhitan-vue/src/layout/components/AppMain.vue
@@ -27,7 +27,8 @@
     position: relative;
     overflow: hidden;
     background: #110f2e;
-    padding: 14px 0 0 14px;
+    padding: 14px;
+    box-sizing: border-box;
   }
 
   .fixed-header + .app-main {
@@ -37,8 +38,7 @@
   .hasTagsView {
     .app-main {
       /* 84 = navbar + tags-view + padding = 70 + 56 + 14 */
-      min-height: calc(100vh - 125px);
-      // padding: 20px;
+      min-height: calc(100vh - 110px);
     }
 
     .fixed-header + .app-main {
@@ -55,7 +55,8 @@
     position: relative;
     overflow: hidden;
     background: #f7f8fa;
-    padding: 14px 0 0 14px;
+    padding: 14px;
+    box-sizing: border-box;
   }
 
   .fixed-header + .app-main {
@@ -65,8 +66,7 @@
   .hasTagsView {
     .app-main {
       /* 84 = navbar + tags-view + padding = 70 + 56 + 14 */
-      min-height: calc(100vh - 125px);
-      // padding: 20px;
+      min-height: calc(100vh - 110px);
     }
 
     .fixed-header + .app-main {
diff --git a/zhitan-vue/src/layout/components/Navbar.vue b/zhitan-vue/src/layout/components/Navbar.vue
index 3500f36..edf2bbd 100644
--- a/zhitan-vue/src/layout/components/Navbar.vue
+++ b/zhitan-vue/src/layout/components/Navbar.vue
@@ -12,108 +12,51 @@
     </div>
 
     <div class="right-menu">
-      <!-- <template v-if="appStore.device !== 'mobile'">
-        <header-search id="header-search" class="right-menu-item" />
-
-        <screenfull id="screenfull" class="right-menu-item hover-effect" />
-
-        <el-tooltip content="甯冨眬澶у皬" effect="dark" placement="bottom">
-          <size-select id="size-select" class="right-menu-item hover-effect" />
-        </el-tooltip>
-      </template> -->
-      <!-- <el-button @click="toggleTheme">鍒囨崲</el-button> -->
-      <div class="avatar-container">
-        <el-dropdown @command="handleCommand" class="right-menu-item hover-effect" trigger="click">
-          <div class="avatar-wrapper">
-            <img :src="userStore.avatar" class="user-avatar" />
-            <el-icon><caret-bottom /></el-icon>
+      <!-- 鎶ヨ鎸夐挳 -->
+      <div class="right-menu-item hover-effect nav-btn-item">
+        <el-tooltip content="鎶ヨ" effect="dark" placement="bottom">
+          <div class="nav-btn" @click="handleAlarm">
+            <img src="@/assets/images/alarm.png" alt="鎶ヨ" />
+            <span>鎶ヨ</span>
           </div>
-          <template #dropdown>
-            <el-dropdown-menu>
-              <router-link to="/user/profile">
-                <el-dropdown-item>涓汉涓績</el-dropdown-item>
-              </router-link>
-              <el-dropdown-item command="toggleTheme">
-                <span>椋庢牸鍒囨崲</span>
-              </el-dropdown-item>
-              <!--               
-              <el-dropdown-item command="setLayout" v-if="settingsStore.showSettings">
-                <span>甯冨眬璁剧疆</span>
-              </el-dropdown-item> -->
-              <el-dropdown-item divided command="logout">
-                <span>閫�鍑虹櫥褰�</span>
-              </el-dropdown-item>
-            </el-dropdown-menu>
-          </template>
-        </el-dropdown>
+        </el-tooltip>
+      </div>
+      
+      <!-- 澶фā鍨嬫寜閽� -->
+      <div class="right-menu-item hover-effect nav-btn-item">
+        <el-tooltip content="澶фā鍨�" effect="dark" placement="bottom">
+          <div class="nav-btn" @click="handleRobot">
+            <img src="@/assets/images/robot.png" alt="澶фā鍨�" />
+            <span>澶фā鍨�</span>
+          </div>
+        </el-tooltip>
       </div>
     </div>
   </div>
 </template>
 
 <script setup>
-import { ElMessageBox } from "element-plus"
 import Breadcrumb from "@/components/Breadcrumb"
 import TopNav from "@/components/TopNav"
 import Hamburger from "@/components/Hamburger"
-import Screenfull from "@/components/Screenfull"
-import SizeSelect from "@/components/SizeSelect"
-import HeaderSearch from "@/components/HeaderSearch"
 import useAppStore from "@/store/modules/app"
-import useUserStore from "@/store/modules/user"
 import useSettingsStore from "@/store/modules/settings"
 
 const appStore = useAppStore()
-const userStore = useUserStore()
 const settingsStore = useSettingsStore()
-
-function toggleTheme() {
-  if (settingsStore.sideTheme == "theme-dark") {
-    settingsStore.sideTheme = "theme-light"
-    document.querySelector("body").className = "themeLight"
-  } else {
-    settingsStore.sideTheme = "theme-dark"
-    document.querySelector("body").className = "themeDark"
-  }
-}
 
 function toggleSideBar() {
   appStore.toggleSideBar()
 }
 
-function handleCommand(command) {
-  switch (command) {
-    case "toggleTheme":
-      toggleTheme()
-      break
-    case "setLayout":
-      setLayout()
-      break
-    case "logout":
-      logout()
-      break
-    default:
-      break
-  }
+function handleAlarm() {
+  // 澶勭悊鎶ヨ鎸夐挳鐐瑰嚮浜嬩欢
+  console.log('鎶ヨ鎸夐挳琚偣鍑�')
 }
 
-function logout() {
-  ElMessageBox.confirm("纭畾娉ㄩ攢骞堕��鍑虹郴缁熷悧锛�", "鎻愮ず", {
-    confirmButtonText: "纭畾",
-    cancelButtonText: "鍙栨秷",
-    type: "warning",
-  })
-    .then(() => {
-      userStore.logOut().then(() => {
-        location.href = "/index"
-      })
-    })
-    .catch(() => {})
-}
-
-const emits = defineEmits(["setLayout"])
-function setLayout() {
-  emits("setLayout")
+function handleRobot() {
+  // 澶勭悊澶фā鍨嬫寜閽偣鍑讳簨浠�
+  console.log('澶фā鍨嬫寜閽鐐瑰嚮')
 }
 </script>
 
@@ -188,26 +131,35 @@
         }
       }
 
-      .avatar-container {
-        margin-right: 40px;
-
-        .avatar-wrapper {
-          margin-top: 5px;
-          position: relative;
-
-          .user-avatar {
-            cursor: pointer;
-            width: 40px;
-            height: 40px;
-            border-radius: 10px;
+      .nav-btn-item {
+        display: flex;
+        align-items: center;
+        margin-right: 20px;
+        height: 70px;
+        
+        .nav-btn {
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          cursor: pointer;
+          color: #fff;
+          background-color: rgba(255, 255, 255, 0.1);
+          border-radius: 4px;
+          padding: 8px 16px;
+          
+          &:hover {
+            background-color: rgba(255, 255, 255, 0.2);
           }
-
-          i {
-            cursor: pointer;
-            position: absolute;
-            right: -20px;
-            top: 25px;
-            font-size: 12px;
+          
+          img {
+            width: 20px;
+            height: 20px;
+            margin-right: 6px;
+          }
+          
+          span {
+            font-size: 14px;
+            font-weight: 500;
           }
         }
       }
@@ -284,26 +236,35 @@
         }
       }
 
-      .avatar-container {
-        margin-right: 40px;
-
-        .avatar-wrapper {
-          margin-top: 5px;
-          position: relative;
-
-          .user-avatar {
-            cursor: pointer;
-            width: 40px;
-            height: 40px;
-            border-radius: 10px;
+      .nav-btn-item {
+        display: flex;
+        align-items: center;
+        margin-right: 20px;
+        height: 70px;
+        
+        .nav-btn {
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          cursor: pointer;
+          color: #333;
+          background-color: rgba(0, 0, 0, 0.05);
+          border-radius: 4px;
+          padding: 8px 16px;
+          
+          &:hover {
+            background-color: rgba(0, 0, 0, 0.1);
           }
-
-          i {
-            cursor: pointer;
-            position: absolute;
-            right: -20px;
-            top: 25px;
-            font-size: 12px;
+          
+          img {
+            width: 20px;
+            height: 20px;
+            margin-right: 6px;
+          }
+          
+          span {
+            font-size: 14px;
+            font-weight: 500;
           }
         }
       }
diff --git a/zhitan-vue/src/layout/components/Settings/index.vue b/zhitan-vue/src/layout/components/Settings/index.vue
index 51b619d..e8b1fd1 100644
--- a/zhitan-vue/src/layout/components/Settings/index.vue
+++ b/zhitan-vue/src/layout/components/Settings/index.vue
@@ -134,6 +134,8 @@
 function handleTheme(val) {
   settingsStore.sideTheme = val
   sideTheme.value = val
+  // Update body class to match the theme
+  document.querySelector("body").className = val === 'theme-dark' ? "themeDark" : "themeLight"
 }
 function saveSetting() {
   proxy.$modal.loading("姝e湪淇濆瓨鍒版湰鍦帮紝璇风◢鍊�...")
diff --git a/zhitan-vue/src/layout/components/Sidebar/SidebarItem.vue b/zhitan-vue/src/layout/components/Sidebar/SidebarItem.vue
index 3a85e7e..73346ce 100644
--- a/zhitan-vue/src/layout/components/Sidebar/SidebarItem.vue
+++ b/zhitan-vue/src/layout/components/Sidebar/SidebarItem.vue
@@ -86,7 +86,15 @@
     return props.basePath
   }
   if (routeQuery) {
-    let query = JSON.parse(routeQuery);
+    let query = routeQuery;
+    // 濡傛灉 routeQuery 鏄瓧绗︿覆锛屽垯灏濊瘯瑙f瀽瀹�
+    if (typeof routeQuery === 'string') {
+      try {
+        query = JSON.parse(routeQuery);
+      } catch (error) {
+        console.error('Error parsing query string:', routeQuery, error);
+      }
+    }
     return { path: getNormalPath(props.basePath + '/' + routePath), query: query }
   }
   return getNormalPath(props.basePath + '/' + routePath)
diff --git a/zhitan-vue/src/layout/components/Sidebar/index.vue b/zhitan-vue/src/layout/components/Sidebar/index.vue
index 2fe645a..603f4f2 100644
--- a/zhitan-vue/src/layout/components/Sidebar/index.vue
+++ b/zhitan-vue/src/layout/components/Sidebar/index.vue
@@ -3,17 +3,19 @@
     :class="{ 'has-logo': showLogo }"
     :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"
   >
-    <logo v-if="showLogo" :collapse="isCollapse" />
     <el-scrollbar :class="sideTheme" wrap-class="scrollbar-wrapper">
+      <!-- 棣栭〉鏃朵笉鏄剧ず浠讳綍鑿滃崟椤� -->
       <el-menu
+        v-if="!isHomePage"
         :default-active="activeMenu"
         :collapse="isCollapse"
-        :background-color="sideTheme === 'theme-dark' ? '#232D70' : '#fff'"
+        :background-color="'transparent'"
         :text-color="sideTheme === 'theme-dark' ? '#fff' : '#000'"
         :unique-opened="true"
         :active-text-color="theme"
         :collapse-transition="false"
         mode="vertical"
+        class="custom-menu"
       >
         <sidebar-item
           v-for="(route, index) in sidebarRouters"
@@ -22,24 +24,91 @@
           :base-path="route.path"
         />
       </el-menu>
+      <!-- 棣栭〉鏃剁殑绌虹櫧鍖哄煙 -->
+      <div v-else class="home-empty-menu"></div>
     </el-scrollbar>
+    
+    <!-- 搴曢儴鐢ㄦ埛鍖哄煙 -->
+    <div class="sidebar-footer" :class="{ 'collapsed': isCollapse, 'theme-light': sideTheme === 'theme-light' }">
+      <div class="user-avatar-container">
+        <img :src="userStore.avatar" class="user-avatar" />
+      </div>
+      
+      <!-- 灞曞紑鐘舵�佷笅鏄剧ず瀹屾暣鍐呭 -->
+      <div class="user-info" v-if="!isCollapse">
+        <div class="username">{{ userStore.name || 'admin' }}</div>
+        
+        <div class="action-buttons">
+          <div class="action-button" :class="{'theme-light': sideTheme === 'theme-light'}" @click="toUserProfile">
+            <el-icon><User /></el-icon>
+            <span>涓汉涓績</span>
+          </div>
+          
+          <div class="action-button" :class="{'theme-light': sideTheme === 'theme-light'}" @click="toggleTheme">
+            <el-icon><Brush /></el-icon>
+            <span>鍒囨崲涓婚</span>
+          </div>
+          
+          <div class="action-button" :class="{'theme-light': sideTheme === 'theme-light'}" @click="handleLogout">
+            <el-icon><SwitchButton /></el-icon>
+            <span>閫�鍑虹櫥褰�</span>
+          </div>
+        </div>
+      </div>
+      
+      <!-- 鎶樺彔鐘舵�佷笅鍙樉绀哄浘鏍囨寜閽� -->
+      <div class="collapsed-actions" v-if="isCollapse">
+        <div class="action-icon" :class="{'theme-light': sideTheme === 'theme-light'}" @click="toUserProfile" title="涓汉涓績">
+          <el-icon><User /></el-icon>
+        </div>
+        
+        <div class="action-icon" :class="{'theme-light': sideTheme === 'theme-light'}" @click="toggleTheme" title="鍒囨崲涓婚">
+          <el-icon><Brush /></el-icon>
+        </div>
+        
+        <div class="action-icon" :class="{'theme-light': sideTheme === 'theme-light'}" @click="handleLogout" title="閫�鍑虹櫥褰�">
+          <el-icon><SwitchButton /></el-icon>
+        </div>
+      </div>
+    </div>
   </div>
 </template>
 
 <script setup>
-import Logo from "./Logo"
 import SidebarItem from "./SidebarItem"
 import variables from "@/assets/styles/variables.module.scss"
 import useAppStore from "@/store/modules/app"
 import useSettingsStore from "@/store/modules/settings"
 import usePermissionStore from "@/store/modules/permission"
+import useUserStore from "@/store/modules/user"
+import { User, Brush, SwitchButton } from '@element-plus/icons-vue'
+import { ElMessageBox } from 'element-plus'
+import { useRouter } from 'vue-router'
 
+const router = useRouter()
 const route = useRoute()
 const appStore = useAppStore()
 const settingsStore = useSettingsStore()
 const permissionStore = usePermissionStore()
+const userStore = useUserStore()
 
 const sidebarRouters = computed(() => permissionStore.sidebarRouters)
+
+// 鍒ゆ柇褰撳墠鏄惁涓洪椤�
+const isHomePage = computed(() => {
+  return route.path === '/index' || route.path === '/' || route.fullPath.startsWith('/index')
+})
+
+// 棣栭〉涓撶敤璺敱锛屽彧鏈夐椤典竴涓彍鍗曢」
+const homePageRouters = computed(() => {
+  // 浠庡師濮嬭矾鐢变腑绛涢�夊嚭棣栭〉璺敱
+  const homeRoute = sidebarRouters.value.find(route => {
+    return route.children && route.children.find(child => child.path === '/index')
+  })
+  
+  return homeRoute ? [homeRoute] : []
+})
+
 const showLogo = computed(() => settingsStore.sidebarLogo)
 const sideTheme = computed(() => settingsStore.sideTheme)
 const theme = computed(() => settingsStore.theme)
@@ -53,5 +122,278 @@
   }
   return path
 })
+
+function toUserProfile() {
+  router.push('/user/profile')
+}
+
+function toggleTheme() {
+  if (settingsStore.sideTheme == "theme-dark") {
+    settingsStore.sideTheme = "theme-light"
+    document.querySelector("body").className = "themeLight"
+  } else {
+    settingsStore.sideTheme = "theme-dark"
+    document.querySelector("body").className = "themeDark"
+  }
+}
+
+function handleLogout() {
+  ElMessageBox.confirm("纭畾娉ㄩ攢骞堕��鍑虹郴缁熷悧锛�", "鎻愮ず", {
+    confirmButtonText: "纭畾",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      userStore.logOut().then(() => {
+        location.href = "/index"
+      })
+    })
+    .catch(() => {})
+}
 </script>
-<style lang="scss" scoped></style>
+<style lang="scss" scoped>
+:deep(.custom-menu) {
+  padding: 6px 0;
+  height: calc(100% - 150px); // 鐣欏嚭搴曢儴鐢ㄦ埛鍖哄煙鐨勭┖闂�
+  
+  // Override Element Plus default menu styles
+  .el-menu-item {
+    height: 38px !important;
+    line-height: 38px !important;
+    border-radius: 4px; 
+    margin: 4px 10px;
+    width: calc(100% - 20px);
+    
+    &.is-active {
+      background-color: #3883FA !important;
+      color: #fff !important;
+    }
+    
+    &:hover {
+      background-color: rgba(56, 131, 250, 0.1) !important;
+    }
+  }
+  
+  .el-sub-menu {
+    .el-sub-menu__title {
+      height: 38px !important;
+      line-height: 38px !important;
+      border-radius: 4px;
+      margin: 4px 10px;
+      width: calc(100% - 20px);
+      
+      &:hover {
+        background-color: rgba(56, 131, 250, 0.1) !important;
+      }
+    }
+    
+    .el-menu-item {
+      padding-left: 45px !important; 
+      min-width: auto !important;
+      
+      &.is-active {
+        padding-left: 45px !important;
+      }
+    }
+    
+    // For nested submenus
+    .el-menu {
+      .el-menu-item, 
+      .el-sub-menu__title {
+        height: 38px !important;
+        line-height: 38px !important;
+      }
+    }
+  }
+}
+
+// 棣栭〉绌虹櫧鑿滃崟鍖哄煙鏍峰紡
+.home-empty-menu {
+  height: calc(100% - 150px);
+}
+
+// 搴曢儴鐢ㄦ埛鍖哄煙鏍峰紡
+.sidebar-footer {
+  position: absolute;
+  bottom: 72px;
+  left: 0;
+  width: 100%;
+  border-top: 1px solid rgba(255, 255, 255, 0.1);
+  padding: 16px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  
+  &.collapsed {
+    padding: 10px;
+    
+    .user-avatar-container {
+      margin-bottom: 10px;
+    }
+  }
+  
+  &.theme-light {
+    background-color: rgba(255, 255, 255, 0.6);
+    border-top: 1px solid rgba(0, 0, 0, 0.1);
+    
+    .user-avatar-container {
+      border-color: rgba(0, 0, 0, 0.1);
+    }
+    
+    .user-info {
+      .username {
+        color: #333;
+      }
+    }
+  }
+  
+  .user-avatar-container {
+    margin-bottom: 10px;
+    border: 2px dashed rgba(255, 255, 255, 0.3);
+    border-radius: 4px;
+    width: 54px;
+    height: 54px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    
+    .user-avatar {
+      width: 38px;
+      height: 38px;
+      border-radius: 4px;
+    }
+  }
+  
+  .user-info {
+    width: 100%;
+    text-align: center;
+    
+    .username {
+      color: #fff;
+      font-size: 16px;
+      font-weight: 500;
+      margin-bottom: 16px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+    }
+    
+    .action-buttons {
+      .action-button {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        background: rgba(56, 131, 250, 0.11);
+        border-radius: 9px;
+        border: 1px solid rgba(255, 255, 255, 0.3);
+        color: #fff;
+        padding: 10px;
+        margin-bottom: 10px;
+        border-radius: 4px;
+        cursor: pointer;
+        transition: background-color 0.3s;
+        
+        &:hover {
+          background: rgba(56, 131, 250, 0.2);
+        }
+        
+        .el-icon {
+          margin-right: 8px;
+          font-size: 16px;
+        }
+        
+        span {
+          font-size: 14px;
+        }
+        
+        &.theme-light {
+          background-color: rgba(56, 131, 250, 1);
+          color: #fff;
+          border: 1px solid rgba(56, 131, 250, 0.8);
+          
+          &:hover {
+            background-color: rgba(56, 131, 250, 0.9);
+          }
+          
+          .el-icon {
+            color: #fff;
+          }
+        }
+      }
+    }
+  }
+  
+  .collapsed-actions {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    width: 100%;
+    
+    .action-icon {
+      width: 40px;
+      height: 40px;
+      margin-bottom: 8px;
+      background: rgba(56, 131, 250, 0.11);
+      border: 1px solid rgba(255, 255, 255, 0.3);
+      border-radius: 4px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      cursor: pointer;
+      
+      &:hover {
+        background: rgba(56, 131, 250, 0.2);
+      }
+      
+      .el-icon {
+        font-size: 20px;
+        color: #fff;
+      }
+      
+      &.theme-light {
+        background: rgba(56, 131, 250, 1);
+        border: 1px solid rgba(56, 131, 250, 0.8);
+        
+        &:hover {
+          background: rgba(56, 131, 250, 0.9);
+        }
+        
+        .el-icon {
+          color: #fff;
+        }
+      }
+    }
+  }
+}
+
+.theme-light {
+  :deep(.custom-menu) {
+    // Override Element Plus menu styles for light theme
+    .el-menu-item {
+      &.is-active {
+        background-color: #3883FA !important;
+        color: #fff !important;
+      }
+      
+      &:hover {
+        background-color: rgba(56, 131, 250, 0.1) !important;
+      }
+    }
+    
+    .el-sub-menu {
+      .el-sub-menu__title {
+        &:hover {
+          background-color: rgba(56, 131, 250, 0.1) !important;
+        }
+      }
+    }
+  }
+}
+
+// Add global style to override Element Plus defaults
+:global(.el-menu--vertical .el-menu-item),
+:global(.el-menu--vertical .el-sub-menu__title) {
+  height: 38px !important;
+  line-height: 38px !important;
+}
+</style>
diff --git a/zhitan-vue/src/layout/index.vue b/zhitan-vue/src/layout/index.vue
index 444d714..cc29ec7 100644
--- a/zhitan-vue/src/layout/index.vue
+++ b/zhitan-vue/src/layout/index.vue
@@ -1,34 +1,99 @@
 <template>
   <div :class="classObj" class="app-wrapper" :style="{ '--current-color': theme }">
     <div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside"/>
-    <sidebar v-if="!sidebar.hide" class="sidebar-container" />
-    <div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
-      <div :class="{ 'fixed-header': fixedHeader }">
-        <navbar @setLayout="setLayout" v-if="!sidebar.hide"/>
-        <tags-view v-if="needTagsView" v-show="!sidebar.hide"/>
+    <div class="navbar-container">
+      <div class="navbar">
+        <div class="left">
+          <div class="sidebar-logo-container" :class="{ collapse: !sidebar.opened }">
+            <div class="logo" v-if="systemInfo && systemInfo.leftLogo">
+              <img v-if="sideTheme === 'theme-dark'" :src="systemInfo.leftLogo" class="sidebar-logo" />
+              <img v-else :src="systemInfo.leftLogo" class="sidebar-logo" />
+            </div>
+            <div class="name" v-if="sidebar.opened" :style="{ color: '#fff' }">
+              {{ title }}
+            </div>
+          </div>
+          <hamburger
+            id="hamburger-container"
+            :is-active="appStore.sidebar.opened"
+            class="hamburger-container"
+            @toggleClick="toggleSideBar"
+          />
+        </div>
+        <top-nav />
+        <div class="right">
+          <!-- 鎶ヨ鍜屽ぇ妯″瀷鎸夐挳 -->
+          <div class="right-menu">
+            <!-- 鎶ヨ鎸夐挳 -->
+            <div class="right-menu-item alarm-btn" @click="goToAlarm">
+              <el-badge :value="alarmCount" :max="99" class="alarm-badge">
+                <svg-icon icon-class="bell" class="right-menu-icon" />
+              </el-badge>
+              <span class="right-menu-text">鎶ヨ</span>
+            </div>
+            
+            <!-- 澶фā鍨嬫寜閽� -->
+            <div class="right-menu-item ai-btn" @click="openAIModel">
+              <svg-icon icon-class="ai" class="right-menu-icon" />
+              <span class="right-menu-text">鏅鸿兘鍔╂墜</span>
+            </div>
+          </div>
+        </div>
       </div>
-      <app-main />
-      <settings ref="settingRef" />
+    </div>
+    <div class="content-container">
+      <sidebar v-if="!sidebar.hide" class="sidebar-container" />
+      <div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container">
+        <div :class="{ 'fixed-header': fixedHeader }">
+          <tags-view v-if="needTagsView" v-show="!sidebar.hide"/>
+        </div>
+        <app-main />
+        <settings ref="settingRef" />
+      </div>
     </div>
   </div>
 </template>
 
 <script setup>
+import { ref, computed, watchEffect, onMounted } from 'vue'
 import { useWindowSize } from '@vueuse/core'
+import { useRoute, useRouter } from 'vue-router'
 import Sidebar from './components/Sidebar/index.vue'
-import { AppMain, Navbar, Settings, TagsView } from './components'
+import { AppMain, Settings, TagsView } from './components'
+import TopNav from '@/components/TopNav'
+import Hamburger from '@/components/Hamburger'
 import defaultSettings from '@/settings'
+import Cookies from "js-cookie"
 
 import useAppStore from '@/store/modules/app'
 import useSettingsStore from '@/store/modules/settings'
 
+const route = useRoute()
+const router = useRouter()
+const appStore = useAppStore()
 const settingsStore = useSettingsStore()
 const theme = computed(() => settingsStore.theme);
 const sideTheme = computed(() => settingsStore.sideTheme);
-const sidebar = computed(() => useAppStore().sidebar);
-const device = computed(() => useAppStore().device);
+const sidebar = computed(() => appStore.sidebar);
+const device = computed(() => appStore.device);
 const needTagsView = computed(() => settingsStore.tagsView);
 const fixedHeader = computed(() => settingsStore.fixedHeader);
+const systemInfo = JSON.parse(Cookies.get("SystemInfo") || '{"systemName":"鏅烘睍鑳芥簮绠$悊绯荤粺","leftLogo":""}')
+const title = systemInfo.systemName || import.meta.env.VITE_APP_TITLE
+
+// 鎶ヨ鏁伴噺锛屽彲浠ヤ粠鎺ュ彛鑾峰彇
+const alarmCount = ref(5)
+
+// 璺宠浆鍒版姤璀﹂〉闈�
+function goToAlarm() {
+  router.push('/alarm/list')
+}
+
+// 鎵撳紑AI澶фā鍨嬪璇濇
+function openAIModel() {
+  // 杩欓噷鍙互瀹炵幇鎵撳紑AI瀵硅瘽妗嗙殑閫昏緫
+  console.log('鎵撳紑AI澶фā鍨嬪璇濇')
+}
 
 const classObj = computed(() => ({
   hideSidebar: !sidebar.value.opened,
@@ -38,22 +103,46 @@
 }))
 
 const { width, height } = useWindowSize();
-const WIDTH = 992; // refer to Bootstrap's responsive design
+const WIDTH = 992;
 
 watchEffect(() => {
   if (device.value === 'mobile' && sidebar.value.opened) {
-    useAppStore().closeSideBar({ withoutAnimation: false })
+    appStore.closeSideBar({ withoutAnimation: false })
   }
   if (width.value - 1 < WIDTH) {
-    useAppStore().toggleDevice('mobile')
-    useAppStore().closeSideBar({ withoutAnimation: true })
+    appStore.toggleDevice('mobile')
+    appStore.closeSideBar({ withoutAnimation: true })
   } else {
-    useAppStore().toggleDevice('desktop')
+    appStore.toggleDevice('desktop')
+  }
+})
+
+// 鐩戝惉璺敱鍙樺寲锛屽鐞嗛椤电殑渚ц竟鏍忔樉绀�
+watchEffect(() => {
+  // 妫�鏌ユ槸鍚︽槸棣栭〉璺敱
+  if (route.path === '/index' || route.path === '/') {
+    // 棣栭〉璺敱锛岀‘淇濅晶杈规爮涓嶉殣钘忥紝浣嗙姸鎬佹槸鎶樺彔鐨�
+    appStore.showCollapsedSidebar()
+  } else if (route.meta && route.meta.showSidebar === false) {
+    // 濡傛灉璺敱鏄庣‘鎸囧畾闅愯棌渚ц竟鏍�
+    appStore.toggleSideBarHide(true)
+  }
+})
+
+// 缁勪欢鎸傝浇鏃讹紝纭繚棣栭〉渚ц竟鏍忕姸鎬佹纭�
+onMounted(() => {
+  // 濡傛灉褰撳墠鏄椤碉紝纭繚渚ц竟鏍忔槸鎶樺彔鐨勮�屼笉鏄殣钘忕殑
+  if (route.path === '/index' || route.path === '/') {
+    appStore.showCollapsedSidebar()
   }
 })
 
 function handleClickOutside() {
-  useAppStore().closeSideBar({ withoutAnimation: false })
+  appStore.closeSideBar({ withoutAnimation: false })
+}
+
+function toggleSideBar() {
+  appStore.toggleSideBar()
 }
 
 const settingRef = ref(null);
@@ -69,8 +158,11 @@
 .app-wrapper {
   @include clearfix;
   position: relative;
-  height: 100%;
-  width: 100%;
+  height: 100vh;
+  width: 100vw;
+  display: flex;
+  flex-direction: column;
+  overflow-x: hidden;
 
   &.mobile.openSidebar {
     position: fixed;
@@ -88,24 +180,218 @@
   z-index: 999;
 }
 
-.fixed-header {
+.navbar-container {
   position: fixed;
   top: 0;
+  left: 0;
+  right: 0;
+  height: 60px;
+  z-index: 1000;
+  width: 100%;
+}
+
+.navbar {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  background-color: var(--current-color);
+  height: 60px;
+  width: 100%;
+  padding: 0;
+  
+  .left {
+    display: flex;
+    align-items: center;
+    padding-left: 16px;
+    
+    .sidebar-logo-container {
+      display: flex;
+      align-items: center;
+      height: 60px;
+      padding: 0 15px;
+      min-width: 220px;
+      
+      .logo {
+        width: 40px;
+        height: 40px;
+        margin-right: 10px;
+        flex-shrink: 0;
+        
+        .sidebar-logo {
+          width: 100%;
+          height: 100%;
+        }
+      }
+      
+      .name {
+        font-family: OPPOSans, OPPOSans;
+        font-weight: bold;
+        font-size: 20px;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+      }
+      
+      &.collapse {
+        min-width: 70px;
+        
+        .name {
+          display: none;
+        }
+      }
+    }
+  }
+  
+  .right {
+    display: flex;
+    align-items: center;
+    padding-right: 20px;
+    
+    .right-menu {
+      display: flex;
+      align-items: center;
+      
+      .right-menu-item {
+        display: flex;
+        align-items: center;
+        margin-left: 20px;
+        cursor: pointer;
+        color: #fff;
+        font-size: 14px;
+        transition: all 0.3s;
+        
+        &:hover {
+          opacity: 0.8;
+        }
+        
+        .right-menu-icon {
+          font-size: 18px;
+          margin-right: 5px;
+        }
+        
+        .right-menu-text {
+          margin-left: 5px;
+        }
+      }
+      
+      .alarm-badge {
+        :deep(.el-badge__content) {
+          background-color: #f56c6c;
+        }
+      }
+    }
+  }
+}
+
+.content-container {
+  display: flex;
+  position: relative;
+  margin-top: 60px;
+  height: calc(100vh - 60px);
+  width: 100%;
+  overflow: hidden;
+}
+
+.sidebar-container {
+  position: relative;
+  height: 100%;
+  z-index: 900;
+  flex-shrink: 0;
+  width: $base-sidebar-width;
+
+}
+
+.fixed-header {
+  position: fixed;
+  top: 60px;
   right: 0;
   z-index: 9;
-  width: calc(100% - #{$base-sidebar-width});
+  width: 100%;
   transition: width 0.28s;
+  display: flex;
+  flex-direction: column;
 }
 
 .hideSidebar .fixed-header {
-  width: calc(100% - 54px);
-}
-
-.sidebarHide .fixed-header {
   width: 100%;
 }
 
 .mobile .fixed-header {
   width: 100%;
 }
+
+.main-container {
+  flex: 1;
+  position: relative;
+  height: 100%;
+  overflow-y: auto;
+  overflow-x: hidden;
+  transition: margin-left 0.28s;
+  box-sizing: border-box;
+}
+
+.hideSidebar .main-container {
+  margin-left: 0;
+}
+
+.sidebarHide .main-container {
+  margin-left: 0;
+}
+
+.mobile .main-container {
+  margin-left: 0;
+}
+
+.hideSidebar .sidebar-container {
+  width: 54px;
+}
+
+.sidebarHide .sidebar-container {
+  display: none;
+}
+
+.themeDark {
+  .navbar-container {
+    background: #1a235d;
+    border-bottom: 2px solid #110f2e;
+  }
+  
+  .navbar {
+    background: transparent !important;
+  }
+  
+  .sidebar-container {
+    background-color: #002866 !important;
+  }
+}
+
+.themeLight {
+  .navbar-container {
+    background: #3883FA;
+  }
+  
+  .navbar {
+    background: transparent !important;
+    
+    .left {
+      .sidebar-logo-container {
+        .name {
+          color: #fff !important;
+        }
+      }
+    }
+    
+    .right {
+      .right-menu {
+        .right-menu-item {
+          color: #fff;
+          
+          .right-menu-icon {
+            color: #fff;
+          }
+        }
+      }
+    }
+  }
+}
 </style>
\ No newline at end of file
diff --git a/zhitan-vue/src/permission.js b/zhitan-vue/src/permission.js
index 30b428a..a521d95 100644
--- a/zhitan-vue/src/permission.js
+++ b/zhitan-vue/src/permission.js
@@ -8,6 +8,7 @@
 import useUserStore from '@/store/modules/user'
 import useSettingsStore from '@/store/modules/settings'
 import usePermissionStore from '@/store/modules/permission'
+import useTagsViewStore from '@/store/modules/tagsView'
 
 NProgress.configure({ showSpinner: false });
 
@@ -36,6 +37,28 @@
                 router.addRoute(route) // 鍔ㄦ�佹坊鍔犲彲璁块棶璺敱琛�
               }
             })
+            
+            // 濡傛灉鏄椤碉紝鑷姩閲嶅畾鍚戝埌绗竴涓彍鍗�
+            if (to.path === '/' || to.path === '/index') {
+              const permissionStore = usePermissionStore()
+              const topMenus = permissionStore.topbarRouters.filter(menu => !menu.hidden)
+              if (topMenus.length > 0) {
+                // 璺宠浆鍒扮涓�涓彍鍗�
+                const firstMenu = topMenus[0]
+                if (firstMenu.children && firstMenu.children.length > 0) {
+                  // 鏈夊瓙鑿滃崟锛岃烦杞埌绗竴涓瓙鑿滃崟
+                  const firstChild = firstMenu.children[0]
+                  const path = firstMenu.path.endsWith('/') ? firstMenu.path + firstChild.path : `${firstMenu.path}/${firstChild.path}`
+                  next({ path: path, replace: true })
+                  return
+                } else {
+                  // 娌℃湁瀛愯彍鍗曪紝鐩存帴璺宠浆
+                  next({ path: firstMenu.path, replace: true })
+                  return
+                }
+              }
+            }
+            
             next({ ...to, replace: true }) // hack鏂规硶 纭繚addRoutes宸插畬鎴�
           })
         }).catch(err => {
@@ -45,6 +68,26 @@
           })
         })
       } else {
+        // 濡傛灉鏄椤碉紝鑷姩閲嶅畾鍚戝埌绗竴涓彍鍗�
+        if (to.path === '/' || to.path === '/index') {
+          const permissionStore = usePermissionStore()
+          const topMenus = permissionStore.topbarRouters.filter(menu => !menu.hidden)
+          if (topMenus.length > 0) {
+            // 璺宠浆鍒扮涓�涓彍鍗�
+            const firstMenu = topMenus[0]
+            if (firstMenu.children && firstMenu.children.length > 0) {
+              // 鏈夊瓙鑿滃崟锛岃烦杞埌绗竴涓瓙鑿滃崟
+              const firstChild = firstMenu.children[0]
+              const path = firstMenu.path.endsWith('/') ? firstMenu.path + firstChild.path : `${firstMenu.path}/${firstChild.path}`
+              next({ path: path, replace: true })
+              return
+            } else {
+              // 娌℃湁瀛愯彍鍗曪紝鐩存帴璺宠浆
+              next({ path: firstMenu.path, replace: true })
+              return
+            }
+          }
+        }
         next()
       }
     }
@@ -62,4 +105,12 @@
 
 router.afterEach(() => {
   NProgress.done()
+  
+  // 绉婚櫎鎵�鏈夊彲鑳界殑棣栭〉鏍囩
+  const tagsViewStore = useTagsViewStore();
+  if (tagsViewStore && tagsViewStore.visitedViews) {
+    tagsViewStore.visitedViews = tagsViewStore.visitedViews.filter(
+      tag => tag.path !== '/index' && tag.path !== '/' && tag.name !== 'Index'
+    );
+  }
 })
diff --git a/zhitan-vue/src/router/index.js b/zhitan-vue/src/router/index.js
index dff5256..154b3be 100644
--- a/zhitan-vue/src/router/index.js
+++ b/zhitan-vue/src/router/index.js
@@ -1,6 +1,7 @@
 import { createWebHistory, createRouter } from 'vue-router'
 /* Layout */
 import Layout from '@/layout'
+import useAppStore from '@/store/modules/app'
 
 /**
  * Note: 璺敱閰嶇疆椤�
@@ -66,7 +67,13 @@
         path: '/index',
         component: () => import('@/views/index'),
         name: 'Index',
-        meta: { title: '棣栭〉', icon: 'dashboard', affix: true }
+        meta: { title: '棣栭〉', icon: 'dashboard', affix: true, showSidebar: true, breadcrumb: false },
+        beforeEnter: (to, from, next) => {
+          // 鑾峰彇app store骞惰缃晶杈规爮涓烘姌鍙犵姸鎬�
+          const appStore = useAppStore()
+          appStore.showCollapsedSidebar()
+          next()
+        }
       }
     ]
   },
diff --git a/zhitan-vue/src/store/modules/app.js b/zhitan-vue/src/store/modules/app.js
index 387e57e..409d25f 100644
--- a/zhitan-vue/src/store/modules/app.js
+++ b/zhitan-vue/src/store/modules/app.js
@@ -7,7 +7,7 @@
       sidebar: {
         opened: sessionStorage.getItem('sidebarStatus') ? !!+sessionStorage.getItem('sidebarStatus') : true,
         withoutAnimation: false,
-        hide: false
+        hide: sessionStorage.getItem('sidebarHide') ? JSON.parse(sessionStorage.getItem('sidebarHide')) : false
       },
       device: 'desktop',
       size: sessionStorage.getItem('size') || 'default'
@@ -39,6 +39,20 @@
       },
       toggleSideBarHide(status) {
         this.sidebar.hide = status
+        sessionStorage.setItem('sidebarHide', status)
+      },
+      openMenu() {
+        this.sidebar.hide = false
+        this.sidebar.opened = true
+        sessionStorage.setItem('sidebarHide', 'false')
+        sessionStorage.setItem('sidebarStatus', 1)
+      },
+      showCollapsedSidebar() {
+        this.sidebar.hide = false
+        this.sidebar.opened = false
+        this.sidebar.withoutAnimation = false
+        sessionStorage.setItem('sidebarHide', 'false')
+        sessionStorage.setItem('sidebarStatus', 0)
       }
     }
   })
diff --git a/zhitan-vue/src/store/modules/permission.js b/zhitan-vue/src/store/modules/permission.js
index 958fe63..c9d09e6 100644
--- a/zhitan-vue/src/store/modules/permission.js
+++ b/zhitan-vue/src/store/modules/permission.js
@@ -73,6 +73,14 @@
         route.component = loadView(route.component)
       }
     }
+    // 澶勭悊 query 鍙傛暟锛屽皢瀛楃涓茶浆鎹负瀵硅薄
+    if (route.query && typeof route.query === 'string') {
+      try {
+        route.query = JSON.parse(route.query);
+      } catch (error) {
+        console.error('Error parsing query string:', route.query, error);
+      }
+    }
     if (route.children != null && route.children && route.children.length) {
       route.children = filterAsyncRouter(route.children, route, type)
     } else {
diff --git a/zhitan-vue/src/store/modules/settings.js b/zhitan-vue/src/store/modules/settings.js
index 22b7336..357aeba 100644
--- a/zhitan-vue/src/store/modules/settings.js
+++ b/zhitan-vue/src/store/modules/settings.js
@@ -23,7 +23,7 @@
       // 淇敼甯冨眬璁剧疆
       changeSetting(data) {
         const { key, value } = data
-        if (this.hasOwnProperty(key)) {
+        if (key in this.$state) {
           this[key] = value
         }
       },
diff --git a/zhitan-vue/src/store/modules/tagsView.js b/zhitan-vue/src/store/modules/tagsView.js
index 9d07f33..0e6c6e2 100644
--- a/zhitan-vue/src/store/modules/tagsView.js
+++ b/zhitan-vue/src/store/modules/tagsView.js
@@ -20,6 +20,11 @@
         )
       },
       addVisitedView(view) {
+        // 杩囨护棣栭〉鏍囩
+        if (view.path === '/index' || view.path === '/' || view.name === 'Index') {
+          return;
+        }
+        
         if (this.visitedViews.some(v => v.path === view.path)) return
         this.visitedViews.push(
           Object.assign({}, view, {
@@ -110,7 +115,8 @@
       },
       delAllVisitedViews(view) {
         return new Promise(resolve => {
-          const affixTags = this.visitedViews.filter(tag => tag.meta.affix)
+          // 杩囨护鎺夐椤垫爣绛撅紝鍙繚鐣欏叾浠栧浐瀹氭爣绛�
+          const affixTags = this.visitedViews.filter(tag => tag.meta.affix && tag.path !== '/index' && tag.path !== '/' && tag.name !== 'Index')
           this.visitedViews = affixTags
           this.iframeViews = []
           resolve([...this.visitedViews])
diff --git a/zhitan-vue/src/views/businessconfiguration/gatewaystatus/gatewayStatus.vue b/zhitan-vue/src/views/businessconfiguration/gatewaystatus/gatewayStatus.vue
index 74abd5f..81ddca8 100644
--- a/zhitan-vue/src/views/businessconfiguration/gatewaystatus/gatewayStatus.vue
+++ b/zhitan-vue/src/views/businessconfiguration/gatewaystatus/gatewayStatus.vue
@@ -1,5 +1,11 @@
 <template>
   <div class="page">
+    <div class="page-title">
+      <div class="title-bar">
+        <span class="title-text">缃戝叧鐘舵�佺洃娴�</span>
+      </div>
+    </div>
+    
     <div class="table-box">
       <div class="border">
         <div class="table" v-for="(item, index) in dataList" :key="index">
@@ -460,14 +466,62 @@
 ])
 </script>
 
-<style lang="scss" scoped>
+<style scoped lang="scss">
 @import "@/assets/styles/page.scss";
+
+.page {
+  background: #08234F;
+  min-height: calc(100vh - 145px)
+}
+
+.page-title {
+  position: relative;
+ 
+  .title-bar {
+    position: relative;
+    padding: 14px 0;
+    padding-left: 16px;
+    
+    .title-text {
+      font-size: 18px;
+      font-weight: 600;
+      position: relative;
+      padding-left: 22px;
+      color: #fff;
+      
+      &::before {
+        content: '';
+        position: absolute;
+        left: 0;
+        top: 50%;
+        transform: translateY(-50%);
+        width: 5px;
+        height: 18px;
+        background-color: #3883FA;
+        border-radius: 2px;
+      }
+    }
+  }
+  
+  &::after {
+    content: '';
+    position: absolute;
+    bottom: -4px;
+    opacity: 0.12;
+    left: 0;
+    width: 100%;
+    height: 1px;
+    background-color: #E6E6E6;
+  }
+}
+
 .themeDark {
   .border {
     border: 1px solid #fff;
     color: #fff;
 
     .table {
+      margin-top: 10px;
       display: flex;
       align-items: center;
       justify-content: flex-start;
@@ -544,6 +598,10 @@
         }
       }
     }
+  }
+
+  .table-box {
+    margin: 20px 25px;
   }
 }
 
@@ -630,5 +688,15 @@
       }
     }
   }
+
+  .table-box {
+    margin: 10px 25px;
+  }
+}
+
+.page {
+  .table-box {
+    // ... 淇濇寔鐜版湁鏍峰紡
+  }
 }
 </style>
diff --git a/zhitan-vue/src/views/dataMonitoring/historyDataTrend/index.vue b/zhitan-vue/src/views/dataMonitoring/historyDataTrend/index.vue
index d471ba5..6208d7f 100644
--- a/zhitan-vue/src/views/dataMonitoring/historyDataTrend/index.vue
+++ b/zhitan-vue/src/views/dataMonitoring/historyDataTrend/index.vue
@@ -210,6 +210,10 @@
 <style scoped lang="scss">
 @import "@/assets/styles/page.scss";
 
+.page {
+  background-color: #08234F;
+}
+
 .themeDark {
   .card-list {
     width: 100%;
diff --git a/zhitan-vue/src/views/energyanalysis/equipment/equipment.vue b/zhitan-vue/src/views/energyanalysis/equipment/equipment.vue
index c0c200e..7f1d585 100644
--- a/zhitan-vue/src/views/energyanalysis/equipment/equipment.vue
+++ b/zhitan-vue/src/views/energyanalysis/equipment/equipment.vue
@@ -115,9 +115,10 @@
 </template>
 
 <script setup name="equipment">
-import { listRegion, listDepartment } from "@/api/energyAnalysis/energyAnalysis"
+import { listDepartment } from "@/api/energyAnalysis/energyAnalysis"
 import { listEnergyTypeList } from "@/api/modelConfiguration/energyType"
 import * as echarts from "echarts"
+import request from "@/utils/request"
 const { proxy } = getCurrentInstance()
 const { period } = proxy.useDict("period")
 import { useRoute } from "vue-router"
@@ -183,12 +184,16 @@
   // }
   const myChart1 = echarts.init(document.getElementById("Chart1"))
   // const myChart2 = echarts.init(document.getElementById("Chart2"));
-  listRegion(
-    proxy.addDateRange({
+  
+  // 淇敼涓虹洿鎺ヨ皟鐢╟onsumptionanalysis/getByArea鎺ュ彛
+  request({
+    url: "/consumptionanalysis/getByArea",
+    method: "get",
+    params: proxy.addDateRange({
       ...queryParams.value,
       ...query.value,
     })
-  ).then((res) => {
+  }).then((res) => {
     if (!!res.code && res.code == 200) {
       loading.value = false
       let xdata = []
@@ -551,7 +556,7 @@
 // 鑳借�楀姣斿垎鏋�-璁惧鑳借�楀垎鏋�-瀵煎嚭
 function handleExport() {
   proxy.download(
-    "consumptionanalysis/energyExport",
+    "consumptionanalysis/getByArea/export",
     {
       ...queryParams.value,
       ...query.value,
diff --git a/zhitan-vue/src/views/index.vue b/zhitan-vue/src/views/index.vue
index 84f2c80..95f164a 100644
--- a/zhitan-vue/src/views/index.vue
+++ b/zhitan-vue/src/views/index.vue
@@ -1,51 +1,55 @@
 <template>
   <div class="page" style="padding-left: 8px; padding-top: 8px">
     <CardHeader :showBtn="true" :active="'0'" :period="period" @handleClick="handleTimeType">
-      <span>
+      <span class="card-header-title">
         鍏ㄥ巶鑳借�楃粺璁�
-        <el-button @click="dialogVisible = true" v-if="list.length > 1"> 鏌ョ湅鏇村 </el-button>
+        <el-button @click="dialogVisible = true" v-if="list.length > 1" type="primary" size="small" class="header-more-btn"> 鏌ョ湅鏇村 </el-button>
       </span>
     </CardHeader>
     <template v-for="(row, rowIndex) in list" :key="rowIndex" v-loading="loading02">
       <div class="card-list" v-if="settingsStore.sideTheme == 'theme-dark' && rowIndex == 0">
         <template v-for="(item, index) in row" :key="index">
-          <div
-            class="card-list-item"
-            :style="{
-              backgroundImage: 'url(' + bgList[index].bg + ')',
-            }"
-          >
-            <div class="item-top">
-              <div class="top-icon" :style="{ backgroundImage: 'url(' + bgList[index].icon + ')' }" />
+          <div class="card-list-item">
+            <div class="item-left">
+              <div class="top-icon" 
+                :style="{ 
+                  backgroundImage: 'url(' + bgList[index].icon + ')',
+                  backgroundColor: bgList[index].iconBg,
+                  width: '73px',
+                  height: '73px',
+                  backgroundSize: '40px'
+                }" 
+              />
+            </div>
+            <div class="item-right">
               <div class="top-right">
                 <div class="right-name">
                   {{ item.energyName }}
                   <span v-if="item.energyUnit" class="unit">({{ item.energyUnit }})</span>
                 </div>
                 <div class="right-value">
-                  <span> {{ item.count }}</span>
-                  <!-- <span class="unit">{{ item.energyUnit }}</span> -->
+                  <span>{{ item.count }}</span>
                 </div>
               </div>
-            </div>
-            <div class="item-bottom">
-              <div class="bottom-left">
-                <span>
-                  鍚屾瘮: {{ Math.abs(item.tongbi) }}
-                  <el-icon :color="item.tongbi > 0 ? 'green' : item.tongbi < 0 ? 'red' : ''">
-                    <Top v-if="item.tongbi > 0" />
-                    <Bottom v-if="item.tongbi < 0" />
-                  </el-icon>
-                </span>
-              </div>
-              <div class="bottom-right">
-                <span
-                  >鐜瘮: {{ Math.abs(item.huanbi) }}
-                  <el-icon :color="item.huanbi > 0 ? 'green' : item.huanbi < 0 ? 'red' : ''">
-                    <Top v-if="item.huanbi > 0" />
-                    <Bottom v-if="item.huanbi < 0" />
-                  </el-icon>
-                </span>
+              <div class="item-bottom">
+                <div class="bottom-left">
+                  <span>
+                    鍚屾瘮: {{ Math.abs(item.tongbi).toFixed(1) }}
+                    <el-icon :color="item.tongbi > 0 ? '#4CAF50' : item.tongbi < 0 ? '#F44336' : ''">
+                      <Top v-if="item.tongbi > 0" />
+                      <Bottom v-if="item.tongbi < 0" />
+                    </el-icon>
+                  </span>
+                </div>
+                <div class="bottom-right">
+                  <span>
+                    鐜瘮: {{ Math.abs(item.huanbi).toFixed(1) }}
+                    <el-icon :color="item.huanbi > 0 ? '#4CAF50' : item.huanbi < 0 ? '#F44336' : ''">
+                      <Top v-if="item.huanbi > 0" />
+                      <Bottom v-if="item.huanbi < 0" />
+                    </el-icon>
+                  </span>
+                </div>
               </div>
             </div>
           </div>
@@ -54,36 +58,46 @@
       <div class="card-list" v-if="settingsStore.sideTheme != 'theme-dark' && rowIndex == 0">
         <template v-for="(item, index) in row" :key="index" v-show="rowIndex == 0">
           <div class="card-list-item">
-            <div class="item-top">
-              <div class="top-icon" :style="{ backgroundImage: 'url(' + bgList[index].icon2 + ')' }" />
+            <div class="item-left">
+              <div class="top-icon" 
+                :style="{ 
+                  backgroundImage: 'url(' + bgList[index].icon2 + ')',
+                  backgroundColor: bgList[index].iconBg,
+                  width: '73px',
+                  height: '73px',
+                  backgroundSize: '40px'
+                }" 
+              />
+            </div>
+            <div class="item-right">
               <div class="top-right">
                 <div class="right-name">
                   {{ item.energyName }}
+                  <span v-if="item.energyUnit" class="unit">({{ item.energyUnit }})</span>
                 </div>
                 <div class="right-value">
                   <span>{{ item.count }}</span>
-                  <span class="unit">{{ item.energyUnit }}</span>
                 </div>
               </div>
-            </div>
-            <div class="item-bottom">
-              <div class="bottom-left">
-                <span>
-                  鍚屾瘮: {{ Math.abs(item.tongbi) }}
-                  <el-icon :color="item.tongbi > 0 ? 'green' : item.tongbi < 0 ? 'red' : ''">
-                    <Top v-if="item.tongbi > 0" />
-                    <Bottom v-if="item.tongbi < 0" />
-                  </el-icon>
-                </span>
-              </div>
-              <div class="bottom-right">
-                <span
-                  >鐜瘮: {{ Math.abs(item.huanbi) }}
-                  <el-icon :color="item.huanbi > 0 ? 'green' : item.huanbi < 0 ? 'red' : ''">
-                    <Top v-if="item.huanbi > 0" />
-                    <Bottom v-if="item.huanbi < 0" />
-                  </el-icon>
-                </span>
+              <div class="item-bottom">
+                <div class="bottom-left">
+                  <span>
+                    鍚屾瘮: {{ Math.abs(item.tongbi).toFixed(1) }}
+                    <el-icon :color="item.tongbi > 0 ? '#4CAF50' : item.tongbi < 0 ? '#F44336' : ''">
+                      <Top v-if="item.tongbi > 0" />
+                      <Bottom v-if="item.tongbi < 0" />
+                    </el-icon>
+                  </span>
+                </div>
+                <div class="bottom-right">
+                  <span>
+                    鐜瘮: {{ Math.abs(item.huanbi).toFixed(1) }}
+                    <el-icon :color="item.huanbi > 0 ? '#4CAF50' : item.huanbi < 0 ? '#F44336' : ''">
+                      <Top v-if="item.huanbi > 0" />
+                      <Bottom v-if="item.huanbi < 0" />
+                    </el-icon>
+                  </span>
+                </div>
               </div>
             </div>
           </div>
@@ -133,66 +147,71 @@
         </el-col>
       </el-row>
     </div>
-    <el-dialog v-model="dialogVisible" title="鏌ョ湅鍏ㄥ巶鑳借�楃粺璁�" width="80%" v-if="dialogVisible">
+    <el-dialog v-model="dialogVisible" title="鏌ョ湅鍏ㄥ巶鑳借�楃粺璁�" width="90%" v-if="dialogVisible">
       <template v-for="(row, rowIndex) in list" :key="rowIndex">
         <div class="card-list" v-if="settingsStore.sideTheme == 'theme-dark'">
           <template v-for="(item, index) in row" :key="index">
-            <div
-              class="card-list-item"
-              :style="{
-                backgroundImage: 'url(' + bgList[index].bg + ')',
-              }"
-            >
-              <div class="item-top">
-                <div
-                  class="top-icon"
+            <div class="card-list-item">
+              <div class="item-left">
+                <div class="top-icon"
                   :style="{
                     backgroundImage: 'url(' + bgList[index].icon + ')',
+                    backgroundColor: bgList[index].iconBg,
+                    width: '73px',
+                    height: '73px',
+                    backgroundSize: '40px'
                   }"
                 />
+              </div>
+              <div class="item-right">
                 <div class="top-right">
                   <div class="right-name">
                     {{ item.energyName }}
+                    <span v-if="item.energyUnit" class="unit">({{ item.energyUnit }})</span>
                   </div>
                   <div class="right-value">
                     <span> {{ item.count }}</span>
-                    <span class="unit">{{ item.energyUnit }}</span>
                   </div>
                 </div>
-              </div>
-              <div class="item-bottom">
-                <div class="bottom-left">
-                  <span>
-                    鍚屾瘮: {{ Math.abs(item.tongbi) }}
-                    <el-icon :color="item.tongbi > 0 ? 'green' : item.tongbi < 0 ? 'red' : ''">
-                      <Top v-if="item.tongbi > 0" />
-                      <Bottom v-if="item.tongbi < 0" />
-                    </el-icon>
-                  </span>
-                </div>
-                <div class="bottom-right">
-                  <span
-                    >鐜瘮: {{ Math.abs(item.huanbi) }}
-                    <el-icon :color="item.huanbi > 0 ? 'green' : item.huanbi < 0 ? 'red' : ''">
-                      <Top v-if="item.huanbi > 0" />
-                      <Bottom v-if="item.huanbi < 0" />
-                    </el-icon>
-                  </span>
+                <div class="item-bottom">
+                  <div class="bottom-left">
+                    <span>
+                      鍚屾瘮: {{ Math.abs(item.tongbi).toFixed(1) }}
+                      <el-icon :color="item.tongbi > 0 ? '#4CAF50' : item.tongbi < 0 ? '#F44336' : ''">
+                        <Top v-if="item.tongbi > 0" />
+                        <Bottom v-if="item.tongbi < 0" />
+                      </el-icon>
+                    </span>
+                  </div>
+                  <div class="bottom-right">
+                    <span>
+                      鐜瘮: {{ Math.abs(item.huanbi).toFixed(1) }}
+                      <el-icon :color="item.huanbi > 0 ? '#4CAF50' : item.huanbi < 0 ? '#F44336' : ''">
+                        <Top v-if="item.huanbi > 0" />
+                        <Bottom v-if="item.huanbi < 0" />
+                      </el-icon>
+                    </span>
+                  </div>
                 </div>
               </div>
             </div>
           </template>
         </div>
         <div class="card-list" v-if="settingsStore.sideTheme != 'theme-dark'">
-          <template v-for="(item, index) in row" :key="index" v-show="rowIndex == 0">
+          <template v-for="(item, index) in row" :key="index">
             <div class="card-list-item">
-              <div class="item-top">
-                <div
-                  class="top-icon"
+              <div class="item-left">
+                <div class="top-icon"
                   :style="{
                     backgroundImage: 'url(' + bgList[index].icon2 + ')',
+                    backgroundColor: bgList[index].iconBg,
+                    width: '73px',
+                    height: '73px',
+                    backgroundSize: '40px'
                   }"
                 />
+              </div>
+              <div class="item-right">
                 <div class="top-right">
                   <div class="right-name">
                     {{ item.energyName }}
@@ -202,29 +221,28 @@
                     <span class="unit">{{ item.energyUnit }}</span>
                   </div>
                 </div>
-              </div>
-              <div class="item-bottom">
-                <div class="bottom-left">
-                  <span>
-                    鍚屾瘮: {{ Math.abs(item.tongbi) }}
-                    <el-icon :color="item.tongbi > 0 ? 'green' : item.tongbi < 0 ? 'red' : ''">
-                      <Top v-if="item.tongbi > 0" />
-                      <Bottom v-if="item.tongbi < 0" />
-                    </el-icon>
-                  </span>
-                </div>
-                <div class="bottom-right">
-                  <span
-                    >鐜瘮: {{ Math.abs(item.huanbi) }}
-                    <el-icon :color="item.huanbi > 0 ? 'green' : item.huanbi < 0 ? 'red' : ''">
-                      <Top v-if="item.huanbi > 0" />
-                      <Bottom v-if="item.huanbi < 0" />
-                    </el-icon>
-                  </span>
+                <div class="item-bottom">
+                  <div class="bottom-left">
+                    <span>
+                      鍚屾瘮: {{ Math.abs(item.tongbi).toFixed(1) }}
+                      <el-icon :color="item.tongbi > 0 ? '#4CAF50' : item.tongbi < 0 ? '#F44336' : ''">
+                        <Top v-if="item.tongbi > 0" />
+                        <Bottom v-if="item.tongbi < 0" />
+                      </el-icon>
+                    </span>
+                  </div>
+                  <div class="bottom-right">
+                    <span>
+                      鐜瘮: {{ Math.abs(item.huanbi).toFixed(1) }}
+                      <el-icon :color="item.huanbi > 0 ? '#4CAF50' : item.huanbi < 0 ? '#F44336' : ''">
+                        <Top v-if="item.huanbi > 0" />
+                        <Bottom v-if="item.huanbi < 0" />
+                      </el-icon>
+                    </span>
+                  </div>
                 </div>
               </div>
             </div>
-            <div class="line"></div>
           </template>
         </div>
       </template>
@@ -258,42 +276,47 @@
 import index_card_3 from "@/assets/images/home/index-card-3.png"
 import index_card_4 from "@/assets/images/home/index-card-4.png"
 import index_card_5 from "@/assets/images/home/index-card-5.png"
-import card_icon_1 from "@/assets/images/home/card-icon-1.png"
-import card_icon_2 from "@/assets/images/home/card-icon-2.png"
-import card_icon_3 from "@/assets/images/home/card-icon-3.png"
-import card_icon_4 from "@/assets/images/home/card-icon-4.png"
-import card_icon_5 from "@/assets/images/home/card-icon-5.png"
-import card_icon2_1 from "@/assets/images/home/card-icon2-1.png"
-import card_icon2_2 from "@/assets/images/home/card-icon2-2.png"
-import card_icon2_3 from "@/assets/images/home/card-icon2-3.png"
-import card_icon2_4 from "@/assets/images/home/card-icon2-4.png"
-import card_icon2_5 from "@/assets/images/home/card-icon2-5.png"
+import card_icon_1 from "@/assets/images/2.png"
+import card_icon_2 from "@/assets/images/3.png"
+import card_icon_3 from "@/assets/images/5.png"
+import card_icon_4 from "@/assets/images/6.png"
+import card_icon_5 from "@/assets/images/7.png"
+import card_icon2_1 from "@/assets/images/2.png"
+import card_icon2_2 from "@/assets/images/3.png"
+import card_icon2_3 from "@/assets/images/5.png"
+import card_icon2_4 from "@/assets/images/6.png"
+import card_icon2_5 from "@/assets/images/7.png"
 import { fa } from "element-plus/es/locales.mjs"
 const bgList = ref([
   {
     bg: index_card_1,
     icon: card_icon_1,
     icon2: card_icon2_1,
+    iconBg: "#3F7EE8"
   },
   {
     bg: index_card_2,
     icon: card_icon_2,
     icon2: card_icon2_2,
+    iconBg: "#FFA024"
   },
   {
     bg: index_card_3,
     icon: card_icon_3,
     icon2: card_icon2_3,
+    iconBg: "#FFCC00"
   },
   {
     bg: index_card_4,
     icon: card_icon_4,
     icon2: card_icon2_4,
+    iconBg: "#3CC8D9"
   },
   {
     bg: index_card_5,
     icon: card_icon_5,
     icon2: card_icon2_5,
+    iconBg: "#8833FF"
   },
 ])
 const list = ref([[{}, {}, {}, {}, {}]])
@@ -857,10 +880,24 @@
 }
 </script>
 <style scoped lang="scss">
+.card-header-title {
+  font-size: 18px;
+  font-weight: bold;
+  display: flex;
+  align-items: center;
+  
+  .header-more-btn {
+    margin-left: 12px;
+    padding: 4px 10px;
+    font-size: 12px;
+    height: 28px;
+  }
+}
+
 .themeDark {
   .page {
     padding: 20px;
-    background: #120f2e;
+    background: #05234A;
 
     .card-title {
       width: 132px;
@@ -873,70 +910,138 @@
     .card-list {
       margin-top: 14px;
       display: flex;
-      // justify-content: space-between;
       width: 100%;
       flex-wrap: wrap;
+      justify-content: space-between;
+      gap: 15px;
+      
+      &:after {
+        content: "";
+        flex: auto;
+      }
 
       .card-list-item {
-        width: 19%;
-        margin-right: 1%;
-        height: 157px;
-        background-size: 100% 100%;
+        width: 320px;
+        height: 127px;
+        background: rgba(242, 246, 250, 0.1);
         box-sizing: border-box;
-        padding: 25px 18px 12px 16px;
+        padding: 16px;
         color: #fff;
-
-        .item-top {
-          display: flex;
-
-          .top-icon {
-            width: 50px;
-            height: 50px;
-            background-size: 100% 100%;
-          }
-
-          .top-right {
-            margin-left: 12px;
-
-            .right-name {
-              font-weight: bold;
-              font-size: 16px;
-              font-family: OPPOSans-Bold;
-              .unit {
-                margin-left: 2px;
-                font-size: 16px;
-                font-weight: normal;
-              }
-            }
-
-            .right-value {
-              font-weight: 800;
-              font-size: 25px;
-              margin-top: 10px;
-              font-family: OPPOSans-Medium;
-
-              .unit {
-                margin-left: 5px;
-                font-size: 16px;
-                font-weight: normal;
-              }
-            }
-          }
+        border-radius: 9px;
+        box-shadow: none;
+        border: none;
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        
+        &:hover {
+          background: rgba(242, 246, 250, 0.15);
         }
 
-        .item-bottom {
+        .item-left {
+          margin-right: 16px;
+          
+          .top-icon {
+            width: 73px;
+            height: 73px;
+            background-size: 40px;
+            background-repeat: no-repeat;
+            background-position: center;
+            border-radius: 50%;
+          }
+        }
+        
+        .item-right {
+          flex: 1;
           display: flex;
-          justify-content: space-between;
-          margin-top: 18px;
-          font-family: OPPOSans, OPPOSans;
-          font-weight: bold;
-          font-size: 14px;
+          flex-direction: column;
+          
+          .top-right {
+            display: flex;
+            flex-direction: column;
+            
+            .right-name {
+              font-weight: 400;
+              font-size: 14px;
+              font-family: OPPOSans-Regular;
+              color: rgba(255, 255, 255, 0.65);
+              .unit {
+                color: rgba(255, 255, 255, 0.65);
+                margin-left: 2px;
+                font-size: 12px;
+                font-weight: normal;
+              }
+            }
+            
+            .right-value {
+              font-weight: 500;
+              font-size: 26px;
+              margin-top: 4px;
+              font-family: OPPOSans-Medium;
+              color: #fff;
+              line-height: 1;
+            }
+          }
+          
+          .item-bottom {
+            display: flex;
+            justify-content: space-between;
+            margin-top: 14px;
+            font-family: OPPOSans, OPPOSans;
+            font-weight: normal;
+            font-size: 12px;
+            color: rgba(255, 255, 255, 0.5);
+            line-height: 1;
+            
+            .bottom-left, .bottom-right {
+              display: flex;
+              align-items: center;
+              
+              :deep(.el-icon) {
+                margin-left: 4px;
+                font-size: 12px;
+              }
+            }
+          }
         }
       }
     }
 
     .page-main {
-      margin-top: 23px;
+      margin-top: 20px;
+      
+      .el-card {
+        background-color: #0E2E5E;
+        border: none;
+        border-radius: 6px;
+        
+        :deep(.el-card__body) {
+          padding: 12px;
+        }
+      }
+    }
+
+    .top-header {
+      margin-top: 12px;
+      height: 32px;
+      font-family: OPPOSans, OPPOSans;
+      font-weight: 500;
+      font-size: 14px;
+      color: rgba(255, 255, 255, 0.8);
+      border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 0 10px;
+
+      .header-left {
+        display: flex;
+
+        .name {
+          margin-left: 7px;
+          margin-right: 7px;
+        }
+      }
     }
   }
 
@@ -946,25 +1051,29 @@
     margin-top: 10px;
   }
 
-  .top-header {
-    margin-top: 15px;
-    height: 23px;
-    font-family: OPPOSans, OPPOSans;
-    font-weight: 500;
-    font-size: 14px;
-    color: rgba(196, 213, 255, 0.6);
-    border-bottom: 1px solid rgba(196, 213, 255, 0.6);
-    display: flex;
-    justify-content: space-between;
-
-    .header-left {
-      display: flex;
-
-      .name {
-        margin-left: 7px;
-        margin-right: 7px;
-      }
+  :deep(.el-button--primary) {
+    background-color: #1976D2;
+    border-color: #1976D2;
+  }
+  
+  :deep(.el-card__header) {
+    padding: 10px 15px;
+    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+  }
+  
+  :deep(.el-tabs--card > .el-tabs__header .el-tabs__item) {
+    border-color: rgba(255, 255, 255, 0.1);
+    background-color: transparent;
+    color: #fff;
+    
+    &.is-active {
+      background-color: #1976D2;
+      border-color: #1976D2;
     }
+  }
+  
+  :deep(.el-tabs--card > .el-tabs__header) {
+    border-color: rgba(255, 255, 255, 0.1);
   }
 }
 
@@ -978,82 +1087,140 @@
       height: 29px;
       font-weight: bold;
       font-size: 22px;
-      color: #ffffff;
+      color: #333;
     }
 
     .card-list {
-      width: 100%;
       margin-top: 14px;
       display: flex;
-      // justify-content: space-between;
-      align-items: center;
-      background-image: url("@/assets/images/home/index-card-bg2.png");
-      background-size: 100% 100%;
+      width: 100%;
       flex-wrap: wrap;
-      border-radius: 20px;
+      justify-content: space-between;
+      gap: 15px;
+      
+      &:after {
+        content: "";
+        flex: auto;
+      }
 
       .card-list-item {
-        width: 19%;
-        margin-right: 0.5%;
-        height: 157px;
-        background-size: 100% 100%;
+        width: 320px;
+        height: 127px;
+        background: #fff;
         box-sizing: border-box;
-        padding: 25px 18px 12px 16px;
-        color: #fff;
-
-        .item-top {
-          display: flex;
-
+        padding: 16px;
+        color: #333;
+        border-radius: 9px;
+        box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        
+        .item-left {
+          margin-right: 16px;
+          
           .top-icon {
-            width: 69px;
-            height: 69px;
-            background-size: 100% 100%;
+            width: 73px;
+            height: 73px;
+            background-size: 40px;
+            background-repeat: no-repeat;
+            background-position: center;
+            border-radius: 50%;
           }
-
+        }
+        
+        .item-right {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          
           .top-right {
-            margin-left: 16px;
-
+            display: flex;
+            flex-direction: column;
+            
             .right-name {
-              font-weight: bold;
-              font-size: 16px;
-              font-family: OPPOSans-Bold;
-            }
-
-            .right-value {
-              font-weight: 800;
-              font-size: 30px;
-              margin-top: 10px;
-              font-family: OPPOSans-Medium;
-
+              font-weight: 400;
+              font-size: 14px;
+              font-family: OPPOSans-Regular;
+              color: rgba(0, 0, 0, 0.65);
               .unit {
-                margin-left: 5px;
-                font-size: 16px;
+                color: rgba(0, 0, 0, 0.65);
+                margin-left: 2px;
+                font-size: 12px;
                 font-weight: normal;
+              }
+            }
+            
+            .right-value {
+              font-weight: 500;
+              font-size: 26px;
+              margin-top: 4px;
+              font-family: OPPOSans-Medium;
+              color: #333;
+              line-height: 1;
+            }
+          }
+          
+          .item-bottom {
+            display: flex;
+            justify-content: space-between;
+            margin-top: 14px;
+            font-family: OPPOSans, OPPOSans;
+            font-weight: normal;
+            font-size: 12px;
+            color: rgba(0, 0, 0, 0.5);
+            line-height: 1;
+            
+            .bottom-left, .bottom-right {
+              display: flex;
+              align-items: center;
+              
+              :deep(.el-icon) {
+                margin-left: 4px;
+                font-size: 12px;
               }
             }
           }
         }
-
-        .item-bottom {
-          display: flex;
-          justify-content: space-between;
-          margin-top: 18px;
-          font-family: OPPOSans, OPPOSans;
-          font-weight: bold;
-          font-size: 14px;
-        }
-      }
-
-      .line {
-        width: 1px;
-        height: 64px;
-        background-image: url("@/assets/images/home/line@2x.png");
-        background-size: 100% 100%;
       }
     }
 
     .page-main {
-      margin-top: 23px;
+      margin-top: 20px;
+      
+      .el-card {
+        background-color: #fff;
+        border: none;
+        border-radius: 6px;
+        box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
+        
+        :deep(.el-card__body) {
+          padding: 12px;
+        }
+      }
+    }
+
+    .top-header {
+      margin-top: 12px;
+      height: 32px;
+      font-family: OPPOSans, OPPOSans;
+      font-weight: 500;
+      font-size: 14px;
+      color: rgba(0, 0, 0, 0.6);
+      border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 0 10px;
+
+      .header-left {
+        display: flex;
+
+        .name {
+          margin-left: 7px;
+          margin-right: 7px;
+        }
+      }
     }
   }
 
@@ -1063,25 +1230,28 @@
     margin-top: 10px;
   }
 
-  .top-header {
-    margin-top: 15px;
-    height: 23px;
-    font-family: OPPOSans, OPPOSans;
-    font-weight: 500;
-    font-size: 14px;
-    color: rgba(29, 29, 29, 0.6);
-    border-bottom: 1px solid rgba(196, 213, 255, 0.6);
-    display: flex;
-    justify-content: space-between;
-
-    .header-left {
-      display: flex;
-
-      .name {
-        margin-left: 7px;
-        margin-right: 7px;
-      }
+  :deep(.el-button--primary) {
+    background-color: #1976D2;
+    border-color: #1976D2;
+  }
+  
+  :deep(.el-card__header) {
+    padding: 10px 15px;
+    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+  }
+  
+  :deep(.el-tabs--card > .el-tabs__header .el-tabs__item) {
+    border-color: rgba(0, 0, 0, 0.1);
+    
+    &.is-active {
+      background-color: #1976D2;
+      border-color: #1976D2;
+      color: #fff;
     }
   }
+  
+  :deep(.el-tabs--card > .el-tabs__header) {
+    border-color: rgba(0, 0, 0, 0.1);
+  }
 }
 </style>
diff --git a/zhitan-vue/src/views/realtimemonitor/gatewaystatus/index.vue b/zhitan-vue/src/views/realtimemonitor/gatewaystatus/index.vue
new file mode 100644
index 0000000..375c7b5
--- /dev/null
+++ b/zhitan-vue/src/views/realtimemonitor/gatewaystatus/index.vue
@@ -0,0 +1,383 @@
+<template>
+  <div class="page">
+    <!-- 娣诲姞鏍囬鏍� -->
+    <div class="page-title">
+      <div class="title-bar">
+        <span class="title-text">缃戝叧鐘舵�佺洃娴�</span>
+      </div>
+    </div>
+    
+    <div class="table-box">
+      <div class="border">
+        <div class="table" v-for="(item, index) in dataList" :key="index">
+          <div class="num">
+            <div class="li name">{{ item.name }}</div>
+            <div class="firstLi">
+              <div :class="item.list.length < 16 ? 'li hasRightLine' : 'li'" v-for="(i, inde) in item.list" :key="inde">
+                <div class="title_num" v-if="i.title_num">{{ i.title_num }}</div>
+                <div class="dot" v-if="i.dot && i.dot.length > 0">
+                  <div class="dot_li" v-for="(j, ind) in 3" :key="ind"></div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+let dataList = ref([
+  {
+    name: "缃戝叧",
+    list: [
+      {
+        id: 1,
+        title_num: "鏁版嵁搴�",
+        dot: [],
+      },
+      {
+        id: 2,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 3,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 4,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 5,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 6,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 7,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 8,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 9,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 10,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 11,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 12,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 13,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 14,
+        title_num: "200461",
+        dot: [],
+      },
+      {
+        id: 15,
+        title_num: "200475",
+        dot: [],
+      },
+    ],
+  },
+  {
+    name: "璁$畻鍣ㄥ叿",
+    list: [
+      {
+        id: 1,
+        title_num: "",
+        dot: [
+          {
+            id: "001",
+            dot_li: "",
+          },
+          {
+            id: "002",
+            dot_li: "",
+          },
+          {
+            id: "003",
+            dot_li: "",
+          },
+        ],
+      },
+      {
+        id: 2,
+        title_num: "",
+        dot: [
+          {
+            id: "001",
+            dot_li: "",
+          },
+          {
+            id: "002",
+            dot_li: "",
+          },
+        ],
+      },
+      {
+        id: 3,
+        title_num: "",
+        dot: [
+          {
+            id: "001",
+            dot_li: "",
+          },
+          {
+            id: "002",
+            dot_li: "",
+          },
+          {
+            id: "003",
+            dot_li: "",
+          },
+        ],
+      },
+    ],
+  },
+  {
+    name: "缃戝叧",
+    list: [
+      {
+        id: 1,
+        title_num: "鏁版嵁搴�",
+        dot: [],
+      },
+      {
+        id: 2,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 3,
+        title_num: "200311",
+        dot: [],
+      },
+      {
+        id: 4,
+        title_num: "200311",
+        dot: [],
+      },
+    ],
+  }
+])
+</script>
+
+<style scoped lang="scss">
+@import "@/assets/styles/page.scss";
+
+.page {
+  background: #08234F;
+}
+
+// 鏍囬鏍峰紡
+.page-title {
+  margin: 0 16px 16px;
+  position: relative;
+  
+  .title-bar {
+    position: relative;
+    padding: 14px 0;
+    padding-left: 16px;
+    
+    .title-text {
+      font-size: 18px;
+      font-weight: 600;
+      position: relative;
+      padding-left: 12px;
+      color: #fff;
+      
+      &::before {
+        content: '';
+        position: absolute;
+        left: 0;
+        top: 50%;
+        transform: translateY(-50%);
+        width: 5px;
+        height: 18px;
+        background-color: #3883FA;
+        border-radius: 2px;
+      }
+    }
+  }
+  
+  &::after {
+    content: '';
+    position: absolute;
+    bottom: -10px;
+    left: 0;
+    width: 100%;
+    height: 1px;
+    background-color: #E6E6E6;
+  }
+}
+
+.themeDark {
+  .table-box {
+    margin: 10px 25px;
+    .border {
+      border: 1px solid #22408c;
+      border-radius: 8px;
+      background: #1a235d;
+      padding: 10px 0;
+      .table {
+        margin: 15px;
+        // border: 1px solid #22408c;
+        .num {
+          height: 56px;
+          display: flex;
+        }
+        .li {
+          height: 56px;
+          padding: 0 10px;
+          min-width: 60px;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-evenly;
+          align-items: center;
+          border-top: 1px solid #22408c;
+          border-left: 1px solid #22408c;
+          border-bottom: 1px solid #22408c;
+          position: relative;
+        }
+        .hasRightLine {
+          border-right: 1px solid #22408c;
+        }
+        .name {
+          width: 80px;
+          background: #1a235d;
+          color: rgba(255, 255, 255, 0.8);
+          text-align: center;
+          font-family: OPPOSans, OPPOSans;
+          font-weight: 500;
+          font-size: 16px;
+        }
+        .title_num {
+          color: #eeeeee;
+          font-family: OPPOSans, OPPOSans;
+          font-weight: 500;
+          font-size: 16px;
+        }
+        .dot {
+          display: flex;
+          flex-direction: column;
+          // justify-content: space-evenly;
+          height: 30px;
+          width: 12px;
+          align-items: center;
+        }
+        .dot_li {
+          height: 8px;
+          width: 8px;
+          margin: 2px 0;
+          background: red;
+          border-radius: 50%;
+        }
+        .firstLi {
+          display: flex;
+          flex: 1;
+        }
+      }
+    }
+  }
+}
+
+.themeLight {
+  .table-box {
+    margin: 10px 25px;
+    .border {
+      border: 1px solid #ebebeb;
+      border-radius: 8px;
+      background: #fff;
+      padding: 10px 0;
+      .table {
+        margin: 15px;
+        // border: 1px solid #22408c;
+        .num {
+          height: 56px;
+          display: flex;
+        }
+        .li {
+          height: 56px;
+          padding: 0 10px;
+          min-width: 60px;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-evenly;
+          align-items: center;
+          border-top: 1px solid #ebebeb;
+          border-left: 1px solid #ebebeb;
+          border-bottom: 1px solid #ebebeb;
+          position: relative;
+        }
+        .hasRightLine {
+          border-right: 1px solid #ebebeb;
+        }
+        .name {
+          width: 80px;
+          background: #fff;
+          color: #0d0d0d;
+          text-align: center;
+          font-family: OPPOSans, OPPOSans;
+          font-weight: 500;
+          font-size: 16px;
+        }
+        .title_num {
+          color: #0d0d0d;
+          font-family: OPPOSans, OPPOSans;
+          font-weight: 500;
+          font-size: 16px;
+        }
+        .dot {
+          display: flex;
+          flex-direction: column;
+          // justify-content: space-evenly;
+          height: 30px;
+          width: 12px;
+          align-items: center;
+        }
+        .dot_li {
+          height: 8px;
+          width: 8px;
+          margin: 2px 0;
+          background: red;
+          border-radius: 50%;
+        }
+        .firstLi {
+          display: flex;
+          flex: 1;
+        }
+      }
+    }
+  }
+}
+</style> 
\ No newline at end of file
diff --git a/zhitan-vue/src/views/realtimemonitor/realtimemonitor/realtimemonitor.vue b/zhitan-vue/src/views/realtimemonitor/realtimemonitor/realtimemonitor.vue
index 36a9aa2..f55bb61 100644
--- a/zhitan-vue/src/views/realtimemonitor/realtimemonitor/realtimemonitor.vue
+++ b/zhitan-vue/src/views/realtimemonitor/realtimemonitor/realtimemonitor.vue
@@ -2,7 +2,7 @@
   <div class="page">
     <div class="page-container">
       <div class="page-container-left">
-        <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" />
+        <LeftTree ref="leftTreeRef" @handleNodeClick="handleNodeClick" ParentModelCode="YSCJMX" />
       </div>
       <div class="page-container-right">
         <div class="form-card">
@@ -207,8 +207,8 @@
       text-align: left;
       font-weight: bold;
       font-family: OPPOSans, OPPOSans;
-      font-weight: 500;
-      font-size: 16px;
+     
+      font-size: 14px;
       font-style: normal;
       text-transform: none;
     }
@@ -233,8 +233,8 @@
       .title {
         color: rgba(255, 255, 255, 0.8);
         font-family: OPPOSans, OPPOSans;
-        font-weight: 500;
-        font-size: 16px;
+       
+        font-size: 14px;
         line-height: 19px;
         text-align: left;
         font-style: normal;
@@ -242,7 +242,7 @@
       }
 
       .num {
-        font-size: 24px;
+        font-size: 26px;
         color: #36d3ff;
         font-family: OPPOSans, OPPOSans;
         font-weight: 800;
@@ -292,7 +292,7 @@
       text-align: center;
       margin: 5px 8px;
       border-radius: 8px;
-      padding: 7px 10px;
+      padding: 2px 6px;
       font-family: OPPOSans, OPPOSans;
       font-weight: 500;
       font-size: 16px;
@@ -349,7 +349,7 @@
       }
 
       .num {
-        font-size: 24px;
+        font-size: 26px;
         color: #3271eb;
         font-family: OPPOSans, OPPOSans;
         font-weight: 800;
@@ -399,7 +399,7 @@
       text-align: center;
       margin: 5px 8px;
       border-radius: 8px;
-      padding: 7px 3px;
+      padding: 2px 6px;
       font-family: OPPOSans, OPPOSans;
       font-weight: 500;
       font-size: 16px;
@@ -431,7 +431,7 @@
   text-align: center;
   margin: 2px 6px;
   border-radius: 8px;
-  padding: 5px 10px;
+  padding: 2px 6px;
   font-family: OPPOSans, OPPOSans;
   font-weight: 500;
   font-size: 14px;
diff --git a/zhitan-vue/vite.config.js b/zhitan-vue/vite.config.js
index a4c5dbc..a1ac844 100644
--- a/zhitan-vue/vite.config.js
+++ b/zhitan-vue/vite.config.js
@@ -33,10 +33,15 @@
       proxy: {
         // https://cn.vitejs.dev/config/#server-proxy
         "/dev-api": {
-          target: "http://localhost",
+          target: "https://demo-ems.zhitancloud.com",
           changeOrigin: true,
-          rewrite: (p) => p.replace(/^\/dev-api/, ""),
+          rewrite: (p) => p.replace(/^\/dev-api/, "/prod-api"),
         },
+        "/prod-api": {
+          target: "https://demo-ems.zhitancloud.com",
+          changeOrigin: true,
+          secure: true,
+        }
       },
     },
     //fix:error:stdin>:7356:1: warning: "@charset" must be the first rule in the file

--
Gitblit v1.9.3