web
2025-03-17 56d13900e2d74eeb9e22a9d86dc929640a676f6f
fix:修改框架,初始化项目模板
已修改64个文件
已删除122个文件
已添加7个文件
8721 ■■■■■ 文件已修改
.env.development 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/login.js 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/menu.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/dataAnalysis/icon1_1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/dataAnalysis/icon1_2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/dataAnalysis/icon1_3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/dataAnalysis/icon1_4.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/dataAnalysis/icon1_5.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/dataAnalysis/icon1_6.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/home/map.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/login_bcg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/login_bcg1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/login/login_icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/map-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/messageInfo-box.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/nodata.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/point.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/report/arrow_green.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/report/arrow_red.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/report/img1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/report/img2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/report/img3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/alarm/analysis.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/alarm/center.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/alarm/down-line.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/alarm/handle.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/alarm/right-line.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/alarm/table-border.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/alarm/title-icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/alarm/up-line.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/bcg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/btnbg-active.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/btnbg-center.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/btnbg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/dma/alert.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/dma/box.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/dma/circle.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/dma/icon1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/dma/icon2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/dma/map.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/dma/mini-map.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/dma/table-box.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/detail.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/left-box.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/left-title.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/no-img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/right-box.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/search-input.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/巡检 .png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/搜索按钮.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/facility/维修.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/head-left.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/head-right.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/head.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/irrigate/leftbox.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/irrigate/mapbg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/irrigate/mapdh.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/irrigate/titbox.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/loginOut.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/border.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/circle1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/circle2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/circle3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/item-delete.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/map.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/maplot.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/mini-circle.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/mini-map.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/msgbox.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/overview/point1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/bottom-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/center-bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/flow.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/item_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/liquid.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/model.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/pressure.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/status.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/pump/title.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/balance.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/down-icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/up-icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/user-quantity.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/user-type.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/user-up.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/用户缴费情况.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/用户缴费情况@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/revenue/矩形 651.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/statistics/date.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/statistics/echarts-box.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/statistics/point.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/statistics/select-date.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/statistics/select.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/statistics/title-icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/titbox.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/screen/userImg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/arrow.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/arrow_red.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/icon_jyj.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/icon_pac.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/jy_cs_main_img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/jy_main_img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/ps_main_img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/tech_main_img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/zs_main_img.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/technology/原水@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/DictTag/index.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/EchartsArea/index.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Editor/index.vue 251 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/FileUpload/index.vue 207 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/ImagePreview/index.vue 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/ImageUpload/index.vue 213 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/RightToolbar/index.vue 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/UploadFile/index.vue 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/UploadIcons/index.vue 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/screen/flow.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/screen/index.vue 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/screen/temp.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/settings.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarm/alarmDefinition/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarm/alarmHistory/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/alarm/alarmScheme/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/configuration/commonParameters/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/configuration/companySetting/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/configuration/defaultAmountSetting/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/configuration/invoiceTitle/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/configuration/salePlace/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/configuration/userClassify/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/configuration/waterOtherFee/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/configuration/waterPrice/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/customer/archives/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/error/404.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facility/area/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facility/collector/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facility/facilityList/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facility/facilityParameter/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facility/facilityType/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facility/handleRecord/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facility/supplier/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facility/valveDevice/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facilityExamine/facilityExaminePlan/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facilityExamine/facilityExamineRecord/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/facilityMaintain/facilityMaintainRecord/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/billRecord/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/invoice/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/payRecord/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/payable/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/recharge/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/tradeRecord/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/userBankAccount/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/userCapitalChange/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financial/waterMeterTask/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 528 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/meterReading/meterReadingMonthRecord/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/meterReading/meterReadingRecord/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/point/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/report/historyData/index.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/report/revenueReport/index.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/alarm/index.vue 588 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/facility/index.vue 368 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/flow/home/index.vue 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/irrigate/index.vue 926 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/overView/index.vue 1148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/pump/index.vue 692 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/reports/index.vue 476 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/revenue/index.vue 1110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/statistics/index.vue 569 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/screen/temperature/home/index.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/menu/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/permission/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/role/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/waterMeter/meterOperation/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/waterMeter/supplier/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/waterMeter/useWaterMeter/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/waterMeter/verification/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/waterMeter/waterModel/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrderManage/meterConstruction/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrderManage/waterMeterAlteration/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrderManage/waterMeterChange/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrderManage/waterMeterCloseAccount/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrderManage/waterMeterMaintainRecords/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrderManage/waterMeterRepair/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrderManage/waterMeterStopAccount/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/workOrderManage/workOrderList/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -7,6 +7,6 @@
# 金川接口
  #  VITE_APP_PUBLIC_REQUEST_API = 'http://113.250.189.120:8030'
    VITE_APP_PUBLIC_REQUEST_API = 'http://113.250.189.120:8036'
  # VITE_APP_PUBLIC_REQUEST_API = 'http://113.250.189.120:8036'
#后端本地
    #VITE_APP_PUBLIC_REQUEST_API = 'http://192.168.0.105:8029'
    VITE_APP_PUBLIC_REQUEST_API = 'http://192.168.0.200:8036'
