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