src/api/login.js
@@ -1,39 +1,27 @@
/*
 * @Author: hqs elkers@163.com
 * @Date: 2024-05-06 09:59:48
 * @LastEditors: Liuyi candymxq888@outlook.com
 * @LastEditTime: 2024-08-14 09:16:12
 * @FilePath: \RuoYi-Vue3\src\api\login.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import {publicRequest} from '@/utils/request'
// 登录方法
export function login(data) {
  return publicRequest(
      {
  return publicRequest({
        url: '/admin/user/login',
        headers: {
        isToken: false,
        },
    method: 'post',
    data: data
  })
        headers: { isToken: false },
        method: 'post',
        data: data
      })
}
export function userDetail() {
  return {
    get: (id) => {
      return publicRequest({
        url: `/admin/user/detail?userId=${id}`,
// 验证码
export function register(uuid) {
    return  publicRequest({
        url: `/admin/user/generate?uuid=${uuid}`,
        method: 'get',
      });
    },
  setPsw: (data) => {
      return publicRequest({
          url: '/admin/user/changePassword',
          method: 'post',
          data
      });
  },
  }
    })
}
// 获取本地ip
export function getIp() {
    return publicRequest({
        url: 'admin/user/getIpAddress',
        method: 'get',
    });
}
src/api/system/menu.js
@@ -50,9 +50,9 @@
      })
    },
    //删除菜单
    remove:(id) =>{
    remove:(menuId) =>{
      return publicRequest({
        url: `/admin/menu/remove?menuId=${id}`,
        url: `/admin/menu/remove/${menuId}`,
        method: 'post',
      })
    },
src/assets/images/bg.png
Binary files differ
src/assets/images/dataAnalysis/icon1_1.png
Binary files differ
src/assets/images/dataAnalysis/icon1_2.png
Binary files differ
src/assets/images/dataAnalysis/icon1_3.png
Binary files differ
src/assets/images/dataAnalysis/icon1_4.png
Binary files differ
src/assets/images/dataAnalysis/icon1_5.png
Binary files differ
src/assets/images/dataAnalysis/icon1_6.png
Binary files differ
src/assets/images/home/map.png
Binary files differ
src/assets/images/login/login_bcg.png
Binary files differ
src/assets/images/login/login_bcg1.png
Binary files differ
src/assets/images/login/login_icon.png
Binary files differ
src/assets/images/map-bg.png
src/assets/images/messageInfo-box.png
src/assets/images/nodata.png
Binary files differ
src/assets/images/point.png
src/assets/images/report/arrow_green.png
Binary files differ
src/assets/images/report/arrow_red.png
Binary files differ
src/assets/images/report/img1.png
Binary files differ
src/assets/images/report/img2.png
Binary files differ
src/assets/images/report/img3.png
Binary files differ
src/assets/images/screen/alarm/analysis.png
Binary files differ
src/assets/images/screen/alarm/center.png
Binary files differ
src/assets/images/screen/alarm/down-line.png
Binary files differ
src/assets/images/screen/alarm/handle.png
Binary files differ
src/assets/images/screen/alarm/right-line.png
Binary files differ
src/assets/images/screen/alarm/table-border.png
Binary files differ
src/assets/images/screen/alarm/title-icon.png
Binary files differ
src/assets/images/screen/alarm/up-line.png
Binary files differ
src/assets/images/screen/bcg.png
Binary files differ
src/assets/images/screen/btnbg-active.png
Binary files differ
src/assets/images/screen/btnbg-center.png
Binary files differ
src/assets/images/screen/btnbg.png
Binary files differ
src/assets/images/screen/dma/alert.png
Binary files differ
src/assets/images/screen/dma/box.png
Binary files differ
src/assets/images/screen/dma/circle.png
Binary files differ
src/assets/images/screen/dma/icon1.png
Binary files differ
src/assets/images/screen/dma/icon2.png
Binary files differ
src/assets/images/screen/dma/map.png
Binary files differ
src/assets/images/screen/dma/mini-map.png
Binary files differ
src/assets/images/screen/dma/table-box.png
Binary files differ
src/assets/images/screen/facility/detail.png
Binary files differ
src/assets/images/screen/facility/left-box.png
Binary files differ
src/assets/images/screen/facility/left-title.png
Binary files differ
src/assets/images/screen/facility/no-img.png
Binary files differ
src/assets/images/screen/facility/right-box.png
Binary files differ
src/assets/images/screen/facility/search-input.png
Binary files differ
src/assets/images/screen/facility/巡检 .png
Binary files differ
src/assets/images/screen/facility/搜索按钮.png
Binary files differ
src/assets/images/screen/facility/维修.png
Binary files differ
src/assets/images/screen/head-left.png
Binary files differ
src/assets/images/screen/head-right.png
Binary files differ
src/assets/images/screen/head.png
Binary files differ
src/assets/images/screen/irrigate/leftbox.png
Binary files differ
src/assets/images/screen/irrigate/mapbg.png
Binary files differ
src/assets/images/screen/irrigate/mapdh.png
Binary files differ
src/assets/images/screen/irrigate/titbox.png
Binary files differ
src/assets/images/screen/loginOut.png
Binary files differ
src/assets/images/screen/overview/border.png
Binary files differ
src/assets/images/screen/overview/circle1.png
Binary files differ
src/assets/images/screen/overview/circle2.png
Binary files differ
src/assets/images/screen/overview/circle3.png
Binary files differ
src/assets/images/screen/overview/icon.png
Binary files differ
src/assets/images/screen/overview/item-delete.png
Binary files differ
src/assets/images/screen/overview/map.png
Binary files differ
src/assets/images/screen/overview/maplot.png
Binary files differ
src/assets/images/screen/overview/mini-circle.png
Binary files differ
src/assets/images/screen/overview/mini-map.png
Binary files differ
src/assets/images/screen/overview/msgbox.png
Binary files differ
src/assets/images/screen/overview/point1.png
Binary files differ
src/assets/images/screen/pump/bottom-bg.png
Binary files differ
src/assets/images/screen/pump/center-bg.png
Binary files differ
src/assets/images/screen/pump/flow.png
Binary files differ
src/assets/images/screen/pump/item_bg.png
Binary files differ
src/assets/images/screen/pump/liquid.png
Binary files differ
src/assets/images/screen/pump/model.png
Binary files differ
src/assets/images/screen/pump/pressure.png
Binary files differ
src/assets/images/screen/pump/status.png
Binary files differ
src/assets/images/screen/pump/title.png
Binary files differ
src/assets/images/screen/revenue/balance.png
Binary files differ
src/assets/images/screen/revenue/down-icon.png
Binary files differ
src/assets/images/screen/revenue/icon.png
Binary files differ
src/assets/images/screen/revenue/up-icon.png
Binary files differ
src/assets/images/screen/revenue/user-quantity.png
Binary files differ
src/assets/images/screen/revenue/user-type.png
Binary files differ
src/assets/images/screen/revenue/user-up.png
Binary files differ
src/assets/images/screen/revenue/用户缴费情况.png
Binary files differ
src/assets/images/screen/revenue/用户缴费情况@2x.png
Binary files differ
src/assets/images/screen/revenue/矩形 651.png
Binary files differ
src/assets/images/screen/statistics/date.png
Binary files differ
src/assets/images/screen/statistics/echarts-box.png
Binary files differ
src/assets/images/screen/statistics/point.png
Binary files differ
src/assets/images/screen/statistics/select-date.png
Binary files differ
src/assets/images/screen/statistics/select.png
Binary files differ
src/assets/images/screen/statistics/title-icon.png
Binary files differ
src/assets/images/screen/titbox.png
Binary files differ
src/assets/images/screen/userImg.png
Binary files differ
src/assets/images/technology/arrow.png
Binary files differ
src/assets/images/technology/arrow_red.png
Binary files differ
src/assets/images/technology/icon_jyj.png
Binary files differ
src/assets/images/technology/icon_pac.png
Binary files differ
src/assets/images/technology/jy_cs_main_img.png
Binary files differ
src/assets/images/technology/jy_main_img.png
Binary files differ
src/assets/images/technology/ps_main_img.png
Binary files differ
src/assets/images/technology/tech_main_img.png
Binary files differ
src/assets/images/technology/zs_main_img.png
Binary files differ
src/assets/images/technology/原水@2x.png
Binary files differ
src/components/DictTag/index.vue
文件已删除
src/components/EchartsArea/index.vue
文件已删除
src/components/Editor/index.vue
文件已删除
src/components/FileUpload/index.vue
文件已删除
src/components/ImagePreview/index.vue
文件已删除
src/components/ImageUpload/index.vue
文件已删除
src/components/RightToolbar/index.vue
文件已删除
src/components/UploadFile/index.vue
文件已删除
src/components/UploadIcons/index.vue
文件已删除
src/main.js
@@ -37,27 +37,8 @@
// 分页组件
import Pagination from '@/components/Pagination'
// 自定义表格工具组件
import RightToolbar from '@/components/RightToolbar'
// 富文本组件
import Editor from "@/components/Editor"
// 文件上传组件
import FileUpload from "@/components/FileUpload"
// 图片上传组件
import ImageUpload from "@/components/ImageUpload"
// 图片预览组件
import ImagePreview from "@/components/ImagePreview"
// 自定义树选择组件
import TreeSelect from '@/components/TreeSelect'
// 字典标签组件
import DictTag from '@/components/DictTag'
//Echarts图表
import EchartsArea from '@/components/EchartsArea'
//自定义文件上传
import UploadFile from "@/components/UploadFile"
//多张图片上传
import UploadIcons from "@/components/UploadIcons"
//数据持久化
@@ -75,20 +56,11 @@
app.config.globalProperties.handleTree = handleTree
app.config.globalProperties.addDateRange = addDateRange
app.config.globalProperties.selectDictLabel = selectDictLabel
app.config.globalProperties.selectDictLabels = selectDictLabels
app.config.globalProperties.selectDictLabels = selectDictLabels
// 全局组件挂载
app.component('EchartsArea', EchartsArea)
app.component('DictTag', DictTag)
app.component('Pagination', Pagination)
app.component('TreeSelect', TreeSelect)
app.component('FileUpload', FileUpload)
app.component('UploadFile', UploadFile)
app.component('UploadIcons', UploadIcons)
app.component('ImageUpload', ImageUpload)
app.component('ImagePreview', ImagePreview)
app.component('RightToolbar', RightToolbar)
app.component('Editor', Editor)
import { addActiveRoute } from '@/utils/index'
src/router/index.js
@@ -8,8 +8,9 @@
 */
import { createWebHashHistory, createRouter } from 'vue-router'
/* Layout */
import Layout from '@/layout'
import Screen from '@/screen'
import Flow from '@/screen/flow.vue'
import Temp from '@/screen/temp.vue'
/**
 * Note: 路由配置项
@@ -33,82 +34,14 @@
// 公共路由
export const constantRoutes = [
  {
    path: '/redirect',
    component: Layout,
    hidden: true,
    children: [
      {
        path: '/redirect/:path(.*)',
        component: () => import('@/views/redirect/index.vue')
      }
    ]
  },
  {
    path: '/',
    component: Layout,
    redirect: '/user',
    children: [
      {
        path: '/userCenter',
        component: () => import('@/views/userCenter.vue'),
        name: 'userCenter',
        meta: { title: '个人中心', icon: 'PhUserCircleFill', affix: true }
      },
    ]
    hidden: true,
    redirect: '/user'
  },
  {
    path: '/login',
    component: () => import('@/views/login'),
    hidden: true
  },
  {
    path: '/screen',
    component: Screen,
    redirect: '/overview',
    children: [
      {
        path: '/overview',
        component: () => import('@/views/screen/overView/index'),
        name: 'overview',
        meta: { title: '总览'}
      },
      {
        path: '/irrigate',
        component: () => import('@/views/screen/irrigate/index'),
        name: 'irrigate',
        meta: { title: '智慧灌溉'}
      },
      {
        path: '/revenue',
        component: () => import('@/views/screen/revenue/index'),
        name: 'revenue',
        meta: { title: '营收管理'}
      },
      {
        path: '/facility-screen',
        component: () => import('@/views/screen/facility/index'),
        name: 'facility',
        meta: { title: '设备管理'}
      },
      {
        path: '/statistics',
        component: () => import('@/views/screen/statistics/index'),
        name: 'statistics',
        meta: { title: '统计分析'}
      },
      {
        path: '/alarm-screen',
        component: () => import('@/views/screen/alarm/index'),
        name: 'alarm',
        meta: { title: '报警管理'}
      },
      {
        path: '/reports',
        component: () => import('@/views/screen/reports/index'),
        name: 'pump',
        meta: { title: '泵站控制'}
      },
    ]
  },
  {
    path: "/:pathMatch(.*)*",
@@ -120,6 +53,41 @@
    component: () => import('@/views/error/401'),
    hidden: true
  },
  {
    path: '/screen',
    component: Screen,
    hidden: true
  }
]
// 流量大屏路由
const FlowScreenRouter = [
  {
    path: '/flow',
    component: Flow,
    redirect: '/flow/home',
    children: [
      {
        path: 'home',
        component: () => import('@/views/screen/flow/home/index.vue')
      }
    ]
  },
]
// 温度大屏路由
const TempScreenRouter = [
  {
    path: '/temp',
    component: Temp,
    redirect: '/temp/home',
    children: [
      {
        path: 'home',
        component: () => import('@/views/screen/temperature/home/index.vue')
      }
    ]
  }
]
// 动态路由,基于用户权限动态去加载
@@ -128,7 +96,7 @@
const router = createRouter({
  history: createWebHashHistory(),
  routes: constantRoutes,
  routes: [...constantRoutes, ...FlowScreenRouter, ...TempScreenRouter],
  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
src/screen/flow.vue
对比新文件
@@ -0,0 +1,75 @@
<template>
    <div class="main">
        <div class="header">
            <div class="top">金川水电站生态流量监测系统 </div>
            <div class="nav">
                <div v-for="(item,index) in btnList" :key="index" @click="navTo(item)" class="plain" :class="item.url === route.path ? 'active' : ''">{{ item.name }}</div>
            </div>
        </div>
        <div class="content">
            <router-view></router-view>
        </div>
    </div>
</template>
<script setup>
import{ useRouter,useRoute } from 'vue-router'
const router = useRouter()
const route = ref(useRoute())
const btnList = ref([
    {name:'总览',url:'/flow/home'},
    {name:'生态流量',url:''},
    {name:'图像监测', url:''},
    {name:'设备管理',url:''},
    {name:'报警管理',url:''},
    {name:'报表管理',url:''},
    {name:'系统管理',url:'/user'},
])
const navTo = (item) =>{
    router.push(item.url)
}
</script>
<style lang="scss" scoped>
.main{
    width: 100%;
    height: 100%;
    .header{
        width: 100%;
        height: 14%;
        .top{
            height: 60%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 38px;
            font-weight: 700;
            color: #fff;
        }
        .nav{
            display: flex;
            height: 40%;
            .plain{
                flex-grow: 1;
                height: 100%;
                display: flex;
                align-items: center;
                justify-content: center;
                border: 1px solid #fff;
                background-color: rgba(23, 108, 229, 0.3);
                color: #fff;
                font-size: 22px;
                cursor: pointer;
            }
            .active{
                background-color: #91BDDB;
            }
        }
    }
    .content{
        width: 100%;
        height: 86%;
    }
}
</style>
src/screen/index.vue
@@ -1,217 +1,36 @@
<template>
    <div class="main">
        <div class="header">
            <div class="top">
                <div class="title">金川水电站生态流量监测系统</div>
                <div class="time">
                    <span>{{ nowTime.date }}</span>
                    <span>{{ nowTime.time }}</span>
                </div>
                <div class="user-image">
                    <div>
                        <img src="../assets/images/screen/userImg.png" alt="">
                    </div>
                    <div class="loginOut">
                        <el-dropdown trigger="click">
                            <img src="../assets/images/screen/loginOut.png" alt="">
                            <template #dropdown>
                                <el-dropdown-menu>
                                    <el-dropdown-item>
                                        <span @click="toUserDetail" >个人中心</span>
                                    </el-dropdown-item>
                                    <el-dropdown-item divided>
                                        <span @click="loginOut">退出登录</span>
                                    </el-dropdown-item>
                                </el-dropdown-menu>
                            </template>
                        </el-dropdown>
                    </div>
                </div>
                <div class="left-icon"><img src="../assets/images/screen/head-left.png" alt=""></div>
                <div class="right-icon"><img src="../assets/images/screen/head-left.png" alt=""></div>
            </div>
            <div class="nav">
                <div class="nav-content">
                    <div v-for="(item,index) in btnList" :key="index" @click="navTo(item)" class="plain" :class="item.url === route.path ? 'active' : ''">{{ item.name }}</div>
                </div>
            </div>
    <div class="container">
        <div class="list">
            <router-link to="/temp" class="item">水温监测系统</router-link>
            <router-link to="/flow" class="item">流量监测系统</router-link>
        </div>
        <div class="content"><router-view></router-view></div>
    </div>
</template>
<script setup>
import{ useRouter,useRoute } from 'vue-router'
import {ElMessageBox} from "element-plus";
import { removeToken } from '@/utils/auth'
const router = useRouter()
const route = ref(useRoute())
const loginOut = () =>{
    ElMessageBox.confirm('确定注销并退出系统吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
    }).then((e) => {
        removeToken()
        window.location.reload();
    }).catch(() => { });
}
const toUserDetail = () =>{
    router.push('/userCenter')
}
const btnList = ref([
    {name:'总览',url:'/overview'},
    {name:'生态流量',url:'/irrigate'},
    {name:'图像监测', url:'/dma'},
    {name:'设备管理',url:'/facility-screen'},
    {name:'报警管理',url:'/alarm-screen'},
    {name:'报表管理',url:'/reports'},
    {name:'系统管理',url:'/user'},
])
const navTo = (item) =>{
    router.push(item.url)
}
//获取当前时间
const nowTime = ref({})
const now = new Date()
const getTime = (now) => {
    // 获取年月日时分秒
    const year = now.getFullYear();
    const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份是从0开始的
    const day = String(now.getDate()).padStart(2, '0');
    const hours = String(now.getHours()).padStart(2, '0');
    const minutes = String(now.getMinutes()).padStart(2, '0');
    const seconds = String(now.getSeconds()).padStart(2, '0');
    // 获取星期
    const weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
    const weekday = weekdays[now.getDay()];
    // 拼接成指定格式的字符串
    return nowTime.value = {
        date:`${year}.${month}.${day} ${weekday}`,
        time:`${hours}:${minutes}:${seconds}`,
    }
}
getTime(now)
onMounted(()=>{
    setInterval(()=>{
        nowTime.value = getTime(new Date())
    },1000)
})
</script>
<style lang="scss" scoped>
.main{
    background-image:url("../assets/images/screen/bcg.png");
    background-size: 100% 100%;
<style scoped lang="scss">
.container{
    width: 100%;
    height: 100%;
    .header{
        width: 100%;
        height: 14%;
        .top{
            position: relative;
            width: 100%;
            height: 82px;
            background-image: url("../assets/images/screen/head.png");
            background-size: 100% 100%;
            .title{
                width: 916px;
                height: 39px;
                position: absolute;
                left:calc(50% - 458px);
                text-align: center;
                font-weight: normal;
                font-size: 36px;
                color: #F9FBFF;
                line-height: 70px;
                letter-spacing: 9px;
                text-shadow:0 0 3px rgba(255,255,255,0.7);
            }
            .time{
                position: absolute;
                width: 200px;
                top:5px;
                left:26px;
                display: flex;
                justify-content: space-between;
                line-height: 23px;
                span{
                    font-weight: 400;
                    font-size: 16px;
                    color: #83D9F3;
                }
                span:last-child{
                text-shadow:0 0 2px rgba(255,255,255,0.6);
                }
            }
            .user-image{
                position: absolute;
                width: 55px;
                height:30px;
                top:5px;
                right:26px;
                display: flex;
                justify-content: space-between;
                align-items: center;
                .loginOut img{
                    margin-top: 4px;
                    width:14px;
                    height:8px;
                }
            }
            .left-icon{
                position: absolute;
                top: 50%;
                img{
                    width: 452px;
                    height: 30px;
                }
            }
            .right-icon{
                position: absolute;
                top: 50%;
                right: 0;
                img{
                    width: 459px;
                    height: 30px;
                    transform: scaleX(-1);
                }
            }
        }
        .nav{
            width: 100%;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .nav-content{
            width: 1758px;
            height: 50px;
            display: flex;
            align-items: center;
            justify-content: space-between;
            font-weight: 400;
            font-size: 17px;
            color: #FFFFFF;
            line-height: 50px;
            .plain{
                width: 181px;
                height: 50px;
                background-image: url("../assets/images/screen/btnbg.png");
                text-align: center;
            }
            .active{
                background-image: url("../assets/images/screen/btnbg-active.png");
            }
        }
    padding: 100px;
    .list{
        display: flex;
        align-items: center;
        gap: 30px;
    }
    .content{
        width: 100%;
        height: 86%;
    .item{
        width: 300px;
        height: 150px;
        text-align: center;
        line-height: 150px;
        font-size: 28px;
        color: #fff;
        background-color: #1ab394;
        box-shadow: 0 0 10px #1ab394;
        border-radius: 10px;
    }
}
</style>
src/screen/temp.vue
对比新文件
@@ -0,0 +1,75 @@
<template>
    <div class="main">
        <div class="header">
            <div class="top">金川水电站生态流量监测系统 </div>
            <div class="nav">
                <div v-for="(item,index) in btnList" :key="index" @click="navTo(item)" class="plain" :class="item.url === route.path ? 'active' : ''">{{ item.name }}</div>
            </div>
        </div>
        <div class="content">
            <router-view></router-view>
        </div>
    </div>
</template>
<script setup>
import{ useRouter,useRoute } from 'vue-router'
const router = useRouter()
const route = ref(useRoute())
const btnList = ref([
    {name:'总览',url:'/temp/home'},
    {name:'设备管理',url:''},
    {name:'实时监测', url:''},
    {name:'图形分析',url:''},
    {name:'汇总统计',url:''},
    {name:'报表管理',url:''},
    {name:'系统管理',url:'/user'},
])
const navTo = (item) =>{
    router.push(item.url)
}
</script>
<style lang="scss" scoped>
.main{
    width: 100%;
    height: 100%;
    .header{
        width: 100%;
        height: 14%;
        .top{
            height: 60%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 38px;
            font-weight: 700;
            color: #fff;
        }
        .nav{
            display: flex;
            height: 40%;
            .plain{
                flex-grow: 1;
                height: 100%;
                display: flex;
                align-items: center;
                justify-content: center;
                border: 1px solid #fff;
                background-color: rgba(23, 108, 229, 0.3);
                color: #fff;
                font-size: 22px;
                cursor: pointer;
            }
            .active{
                background-color: #91BDDB;
            }
        }
    }
    .content{
        width: 100%;
        height: 86%;
    }
}
</style>
src/settings.js
@@ -10,7 +10,7 @@
  /**
   * 是否系统布局配置
   */
  showSettings: true,
  showSettings: false,
  /**
   * 是否显示顶部导航
src/store/modules/user.js
@@ -24,12 +24,8 @@
    actions: {
      // 登录
      login(userInfo) {
        const userName = userInfo.userName.trim()
        const password = userInfo.password
        // const code = userInfo.code
        // const uuid = userInfo.uuid
        return new Promise((resolve, reject) => {
          login(userName, password).then(res => {
          login(userInfo).then(res => {
            setToken(res.data.token)
            this.token = res.token
src/views/alarm/alarmDefinition/index.vue
@@ -76,7 +76,7 @@
 
 <script setup name="Menu">
 import  alarmDefinition from "@/api/configuration/alarmDefinition/index.js";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/alarm/alarmHistory/index.vue
@@ -9,7 +9,7 @@
 <script setup>
 import  alarmHistoryApi from "@/api/alarmApi/alarmHistory";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/alarm/alarmScheme/index.vue
@@ -15,7 +15,7 @@
import user from "@/api/system/user.js";
import waterMeterApi from "@/api/waterMeterApi/index.js";
import {sysDictData} from "@/api/system/dict.js";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
import{ useRoute } from 'vue-router'
const {proxy} = getCurrentInstance();
@@ -86,13 +86,13 @@
const getFacilityList = async () => {
    await facilityApi().search({limit: 10000, page: 1}).then((res) => {
    await facilityApi().search({limit: 100, page: 1}).then((res) => {
        console.log("设备列表" + res.data.list);
        facilityList.value = res.data.list
    })
}
const getInformUserList = async () => {
    await user().search({limit: 10000, page: 1}).then((res) => {
    await user().search({limit: 100, page: 1}).then((res) => {
        console.log("通知人员列表" + res.data.list);
        informUserList.value = res.data.list
    })
src/views/configuration/commonParameters/index.vue
@@ -76,7 +76,7 @@
 
 <script setup name="Menu">
 import commonParameters from "@/api/configuration/commonParameters/index.js";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/configuration/companySetting/index.vue
@@ -100,7 +100,7 @@
 <script setup name="Menu">
 import  companySetting from "@/api/configuration/companySetting";
 import  { sysDictData } from "@/api/system/dict";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/configuration/defaultAmountSetting/index.vue
@@ -86,7 +86,7 @@
 <script setup name="Menu">
 import  defaultAmountSetting from "@/api/configuration/defaultAmountSetting";
 import  userClassify from "@/api/configuration/userClassify";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/configuration/invoiceTitle/index.vue
@@ -3,7 +3,7 @@
 import  invoiceTitle from "@/api/configuration/invoiceTitle";
 import  { sysDictData }  from "@/api/system/dict";
 import  user  from "@/api/system/user";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/configuration/salePlace/index.vue
@@ -136,7 +136,7 @@
 import  { region } from "@/api/basicApi";
 import  user from "@/api/system/user";
 import  { PREURL } from "@/config/index";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/configuration/userClassify/index.vue
@@ -78,7 +78,7 @@
 
 <script setup name="Menu">
 import  userClassify from "@/api/configuration/userClassify";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/configuration/waterOtherFee/index.vue
@@ -92,7 +92,7 @@
 <script setup name="Menu">
 import  waterOtherFee from "@/api/configuration/waterOtherFee";
 import  userClassify from "@/api/configuration/userClassify";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/configuration/waterPrice/index.vue
@@ -114,7 +114,7 @@
 
 <script setup name="Menu">
 import  TieredCharging from "@/api/configuration/waterPrice";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/customer/archives/index.vue
@@ -10,7 +10,7 @@
 <script setup>
 import  archivesApi from "@/api/archivesApi/index";
 import {areaApi} from "@/api/area/index";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/error/404.vue
@@ -17,7 +17,7 @@
        <div class="bullshit__info">
          对不起,您正在寻找的页面不存在。尝试检查URL的错误,然后按浏览器上的刷新按钮或尝试在我们的应用程序中找到其他内容。
        </div>
        <router-link to="/index" class="bullshit__return-home">
        <router-link to="/" class="bullshit__return-home">
          返回首页
        </router-link>
      </div>
src/views/facility/area/index.vue
@@ -4,7 +4,7 @@
import {region} from "@/api/basicApi/index.js";
import { onMounted } from "vue";
import user from "@/api/system/user.js";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const { proxy } = getCurrentInstance();
const loading = ref(true); //加载状态
@@ -146,7 +146,7 @@
const getUserList = async() =>{
    loading.value = true;
    let res = await user().search({limit:1000,page:1})
    let res = await user().search({limit:100,page:1})
    if(res.code == 200) {
        loading.value = false;
        areaUserList.value = res.data.list
src/views/facility/collector/index.vue
@@ -10,7 +10,7 @@
<script setup>
import  collectorApi from "@/api/facility/collector";
import  { nameReg ,phoneReg }  from "@/utils/regular";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const { proxy } = getCurrentInstance();
 
src/views/facility/facilityList/index.vue
@@ -6,7 +6,7 @@
import commonParameters from "@/api/configuration/commonParameters/index.js";
import waterFacilityParameter from "@/api/configuration/facilityParameter/index.js";
import {PREURL} from '@/config/index'
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const route = useRoute();
const preUrl = ref(PREURL);
const {proxy} = getCurrentInstance();
src/views/facility/facilityParameter/index.vue
@@ -70,7 +70,7 @@
 
 <script setup name="Menu">
 import waterFacilityParameter from "@/api/configuration/facilityParameter/index.js";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/facility/facilityType/index.vue
@@ -8,7 +8,7 @@
-->
<script setup>
import  facilityTypeApi from "@/api/facility/facilityType";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const route = useRoute();
const { proxy } = getCurrentInstance();
src/views/facility/handleRecord/index.vue
@@ -8,7 +8,7 @@
-->
 <script setup>
 import  recordApi from "@/api/facility/record.js";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/facility/supplier/index.vue
@@ -10,7 +10,7 @@
 <script setup>
 import  supplierApi from "@/api/waterMeterApi/supplier";
import  { nameReg ,phoneReg }  from "@/utils/regular";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
src/views/facility/valveDevice/index.vue
@@ -14,7 +14,7 @@
import commonParameters from "@/api/configuration/commonParameters/index.js";
import waterFacilityParameter from "@/api/configuration/facilityParameter/index.js";
import {PREURL} from '@/config/index'
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const route = useRoute();
const preUrl = ref(PREURL);
const {proxy} = getCurrentInstance();
@@ -103,7 +103,7 @@
//查询监控点
const areaList = ref();
const getArea = async () => {
    await areaApi().search({limit: 10000, page: 1}).then((res) => {
    await areaApi().search({limit: 100, page: 1}).then((res) => {
        areaList.value = res.data.list
    })
}
@@ -111,7 +111,7 @@
//查询供应商
const supplierList = ref();
const getSupplier = async () => {
    await supplierApi().search({limit: 10000, page: 1}).then((res) => {
    await supplierApi().search({limit: 100, page: 1}).then((res) => {
        console.log("供应商" + res.data.list);
        supplierList.value = res.data.list
    })
src/views/facilityExamine/facilityExaminePlan/index.vue
@@ -1,7 +1,7 @@
 
<script setup name="Post">
import { facilityExaminePlanApi } from "@/api/examine/plan/index.js";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
import  user from "@/api/system/user";
import {sysDictData} from "../../../api/system/dict.js";
import facilityApi from "../../../api/facility/index.js";
src/views/facilityExamine/facilityExamineRecord/index.vue
@@ -1,6 +1,6 @@
<script setup name="Post">
import {facilityExamineRecordApi} from "@/api/examine/record/index.js";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
import facilityApi from "@/api/facility/index.js";
const {proxy} = getCurrentInstance();
/**
src/views/facilityMaintain/facilityMaintainRecord/index.vue
@@ -1,6 +1,6 @@
<script setup >
import {facilityMaintainRecordApi} from "@/api/maintain/record/index.js";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const {proxy} = getCurrentInstance();
/**
src/views/financial/billRecord/index.vue
@@ -4,7 +4,7 @@
 import  TieredCharging from "@/api/configuration/waterPrice";
 const { proxy } = getCurrentInstance();
 import  archivesApi from "@/api/archivesApi/index";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 
/**
 * 搜索相关
src/views/financial/invoice/index.vue
@@ -3,7 +3,7 @@
 import  invoice from "@/api/financial/invoice";
 import  { sysDictData }  from "@/api/system/dict";
 import  user  from "@/api/system/user";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/financial/payRecord/index.vue
@@ -1,7 +1,7 @@
 <script setup >
 import  payRecord from "@/api/financial/payRecord";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/financial/payable/index.vue
@@ -1,7 +1,7 @@
 <script setup >
 import  payable from "@/api/financial/payable";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/financial/recharge/index.vue
@@ -3,7 +3,7 @@
import  recharge from "@/api/financial/recharge";
import  archivesApi  from "@/api/archivesApi";
import  { sysDictData}  from "@/api/system/dict";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const { proxy } = getCurrentInstance();
/**
src/views/financial/tradeRecord/index.vue
@@ -1,7 +1,7 @@
 <script setup >
 import  payable from "@/api/financial/payable";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 import tradeRecord from "../../../api/financial/tradeRecord/index.js";
 const { proxy } = getCurrentInstance();
 
src/views/financial/userBankAccount/index.vue
@@ -2,7 +2,7 @@
 <script setup >
 import  userBankAccount from "@/api/financial/userBankAccount";
 import  user  from "@/api/system/user";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/financial/userCapitalChange/index.vue
@@ -1,7 +1,7 @@
 <script setup >
 import  userCapitalChange from "@/api/financial/userCapitalChange";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
/**
 * 搜索相关
src/views/financial/waterMeterTask/index.vue
@@ -4,7 +4,7 @@
 import  TieredCharging from "@/api/configuration/waterPrice";
 const { proxy } = getCurrentInstance();
 import  archivesApi from "@/api/archivesApi/index";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 import waterMeterTask from "@/api/financial/waterMeterTask/index.js";
 
/**
src/views/login.vue
@@ -1,277 +1,371 @@
<template>
  <div class="login">
    <div class="login-bcg1"></div>
    <div class="contain">
    <el-form  ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
      <h3 class="title">金川水电站生态流量监测系统</h3>
      <el-form-item label="账 号" prop="userName">
        <el-input
          style="height: 45px;"
          v-model="loginForm.userName"
          type="text"
          auto-complete="off"
          placeholder="账号"
        >
          <!-- <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template> -->
        </el-input>
      </el-form-item>
      <el-form-item label="密 码" prop="password">
        <el-input
          style="height: 45px;"
          v-model="loginForm.password"
          :type="isPassword"
          size="large"
          auto-complete="off"
          placeholder="密码"
          @keyup.enter="handleLogin"
        >
        <template #suffix>
            <div @click="showPassword"><svg-icon :icon-class="eyeView"/></div>
        </template>
        </el-input>
      </el-form-item>
      <el-checkbox class="check-box" v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
      <el-form-item >
        <el-button
          :loading="loading"
          size="large"
          type="primary"
          style="width:100%;"
          @click.prevent="handleLogin"
        >
          <span v-if="!loading">登 录</span>
          <span v-else>登 录 中...</span>
        </el-button>
      </el-form-item>
    </el-form>
    <img src="../assets/images/login/login_icon.png"/>
    <div class="login">
        <div class="login-bcg1"></div>
        <div class="contain">
            <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form"
                     @keydown.enter="handleLogin">
                <h3 class="title">金川水电站生态流量监测系统</h3>
                <el-form-item label="账号" prop="userName">
                    <el-input
                        style="height: 45px;"
                        v-model="loginForm.userName"
                        type="text"
                        auto-complete="off"
                        placeholder="账号"
                    >
                        <!-- <template #prefix><svg-icon icon-class="user" class="el-input__icon input-icon" /></template> -->
                    </el-input>
                </el-form-item>
                <el-form-item label="密码" prop="password">
                    <el-input
                        style="height: 45px;"
                        v-model="loginForm.password"
                        :type="isPassword"
                        size="large"
                        auto-complete="off"
                        placeholder="密码"
                    >
                        <template #suffix>
                            <div @click="showPassword">
                                <svg-icon :icon-class="eyeView"/>
                            </div>
                        </template>
                    </el-input>
                </el-form-item>
                <el-form-item label="验证码" prop="code">
                    <div class="yzm-box">
                        <el-input
                            style="height: 45px;"
                            v-model="loginForm.code"
                            size="large"
                            auto-complete="off"
                            placeholder="验证码"
                        >
                        </el-input>
                        <div class="yzm" @click="resetCode">
                            <img v-if="codeUrl" :src="codeUrl" alt=""/>
                            <div v-else class="code-none">无法加载</div>
                        </div>
                    </div>
                </el-form-item>
                <el-checkbox class="check-box" v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">
                    记住密码
                </el-checkbox>
                <el-form-item>
                    <el-button
                        :loading="loading"
                        size="large"
                        type="primary"
                        style="width:100%;"
                        @click.prevent="handleLogin"
                    >
                        <span v-if="!loading">登 录</span>
                        <span v-else>登 录 中...</span>
                    </el-button>
                </el-form-item>
            </el-form>
            <img class="left-img" src="../assets/images/login/login_icon.png"/>
        </div>
        <!--  底部  -->
        <div class="footer">
            <span>苏州伦晗电子有限公司.</span>
        </div>
    </div>
    <!--  底部  -->
    <div class="footer">
      <span>苏州伦晗电子有限公司.</span>
    </div>
  </div>
</template>
<script setup>
// import { getCodeImg } from "@/api/login";
import {onMounted} from 'vue';
import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt";
import {encrypt, decrypt} from "@/utils/jsencrypt";
import useUserStore from '@/store/modules/user';
import usePermissionStore from '@/store/modules/permission';
import { addActiveRoute } from '@/utils/index';
import { setToken } from '@/utils/auth';
import { useRouter, useRoute } from 'vue-router';
import { login } from '@/api/login';
import {addActiveRoute} from '@/utils/index';
import {setToken} from '@/utils/auth';
import {useRouter, useRoute} from 'vue-router';
import {login, register, getIp} from '@/api/login';
const userStore = useUserStore()
const permissionStore = usePermissionStore()
const route = useRoute();
const router = useRouter();
const { proxy } = getCurrentInstance();
const {proxy} = getCurrentInstance();
const isPassword = ref('password');
const eyeView = ref('eye')
const showPassword = () =>{
    if(eyeView.value === 'eye'){
const showPassword = () => {
    if (eyeView.value === 'eye') {
        eyeView.value = 'eye-open'
        isPassword.value = 'text'
    }else if(eyeView.value === 'eye-open'){
    } else if (eyeView.value === 'eye-open') {
        eyeView.value = 'eye'
        isPassword.value = 'password'
    }
}
const loginForm = ref({
  userName: "",
  password: "",
  rememberMe: false
const loginForm = reactive({
    userName: "",
    password: "",
    code: '',
    uuid: '',
    machineCode: '',
    rememberMe: false
});
const codeUrl = ref('');
const loginRules = {
  userName: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
  password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
    userName: [{required: true, trigger: "blur", message: "请输入您的账号"}],
    password: [{required: true, trigger: "blur", message: "请输入您的密码"}],
    code: [{required: true, trigger: "blur", message: "请输入您的验证码"}],
};
const loading = ref(false);
const redirect = ref(undefined);
watch(route, (newRoute) => {
    redirect.value = newRoute.query && newRoute.query.redirect;
}, { immediate: true });
}, {immediate: true});
/**
 * 生成随机字符串uuid
 * @param length 字符串的长度,默认11
 * @returns {string}
 */
function generateRandomString(length = 11) {
    let charset = 'abcdefghijklmnopqrstuvwxyz-_ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    let values = new Uint32Array(length);
    window.crypto.getRandomValues(values);
    let str = '';
    for (let i = 0; i < length; i++) {
        str += charset[values[i] % charset.length];
    }
    return str;
}
/**
 * 获取验证码
 */
async function resetCode() {
    loginForm.uuid = generateRandomString(11);
    register(loginForm.uuid).then(res => {
        codeUrl.value = res.data
    })
}
/**
 * 获取电脑标识
 */
async function getConputerId() {
    const res = await getIp();
    loginForm.machineCode = res.data;
}
//根据moduleCode获取相对应菜单
const filterTreeMenus = (menus, userType) => {
  let filteredMenu = [];
  for (let item of menus) {
    let filteredMenu = [];
    for (let item of menus) {
        filteredMenu.push(item);
      if (item.children && item.children.length > 0) {
          let filteredChildren = filterTreeMenus(item.children, userType);
          if (filteredChildren.length > 0) {
              item.children = filteredChildren;
          } else {
              delete item.children;
          }
      }
  }
  return filteredMenu;
        if (item.children && item.children.length > 0) {
            let filteredChildren = filterTreeMenus(item.children, userType);
            if (filteredChildren.length > 0) {
                item.children = filteredChildren;
            } else {
                delete item.children;
            }
        }
    }
    return filteredMenu;
}
function handleLogin() {
  proxy.$refs.loginRef.validate(valid => {
    if (valid) {
      loading.value = true;
    proxy.$refs.loginRef.validate(valid => {
        if (valid) {
            loading.value = true;
      //记住密码
      if (loginForm.value.rememberMe) {
        Cookies.set("userName", loginForm.value.userName, { expires: 30 });
        Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 });
        Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 });
      } else {
        //移除
        Cookies.remove("userName");
        Cookies.remove("password");
        Cookies.remove("rememberMe");
      }
      const userInfo = {
        userName:loginForm.value.userName.trim(),
        password: loginForm.value.password
      }
      login(userInfo).then(async(res) => {
        loading.value = false;
        setToken(res.data.token)
        //普通管理员筛除菜单、权限、数据字典,普通用户筛除系统管理
        if(res.data.userType == 2){
            res.data.menus.forEach((item,index) =>{
              if(item.id == '10001'){
                item.children.forEach((itemChild,childIndex) =>{
                  if(itemChild.id == '10101' || itemChild.id == '10102' || itemChild.id == '1822894922704416770'){
                    item.children.splice(childIndex,1)
                  }
                })
              }
            //记住密码
            if (loginForm.rememberMe) {
                Cookies.set("userName", loginForm.userName, {expires: 30});
                Cookies.set("password", encrypt(loginForm.password), {expires: 30});
                Cookies.set("rememberMe", loginForm.rememberMe, {expires: 30});
            } else {
                //移除
                Cookies.remove("userName");
                Cookies.remove("password");
                Cookies.remove("rememberMe");
            }
            const userInfo = {
                userName: loginForm.userName.trim(),
                password: loginForm.password,
                code: loginForm.code,
                uuid: loginForm.uuid,
                machineCode: loginForm.machineCode,
            }
            login(userInfo).then(async (res) => {
                loading.value = false;
                setToken(res.data.token)
                //普通管理员筛除菜单、权限、数据字典,普通用户筛除系统管理
                if (res.data.userType == 2) {
                    res.data.menus.forEach((item, index) => {
                        if (item.id == '10001') {
                            item.children.forEach((itemChild, childIndex) => {
                                if (itemChild.id == '10101' || itemChild.id == '10102' || itemChild.id == '1822894922704416770') {
                                    item.children.splice(childIndex, 1)
                                }
                            })
                        }
                    })
                } else if (res.data.userType == 3) {
                    res.data.menus.forEach((item, index) => {
                        if (item.id == '10001') {
                            res.data.menus.splice(index, 1)
                        }
                    })
                }
                console.log(123123, res.data.menus)
                let filteredMenus = filterTreeMenus(res.data.menus, 1)
                console.log('filterTreeMenus菜单权限过滤', filteredMenus)
                permissionStore.setSidebarRouters(filteredMenus);
                console.log('setSidebarRouters配置菜单路由项数据', permissionStore.sidebarRouters)
                addActiveRoute(permissionStore, router)
                localStorage.setItem('listPermission', JSON.stringify(res.data.listPermission))
                localStorage.setItem('id', JSON.stringify(res.data.id))
                localStorage.setItem('userType', JSON.stringify(res.data.userType))
                router.push("/screen");//overview
            }).catch(error => {
                loading.value = false;
                proxy.$modal.msgError('登录失败!')
            })
          }else if(res.data.userType == 3){
            res.data.menus.forEach((item,index) =>{
              if(item.id == '10001'){
                res.data.menus.splice(index,1)
              }
            })
          }
          console.log(123123,res.data.menus)
        let filteredMenus = filterTreeMenus(res.data.menus, 1)
        console.log('filterTreeMenus菜单权限过滤',filteredMenus)
        permissionStore.setSidebarRouters(filteredMenus);
        console.log('setSidebarRouters配置菜单路由项数据', permissionStore.sidebarRouters)
        addActiveRoute(permissionStore, router)
        localStorage.setItem('listPermission',JSON.stringify(res.data.listPermission))
        localStorage.setItem('id',JSON.stringify(res.data.id))
        localStorage.setItem('userType',JSON.stringify(res.data.userType))
        router.push("/user");//overview
      }).catch(error => {
        loading.value = false;
        proxy.$modal.msgError('登录失败!')
      })
    }
  });
        }
    });
}
function getCookie() {
  const userName = Cookies.get("userName");
  const password = Cookies.get("password");
  const rememberMe = Cookies.get("rememberMe");
  loginForm.value = {
    userName: userName === undefined ? loginForm.value.userName : userName,
    password: password === undefined ? loginForm.value.password : decrypt(password),
    rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
  };
    const userName = Cookies.get("userName");
    const password = Cookies.get("password");
    const rememberMe = Cookies.get("rememberMe");
    loginForm.userName = userName === undefined ? loginForm.userName : userName;
    loginForm.password = password === undefined ? loginForm.password : password;
    loginForm.rememberMe = rememberMe === undefined ? loginForm.rememberMe : rememberMe;
}
getCookie();
onMounted(() => {
    getCookie();
    resetCode();
    getConputerId()
})
</script>
<style lang='scss' scoped>
.login{
  position: relative;
.login {
    position: relative;
    // justify-content: center;
    // align-items: center;
    width: 100%;
    height: 100%;
    background-image: url("../assets/images/login/login_bcg.png");
    background-size: 100% 100%;
    .login-bcg1{
      position: absolute;
      height: 100%;
      width:100%;
      background-image: url("../assets/images/login/login_bcg1.png");
      background-size: 100% 100%;
    }
    .contain{
      position: absolute;
      background-color: rgba(239, 245, 254, 0.75);
      border-radius: 26px;
      width: 76%;
      height: 85%;
      top: 0;
      right: 0;
      bottom: 0;
      left: 0;
      margin: auto;
    }
    img{
      position: absolute;
      width:44%;
      height: 62%;
      top: 16%;
      left:-4%;
    }
    .login-form {
      position: absolute;
      width: 38%;
      height:75%;
      right:5%;
      top:10%;
      border-radius: 10px;
      background: #ffffff;
      padding: 25px;
      box-shadow: 0 0 10px 4px #c4d4f7;
      .title {
        font-size: 40px;
        margin: 10px 30px 100px;
        text-align: center;
        color: #000000;
    .login-bcg1 {
        position: absolute;
        height: 100%;
        width: 100%;
        background-image: url("../assets/images/login/login_bcg1.png");
        background-size: 100% 100%;
    }
      .el-form-item{
        margin: 40px auto 20px;
        width: 85%;
        :deep(.el-form-item__label){
          line-height: 45px;
          font-size: large;
          font-weight: 500;
        }
        .el-button{
          height: 50px;
    .contain {
        position: absolute;
        background-color: rgba(239, 245, 254, 0.75);
        border-radius: 26px;
        width: 76%;
        height: 85%;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        margin: auto;
    }
    .left-img {
        position: absolute;
        width: 44%;
        height: 62%;
        top: 16%;
        left: -4%;
    }
    .login-form {
        position: absolute;
        width: 42%;
        height: 80%;
        right: 5%;
        top: 10%;
        border-radius: 10px;
        background: #ffffff;
        padding: 25px;
        box-shadow: 0 0 10px 4px #c4d4f7;
        .title {
            font-size: 40px;
            margin: 10px 20px 70px;
            text-align: center;
            color: #000000;
        }
      }
      .check-box{
        width: 85%;
        left: 50%;
        transform:translate(-50%) ;
      }
        .el-form-item {
            margin: 30px auto;
            width: 85%;
            .yzm-box{
                width: 100%;
                display: flex;
                justify-content: space-between;
                align-items: center;
                :deep(.el-input){
                    width: 60%;
                }
                .yzm{
                    width: 35%;
                    display: flex;
                    align-items: center;
                    img{
                        width: 100%;
                    }
                }
            }
            :deep(.el-form-item__label) {
                line-height: 45px;
                font-size: large;
                font-weight: 500;
                width: 80px;
            }
            .el-button {
                height: 50px;
            }
        }
        .check-box {
            width: 85%;
            left: 50%;
            transform: translate(-50%);
        }
    }
}
.footer {
  height: 40px;
  line-height: 40px;
  position: fixed;
  bottom: 0;
  width: 100%;
  text-align: center;
  color: #fff;
  font-family: Arial;
  font-size: 12px;
  letter-spacing: 1px;
    height: 40px;
    line-height: 40px;
    position: fixed;
    bottom: 0;
    width: 100%;
    text-align: center;
    color: #fff;
    font-family: Arial;
    font-size: 12px;
    letter-spacing: 1px;
}
</style>
src/views/meterReading/meterReadingMonthRecord/index.vue
@@ -9,7 +9,7 @@
<script setup>
import meterReadingRecordApi from "@/api/meterReadingApi/meterReadingRecord";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const {proxy} = getCurrentInstance();
src/views/meterReading/meterReadingRecord/index.vue
@@ -9,7 +9,7 @@
 <script setup>
 import  meterReadingRecordApi from "@/api/meterReadingApi/meterReadingRecord";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/point/index.vue
@@ -13,7 +13,7 @@
import {longitudeReg, latitudeReg} from "@/utils/regular";
import {ref} from "vue";
import {region} from "@/api/basicApi/index.js";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const route = useRoute();
const {proxy} = getCurrentInstance();
src/views/report/historyData/index.vue
文件已删除
src/views/report/revenueReport/index.vue
文件已删除
src/views/screen/alarm/index.vue
文件已删除
src/views/screen/facility/index.vue
文件已删除
src/views/screen/flow/home/index.vue
对比新文件
@@ -0,0 +1,145 @@
<template>
    <div class="home">
        <div class="home-bg"></div>
        <div class="home-c">
            <div class="point">
                <div class="point-address"></div>
                <div class="point-message">
                    <div class="video-box">
                        <el-icon><VideoPlay /></el-icon>
                    </div>
                    <div class="info-box">
                        <div class="info-t">水电站流量监测点</div>
                        <div class="info-sw">水位:<span>500</span>m</div>
                        <div class="info-ls">流速:<span>15</span>m/s</div>
                        <div class="info-ssls">瞬时流速:<span>150</span>m/s</div>
                        <div class="info-ljll">
                            累计流量:
                            <el-select
                                v-model="selectll"
                                class="m-2"
                                placeholder="Select"
                                size="small"
                                style="width: 240px"
                            >
                                <el-option
                                    v-for="(item, idx) in liuliangOptions"
                                    :key="idx"
                                    :label="item.label"
                                    :value="idx"
                                />
                            </el-select>
                            <span>{{ liuliangOptions[selectll].value }}</span>m/s
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script setup>
import {ref} from "vue";
const selectll = ref(0)
const liuliangOptions = [
    { label: '总计流量', value: 500 },
    { label: '日累计流量', value: 1000 },
    { label: '周累计流量', value: 10000 },
    { label: '月累计流量', value: 300000 },
    { label: '年累计流量', value: 3600000 },
]
</script>
<style scoped lang="scss">
.home{
    height: 100%;
    .home-bg{
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background: url("@/assets/images/map-bg.png") no-repeat;
        background-size: 100% 100%;
        z-index: -1;
    }
    .home-c{
        width: 100%;
        height: 100%;
        position: relative;
        .point{
            position: absolute;
            left: 58%;
            top: 30%;
            .point-address{
                width: 35px;
                height: 40px;
                background: url("@/assets/images/point.png") no-repeat;
                background-size: 100% 100%;
            }
            .point-message{
                width: 600px;
                height: 200px;
                background: url("@/assets/images/messageInfo-box.png") no-repeat;
                background-size: 100% 100%;
                position: absolute;
                left: -600px;
                top: -100px;
                padding: 30px 50px 30px 30px;
                color: #fff;
                display: flex;
                align-items: center;
                gap: 20px;
                .video-box{
                    flex-shrink: 0;
                    width: 200px;
                    height: 138px;
                    line-height: 138px;
                    text-align: center;
                    font-size: 38px;
                    background: #cccb40;
                }
                .info-box{
                    height: 100%;
                    display: flex;
                    flex-direction: column;
                    justify-content: space-between;
                    .info-t{
                        font-size: 20px;
                    }
                    .info-ljll{
                        display: flex;
                        align-items: center;
                        :deep(.el-select){
                            width: 100px !important;
                            .el-select__wrapper{
                                color: #fff;
                                background: transparent;
                                .el-select__selected-item{
                                    color: #fff;
                                }
                                .el-select__suffix .el-icon{
                                    color: #fff;
                                }
                                &:hover{
                                    box-shadow: none;
                                }
                            }
                        }
                    }
                    span{
                        display: inline-block;
                        padding: 0 10px;
                    }
                }
            }
        }
    }
}
</style>
src/views/screen/irrigate/index.vue
文件已删除
src/views/screen/overView/index.vue
文件已删除
src/views/screen/pump/index.vue
文件已删除
src/views/screen/reports/index.vue
文件已删除
src/views/screen/revenue/index.vue
文件已删除
src/views/screen/statistics/index.vue
文件已删除
src/views/screen/temperature/home/index.vue
对比新文件
@@ -0,0 +1,102 @@
<template>
    <div class="home">
        <div class="home-bg"></div>
        <div class="home-c">
            <div class="point">
                <div class="point-address"></div>
                <div class="point-message">
                    <div class="msg-t">电站尾水出口水温监测点</div>
                    <div class="num">
                        <div class="item">
                            <div class="item-t">水温:</div>
                            <div class="item-num"><span>10</span>°C</div>
                        </div>
                        <div class="item">
                            <div class="item-t">水位:</div>
                            <div class="item-num"><span>1000</span>m</div>
                        </div>
                    </div>
                    <div class="shebei">
                        监测设备: <span>监测设备运行正常(点击跳转)</span>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script setup>
</script>
<style scoped lang="scss">
.home{
    height: 100%;
    .home-bg{
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        background: url("@/assets/images/map-bg.png") no-repeat;
        background-size: 100% 100%;
        z-index: -1;
    }
    .home-c{
        width: 100%;
        height: 100%;
        position: relative;
        .point{
            position: absolute;
            left: 58%;
            bottom: 10%;
            .point-address{
                width: 35px;
                height: 40px;
                background: url("@/assets/images/point.png") no-repeat;
                background-size: 100% 100%;
            }
            .point-message{
                width: 500px;
                height: 200px;
                background: url("@/assets/images/messageInfo-box.png") no-repeat;
                background-size: 100% 100%;
                position: absolute;
                left: -500px;
                top: -100px;
                padding: 30px 50px;
                color: #fff;
                display: flex;
                flex-direction: column;
                justify-content: space-between;
                .msg-t{
                    font-size: 26px;
                    font-weight: bold;
                }
                .num{
                    display: flex;
                    align-items: center;
                    gap: 50px;
                    .item{
                        display: flex;
                        align-items: center;
                        span{
                            display: inline-block;
                            padding: 0 30px;
                            font-size: 22px;
                            font-weight: bold;
                        }
                    }
                }
                .shebei{
                    span{
                        color: #1ab394;
                    }
                }
            }
        }
    }
}
</style>
src/views/system/dict/index.vue
@@ -2,7 +2,7 @@
<script setup name="Post">
import { sysDictType,sysDictData} from "@/api/system/dict";
import { onMounted } from "vue";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const { proxy } = getCurrentInstance();
const loading = ref(true); //加载状态
src/views/system/menu/index.vue
@@ -54,7 +54,7 @@
                </template>
            </el-table-column>
            <el-table-column prop="sort" label="排序"></el-table-column>
            <el-table-column label="操作" align="center" class-name="small-padding fixed-width" :fixed="right">
            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
                <template #default="scope">
                    <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
                               v-has="['update',route]">修改
@@ -197,9 +197,9 @@
async function getList(val) {
    loading.value = true;
    if (val) {
        val.limit = 10000
        val.limit = 100
    } else {
        val = {limit: 10000}
        val = {limit: 100}
    }
    await menu().get(val).then((res) => {
        menuList.value = proxy.handleTree(res.data.list, "id");
src/views/system/permission/index.vue
@@ -93,7 +93,7 @@
 import  permission from "@/api/system/permission";
 import  { DictType }  from "@/api/system/dict";
 import  menu from "@/api/system/menu";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/system/role/index.vue
@@ -124,7 +124,7 @@
 import  menu from "@/api/system/menu";
 import  permission from "@/api/system/permission";
 import  { useRoute } from "vue-router";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 
 const { proxy } = getCurrentInstance();
 let route = useRoute()
@@ -305,7 +305,7 @@
         menuTreeListLength.value = countTreeNodes(menuTreeList.value)
      })
      await permission().search({limit:10000}).then((res) =>{
      await permission().search({limit:100}).then((res) =>{
         permissionList.value = res.data.list
      })
   }
src/views/system/user/index.vue
@@ -134,7 +134,7 @@
    import  { PREURL } from "@/config/index";
    import  userClassify from "@/api/configuration/userClassify";
    import  { sysDictData } from "@/api/system/dict";
    import setPostParams from "../../../utils/searchParams.js";
    import setPostParams from "@/utils/searchParams.js";
    const { proxy } = getCurrentInstance();
    
    /**
@@ -306,7 +306,7 @@
    //获取用户角色列表
    const getUserRole = async() =>{
      await role().search({limit:1000,page:1}).then((res) =>{
      await role().search({limit:100,page:1}).then((res) =>{
        roleSelectList.value = res.data.list
        })
    }
src/views/waterMeter/meterOperation/index.vue
@@ -10,7 +10,7 @@
 <script setup>
 import  meterOperationApi from "@/api/waterMeterApi/meterOperation";
import  { nameReg ,phoneReg }  from "@/utils/regular";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
src/views/waterMeter/supplier/index.vue
@@ -10,7 +10,7 @@
 <script setup>
 import  supplierApi from "@/api/waterMeterApi/supplier";
import  { nameReg ,phoneReg }  from "@/utils/regular";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
src/views/waterMeter/useWaterMeter/index.vue
@@ -11,7 +11,7 @@
 import  useWaterMeterApi from "@/api/waterMeterApi/useWaterMeter";
import  { nameReg ,phoneReg }  from "@/utils/regular";
import {useRoute} from "vue-router";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
const route = useRoute()
 const { proxy } = getCurrentInstance();
 
src/views/waterMeter/verification/index.vue
@@ -10,7 +10,7 @@
 <script setup>
 import  verificationApi from "@/api/waterMeterApi/verification";
import  { nameReg ,phoneReg }  from "@/utils/regular";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
src/views/waterMeter/waterModel/index.vue
@@ -9,7 +9,7 @@
<script setup>
import waterModelApi from "@/api/waterMeterApi/waterModel";
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
const {proxy} = getCurrentInstance();
src/views/workOrderManage/meterConstruction/index.vue
@@ -5,7 +5,7 @@
import { ElMessage } from 'element-plus'
//  import  waterMeterApi from "@/api/waterMeterApi/index";
import  meterConstructionApi   from '@/api/workOrderManage/meterConstructionApi/index';
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
// import  billRecord from "@/api/financial/billRecord/index";
 const { proxy } = getCurrentInstance();
 
src/views/workOrderManage/waterMeterAlteration/index.vue
@@ -11,7 +11,7 @@
    import  TieredCharging from "@/api/configuration/waterPrice";
    import {waterMeterAlterationApi} from '@/api/workOrderManage/waterMeterAlterationApi';
    import {PREURL} from '@/config/index';
    import setPostParams from "../../../utils/searchParams.js";
    import setPostParams from "@/utils/searchParams.js";
    const { proxy } = getCurrentInstance();
    //定义table数据
    const queryParams = ref({
src/views/workOrderManage/waterMeterChange/index.vue
@@ -7,7 +7,7 @@
 import  waterMeterApi from "@/api/waterMeterApi/index";
import { waterMeterChangeApi }  from '@/api/workOrderManage/waterMeterChangeApi/index';
import   billRecord  from "@/api/financial/billRecord/index";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/workOrderManage/waterMeterCloseAccount/index.vue
@@ -7,7 +7,7 @@
 import  waterMeterApi from "@/api/waterMeterApi/index";
import { waterMeterCloseAccountApi }  from '@/api/workOrderManage/waterMeterCloseAccountApi/index';
import  billRecord from "@/api/financial/billRecord/index";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/workOrderManage/waterMeterMaintainRecords/index.vue
@@ -5,7 +5,7 @@
import { ElMessage } from 'element-plus'
//  import  waterMeterApi from "@/api/waterMeterApi/index";
import { waterMeterMaintainRecordsApi }  from '@/api/workOrderManage/waterMeterMaintainRecordsApi/index';
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
// import  billRecord from "@/api/financial/billRecord/index";
 const { proxy } = getCurrentInstance();
 
src/views/workOrderManage/waterMeterRepair/index.vue
@@ -6,7 +6,7 @@
 import  waterMeterApi from "@/api/waterMeterApi/index";
import { waterMeterRepairApi } from '@/api/workOrderManage/waterMeterRepairApi';
import { onMounted, reactive, ref } from 'vue'
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
    //定义table数据
    const queryParams = ref({
        name: undefined,
src/views/workOrderManage/waterMeterStopAccount/index.vue
@@ -6,7 +6,7 @@
 import  waterMeterApi from "@/api/waterMeterApi/index";
import { waterMeterStopAccountApi }  from '@/api/workOrderManage/waterMeterStopAccountApi/index';
import  billRecord from "@/api/financial/billRecord/index";
 import setPostParams from "../../../utils/searchParams.js";
 import setPostParams from "@/utils/searchParams.js";
 const { proxy } = getCurrentInstance();
 
/**
src/views/workOrderManage/workOrderList/index.vue
@@ -64,7 +64,7 @@
import accountApply from '@/views/workOrderManage/accountApply/index.vue'
import { waterMeterApplyApi } from '@/api/workOrderManage/waterMeterApplyApi/index'
import { ElMessage } from 'element-plus'
import setPostParams from "../../../utils/searchParams.js";
import setPostParams from "@/utils/searchParams.js";
    //定义变量内容
    const queryParams = ref({
vite.config.js
@@ -1,11 +1,3 @@
/*
 * @Author: elkers dmhe0357
 * @Date: 2024-10-02 12:49:11
 * @LastEditors: Liuyi candymxq888@outlook.com
 * @LastEditTime: 2024-11-09 09:44:02
 * @FilePath: \water-qinghe-web\vite.config.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { defineConfig, loadEnv } from 'vite'
import path from 'path'
import createVitePlugins from './vite/plugins'