Procházet zdrojové kódy

Merge branch 'baiyanting1' of http://124.70.43.205:3000/xieshengjie/jn_sis_zhfx into daping

baiyanting před 1 rokem
rodič
revize
d8890deff7
100 změnil soubory, kde provedl 7620 přidání a 86338 odebrání
  1. 1 0
      package.json
  2. 7 0
      src/App.vue
  3. 0 32
      src/api/AES.js
  4. 0 323
      src/api/api.js
  5. 0 13
      src/api/cockpit/boosterStation/index.js
  6. 8 0
      src/api/common.js
  7. 0 13
      src/api/config.js
  8. 0 54
      src/api/maintenance/expertKnowledge/index.js
  9. 1 8
      src/api/monthlyPerformanceAnalysis.js
  10. 0 58
      src/api/reportForms.js
  11. 0 511
      src/api/stateMonitor/index.js
  12. 1 1
      src/api/wisdomOverhaul/energy/index.js
  13. 929 1
      src/api/zhbj/index.js
  14. 0 61
      src/api/zmaxios.js
  15. binární
      src/assets/homePageBackground.png
  16. 1 0
      src/assets/icon/svg/bjpz.svg
  17. 1 0
      src/assets/icon/svg/djl.svg
  18. 1 0
      src/assets/icon/svg/kkxfx.svg
  19. 1 0
      src/assets/icon/svg/zhbj.svg
  20. binární
      src/assets/newHome_h.png
  21. 178 0
      src/assets/styles/common/common.css
  22. 1 10
      src/assets/styles/common/common.less
  23. 139 6
      src/assets/styles/dialog.less
  24. 3 0
      src/assets/styles/el-override/el-pagination.less
  25. 0 86
      src/assets/styles/theme/light/aqgk.less
  26. 0 181
      src/assets/styles/theme/light/jjyx.css
  27. 0 256
      src/assets/styles/theme/light/jjyx.less
  28. 0 265
      src/assets/styles/theme/light/jsc.less
  29. 0 129
      src/assets/styles/theme/light/light-jjyx.css
  30. 0 167
      src/assets/styles/theme/light/light-jjyx.less
  31. 0 422
      src/assets/styles/theme/light/light-jsc.css
  32. 0 590
      src/assets/styles/theme/light/light-jsc.less
  33. 0 196
      src/assets/styles/theme/light/light-qt.css
  34. 0 272
      src/assets/styles/theme/light/light-qt.less
  35. 0 140
      src/assets/styles/theme/light/light-sp.less
  36. 0 14
      src/assets/styles/theme/light/setting.less
  37. 0 445
      src/assets/styles/theme/light/zhjx.less
  38. 0 5931
      src/components/BoosterStation/dwk.vue
  39. 0 4945
      src/components/BoosterStation/hzj.vue
  40. 0 2845
      src/components/BoosterStation/mch.vue
  41. 0 9139
      src/components/BoosterStation/mhs.vue
  42. 0 5433
      src/components/BoosterStation/nss.vue
  43. 0 5305
      src/components/BoosterStation/pl1.vue
  44. 0 3618
      src/components/BoosterStation/pl2.vue
  45. 0 4051
      src/components/BoosterStation/qs.vue
  46. 0 2503
      src/components/BoosterStation/sbdl.vue
  47. 0 4404
      src/components/BoosterStation/sbq.vue
  48. 0 12164
      src/components/BoosterStation/xh.vue
  49. 0 10412
      src/components/BoosterStation/xs.vue
  50. 122 95
      src/components/alarm-badge/index.vue
  51. 0 679
      src/components/arcgis/DWK_GDC.vue
  52. 0 660
      src/components/arcgis/HZJ_GDC.vue
  53. 0 662
      src/components/arcgis/MCH_GDC.vue
  54. 0 502
      src/components/arcgis/MHS_FDC.vue
  55. 0 502
      src/components/arcgis/NSS_FDC.vue
  56. 0 678
      src/components/arcgis/PL_GDC.vue
  57. 0 502
      src/components/arcgis/QS_FDC.vue
  58. 0 502
      src/components/arcgis/SBQ_FDC.vue
  59. 0 659
      src/components/arcgis/XH_GDC.vue
  60. 0 502
      src/components/arcgis/XS_FDC.vue
  61. 0 516
      src/components/arcgis/arcgis.vue
  62. 19 19
      src/components/coms/table/table-qc.vue
  63. 0 564
      src/components/dialog/gfIndex.vue
  64. 0 637
      src/components/dialog/gfzcIndex.vue
  65. 0 253
      src/components/dialog/index.vue
  66. 0 129
      src/components/menuNav/index.vue
  67. 0 181
      src/components/sbsAlarm/index.vue
  68. 0 176
      src/components/three/wave.vue
  69. 0 208
      src/components/utils/boxSelect.vue
  70. 0 0
      src/components/utils/svg-loader.vue
  71. 2 1
      src/components/windDetail/index.vue
  72. 428 227
      src/router/index.js
  73. 78 14
      src/store/index.js
  74. 0 411
      src/utills/BackgroundData.js
  75. 0 2032
      src/utills/BoosterStation.js
  76. 3 4
      src/views/HealthControl/HealthTab3.vue
  77. 7 7
      src/views/HealthControl/HealthTab4.vue
  78. 3 1
      src/views/HealthControl/assess/assessconfig.vue
  79. 1 1
      src/views/HealthControl/energyEfficAnalyse/evaluationAnalysis/index.vue
  80. 1 2
      src/views/HealthControl/energyEfficAnalyse/malfunctionAnalysis/index.vue
  81. 1 1
      src/views/HealthControl/energyEfficAnalyse/powerAnalysis/index.vue
  82. 1 1
      src/views/HealthControl/healthManagement/wtSaturability/tab1.vue
  83. 1 1
      src/views/HealthControl/healthManagement/wtSaturability/tab2.vue
  84. 1 1
      src/views/HealthControl/healthManagement/wtSaturability/tab3.vue
  85. 1 1
      src/views/Home/components/map.vue
  86. 3 3
      src/views/Home/index.vue
  87. 842 0
      src/views/IntegratedAlarm/alarmConfig/components/custom_components.vue
  88. 482 0
      src/views/IntegratedAlarm/alarmConfig/components/windturbine_components.vue
  89. 577 0
      src/views/IntegratedAlarm/alarmConfig/customConfig/index.vue
  90. 638 0
      src/views/IntegratedAlarm/alarmConfig/historyConfig/index.vue
  91. 11 0
      src/views/IntegratedAlarm/alarmConfig/index.vue
  92. 241 0
      src/views/IntegratedAlarm/alarmConfig/logs/index.vue
  93. 391 0
      src/views/IntegratedAlarm/deviceConfig/components/custom.vue
  94. 754 0
      src/views/IntegratedAlarm/deviceConfig/components/custom_components.vue
  95. 345 0
      src/views/IntegratedAlarm/deviceConfig/components/faultmode.vue
  96. 77 0
      src/views/IntegratedAlarm/deviceConfig/components/message.vue
  97. 472 0
      src/views/IntegratedAlarm/deviceConfig/components/point.vue
  98. 390 0
      src/views/IntegratedAlarm/deviceConfig/components/windturbine.vue
  99. 456 0
      src/views/IntegratedAlarm/deviceConfig/components/windturbine_components.vue
  100. 0 0
      src/views/IntegratedAlarm/deviceConfig/components/ycpoint.vue

+ 1 - 0
package.json

@@ -35,6 +35,7 @@
     "jquery": "^3.6.0",
     "js-cookie": "^3.0.5",
     "jsencrypt": "^3.3.2",
+    "json-bigint": "^1.0.0",
     "jspdf": "^2.3.1",
     "jszip": "^3.7.1",
     "jszip-utils": "^0.1.0",

+ 7 - 0
src/App.vue

@@ -99,6 +99,7 @@ import Header from "@/views/layout/Header.vue";
 import LoginPage from "./views/layout/login-page.vue";
 import { GetBoosterlist } from "@/api/factoryMonitor/index.js";
 import { getApiWeatherstation } from "@/api/monthlyPerformanceAnalysis";
+import { getAllStation } from "@/api/common.js";
 import SvgIcon from "@com/coms/icon/svg-icon.vue";
 import { GetDeviceTableData } from "@/api/zhbj/index.js";
 import dayjs from "dayjs";
@@ -204,6 +205,11 @@ export default {
       const { data: datas } = await getApiWeatherstation();
       this.$store.commit("changeCft", datas.data);
     },
+    // 获取全部场站(不分风电光伏)
+    async getAllStation() {
+      const { data: datas } = await getAllStation();
+      this.$store.commit("changeStationAll", datas);
+    },
     login() {
       this.$store.commit("user/SET_LOGINSTATE", true);
     },
@@ -224,6 +230,7 @@ export default {
         if (res) {
           this.getBooster();
           this.getCftlist();
+          this.getAllStation();
         }
       },
       immediate: true,

+ 0 - 32
src/api/AES.js

@@ -1,32 +0,0 @@
-import CryptoJS from 'crypto-js';
-/**
- * CryptoJS加密
- */
-export function localEncrypt(word, keyStr) {
-  keyStr = keyStr ? keyStr : "BTRH201911PERMIS";
-  let key = CryptoJS.enc.Utf8.parse(keyStr);
-  let srcs = CryptoJS.enc.Utf8.parse(word);
-  let encrypted = CryptoJS.AES.encrypt(srcs, key, {
-    mode: CryptoJS.mode.ECB,
-    padding: CryptoJS.pad.Pkcs7
-  });
-  return encrypted.toString();
-}
-
-/**
- * CryptoJS解密
- */
-export function localDecrypt(word, keyStr) {
-  keyStr = keyStr ? keyStr : "BTRH201911PERMIS";
-  var key = CryptoJS.enc.Utf8.parse(keyStr);
-  var decrypt = CryptoJS.AES.decrypt(word, key, {
-    mode: CryptoJS.mode.ECB,
-    padding: CryptoJS.pad.Pkcs7
-  });
-  return CryptoJS.enc.Utf8.stringify(decrypt).toString();
-}
-
-export default {
-  localEncrypt,
-  localDecrypt
-}

+ 0 - 323
src/api/api.js

@@ -1,323 +0,0 @@
-import request from './zmaxios.js'
-
-
-//获取服务端公钥
-export const getPublickey = query => {
-        return request.get(`info/publickey`);
-    }
-    // login
-export const loginRequest = params => {
-    return request.post("user/login", params);
-};
-//register
-export const registerRequest = params => {
-    return request.post("user/registers", params);
-};
-// ----------------------------------------user------------------------------------------------
-export const getUserList = () => {
-    return request.get(`user/getall`);
-}
-export const editRequest = params => {
-    return request.post("user/edituser", params);
-};
-export const deleteUser = data => {
-        return request.delete(`user/${data}`);
-    }
-    // ----------------------------------------user------------------------------------------------
-
-
-//获取所有风场
-export const fetchStationList = () => {
-    return request({
-        url: '' + 'info/station',
-        method: 'get'
-    });
-};
-//根据风场id获取所有风机
-export const fetchWindturbineList = query => {
-    return request({
-        url: '' + 'info/windturbine',
-        method: 'get',
-        params: {
-            stationId: query
-        }
-    });
-};
-// ----------------------------------------安全生产- 报警记录------------------------------------------------
-//查询历史报警
-export const alarm_history = (params) => {
-        return request({
-            url: `alarm/history/page2`,
-            params: params
-        });
-    }
-    //查报警
-export const alarm_snap = (params) => {
-        return request({
-            url: `alarm/snap`,
-            params: params
-        });
-    }
-    // ----------------------------------------安全生产- 实时报警------------------------------------------------
-    //实时故障 最高级
-export const alarm_fault_recent = (params) => {
-        return request({
-            url: `fault/recent`,
-            params: params
-        });
-    }
-    //实时故障 第一次请求
-export const alarm_fault_top = (params) => {
-        return request({
-            url: `fault/snap/top`,
-            params: params
-        });
-    }
-    //底下的实时报警 
-export const alarm_snap_top = (params) => {
-        return request({
-            url: `alarm/snap/top`,
-            params: params
-        });
-    }
-    // ----------------------------------------基础数据- 设备管理------------------------------------------------
-    //查询全部设备型号接口
-export const device_list = () => {
-        return request.get(`device/model/list`);
-    }
-    //获取结构tree
-export function tree(params) {
-    return request({
-        url: 'device/structure/tree/windturbine',
-        method: 'get',
-    });
-}
-//根据结构获取测点
-export function point(code, pagenum, pagesize) {
-    return request.get(`device/metrics/page?pagenum=${pagenum}&pagesize=${pagesize}&deviceId=windturbine&structureCode=${code}`);
-}
-//测点新增
-export function metrics(params) {
-    return request.post(`device/metrics/single`, params);
-}
-//测点删除
-export function delmetrics(params) {
-    return request.delete(`device/metrics/single/delete/${params}`);
-}
-
-//tree新增 添加一个设备结构节点
-export function treeAdd(params) {
-    return request.post(`device/structure`, params);
-}
-//tree删除 tree删除一个设备结构节点
-export function treeDel(params) {
-    return request.delete(`device/structure/delete/${params}`);
-}
-
-
-// 故障模式
-// get All
-export const faultmode_windturbine = () => {
-        return request.get(`device/faultmode/windturbine`);
-    }
-    // 根据 structurecode get
-export const faultmode_structurecode = params => {
-        return request.get(`device/faultmode/windturbine/${params}`);
-    }
-    // 根据 id delete
-export const faultmode_delete = params => {
-    return request.delete(`device/faultmode/delete/${params}`);
-}
-
-// 新增 修改
-export const faultmode_add_edit = data => {
-    return request.post(`device/faultmode`, data);
-}
-
-// ----------------------------------------end 基础数据- 风机管理------------------------------------------------
-
-
-// ---------------------------------------- 报警配置- 自定义预警------------------------------------------------
-export function custombj_fetchTableData(params) {
-    return request.get(`alertrule2/page/`, {
-        params: params
-    });
-}
-
-//根据场站编号,风机型号获取AI测点
-export const fetchAIPointList = (stationId, modelId) => {
-    return request({
-        url: '' + 'info/testing_point_ai',
-        method: 'get',
-        params: {
-            stationId: stationId,
-            modelId: modelId
-        }
-    });
-};
-//根据场站编号,风机型号获取DI测点
-export const fetchDIPointList = (stationId, modelId) => {
-    return request({
-        url: '' + 'info/testing_point_di',
-        method: 'get',
-        params: {
-            stationId: stationId,
-            modelId: modelId
-        }
-    });
-};
-//根据场站编号,获取电气DI测点
-export const fetchElectricDIPointList = (stationId) => {
-    return request({
-        url: '' + 'info/electrical_point_di',
-        method: 'get',
-        params: {
-            stationId: stationId
-        }
-    });
-};
-//根据电气测点,获取测点信息
-export const fetchElectricDIPointByPointId = (pointId) => {
-    return request({
-        url: '' + 'info/electrical_point_di/byId',
-        method: 'get',
-        params: {
-            pointId: pointId
-        }
-    });
-};
-
-//获取风机关联部件列表
-export const fetchRelatePart = () => {
-    return request({
-        url: '' + 'info/windturbine_parts',
-        method: 'get',
-    });
-};
-//根据风场编号获取电气AI测点
-export const fetch_electrical_point_ai = (stationId) => {
-    return request({
-        url: '' + 'info/electrical_point_ai',
-        method: 'get',
-        params: {
-            stationId: stationId
-        }
-    });
-};
-//根据风场编号获取电气DI测点
-export const fetch_electrical_point_di = (stationId) => {
-    return request({
-        url: '' + 'info/electrical_point_di',
-        method: 'get',
-        params: {
-            stationId: stationId
-        }
-    });
-};
-//获取报警类型
-export const fetchWarningType = () => {
-    return request({
-        url: '' + 'info/warning_type',
-        method: 'get',
-    });
-};
-//获取报警种类
-export const fetchWarningClassify = () => {
-    return request({
-        url: '' + 'info/warning_classify',
-        method: 'get',
-    });
-};
-export const custombj_batchImport = list => {
-    return Axrequestios.post('' + "alertrule2/save-batch", list);
-};
-export const custombj_postSave = form => {
-    return request.post('' + "alertrule2/save", form)
-};
-
-//******************************end****************************************//
-
-
-//******************************升压站报警API************************************//
-
-export const scadabj_fetchTableData = query => {
-    return request({
-        url: '' + 'scadabj/page',
-        method: 'get',
-        params: query,
-        timeout: 20000,
-    });
-};
-export const scadabj_postSave = objData => {
-    return request.post('' + "scadabj/save", objData);
-};
-export const scadabj_batchImport = list => {
-    return request.post('' + "scadabj/save-batch", list);
-};
-//********************************************end********************************//\
-
-
-
-//******************************风机报警API************************************//
-export const windturbinebj_fetchTableData = query => {
-    return request({
-        url: '' + 'warning2/page',
-        method: 'get',
-        params: query,
-        timeout: 20000,
-    });
-};
-export const windturbinebj_postSave = form => {
-    return Axios.post('' + 'warning2/save', form);
-};
-export const windturbinebj_batchImport = list => {
-    return Axios.post('' + "warning2/save-batch", list);
-};
-
-export const fetchLeaf = () => {
-    return request({
-        url: '' + 'warning2/page',
-        method: 'get',
-        params: {
-            pagenum: 1,
-            pagesize: 10000,
-            isLeaf: 0,
-        }
-    });
-};
-
-
-//根据风机型号获取DI测点统一编码相关数据 testingpointdi2
-export const getDIPointByModelId = query => {
-    return request({
-        url: '' + 'info/testing_point_di',
-        method: 'get',
-        params: query
-    });
-};
-
-//******************************end*******************************************// 
-//******************************预警统计*******************************************//
-export const statistics_querymap = params => {
-    return request.get(`alarm/count/querymap2`, { params: params })
-        // return request.get(`alarm/count/querymap?stationid=XS_FDC&datebegin=2021-10-12&dateend=2021-11-13`)
-};
-export const statistics_querybyname = params => {
-    return request.get('alarm/count/querybyname2', { params: params })
-};
-export const statistics_lineandproject = params => {
-    return request.get('alarm/count/lineandproject2', { params: params })
-};
-//******************************end*******************************************//
-
-//******************************预警分析*******************************************//
-export const warning_query_new = params => {
-    return request.get(`alarm/count/query/new2`, { params: params })
-};
-export const warning_detail = params => {
-    return request.get('analysis/detail', { params: params })
-};
-// export const statistics_lineandproject = params => {
-//     return request.get('alarm/count/lineandproject', { params: params })
-// };
-//******************************end*******************************************//

+ 0 - 13
src/api/cockpit/boosterStation/index.js

@@ -1,13 +0,0 @@
-import request from "../../../tools/request";
-//数据刷新
-const refreshData = (keys) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/latest?keys=${keys}`,
-        method: "get",
-    });
-};
-
-export default {
-    refreshData,
-}

+ 8 - 0
src/api/common.js

@@ -44,3 +44,11 @@ export function logout(data) {
     data,
   });
 }
+//查询所有场站
+export function getAllStation() {
+  return request({
+    baseURL: process.env.VUE_APP_API,
+    url: `/electricity/czlist`,
+    method: "GET",
+  });
+}

+ 0 - 13
src/api/config.js

@@ -1,13 +0,0 @@
-/**
- * 
- * */
-
-//测试 - 国电
-export default {
-  webSoketUrl: 'ws://10.155.32.4:8082/gyee-websocket', // webSoket
-}
-
-//生产 - 国电
-// export default {
-//   webSoketUrl: '192.168.4.203:9008', // webSoket
-// }

+ 0 - 54
src/api/maintenance/expertKnowledge/index.js

@@ -1,54 +0,0 @@
-import request from "../../../tools/request";
-
-const faultKnowledge = (data) => {
-    return request({
-        url: `/consumer/knowledge/faultKnowledge?gzjb=${data.gzjb}&tjlx=${data.tjlx}&cxnr=${data.cxnr}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
-        method: "get",
-    });
-};
-const safeMeasureKnowledge = (data) => {
-    return request({
-        url: `/consumer/knowledge/safeMeasureKnowledge?safecontent=${data.name}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
-        method: "get",
-    });
-};
-const workGuideKnowledge = (data) => {
-    return request({
-        url: `/consumer/knowledge/workGuideKnowledge?content=${data.name}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
-        method: "get",
-    });
-};
-const featureParameter = (data) => {
-    return request({
-        url: `/consumer/knowledge/featureParameter?name=${data.name}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
-        method: "get",
-    });
-};
-const checkRepairProgramme = (data) => {
-    return request({
-        url: `/consumer/knowledge/checkRepairProgramme?model=${data.model}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
-        method: "get",
-    });
-};
-const earlyKnowledge = (data) => {
-    return request({
-        url: `/consumer/knowledge/earlyKnowledge?gzjb=${data.gzjb}&bjlx=${data.bjlx}&cxnr=${data.cxnr}&pageNum=${data.pageNum}&pageSize=${data.pageSize}`,
-        method: "get",
-    });
-};
-const modelList = (data) => {
-    return request({
-        url: `/consumer/knowledge/modelList`,
-        method: "get",
-    });
-};
-
-export default {
-    faultKnowledge,
-    safeMeasureKnowledge,
-    workGuideKnowledge,
-    featureParameter,
-    checkRepairProgramme,
-    earlyKnowledge,
-    modelList,
-}

+ 1 - 8
src/api/monthlyPerformanceAnalysis.js

@@ -370,14 +370,7 @@ export function getOwnDemand(params) {
     method: "GET",
   });
 }
-//查询逆变器电量分析
-export function getAllStation(params) {
-  return request({
-    baseURL: process.env.VUE_APP_API,
-    url: `/electricity/czlist`,
-    method: "GET",
-  });
-}
+
 //查询逆变器PR分析
 export function getPrAnalysis(params) {
   return request({

+ 0 - 58
src/api/reportForms.js

@@ -1,58 +0,0 @@
-import request from "@/tools/request";
-
-// 新能源日报
-export function getNemDailyReportData(data) {
-  return request({
-    url:
-      process.env.VUE_APP_API + `/reports/GetNemDailyReportData?date=${data}`,
-    method: "get",
-  });
-}
-
-// 新能源月报
-export function getNemMonthReportData(data) {
-  return request({
-    url:
-      process.env.VUE_APP_API +
-      `/reports/GetNemMonthReportData?date=${data.date}&stationId=${data.stationId}`,
-    method: "get",
-  });
-}
-
-// 获取公司列表
-export function getApicompanyslist(data) {
-  return request({
-    url: process.env.VUE_APP_API + `/assets/GetCompanyList?type=${data.type}`,
-    method: "get",
-  });
-}
-
-// 获取场站列表
-export function getApiwpByCplistlist(data) {
-  return request({
-    url:
-      process.env.VUE_APP_API +
-      `/assets/GetPowerStation?companyCode=${data.companyCode}&stationType=${data.stationType}`,
-    method: "get",
-  });
-}
-
-// 各风场生产月报
-export function getPowerStationMonthReportData(data) {
-  return request({
-    url:
-      process.env.VUE_APP_API +
-      `/reports/GetPowerStationMonthReportData?date=${data.date}&stationId=${data.stationId}`,
-    method: "get",
-  });
-}
-
-// 各风场生产月报
-export function getEquipmentReportData(data) {
-  return request({
-    url:
-      process.env.VUE_APP_API +
-      `/reports/GetEquipmentReportData?date=${data.date}&stationId=${data.stationId}`,
-    method: "get",
-  });
-}

+ 0 - 511
src/api/stateMonitor/index.js

@@ -1,511 +0,0 @@
-import request from "@/tools/request";
-//全部风机
-const getWindturbine = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/all`,
-        method: "get",
-    });
-};
-// 获取所有升压站tab数据
-const getAllStationTab = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/boost_station/stations`,
-        method: "get",
-    });
-}
-// 获取svg触发器
-const getAllStationSvgInfo = (params) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/boost_station/svginfo?id=${params.id}`,
-        method: "get",
-    });
-}
-// 获取升压站svg图片数据
-const getSvgData = (params) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/boost_station/svg?id=${params.id}`,
-        method: "get",
-    });
-}
-// 获取矩阵页面光伏二级页左侧栏数据
-const getStationInfoData = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/pv_info`,
-        method: "get",
-    });
-}
-// 获取矩阵页面光伏二级页整体数据
-const getAllPvStationData = (params) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/latest?thingType=windturbine&thingId=${params.id}&uniformCodes=${params.codes}`,
-        method: "get",
-    });
-}
-// 获取矩阵页面光伏二级页echarts数据
-const getAllPvHistoryData = (params) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/history/snap?thingType=windturbine&thingId=${params.id}&uniformCode=${params.code}&startTs=${params.startTime}&endTs=${params.endTime}&interval=${params.interval}`,
-        method: "get",
-    });
-}
-
-// 标题栏数据
-const stationOverview = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/overview`,
-        method: "get",
-    });
-};
-//获取报警数据
-const alarmFault = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/alarm/fault`,
-        method: "get",
-    });
-};
-//获取推荐风机信息
-const recommendation = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/recommendation`,
-        method: "get",
-    });
-};
-//登陆
-const login = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/user/login`,
-        method: "post",
-        data: data,
-    });
-};
-//获取场站
-const getStation = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/info`,
-        method: "get",
-    });
-};
-//获取AGC场站
-const getAGCStation = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/agc`,
-        method: "get",
-    });
-};
-//刷新报警信息
-const getSnap = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_SHARDINGURL,
-        url: `/alarm/snap/page?pagenum=${data.pagenum}&pagesize=${data.pagesize}&category1=${data.category1}&isopened=${data.isopened}&starttime=${data.starttime}&endtime=${data.endtime}&windturbineId=${data.windturbineId ? data.windturbineId : ''}`,
-        method: "get",
-    });
-};
-//数据刷新
-const refreshData = (keys) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/latest?keys=${keys}`,
-        method: "get",
-    });
-};
-//风机控制
-const windturbControl = (pairs) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/control/`,
-        method: "post",
-        data: pairs
-    });
-};
-//风机控制
-const windturbControlLock = (pairs) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/control/lock`,
-        method: "post",
-        data: pairs
-    });
-};
-//获取风机详情页面数据
-const nitWinturbineBaseData = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/latest?thingType=${data.thingType}&thingId=${data.thingId}&uniformCodes=${data.uniformCodes}`,
-        method: "get",
-    });
-};
-const getOverview = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/overview`,
-        method: "get",
-    });
-};
-const sendWarning = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/alarm/confirm?snapID=${data.snapID}&faultID=${data.faultID}&userName=${data.userName}`,
-        method: "get",
-    });
-};
-const sendRecommend = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `api/voice-control/addvoicetask`,
-        method: "post",
-        data: data
-    });
-};
-const getPower = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/history/snap?tagName=${data.tagName}&startTs=${data.startTs}&endTs=${data.endTs}&interval=${data.interval}`,
-        method: "get",
-    });
-};
-const getOriginalPower = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/history/raw?tagName=${data.tagName}&startTs=${data.startTs}&endTs=${data.endTs}`,
-        method: "get",
-    });
-};
-const getWindturbinePower = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/history/snap?thingId=${data.thingId}&uniformCode=${data.uniformCode}&startTs=${data.startTs}&endTs=${data.endTs}&thingType=${data.thingType}&interval=${data.interval}`,
-        method: "get",
-    });
-};
-const getOriginalWindturbinePower = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/history/raw?thingId=${data.thingId}&uniformCode=${data.uniformCode}&startTs=${data.startTs}&endTs=${data.endTs}&thingType=${data.thingType}`,
-        method: "get",
-    });
-};
-const getWindWarning = (data, pageIndex, pageSize) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/alarm/real-time-alarm?objectId=${data}&pageIndex=${pageIndex}&pageSize=${pageSize}`,
-        method: "get"
-    });
-};
-const getHealthDate = (stid, wtid) => {
-    return request({
-        baseURL: process.env.VUE_APP_WARNING,
-        url: `/alarm/statistic?stId=${stid}&wtId=${wtid}`,
-        method: "get"
-    })
-}
-const getDetial = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/${data}`,
-        method: "get"
-    })
-}
-const getWarning = (data, wtid, pt) => {
-    return request({
-        baseURL: process.env.VUE_APP_WARNING,
-        url: `/alarm/list?stId=${data}&wtId=${wtid}&widget=${pt}`,
-        method: "get"
-    })
-}
-const getCustomerLock = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/customer-lock`,
-        method: "get"
-    })
-}
-const controlRecord = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/control-record/search?stationId=${data.stationId}&userName=${data.userName}&windturbineId=${data.windturbineId}&startTime=${data.startTime}&endTime=${data.endTime}&pageSize=${data.pageSize}&pageIndex=${data.pageIndex}`,
-        method: "get",
-    });
-};
-const getLatest = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_ADAPTERURL,
-        url: `/ts/latest?keys=${data}`,
-        method: "get",
-    });
-};
-//获取智能模式下场站
-const getControlType = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/status`,
-        method: "get",
-    });
-};
-const uodateControlType = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/status/update?stationid=${data.stationid}&type=${data.type}&userName=${data.userName}`,
-        method: "get",
-    });
-};
-//获取UniformCodes数据
-const getUniformCodes = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/uniform-code`,
-        method: "get",
-    });
-};
-const getBoostStation = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/boost-station`,
-        method: "get",
-    });
-};
-//获取风机code名称
-const getWindturbineFdc = () => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/fdc`,
-        method: "get",
-    });
-};
-const getWindturbineWarning = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_SHARDINGURL,
-        url: `/alarm/history/page?pagenum=${data.pagenum}&pagesize=${data.pagesize}&windturbineid=${data.windturbineid ? data.windturbineid : ''}&starttime=${data.starttime}&endtime=${data.endtime}&keyword=${data.keyword ? data.keyword : ''}&stationid=${data.stationid ? data.stationid : ''}&category1=${data.category1 ? data.category1 : ''}`,
-        method: "get",
-    });
-};
-//获取报警历史数据
-const getFaultHistory = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_SHARDINGURL,
-        url: `/fault/history/listpage?pagenum=${data.pageIndex}&pagesize=${data.pageSize}&stationid=${data.stationid}&keyword=${data.keyword}&starttime=${data.startTime}&endtime=${data.endTime}`,
-        method: "get",
-    });
-};
-
-const stationCompared = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/compared?models=${data}`,
-        method: "get",
-    });
-};
-//温度矩阵
-const temperatureInfo = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/temperature-info?id=${data.id}&status=${data.status}&pagenum=${data.pagenum}&pagesize=${data.pagesize}`,
-        method: "get",
-    });
-};
-//获取风机故障
-const alarmSnap = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/alarm/alarm-snap?windturbineId=${data.windturbineId}`,
-        method: "get",
-    });
-};
-
-//预警分析
-const analysisDetail = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_WARNING,
-        url: `/analysis/detail?station=${data.station}&startTs=${data.startTs}&endTs=${data.endTs}&interval=${data.interval}&wtId=${data.wtId}&name=${data.name}`,
-        method: "get",
-    });
-};
-//预警分析
-const alarmCountQuery = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_WARNING,
-        url: `/alarm/count/query/new2?stationid=${data.stationid}&startdate=${data.startdate}&enddate=${data.enddate}`,
-        method: "get",
-    });
-};
-//获取风场机型
-const getStationModels = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/station/models?stationid=${data.stationid}`,
-        method: "get",
-    });
-};
-//获取设置查询
-const getSettings = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/settings/recommendation?stationId=${data.stationId}&modelId=${data.modelId}`,
-        method: "get",
-    });
-};
-//修改设置
-const updateSettings = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/settings/recommendation`,
-        method: "post",
-        data: data
-    });
-};
-//状态时间查询
-const statusTime = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/status-time?stationId=${data.stationid}&startTs=${data.startTs}&endTs=${data.endTs}`,
-        method: "get",
-    });
-};
-
-//推荐记录查询
-const recommended = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `control-record/recommended?pagesize=${data.pagesize}&pagenum=${data.pagenum}&stationid=${data.stationid}&windturbineid=${data.windturbineid}`,
-        method: "get",
-    });
-};
-
-//状态变化查询
-const statusChange = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/windturbine/status?startTs=${data.startTs}&endTs=${data.endTs}&pagesize=${data.pagesize}&pagenum=${data.pagenum}&windturbineId=${data.windturbineid}`,
-        method: "get",
-    });
-};
-
-//恢复默认设置
-const returnSetting = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/settings/recommendation/recover?stationId=${data.stationId}&modelId=${data.modelId}`,
-        method: "get",
-    });
-};
-
-//获取报警列表
-const warningSetting = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/settings/alarminfos?stationId=${data.stationId}&modelId=${data.modelId}`,
-        method: "get"
-    })
-}
-
-//获取预警列表
-const costumeSetting = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/api/settings/costume-alarminfos?stationId=${data.stationId}&modelId=${data.modelId}`,
-        method: "get"
-    })
-}
-
-//刷新报警信息
-const getAlarmSnap = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_SHARDINGURL,
-        url: `/alarm/snap?stationid=${data.stationid}&category1=${data.category1}&windturbineid=${data.windturbineid}&isopened=${data.isopened}`,
-        method: "get",
-    });
-};
-
-const getEvaluationData = (id) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/control-record/evaluation?id=${id || ""}`,
-        method: "get",
-    });
-};
-
-const getControlStatistics = (startTs, endTs, stationId) => {
-    return request({
-        baseURL: process.env.VUE_APP_API,
-        url: `/control-record/control-statistics?startTs=${startTs}&endTs=${endTs}&stationId=${stationId}`,
-        method: "get",
-    });
-}
-const getnb = (data) => {
-    return request({
-        baseURL: process.env.VUE_APP_APT,
-        url: `/api/windturbine/temperature-export?windturbineIds=${data.windturbineIds}&startTs=${data.startTs}&endTs=${data.endTs}`,
-        method: "get",
-    });
-}
-export default {
-    login,
-    getStation,
-    getAGCStation,
-    getSnap,
-    refreshData,
-    windturbControl,
-    windturbControlLock,
-    nitWinturbineBaseData,
-    getOverview,
-    sendWarning,
-    sendRecommend,
-    getPower,
-    getOriginalPower,
-    getWindWarning,
-    getHealthDate,
-    getDetial,
-    getWarning,
-    getCustomerLock,
-    getWindturbinePower,
-    getOriginalWindturbinePower,
-    controlRecord,
-    getLatest,
-    getControlType,
-    uodateControlType,
-    getUniformCodes,
-    getBoostStation,
-    getWindturbineFdc,
-    getWindturbineWarning,
-    getFaultHistory,
-    stationCompared,
-    temperatureInfo,
-    alarmSnap,
-    analysisDetail,
-    alarmCountQuery,
-    statusTime,
-    getWindturbine,
-    getSvgData,
-    getStationInfoData,
-    getAllPvStationData,
-    getAllPvHistoryData,
-    getAllStationTab,
-    getAllStationSvgInfo,
-    stationOverview,
-    alarmFault,
-    recommendation,
-    getStationModels,
-    getSettings,
-    updateSettings,
-    warningSetting,
-    costumeSetting,
-    recommended,
-    statusChange,
-    returnSetting,
-    getAlarmSnap,
-    getEvaluationData,
-    getControlStatistics,
-    getnb
-};

+ 1 - 1
src/api/wisdomOverhaul/energy/index.js

@@ -1,4 +1,4 @@
-import request from "../../../tools/request";
+import request from "@/tools/request";
 
 
 const yawGetPassRate = (data) => {

+ 929 - 1
src/api/zhbj/index.js

@@ -1,5 +1,5 @@
 import request from "@/tools/request";
-
+import JSONBIG from "json-bigint";
 //获取设备报警列表数据
 export function GetDeviceTableData(data, timeout = 5000) {
   return request({
@@ -52,3 +52,931 @@ export const confirmAlart = (data) => {
     timeout: 60000,
   });
 };
+
+
+
+
+// 获取场站数据
+export function fetchStationListAll() {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `alertrule/querywpllist`,
+    method: "get",
+  });
+}
+
+//获取部件及预警类型列表
+export function fetchRelatePartAndAlarmType() {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alertrule/queryalarmtypellist",
+    method: "get",
+  });
+}
+//获取型号列表
+export const fetchModel = () => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alertrule/querywpbyymodellist",
+    method: "get",
+  });
+};
+//获取升压站列表
+export const fetchBooststation = () => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alertrule/querysubllist",
+    method: "get",
+  });
+};
+//查询自定义预警列表
+export function custombj_fetchTableData(params) {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alertrule/page",
+    method: "get",
+    params,
+  });
+}
+
+//根据场站编号,风机型号获取AI/DI测点
+export const fetchPointList = (wpId = "", modelId = "") => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `alertrule/querywtpointlist?wpId=${wpId}&modelId=${modelId}`,
+    method: "get",
+  });
+};
+//根据升压站编号获取AI/DI测点
+export const fetchPointListByBootst = (subId = "") => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `alertrule/querysubpointllist?subId=${subId}`,
+    method: "get",
+  });
+};
+//新增/修改自定义预警
+export const custombj_postSave = (form) => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alertrule/save",
+    method: "post",
+    data: form,
+  });
+};
+//自定义预警模板下载
+export const custombj_importTemplate = () => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alertrule/get-import-template",
+    method: "get",
+    responseType: "blob",
+  });
+};
+
+//根据风场id获取所有风机
+export const fetchWindturbineList = (wpId = "") => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `alertrule/querywtlist?wpId=${wpId}`,
+    method: "get",
+  });
+};
+
+//根据structcode获取AI.DI测点
+export const fetchAIDIPointList = (
+  deviceId,
+  structcode,
+  stationId,
+  windturbineId,
+  pageNum,
+  pageSize
+) => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "info/point",
+    method: "get",
+    params: {
+      deviceId,
+      structcode,
+      stationId,
+      windturbineId,
+      pageNum,
+      pageSize,
+    },
+  });
+};
+
+//字典维护列表
+export const get_datadictionary = (pageNum, pageSize, name, category) => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+    url: `datadictionary/page?pageNum=${pageNum}&pageSize=${pageSize}&name=${name}&category=${category}`,
+  });
+};
+//字典维护 新增 修改
+export const post_saveorupdate = (data) => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "post",
+    url: `datadictionary/save`,
+    data,
+  });
+};
+
+//实时报警列表
+export const alarm_snap_top = (params) => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+    url: `alarm/history/findAlarmByTypelist`,
+    params: params,
+  });
+};
+//数据查询实时数据
+export const getAdapterLatest = (stationId, AIlist, stationType) => {
+  return request({
+    url: `ts/latest?uniformCodes=${AIlist}&thingId=${stationId}&thingType=windturbine`,
+    baseURL: `http://10.81.3.162:801${/FDC/.test(stationType) ? "1" : "2"}/`,
+    showLoading: {
+      statu: false,
+    },
+    timeout: 10000,
+    transformResponse: [
+      function (data) {
+        const json = JSONBIG({
+          storeAsString: true,
+        });
+        const res = json.parse(data);
+        return res;
+      },
+    ],
+  });
+};
+//数据查询 历史数据
+export const getAdapterHistory = (
+  stationId,
+  AIpoint,
+  startTs,
+  endTs,
+  cureentBaseUrl
+) => {
+  return request({
+    url: `ts/history/raw?uniformCode=${AIpoint}&thingId=${stationId}&thingType=windturbine&startTs=${startTs}&endTs=${endTs}`,
+    baseURL: cureentBaseUrl,
+  });
+};
+//数据查询 数据快照
+export const getAdapterHistorysnap = (
+  stationId,
+  AIpoint,
+  startTs,
+  endTs,
+  interval,
+  cureentBaseUrl
+) => {
+  return request({
+    url: `ts/history/snap?uniformCode=${AIpoint}&thingId=${stationId}&thingType=windturbine&startTs=${startTs}&endTs=${endTs}&interval=${interval}`,
+    baseURL: cureentBaseUrl,
+  });
+};
+
+
+
+// 风机原始数据统计
+// 列表接口
+export const getAlarmCountList = (params) => {
+  return request({
+    url: `alarm/history/findWtFeatureStat?timeType=${params.timeType}&begin=${params.begin}&end=${params.end}&stationid=${params.stationid}&components=${params.components}&modelId=${params.modelId}&alarmIds=${params.alarmIds}&alarmType=${params.alarmType}`,
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+  });
+};
+// 获取报警描述列表
+export const GetAlarmId = (params) => {
+  return request({
+    url: `alarmconfiguration/querywtalarmdesclist?components=${params.components}&modelId=${params.modelId}&wpId=${params.wpId}`,
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+  });
+};
+// 获取预警描述列表
+export const GetAlarmIdCustom = (params) => {
+  return request({
+    url: `alertrule/querywtalarmdesclist?components=${params.components}&modelId=${params.modelId}&wpId=${params.wpId}`,
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+  });
+};
+//报警修改日志
+export const fetchruleventLogs = (pagenum, pagesize, ruleName, ruleType) => {
+  return request({
+    url: "ruleupdate/page",
+    method: "get",
+    baseURL: process.env.VUE_APP_ALARM,
+    params: {
+      pagenum,
+      pagesize,
+      ruleName,
+      ruleType,
+    },
+  });
+};
+//风机报警列表
+export const windturbinebj_fetchTableData = (query) => {
+
+  return request({
+    url: "alarmconfiguration/page",
+    method: "get",
+    baseURL: process.env.VUE_APP_ALARM,
+    params: query,
+  });
+};
+//获取服务端公钥
+export const getPublickey = (query) => {
+  return request({
+    url: "info/publickey",
+  });
+};
+// login
+export const loginRequest = (params) => {
+  return request({
+    url: "/admin-api/system/auth/login",
+    baseURL: "http://10.81.3.127:48080",
+    data: params,
+    method: "post",
+  });
+};
+export const Login = (params) => {
+  return request({
+    url: "auth/login",
+    baseURL: process.env.VUE_APP_ALARM,
+    data: params,
+    method: "post",
+  });
+};
+export function getUserinfo() {
+  return request({
+    baseURL: "http://10.81.3.127:48080",
+    url: "/admin-api/system/auth/get-permission-info",
+    method: "get",
+    headers: {
+      isUser: true,
+    },
+  });
+}
+export function logout(data) {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `auth/logout`,
+    method: "post",
+    data,
+  });
+}
+//register
+export const registerRequest = (params) => {
+  return request.post("user/registers", params);
+};
+// 报警配置缓存清理
+export const getRestart = () => {
+  return request({
+    url: `custom/restart`,
+    baseURL: "/custom/",
+  });
+};
+export const getRestart2 = () => {
+  return request({
+    url: `windturbine/restart`,
+    baseURL: "/windturbine/",
+  });
+};
+export const getRestart3 = () => {
+  return request({
+    url: `scadas/restart`,
+    baseURL: "/scadas/",
+  });
+};
+
+//----------------------------------------homePAge------------------------------------------------
+//根据风场id获取所有风机
+export const getintellList = (query) => {
+  return request({
+    url: "home/early/latest",
+    method: "get",
+    params: {
+      stationId: query,
+    },
+    showLoading: {
+      statu: false,
+    },
+  });
+};
+export const getReportList = (params) => {
+  return request({
+    url: "earlyreport/list",
+    method: "get",
+    params: params,
+    showLoading: {
+      statu: false,
+    },
+  });
+};
+export const getreportReviewList = (query) => {
+  return request({
+    url: "inspectorder/port/list",
+    method: "get",
+    params: {
+      stationId: query,
+    },
+  });
+};
+export const getHomeOrdercount = (query) => {
+  return request({
+    url: "home/ordercount",
+    method: "get",
+    showLoading: {
+      statu: false,
+    },
+  });
+};
+//首页获取机型接口
+export const getHomeAlertrule = (params) => {
+  return request({
+    url: "home/alertrule",
+    method: "get",
+    params: params,
+    showLoading: {
+      statu: false,
+    },
+  });
+};
+export const getHomeDangerHidden = (params) => {
+  return request({
+    url: "home/hidden/danger",
+    method: "get",
+    showLoading: {
+      statu: false,
+    },
+  });
+};
+export const getHomeDurationTotal = (params) => {
+  return request({
+    url: "home/total/duration",
+    method: "get",
+    showLoading: {
+      statu: false,
+    },
+  });
+};
+// 巡检计划
+export const getCheckList = (params) => {
+  return request({
+    url: "inspectorder/order/page",
+    method: "get",
+    params: params,
+  });
+};
+
+// 弹窗数据接口
+export const getDialogData = (params) => {
+  return request.get(
+    `windturbineAlarmCount/query/detail?stationid=${params.stationid}&starttime=${params.starttime}&endtime=${params.endtime}&windturbineid=${params.windturbineid}&parts=${params.parts}`
+  );
+};
+
+// 设备隐患评审报告
+export const postSubmitReport = (params) => {
+  return request.post("inspectorder/update", params);
+};
+
+// ----------------------------------------user------------------------------------------------
+export const getUserList = () => {
+  return request.get(`user/getall`);
+};
+export const editRequest = (params) => {
+  return request.post("user/edituser", params);
+};
+export const deleteUser = (data) => {
+  return request.delete(`user/${data}`);
+};
+// ----------------------------------------user------------------------------------------------
+// ----------------------------------------system------------------------------------------------
+
+// 获取故障弹窗
+export const getjumpwindow = () => {
+  return request.get(`userset/jumpwindow`);
+};
+//  获取语音播报
+export const getfaultread = () => {
+  return request.get(`userset/faultread`);
+};
+// 保存是否故障弹窗
+export const postjumpwindow = (params) => {
+  return request.post(`userset/jumpwindow?isjump=${params}`);
+};
+// 保存是否语音播报
+export const postfaultread = (params) => {
+  return request.post(`userset/faultread?isread=${params}`);
+};
+// ----------------------------------------system------------------------------------------------
+
+//获取所有风场
+export const fetchStationList = () => {
+  return request({
+    url: "info/station",
+    method: "get",
+  });
+};
+// //获取所有风场光伏
+// export const fetchStationListAll = () => {
+//   return request({
+//     url: "info/station/all",
+//     method: "get",
+//   });
+// };
+
+// ----------------------------------------安全生产- 报警记录------------------------------------------------
+
+//导出历史报警记录
+export const new_alarm_history = (params) => {
+  // return request.get(`alarm/history/export?stationid=${params.stationid}&starttime=${params.starttime}&endtime=${params.endtime}&windturbineid=&category1=&category2=&rank=&modelid=&snapid=&messagetype=&keyword=`)
+
+  return request({
+    method: "get",
+    url: `alarm/history/export?stationid=${params.stationid}&starttime=${params.starttime}&endtime=${params.endtime}&windturbineid=&category1=&category2=&rank=&modelid=&snapid=&messagetype=&keyword=`,
+    headers: {
+      "Content-Type": "application/json",
+    },
+    responseType: "blob",
+    showLoading: {
+      text: "拼命下载中...",
+    },
+    timeout: 99999999,
+  });
+};
+
+//查报警
+export const alarm_snap = (params) => {
+  return request({
+    url: `alarm/snap`,
+    params: params,
+  });
+};
+// ----------------------------------------安全生产- 实时报警------------------------------------------------
+
+//实时故障 最高级
+export const alarm_fault_recent = (params) => {
+  return request({
+    url: `fault/recent`,
+    params: params,
+    showLoading: {
+      statu: false,
+    },
+    transformResponse: [
+      function (data) {
+        const json = JSONBIG({
+          storeAsString: true,
+        });
+        const res = json.parse(data);
+        return res;
+      },
+    ],
+  });
+};
+//实时故障 第一次请求
+export const alarm_fault_top = (params) => {
+  return request({
+    url: `fault/snap/top`,
+    params: params,
+  });
+};
+
+//报警确认
+export const get_fault_confirm = (params) => {
+  return request({
+    url: `fault/confirm`,
+    params: params,
+  });
+};
+
+// ----------------------------------------安全生产- 实时数据查询------------------------------------------------
+
+// get 实时data
+
+// 批量导出
+export const AdapterHistoryExport = (activeAI, activeWT, startTs, endTs) => {
+  return request({
+    url: `ts/history/raw?uniformCode=${activeAI}&thingId=${activeWT}&thingType=windturbine&startTs=${startTs}&endTs=${endTs}`,
+    baseURL: "/adapter/",
+  });
+};
+// ----------------------------------------基础数据- 设备管理------------------------------------------------
+//查询全部设备型号接口
+export const device_list = () => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+    url: `device/model/list`,
+  });
+};
+//获取结构tree
+export function tree(params) {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "device/structure/tree/windturbine",
+    method: "get",
+    transformResponse: [
+      function (data) {
+        const json = JSONBIG({
+          storeAsString: true,
+        });
+        const res = json.parse(data);
+        return res;
+      },
+    ],
+  });
+}
+//根据结构获取测点
+export function point(
+  code,
+  pagenum,
+  pagesize,
+  categorydata,
+  keyword,
+  deviceId,
+  model
+) {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `device/metrics/page?pageNum=${pagenum}&pageSize=${pagesize}&deviceId=${deviceId}&categorydata=${categorydata}&keyword=${keyword}&model=${model}&structureCode=${code}`,
+    method: "get",
+  });
+}
+//测点新增
+export function metrics(data) {
+  return request.post(`device/metrics/single`, data);
+}
+//测点删除
+export function delmetrics(params) {
+  return request({
+    method: "delete",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `device/metrics/single/delete/${params}`,
+  });
+}
+//测点导入
+
+//tree新增 添加一个设备结构节点
+export function treeAdd(data) {
+  return request({
+    method: "post",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `device/structure`,
+    data,
+  });
+}
+//tree删除 tree删除一个设备结构节点
+export function treeDel(params) {
+  return request({
+    method: "delete",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `device/structure/delete/${params}`,
+  });
+}
+
+// 故障模式
+// get All
+export const faultmode_windturbine = () => {
+  return request({
+    method: "get",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `device/faultmode/windturbine`,
+  });
+};
+// 根据 structurecode get
+export const faultmode_structurecode = (params) => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `device/faultmode/windturbine/${params}`,
+    method: "get",
+  });
+};
+// 根据 id delete
+export const faultmode_delete = (params) => {
+  return request({
+    method: "delete",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `device/faultmode/delete/${params}`,
+  });
+};
+
+// 新增 修改
+export const faultmode_add_edit = (data) => {
+  return request({
+    method: "post",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `device/faultmode`,
+    data,
+  });
+};
+
+// ---------------------------------------- 报警配置- 自定义预警------------------------------------------------
+
+// 获取机型
+export function getStationinfo(params) {
+  return request({
+    url: `info/stationinfo?stationId=${params}`,
+    method: "get",
+    showLoading: {
+      statu: false,
+    },
+  });
+}
+
+// 获取规则
+export function alertrule2_list() {
+  return request.get(`alertrule2/list/`);
+}
+
+//根据场站编号,风机型号获取DI测点new
+export const getDIPointList = (minModel) => {
+  return request({
+    url: "testingpointDI/point",
+    method: "get",
+    params: {
+      minModel,
+    },
+  });
+};
+//根据场站编号,获取电气DI测点
+export const fetchElectricDIPointList = (stationId) => {
+  return request({
+    url: "info/electrical_point_di",
+    method: "get",
+    params: {
+      stationId: stationId,
+    },
+  });
+};
+//根据电气测点,获取测点信息
+export const fetchElectricDIPointByPointId = (pointId) => {
+  return request({
+    url: "info/electrical_point_di/byId",
+    method: "get",
+    params: {
+      pointId: pointId,
+    },
+  });
+};
+
+//根据风场编号获取电气AI测点
+export const fetch_electrical_point_ai = (stationId) => {
+  return request({
+    url: "info/electrical_point_ai",
+    method: "get",
+    params: {
+      stationId: stationId,
+    },
+  });
+};
+//根据风场编号获取电气DI测点
+export const fetch_electrical_point_di = (stationId) => {
+  return request({
+    url: "info/electrical_point_di",
+    method: "get",
+    params: {
+      stationId: stationId,
+    },
+  });
+};
+//获取报警类型
+export const fetchWarningType = () => {
+  return request({
+    url: "info/warning_type",
+    method: "get",
+  });
+};
+
+//获取报警种类
+export const fetchWarningClassify = () => {
+  return request({
+    url: "info/warning_classify",
+    method: "get",
+  });
+};
+export const custombj_batchImport = (list) => {
+  return request.post("alertrule2/save-batch", list);
+};
+
+//******************************end****************************************//
+
+//******************************升压站报警API************************************//
+
+export const scadabj_fetchTableData = (query) => {
+  return request({
+    url: "scadabj/page",
+    method: "get",
+    params: query,
+    timeout: 20000,
+    transformResponse: [
+      // 处理17位数字精度问题
+      function (data) {
+        const json = JSONBIG({
+          storeAsString: true,
+        });
+        const res = json.parse(data);
+        return res;
+      },
+    ],
+  });
+};
+export const scadabj_postSave = (objData) => {
+  return request.post("scadabj/save", objData);
+};
+export const scadabj_batchImport = (list) => {
+  return request.post("scadabj/save-batch", list);
+};
+//********************************************end********************************//\
+
+//********************************************报警记录日志********************************//\
+
+//********************************************end********************************//\
+
+//******************************风机报警API************************************//
+
+export const windturbinebj_postSave = (form) => {
+  return request.post("warning2/save", form);
+};
+export const windturbinebj_batchImport = (list) => {
+  return request.post("warning2/save-batch", list);
+};
+
+export const fetchLeaf = () => {
+  return request({
+    url: "warning2/page",
+    method: "get",
+    params: {
+      pagenum: 1,
+      pagesize: 10000,
+      isLeaf: 0,
+    },
+  });
+};
+
+//根据风机型号获取DI测点统一编码相关数据 testingpointdi2
+export const getDIPointByModelId = (query) => {
+  return request({
+    url: "info/testing_point_di",
+    method: "get",
+    params: query,
+  });
+};
+
+//******************************end*******************************************//
+//******************************预警统计*******************************************//
+export const statistics_querymap = (params) => {
+  return request.get(`alarm/count/querymap2`, { params: params });
+};
+export const statistics_querybyname = (params) => {
+  return request.get("alarm/count/querybyname2", { params: params });
+};
+export const statistics_lineandproject = (params) => {
+  return request.get("alarm/count/lineandproject2", { params: params });
+};
+//******************************end*******************************************//
+
+//******************************预警分析*******************************************//
+export const warning_query_new = (params) => {
+  return request.get(`alarm/count/query/new2`, { params: params });
+};
+export const warning_detail = (params) => {
+  return request({
+    url: `analysis/detail`,
+    params: params,
+    timeout: 60000,
+  });
+};
+// export const statistics_lineandproject = params => {
+//     return request.get('alarm/count/lineandproject', { params: params })
+// };
+
+//******************************end*******************************************//
+
+//*****************************旧诊断报告*******************************************//
+export const earlywarnscore_list = (params) => {
+  return request.get(`earlywarnscore/list`, { params: params });
+};
+export const warning_query_new3 = (params) => {
+  return request.get(`alarm/count/query/new3`, { params: params });
+};
+//******************************end*******************************************//
+
+//*****************************新诊断报告*******************************************//
+export const getList = (params) => {
+  return request.get(
+    `earlyreport/list?pagenum=${params.pagenum}&pagesize=${params.pagesize}&stationId=${params.stationId}&keyword=&starttime=&endtime=`
+  );
+};
+
+export const getReportDetail = (id) => {
+  return request({
+    url: `earlyreport/info?id=${id}`,
+    method: "get",
+    showLoading: {
+      statu: false,
+    },
+  });
+};
+
+//******************************end*******************************************//
+
+export const getAlarmConfig = () => {
+  // return request.get(`/alertrule/queryalarmtypellist`);
+  return request({
+    method: "get",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alertrule/queryalarmtypellist",
+  });
+};
+
+
+export const getAlartConfig = () => {
+  return request({
+    method: "get",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alarmswitch/queryAll",
+  });
+};
+
+export const saveAlartConfig = (data) => {
+  return request({
+    method: "post",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alarmswitch/save",
+    data,
+  });
+};
+
+export const getWtModel = (wpId = "") => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+    url: `alertrule/querymodellist?wpId=${wpId}`,
+  });
+};
+
+export const getWpList = (types = "") => {
+  return request({
+    method: "get",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: `alertrule/querywpllist?types=${types}`,
+  });
+};
+export const getBpList = () => {
+  return request({
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+    url: `alertrule/querysubllist`,
+  });
+};
+
+export const getPointList = (params) => {
+  return request({
+    method: "get",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alertrule/querysubpointllist",
+    params,
+  });
+};
+export const saveAlarmconfiguration = (data) => {
+  return request({
+    method: "post",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "alarmconfiguration/save",
+    data,
+  });
+};
+
+export const getStopQueryTableData = (params) => {
+  return request({
+    method: "get",
+    baseURL: process.env.VUE_APP_ALARM,
+    url: "shutdownevent2/queryshutdowneventlist",
+    params,
+  });
+};
+
+export const getWarningCountList = (params) => {
+  return request({
+    url: `alarm/history/findCtFeatureStat?timeType=${params.timeType}&begin=${
+      params.begin
+    }&end=${params.end}&stationid=${
+      params.stationid
+    }&components=${params.components.toString()}&modelId=${
+      params.modelId
+    }&alarmIds=${params.alarmIds}&deviceType=${params.deviceType}`,
+    baseURL: process.env.VUE_APP_ALARM,
+    method: "get",
+  });
+};

+ 0 - 61
src/api/zmaxios.js

@@ -1,61 +0,0 @@
-import axios from 'axios';
-import { ElMessage, ElMessageBox } from 'element-plus';
-
-// 配置新建一个 axios 实例
-const service = axios.create({
-    baseURL: 'http://192.168.1.18:8075',
-    timeout: 50000,
-    headers: { 'Content-Type': 'application/json' },
-});
-
-// 添加请求拦截器
-service.interceptors.request.use(
-    (config) => {
-        // 在发送请求之前做些什么 token
-        let token = sessionStorage.getItem('token')
-        if (token) {
-            config.headers.common['token'] = token;
-        }
-        return config
-    },
-    (error) => {
-        // 对请求错误做些什么
-        return Promise.reject(error);
-    }
-);
-
-// 添加响应拦截器
-service.interceptors.response.use(
-    (response) => {
-        // 对响应数据做点什么
-        const res = response.data;
-        if (res.code && res.code !== 0 && res.code == !200) {
-            // `token` 过期或者账号已在别处登录
-            if (res.code === 401 || res.code === 4001) {
-                localStorage.clear(); // 清除浏览器全部临时缓存
-                window.location.href = '/'; // 去登录页
-                ElMessageBox.alert('你已被登出,请重新登录', '提示', {})
-                    .then(() => {})
-                    .catch(() => {});
-            }
-            return Promise.reject(service.interceptors.response);
-        } else {
-            return response.data;
-        }
-    },
-    (error) => {
-        // 对响应错误做点什么
-        if (error.message.indexOf('timeout') != -1) {
-            ElMessage.error('网络超时');
-        } else if (error.message == 'Network Error') {
-            ElMessage.error('网络连接错误');
-        } else {
-            if (error.response.data) ElMessage.error(error.response.statusText);
-            else ElMessage.error('接口路径找不到');
-        }
-        return Promise.reject(error);
-    }
-);
-
-// 导出 axios 实例
-export default service;

binární
src/assets/homePageBackground.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/assets/icon/svg/bjpz.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/assets/icon/svg/djl.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/assets/icon/svg/kkxfx.svg


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/assets/icon/svg/zhbj.svg


binární
src/assets/newHome_h.png


+ 178 - 0
src/assets/styles/common/common.css

@@ -0,0 +1,178 @@
+#appBody.dark {
+  transition: 0.25s;
+}
+#appBody.dark .el-popper.is-light {
+  border: none;
+}
+#appBody.dark .gray {
+  transition: 0.25s;
+}
+#appBody.dark .green {
+  transition: 0.25s;
+}
+#appBody.dark .white {
+  transition: 0.25s;
+}
+#appBody.dark #app {
+  transition: 0.25s;
+}
+#appBody.dark .panel-title {
+  transition: 0.25s;
+}
+#appBody.dark .panel-tools {
+  transition: 0.25s;
+}
+#appBody.dark .weather .other-info .text {
+  transition: 0.25s;
+}
+#appBody.dark .weather .other-info div.svg-icon svg use {
+  transition: 0.25s;
+}
+#appBody.dark .security-days .text {
+  transition: 0.25s;
+}
+#appBody.dark .security-days .num {
+  transition: 0.25s;
+}
+#appBody.dark .tab-box .tab-item span svg use {
+  transition: 0.25s;
+}
+#appBody.dark .header-body .header-title svg g:nth-child(1) path,
+#appBody.dark .header-body .header-title svg g:nth-child(1) polygon {
+  transition: 0.25s;
+}
+#appBody.dark .weather-info span svg use {
+  transition: 0.25s;
+}
+#appBody.dark .map .tab-box .tab-item.active {
+  transition: 0.25s;
+}
+#appBody.dark .map .tab-box .tab-item.active::after {
+  transition: 0.25s;
+}
+#appBody.dark .header-menu .header-menu-list .header-menu-item.active::after {
+  transition: 0.25s;
+}
+#appBody.dark .header-menu .header-menu-list .header-menu-item.active {
+  background: linear-gradient(to top, rgba(5, 187, 76, 0.5), rgba(5, 187, 76, 0));
+  border: 0.093vh solid #05bb4c;
+  transition: color 0.25s ease-in-out;
+}
+#appBody.dark .coulometric-analysis .card-1 .card-icon svg use {
+  transition: 0.25s;
+}
+#appBody.dark .map .compass svg g:nth-child(3) g g path {
+  transition: 0.25s;
+}
+#appBody.dark .map .compass svg g:nth-child(4) g g path {
+  transition: 0.25s;
+}
+#appBody.dark .map .compass::after {
+  transition: 0.25s;
+}
+#appBody.dark .name-box-period-label {
+  transition: 0.25s;
+}
+#appBody.dark .name-box-period-value {
+  transition: 0.25s;
+}
+#appBody.dark .svg-map-nx .item-label rect {
+  transition: 0.25s;
+}
+#appBody.dark .svg-map-nx .item-label .mapKey {
+  transition: 0.25s;
+}
+#appBody.dark .svg-map-nx .popup-layer-svg .mapKey {
+  transition: 0.25s;
+}
+#appBody.dark .svg-map-nx #popup-box-svg rect {
+  transition: 0.25s;
+}
+#appBody.dark .com-panel-3,
+#appBody.dark .com-panel,
+#appBody.dark .header-body {
+  transition: 0.25s;
+}
+#appBody.dark .com-panel-3 .dot,
+#appBody.dark .com-panel.line:before {
+  transition: 0.25s;
+}
+#appBody.dark .panel-header {
+  transition: 0.25s;
+}
+#appBody.dark .fengji-icon svg use {
+  transition: 0.25s;
+}
+#appBody.dark .modal.el-dialog {
+  transition: 0.25s;
+}
+#appBody.dark .modal.el-dialog .el-dialog__title {
+  transition: 0.25s;
+}
+#appBody.dark .situation-body .value span:nth-child(2) {
+  transition: 0.25s;
+}
+#appBody.dark .coulometric-analysis .card-title {
+  transition: 0.25s;
+}
+#appBody.dark .com-panel,
+#appBody.dark .panel-header,
+#appBody.dark .home .table-card,
+#appBody.dark .com-panel-3.situation,
+#appBody.dark .el-menu--collapse,
+#appBody.dark .el-sub-menu,
+#appBody.dark .el-sub-menu__title,
+#appBody.dark .el-menu--popup,
+#appBody.dark .el-menu-item {
+  transition: 0.25s;
+}
+#appBody.dark .com-panel.line::before {
+  transition: 0.25s;
+}
+#appBody.dark .lightMenu {
+  width: 0;
+  height: calc(100% - 71px);
+  position: absolute;
+  left: 0;
+  top: 57px;
+  z-index: 100;
+  border-radius: 20px;
+  border: 0;
+  overflow: hidden;
+  transition: 0.25s;
+}
+#appBody.dark .lightMenu.hidden {
+  width: 0;
+  transition: 0.25s;
+}
+#appBody.dark .main-body {
+  margin-left: 0;
+  transition: 0.25s;
+}
+#appBody.dark .dot.top-left {
+  transition: 0.25s;
+}
+#appBody.dark .dot.bottom-left {
+  transition: 0.25s;
+}
+#appBody.dark .dot.top-rignt {
+  transition: 0.25s;
+}
+#appBody.dark .dot.bottom-right {
+  transition: 0.25s;
+}
+#appBody.dark .lightMenu .el-menu--collapse {
+  transition: 0.25s;
+}
+#appBody.dark .lightMenu .el-menu--collapse {
+  height: 100%;
+}
+#appBody.dark .lightMenu .el-sub-menu__title {
+  transition: 0.25s;
+}
+#appBody.dark .lightMenu .el-sub-menu__title i {
+  transition: 0.25s;
+}
+.left {
+  margin-top: 5px;
+}

+ 1 - 10
src/assets/styles/common/common.less

@@ -15,16 +15,7 @@
 
 // 5. 提交代码后如果衍生出冲突需要自行解决
 
-// 亮色主题
-@import "../theme/light/light-jsc.less"; // 驾驶舱
-@import "../theme/light/light-jjyx.less"; // 经济运行
-@import "../theme/light/light-sp.less"; // 沙盘
-@import "../theme/light/light-qt.less"; // 其他
-
-@import "../theme/light/jsc.less"; // 驾驶舱
-@import "../theme/light/jjyx.less"; // 经济运行
-@import "../theme/light/zhjx.less"; // 智慧检修	
-@import "../theme/light/aqgk.less"; // 安全管控
+
 
 // 暗色主题
 @import "../theme/dark/dark-jsc.less"; // 驾驶舱

+ 139 - 6
src/assets/styles/dialog.less

@@ -1,4 +1,3 @@
-
 .modal {
   &.el-dialog {
     background: fade(#121d1c, 95);
@@ -56,7 +55,7 @@
     font-size: 14px;
     border: none;
     width: 108px;
-    min-height: 25px !important;
+    // min-height: 25px !important;
 
     &:hover {
       background-color: rgba(5, 187, 76, 0.6);
@@ -68,6 +67,143 @@
   ul li {
     list-style: none;
   }
+  .wind-comp-form {
+    padding-left: 30px;
+    .el-form-item {
+      margin-bottom: 20px !important;
+      width: 310px !important;
+    }
+  }
+  .custom-comp-form {
+    .el-select {
+      width: 100% !important;
+      max-width: 100% !important;
+      .el-input__inner {
+        width: 100% !important;
+        max-width: 100% !important;
+      }
+    }
+    .first-row {
+      .el-form-item {
+        .el-form-item__content {
+          display: flex;
+          flex-direction: column;
+          align-items: flex-start;
+        }
+      }
+      .el-switch {
+        display: block;
+      }
+
+      .first-row-second-col {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        .el-form-item {
+          flex: 1;
+          padding-right: 5px;
+        }
+      }
+    }
+    .second-row {
+      .operator {
+        display: grid;
+        grid-template-columns: auto auto auto auto auto;
+      }
+      .buttons {
+        background-color: rgba(5, 187, 76, 0.2);
+        border: 1px solid #3b6c53;
+        color: #b3b3b3;
+        font-size: 14px;
+        width: 60px;
+        height: 50px;
+        margin-bottom: 10px;
+        &.is-round {
+          padding: 0 !important;
+        }
+        &:hover {
+          background-color: rgba(5, 187, 76, 0.5);
+          color: #ffffff;
+        }
+      }
+      .el-button + .el-button {
+        margin-left: 0;
+      }
+      .el-form-item {
+        .el-form-item__content {
+          display: flex;
+          flex-direction: column;
+          align-items: flex-start;
+        }
+      }
+    }
+    .el-tabs {
+      .el-tabs__item {
+        margin-right: 25px !important;
+      }
+      .el-tabs__header::before,
+      .el-tabs__header::after {
+        background: transparent;
+      }
+      .el-tabs--border-card > .el-tabs__header .el-tabs__item + .el-tabs__item {
+        margin-left: 0;
+      }
+      &.el-tabs--border-card {
+        background: transparent !important;
+        border-color: rgba(83, 98, 104, 0.2) !important;
+      }
+      &.el-tabs--border-card > .el-tabs__header {
+        background: transparent !important;
+        border-color: rgba(83, 98, 104, 0.2) !important;
+      }
+
+      &.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active,
+      &.el-tabs--border-card > .el-tabs__header .el-tabs__item:hover {
+        color: #05bb4c !important;
+        background: transparent !important;
+        border-right-color: transparent !important;
+        border-left-color: transparent !important;
+      }
+      &.el-tabs--border-card > .el-tabs__content {
+        padding: 5px;
+      }
+    }
+    .el-tag {
+      margin-bottom: 5px;
+      --el-tag-background-color: #1f4f2e;
+      --el-tag-border-color: #1f4f2e;
+      --el-tag-font-color: #05bb4c;
+      font-size: 14px;
+    }
+  }
+
+  .el-radio-group {
+    height: 28px;
+    .el-radio-button__original-radio + .el-radio-button__inner {
+      background-color: rgba(5, 187, 76, 0.2);
+      border: 1px solid #3b6c53;
+      color: #b3b3b3;
+      font-size: 14px;
+      //   background-color: rgba(5, 187, 76, 0.5);
+      //   color: #ffffff;
+    }
+    .el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled) {
+      box-shadow: unset;
+    }
+    .el-radio-button__inner:hover {
+      border: 1px solid #3b6c53;
+    }
+    .el-radio-button__original-radio:checked + .el-radio-button__inner {
+      // background-color: rgba(5, 187, 76, 0.2);
+      // border: 1px solid #3b6c53;
+      // color: #b3b3b3;
+      // font-size: 14px;
+      box-shadow: unset;
+
+      background-color: rgba(5, 187, 76, 0.5);
+      color: #ffffff;
+    }
+  }
   .el-drawer.rtl {
     height: 100%;
     background-color: #161816 !important;
@@ -414,7 +550,7 @@ background-color: rgba(30,90,163, .5);
   .el-select .el-input__inner {
     width: 190px;
     max-width: 190px;
-    height: 25px;
+    // height: 25px;
     background: rgba(67, 81, 107, 0.2);
     border: 1px solid #2a374f;
     border-radius: 12.5px;
@@ -605,9 +741,6 @@ background-color: rgba(30,90,163, .5);
   /*.el-table__cell{*/
   /*    color: ;*/
   /*}*/
-  .el-switch__action {
-    background: transparent !important;
-  }
 
   .mentues .el-table__body .el-table__cell {
     padding: 5px 0 !important;

+ 3 - 0
src/assets/styles/el-override/el-pagination.less

@@ -1,6 +1,9 @@
 // el-pagination
 .main-body {
   .el-pagination {
+    display: flex;
+    justify-content: flex-end;
+    align-items: center;
     color: #b3bdc0;
     .el-pagination__total {
       color: #b3bdc0;

+ 0 - 86
src/assets/styles/theme/light/aqgk.less

@@ -1,86 +0,0 @@
-//安全管控模块白色主题样式
-@import "./setting.less";
-#appBody.light {
-    .personnel .personnel-btn .i-btn:hover, .personnel .personnel-btn .i-btn.active{
-        border:1px solid rgba(75, 85, 174, 0.6);
-        background: rgba(75, 85, 174, 0.6);
-        color: @white;
-    }
-    .personnel .personnel-btn .i-btn{
-        background: rgb(220 221 223);
-        border: 1px solid @black;
-        color: @black;
-    }
-    //人员矩阵
-    .personnel .personnel-box .personnel-box-item{
-        background: @white;
-        border: 1px solid @black;
-    }
-    .personnel .personnel-box .personnel-box-item:hover{
-        border: 1px solid @deepblue;
-        background: @deepblue;
-    }
-    .personnel .personnel-box .personnel-box-item 
-        .personnel-box-item-h .personnel-box-item-form .personnel-box-item-group .personnel-box-item-label{
-            color: @black;
-            font-weight: bold;
-        }
-    .personnel .personnel-box .personnel-box-item:hover 
-        .personnel-box-item-h .personnel-box-item-form .personnel-box-item-group .personnel-box-item-label{
-            color: @white;
-        }
-    .personnel .personnel-box .personnel-box-item 
-        .personnel-box-item-h .personnel-box-item-form .personnel-box-item-group .personnel-box-item-value{
-            color: @black;
-            font-weight: bold;
-        }
-    .personnel .personnel-box .personnel-box-item:hover 
-        .personnel-box-item-h .personnel-box-item-form .personnel-box-item-group .personnel-box-item-value{
-            color: @white
-        }
-    .personnel .personnel-box .personnel-box-item .personnel-box-item-f .personnel-box-item-name{
-            color: @black;
-            font-weight: bold;
-        }
-    .personnel .personnel-box .personnel-box-item:hover .personnel-box-item-f .personnel-box-item-name{
-            color: @white
-        }
-    .personnel .personnel-box .personnel-box-item .personnel-box-item-f .personnel-box-item-icon{
-            color: @black;
-            font-weight: bold;
-        }
-        .personnel .personnel-box .personnel-box-item:hover .personnel-box-item-f .personnel-box-item-icon{
-            color: @white
-        }
-    .font-md{
-        color: @black;
-    }
-    .date-select.el-picker__popper.el-popper[role="tooltip"] .el-picker-panel .el-picker-panel__footer{
-        background: @deepblue;
-        border-color: @deepblue;
-    }
-    .date-select.el-picker__popper.el-popper[role="tooltip"] .el-picker-panel .el-date-picker__editor-wrap 
-    .el-time-panel .el-time-panel__footer{
-        background: @deepblue;
-    }
-    .el-picker-panel .el-time-panel__btn.cancel{
-        color: @white;
-    }
-    .el-time-panel__btn.confirm{
-        color: @black;
-    }
-
-    .el-picker-panel .el-picker-panel__footer .el-button--text{
-        color: @white;
-    }
-    .el-picker-panel .el-picker-panel__footer .el-button.is-plain{
-        background: @white;
-        border-color: @deepblue;
-        color: @black;
-    }
-    //视频监视
-    .iframe4 .el-dialog{
-        background: @white;
-
-    }
-}

+ 0 - 181
src/assets/styles/theme/light/jjyx.css

@@ -1,181 +0,0 @@
-#appBody.light .com-table thead tr th {
-  color: #000;
-}
-#appBody.light .com-table .el-scrollbar tr td {
-  color: #000;
-}
-#appBody.light .com-table .el-scrollbar tr td.light span,
-#appBody.light .com-table .el-scrollbar tr td.light div {
-  color: #159AFA;
-}
-#appBody.light .el-table__header-wrapper {
-  height: 37px;
-}
-#appBody.light .left {
-  padding-top: 20px;
-}
-#appBody.light .has-gutter {
-  background: #ffffff;
-  height: 30px;
-}
-#appBody.light .has-gutter .is-center {
-  height: 37px;
-}
-#appBody.light .performance {
-  background: #ffffff;
-}
-#appBody.light .btn.green,
-#appBody.light .btn:hover {
-  color: #36348e;
-  border-color: #36348e;
-  background: rgba(54, 52, 142, 0.2);
-}
-#appBody.light .el-select__popper.select,
-#appBody.light .el-picker__popper {
-  background: #ffffff;
-  border-color: #ffffff;
-}
-#appBody.light .el-select__popper.select .el-popper__arrow::before,
-#appBody.light .el-picker__popper .el-popper__arrow::before {
-  border: 1px solid #ffffff !important;
-  background: #ffffff !important;
-}
-#appBody.light .el-select__popper.select .el-select-dropdown__item.selected,
-#appBody.light .el-picker__popper .el-select-dropdown__item.selected,
-#appBody.light .el-select__popper.select .el-select-dropdown__item:hover,
-#appBody.light .el-picker__popper .el-select-dropdown__item:hover {
-  color: #36348e;
-  background: rgba(54, 52, 142, 0.2);
-  border: 1px solid #36348e;
-}
-#appBody.light .el-select__popper.select .el-select-dropdown__item,
-#appBody.light .el-picker__popper .el-select-dropdown__item {
-  color: #000;
-}
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] {
-  background: #ffffff !important;
-  border-color: #ffffff !important;
-}
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-date-table th {
-  color: #000;
-}
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-date-table td.current:not(.disabled) span {
-  color: #ffffff;
-  background: #159AFA;
-}
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-date-table td.today span,
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-date-table span:hover {
-  color: #159AFA;
-}
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-date-table td.prev-month,
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-date-table td.next-month {
-  background: rgba(0, 0, 0, 0.2);
-}
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-date-table span {
-  color: #000;
-}
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-year-table td {
-  color: #000;
-}
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-year-table td.today .cell,
-#appBody.light .el-picker__popper.el-popper[role="tooltip"] .el-year-table td:hover {
-  color: #159AFA;
-}
-#appBody.light .el-input .el-input__inner {
-  background: #ffffff;
-  color: #000;
-}
-#appBody.light .query-item .lable {
-  color: #000;
-}
-#appBody.light .main-body input[type="checkbox"]:checked {
-  background: #159AFA;
-  border-color: #159AFA;
-}
-#appBody.light .main-body input[type="checkbox"] {
-  background: #ffffff;
-  border-color: #B3BDC0;
-}
-#appBody.light .decision-page-2 .com-panel,
-#appBody.light .decision-page-3 .com-panel,
-#appBody.light .decision-page-4 .com-panel {
-  border-radius: 0;
-  padding: 0;
-}
-#appBody.light .action {
-  color: #159AFA;
-}
-#appBody.light .el-select .el-select__tags .el-tag {
-  background-color: rgba(54, 52, 142, 0.2);
-  color: #36348e;
-}
-#appBody.light .el-select .el-select__tags .el-tag .el-icon-close {
-  background-color: rgba(54, 52, 142, 0.5);
-}
-#appBody.light .direction-info .com-table th,
-#appBody.light .direction-info .com-table td {
-  color: #000;
-}
-#appBody.light .newspan {
-  color: #000;
-}
-#appBody.light .newspan:hover {
-  background: linear-gradient(to top, rgba(54, 52, 142, 0.5), rgba(54, 52, 142, 0));
-  color: #36348e;
-}
-#appBody.light .newspan:hover::after {
-  border: 1px solid #36348e;
-}
-#appBody.light .active {
-  background: linear-gradient(to top, rgba(54, 52, 142, 0.5), rgba(54, 52, 142, 0));
-  color: #36348e;
-}
-#appBody.light .active::after {
-  border: 1px solid #36348e;
-}
-#appBody.light .el-month-table td .cell:hover,
-#appBody.light .el-date-picker__header-label.active,
-#appBody.light .el-date-picker__header-label:hover {
-  color: #159AFA;
-}
-#appBody.light .ztfx .table-complex .table tbody tr:nth-child(2n) td {
-  background-color: rgba(0, 0, 0, 0.2);
-}
-#appBody.light .ztfx .table-complex .table tbody tr:nth-child(2n) td.item {
-  background-color: transparent;
-}
-#appBody.light .ztfx .table-complex .table th {
-  background: rgba(0, 0, 0, 0.4);
-  color: #ffffff;
-}
-#appBody.light .ztfx .table-complex .table td {
-  color: #000;
-}
-#appBody.light .ztfx .table-panel .table tbody tr:nth-child(2n) td {
-  background-color: rgba(0, 0, 0, 0.2);
-}
-#appBody.light .ztfx .table-panel .table th {
-  background: rgba(0, 0, 0, 0.4);
-  color: #ffffff;
-}
-#appBody.light .ztfx .table-panel .table td {
-  color: #000;
-}
-#appBody.light .action-bar .selections .item {
-  color: #000;
-}
-#appBody.light .action-bar .selections .item:hover,
-#appBody.light .action-bar .selections .item.active {
-  background: rgba(54, 52, 142, 0.2);
-  border: 1px solid #36348e;
-  color: #36348e;
-}
-#appBody.light .fc-info .fc-item > .title {
-  color: #000;
-}
-#appBody.light .fc-info .fc-item .tags .tag .tag-title {
-  color: #000;
-}
-#appBody.light .fc-info .fc-item .tags .tag .tag-value {
-  color: #36348e;
-}

+ 0 - 256
src/assets/styles/theme/light/jjyx.less

@@ -1,256 +0,0 @@
-// 对标管理
-@import "./setting.less";
-#appBody.light {
-  // 风机绩效榜
-  .com-table {
-    thead tr th {
-      color: @black;
-    }
-
-    .el-scrollbar tr td {
-      color: @black;
-    }
-
-    .el-scrollbar tr td.light span,
-    .el-scrollbar tr td.light div {
-      color: @blue;
-    }
-  }
-  .el-table__header-wrapper {
-    height: 37px;
-  }
-  .left {
-    padding-top: 20px;
-  }
-  .has-gutter {
-    background: @white;
-    height: 30px;
-    .is-center {
-      height: 37px;
-    }
-  }
-  .performance {
-    background: @white;
-  }
-
-  .btn.green,
-  .btn:hover {
-    color: @deepblue;
-    border-color: @deepblue;
-    background: rgba(@deepblueBg, 0.2);
-  }
-
-  .el-select__popper.select,
-  .el-picker__popper {
-    background: @white;
-    border-color: @white;
-    .el-popper__arrow::before {
-      border: 1px solid @white !important;
-      background: @white !important;
-    }
-    .el-select-dropdown__item.selected,
-    .el-select-dropdown__item:hover {
-      color: @deepblue;
-      background: fade(@deepblue, 20);
-      border: 1px solid @deepblue;
-    }
-    .el-select-dropdown__item {
-      color: @black;
-    }
-  }
-
-  .el-picker__popper.el-popper[role="tooltip"] {
-    background: @white !important;
-    border-color: @white !important;
-    .el-date-table {
-      th {
-        color: @black;
-      }
-      td.current:not(.disabled) span {
-        color: @white;
-        background: @blue;
-      }
-      td.today span,
-      span:hover {
-        color: @blue;
-      }
-      td.prev-month,
-      td.next-month {
-        background: fade(@black, 20);
-      }
-      span {
-        color: @black;
-      }
-    }
-    .el-year-table {
-      td {
-        color: @black;
-      }
-      td.today .cell,
-      td:hover {
-        color: @blue;
-      }
-    }
-  }
-  .el-input {
-    .el-input__inner {
-      background: @white;
-      color: @black;
-    }
-  }
-  .query-item .lable {
-    color: @black;
-  }
-
-  // 风机绩效榜-明细
-  .main-body {
-    input[type="checkbox"]:checked {
-      background: @blue;
-      border-color: @blue;
-    }
-    input[type="checkbox"] {
-      background: @white;
-      border-color: @gray-l;
-    }
-  }
-
-  .decision-page-2,
-  .decision-page-3,
-  .decision-page-4 {
-    .com-panel {
-      border-radius: 0;
-      padding: 0;
-    }
-  }
-  .action {
-    color: @blue;
-  }
-
-  //线路对标
-  .el-select {
-    .el-select__tags .el-tag {
-      background-color: fade(@deepblue, 20);
-      color: @deepblue;
-
-      .el-icon-close {
-        background-color: fade(@deepblue, 50);
-      }
-    }
-  }
-
-  //单机横向对比
-  .direction-info {
-    .com-table {
-      th,
-      td {
-        color: @black;
-      }
-    }
-  }
-
-  // 状态转换率
-  .newspan {
-    color: @black;
-  }
-  .newspan:hover {
-    background: linear-gradient(
-      to top,
-      rgba(54, 52, 142, 0.5),
-      rgba(54, 52, 142, 0)
-    );
-    color: @deepblue;
-  }
-  .newspan:hover::after {
-    border: 1px solid @deepblue;
-  }
-  .active {
-    background: linear-gradient(
-      to top,
-      rgba(54, 52, 142, 0.5),
-      rgba(54, 52, 142, 0)
-    );
-    color: @deepblue;
-  }
-  .active::after {
-    border: 1px solid @deepblue;
-  }
-
-  .el-month-table td .cell:hover,
-  .el-date-picker__header-label.active,
-  .el-date-picker__header-label:hover {
-    color: @blue;
-  }
-
-  // 综合分析
-  .ztfx {
-    .table-complex {
-      .table {
-        tbody {
-          tr:nth-child(2n) td {
-            background-color: fade(@black, 20%);
-            &.item {
-              background-color: transparent;
-            }
-          }
-        }
-
-        th {
-          background: fade(@black, 40);
-          color: @white;
-        }
-        td {
-          color: @black;
-        }
-      }
-    }
-    .table-panel {
-      .table {
-        tbody {
-          tr:nth-child(2n) td {
-            background-color: fade(@black, 20%);
-          }
-        }
-        th {
-          background: fade(@black, 40);
-          color: @white;
-        }
-        td {
-          color: @black;
-        }
-      }
-    }
-  }
-
-  .action-bar {
-    .selections {
-      .item {
-        color: @black;
-        &:hover,
-        &.active {
-          background: fade(@deepblue, 20);
-          border: 1px solid @deepblue;
-          color: @deepblue;
-        }
-      }
-    }
-  }
-
-  // 风场信息
-  .fc-info {
-    .fc-item {
-      & > .title {
-        color: @black;
-      }
-      .tags {
-        .tag {
-          .tag-title {
-            color: @black;
-          }
-          .tag-value {
-            color: @deepblue;
-          }
-        }
-      }
-    }
-  }
-}

+ 0 - 265
src/assets/styles/theme/light/jsc.less

@@ -1,265 +0,0 @@
-@import "./setting.less";
-
-#appBody.light {
-
-    // 基础矩阵白色主题样式
-    .panel-body {
-        background: @white;
-        transition: @transition;
-        border-bottom-right-radius: 10px;
-        border-bottom-left-radius: 10px;
-    }
-
-    .card-panel .card-left .tag {
-        color: @black;
-    }
-
-    .light-matrix .panel {
-        background-color: #ffffff;
-        border: 1px solid #ffffff;
-        border-radius: 10px;
-        margin-top: 10px;
-    }
-
-    .green[data-v-065abbc5] {
-        color: @green;
-    }
-
-    .green[data-v-6a0a9536] {
-        color: @green;
-    }
-
-    .light-matrix .panel-box .panel-title .panel-title-name[data-v-065abbc5] {
-        font-size: 1.296vh;
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    .svg-icon.svg-icon-green svg use {
-        fill: @green;
-    }
-
-    //明细矩阵
-    .light-matrix .panel-box .panel-title .panel-title-name[data-v-e0caa1f6] {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    //欠发矩阵
-    .light-matrix .panel-box .panel-title .panel-title-name[data-v-6a0a9536] {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    //光伏矩阵
-    .light-matrix .panel-box .panel-title .panel-title-name[data-v-55c30df5] {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    //驾驶舱模块-矩阵白色主题样式二级页面
-    //基本信息-日发电量1
-    .wind-site-base-info .generation {
-        background: @white;
-    }
-
-    //基本信息-日发电量2
-    .el-col-10 {
-        background: @white;
-    }
-
-    //基本信息-日发电量右侧
-    .wind-site-warning[data-v-40a70b04] {
-        background: @white;
-        transition: @transition;
-    }
-
-    //右侧导航栏第一个-天气
-    .wind-site-weather[data-v-ccb406f8] {
-        background: @white;
-        transition: @transition;
-    }
-
-    .wind-site-base-info .wind-site-name {
-        border: 1px solid @deepblue;
-    }
-
-    .title[data-v-2c3073c8] {
-        font-weight: bold;
-    }
-
-    //右侧导航栏第一个-最右侧
-    .light-matrix-small {
-        background: @white;
-        transition: @transition;
-    }
-
-    //最右侧导航
-    .wind-site .page-common-body .page-common-body-menu .page-common-body-menu-box[data-v-3b6e4be5] {
-        background-color: @white;
-        transition: @transition;
-    }
-
-    .wind-site .page-common-body .page-common-body-menu .page-common-body-menu-box .page-common-body-menu-item[data-v-3b6e4be5] {
-        border: 0.093vh solid @deepblue;
-    }
-
-    //右侧导航栏第二个底色
-    .df-table .custom-table.el-table {
-        background: @white;
-        transition: @transition;
-    }
-
-    .general-appearance-body {
-        background: @white;
-        transition: @transition;
-    }
-
-    .booster-station-body {
-        background: @white;
-        transition: @transition;
-    }
-
-    .Inverter-Info .box-main .Inverter-Info-body .Inverter-Info-title {
-        position: relative;
-        background: @white;
-        transition: @transition;
-    }
-
-    //场站监视
-    .Inverter-Info .box-main .Inverter-Info-body .Inverter-Info-title .title {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    .Inverter-Info .box-main .Inverter-Info-body .Inverter-Info-title .title-tools-left {
-        color: @black;
-    }
-
-    table.table-form.mg-b-8 {
-        background: @white;
-        transition: @transition;
-    }
-
-    .Inverter-Info .box-main .Inverter-Info-body .inverter-datas .inverter-item .inverter-item-info .states {
-        background: @white;
-        transition: @transition;
-    }
-
-    .com-collapse .collapse-box .collapse-items .item.active {
-        color: @deepblue;
-        cursor: pointer;
-        font-weight: bold;
-    }
-
-    .matrix .panel-title .panel-title-name[data-v-2e858362] {
-        color: @deepblue;
-    }
-
-    .com-panel.line {
-        margin-left: 1px;
-        z-index: 1;
-    }
-
-    .wave {
-        z-index: 1;
-    }
-
-    .svg-icon.svg-icon-write svg use {
-        fill: @black;
-    }
-
-    .svg-icon.svg-icon-gray-l svg use {
-        fill: @black;
-    }
-
-    // 状态监视白色主题样式
-    .status-panel .status-com-panel .p-body .category-box[data-v-74094c42] {
-        width: 100%;
-        background-color: @white;
-        transition: @transition;
-        display: flex;
-        margin-bottom: 0.37vh;
-    }
-
-    .el-scrollbar__wrap {
-        background: rgb(220, 220, 220);
-        transition: @transition;
-    }
-
-    .map-1 .btn-group-tabs[data-v-0ec6dd0b] {
-        display: flex;
-        flex-direction: row;
-        background: @white;
-        height: 50px;
-    }
-
-    .status-panel .status-com-panel .p-body .item-box .data-item.light[data-v-74094c42] {
-        background-color: #ffffff;
-        position: relative;
-    }
-
-    .status-panel .status-com-panel .p-body .item-box .data-item.borders[data-v-74094c42] {
-        border-bottom: 2px solid @gray;
-    }
-
-    .status-panel .status-com-panel .p-body .item-box .data-item.light .f1[data-v-74094c42] {
-        color: @gray;
-    }
-    .status-panel .status-com-panel .p-body .item-box .data-item.light .f2[data-v-74094c42] {
-        color: @gray;
-    }
-    .status-panel .status-com-panel .p-body .item-box .data-item.light .f3[data-v-74094c42] {
-        color: @deepblue;
-    }
-    .status-panel .status-com-panel .p-body .item-box .data-item.light .f4[data-v-74094c42] {
-        color: @gray;
-    }
-    .status-panel .status-com-panel .p-body .item-box .data-item.light .f5[data-v-74094c42] {
-        color: @deepblue;
-    }
-
-    .status-panel .status-com-panel .p-body .category-box .score span[data-v-74094c42] {
-        color: @deepblue;
-    }
-
-    //驾驶舱模块-Agc白色主题样式
-    .com-panel2 .panel-header2 .panel-tools2 {
-        color: @black;
-        opacity: 0.3;
-    }
-
-    .panel-table .data-item .data-item-count {
-        color: @deepblue;
-    }
-
-    .com-panel2 .panel-header2 .panel-title2 {
-        color: @deepblue;
-    }
-
-    .com-panel2.green .panel-header2 .panel-title2 .panel-icon2 {
-        color: @black;
-    }
-
-    .com-panel2.green .panel-header2::after {
-        background-image: linear-gradient(to right, @white, rgba(5, 187, 76, 0));
-    }
-
-    // 风场
-    .station-tip {
-        background-color: @gray-l;
-        color: @black;
-    }
-
-    .el-table td.light,
-    .df-table .el-table td.light,
-    .main-body .custom-table.el-table td.light,
-    .df-table .custom-table.el-table td.light,
-    .main-body .el-table td.always-light,
-    .df-table .el-table td.always-light,
-    .main-body .custom-table.el-table td.always-light,
-    .df-table .custom-table.el-table td.always-light {
-        color: @deepblue  !important;
-        font-weight: bold;
-    }
-}

+ 0 - 129
src/assets/styles/theme/light/light-jjyx.css

@@ -1,129 +0,0 @@
-#appBody.light .static-main {
-  background: #fff;
-  border-color: #36348e;
-  border-radius: 12px;
-  flex: 0 0 130px;
-  margin-right: 5px;
-  transition: 0.25s;
-}
-#appBody.light .static-main .icon i {
-  background: #36348e;
-  border-color: #808080;
-  transition: 0.25s;
-}
-#appBody.light .static-main .icon i svg use {
-  fill: #fff;
-  transition: 0.25s;
-}
-#appBody.light .static-main .info .value {
-  color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .com-panel {
-  background: #ffffff;
-}
-#appBody.light .static-items {
-  background: #fff;
-  margin-right: 4px;
-  border-radius: 12px;
-  transition: 0.25s;
-}
-#appBody.light .static-items .static-items-title {
-  color: #36348e;
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .static-items .items .item {
-  margin-left: 4px;
-  border-radius: 12px;
-  background: rgba(128, 128, 128, 0.15);
-  transition: 0.25s;
-  font-weight: 700;
-}
-#appBody.light .static-items .items .item .title {
-  color: #36348e;
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .power-benchmarking-page .top .top-left .top-left-header .header-right > div.active,
-#appBody.light .power-benchmarking-page .top .top-left .top-left-header .header-right > div:hover {
-  background: rgba(54, 52, 142, 0.2);
-  border-color: #36348e;
-  color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .power-benchmarking-page .top .top-right .rank-title::before {
-  background: linear-gradient(135deg, rgba(54, 52, 142, 0.4), transparent, transparent, transparent, rgba(54, 52, 142, 0.4));
-}
-#appBody.light .power-benchmarking-page .top .top-right .rank-title {
-  border-color: #36348e;
-  color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .power-benchmarking-page .top .top-right .rank-title .border {
-  border-color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .power-benchmarking-page .top .top-right .rank-table.el-table thead tr th {
-  background: #F0F0F0;
-  color: #000;
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .power-benchmarking-page .top .top-right .rank-block {
-  border-color: #36348e;
-  background: rgba(54, 52, 142, 0.2);
-  transition: 0.25s;
-}
-#appBody.light .power-benchmarking-page .top .top-right .rank-table {
-  border-color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .top-right .el-table__body-wrapper {
-  background: #fff;
-  transition: 0.25s;
-}
-#appBody.light .main-body .el-table td,
-#appBody.light .main-body .custom-table.el-table td {
-  color: #000;
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .main-body .el-table tr:hover td,
-#appBody.light .main-body .custom-table.el-table tr:hover td {
-  color: #36348e;
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .power-benchmarking-page .top .top-right .rank-table.el-table.el-table--striped .el-table__body tr.el-table__row--striped td {
-  background: rgba(54, 52, 142, 0.1);
-  transition: 0.25s;
-}
-#appBody.light .power-benchmarking-page .top .top-right .rank-table.el-table.el-table--striped .el-table__body tr.el-table__row--striped:hover td {
-  background: rgba(54, 52, 142, 0.1) !important;
-  transition: 0.25s;
-}
-#appBody.light .top-left .el-table table {
-  background: #fff;
-  transition: 0.25s;
-}
-#appBody.light .top-left .el-table th,
-#appBody.light .top-left .el-table td {
-  font-weight: bold;
-  font-weight: 700;
-}
-#appBody.light .top-left .el-table thead tr:first-child th {
-  background: #F0F0F0;
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .top-left .el-table thead tr:last-child th {
-  background: #F0F0F0;
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .top-left .el-table th.light,
-#appBody.light .top-left .el-table td.light {
-  color: #36348e !important;
-  transition: 0.25s;
-}

+ 0 - 167
src/assets/styles/theme/light/light-jjyx.less

@@ -1,167 +0,0 @@
-// 经济运行模块白色主题样式
-
-@import "./setting.less";
-
-#appBody.light {
-    .static-main {
-        background   : #fff;
-        border-color : @deepblue;
-        border-radius: @borderRaduis;
-        transition   : @transition;
-        flex         : 0 0 130px;
-        margin-right : 5px;
-        transition   : @transition;
-
-        .icon i {
-            background  : @deepblue;
-            border-color: rgb(128, 128, 128);
-            transition  : @transition;
-
-            svg use {
-                fill      : #fff;
-                transition: @transition;
-            }
-        }
-
-        .info .value {
-            color     : @deepblue;
-            transition: @transition;
-        }
-    }
-.com-panel{
-    background: @white ;
-}
-    .static-items {
-        background   : #fff;
-        margin-right : 4px;
-        border-radius: @borderRaduis;
-        transition   : @transition;
-
-        .static-items-title {
-            color      : @deepblue;
-            font-weight: 700;
-            transition : @transition;
-        }
-
-        .items {
-            .item {
-                margin-left  : 4px;
-                border-radius: @borderRaduis;
-                background   : rgba(128, 128, 128, 0.15);
-                transition   : @transition;
-                font-weight  : 700;
-
-                .title {
-                    color      : @deepblue;
-                    font-weight: 700;
-                    transition : @transition;
-                }
-            }
-        }
-    }
-
-    .power-benchmarking-page .top .top-left .top-left-header .header-right>div.active,
-    .power-benchmarking-page .top .top-left .top-left-header .header-right>div:hover {
-        background  : rgba(54, 52, 142, 0.2);
-        border-color: @deepblue;
-        color       : @deepblue;
-        transition  : @transition;
-    }
-
-    .power-benchmarking-page .top .top-right .rank-title::before {
-        background: linear-gradient(135deg, rgba(54, 52, 142, 0.4), transparent, transparent, transparent, rgba(54, 52, 142, 0.4));
-    }
-
-    .power-benchmarking-page .top .top-right .rank-title {
-        border-color: @deepblue;
-        color       : @deepblue;
-        transition  : @transition;
-    }
-
-    .power-benchmarking-page .top .top-right .rank-title .border {
-        border-color: @deepblue;
-        transition  : @transition;
-    }
-
-    .power-benchmarking-page .top .top-right .rank-table.el-table thead tr th {
-        background : #F0F0F0;
-        color      : @black;
-        font-weight: 700;
-        transition : @transition;
-    }
-
-    .power-benchmarking-page .top .top-right .rank-block {
-        border-color: @deepblue;
-        background  : rgba(54, 52, 142, 0.2);
-        transition  : @transition;
-    }
-
-    .power-benchmarking-page .top .top-right .rank-table {
-        border-color: @deepblue;
-        transition  : @transition;
-    }
-
-    .top-right .el-table__body-wrapper {
-        background: #fff;
-        transition: @transition;
-    }
-
-    .main-body .el-table td,
-    .main-body .custom-table.el-table td {
-        color      : @black;
-        font-weight: 700;
-        transition : @transition;
-    }
-
-    .main-body .el-table tr:hover td,
-    .main-body .custom-table.el-table tr:hover td {
-        color      : @deepblue;
-        font-weight: 700;
-        transition : @transition;
-    }
-
-    .power-benchmarking-page .top .top-right .rank-table.el-table.el-table--striped .el-table__body tr.el-table__row--striped td {
-        background: rgba(54, 52, 142, 0.1);
-        transition: @transition;
-    }
-
-    .power-benchmarking-page .top .top-right .rank-table.el-table.el-table--striped .el-table__body tr.el-table__row--striped:hover td {
-        background: rgba(54, 52, 142, 0.1) !important;
-        transition: @transition;
-    }
-
-    .top-left .el-table {
-        // background: #fff;
-        // transition: @transition;
-
-        table {
-            background: #fff;
-            transition: @transition;
-        }
-
-        th,
-        td {
-            font-weight: bold;
-            font-weight: 700;
-        }
-
-        thead tr:first-child th {
-            background: #F0F0F0;
-            color     : @black;
-            transition: @transition;
-        }
-
-        thead tr:last-child th {
-            background: #F0F0F0;
-            color     : @black;
-            transition: @transition;
-        }
-
-
-        th.light,
-        td.light {
-            color     : @deepblue  !important;
-            transition: @transition;
-        }
-    }
-}

+ 0 - 422
src/assets/styles/theme/light/light-jsc.css

@@ -1,422 +0,0 @@
-#appBody.light {
-  color: #000;
-  background: #dcdddf;
-  transition: 0.25s;
-}
-#appBody.light .gray {
-  color: #000;
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .green {
-  color: #05bb4c;
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .green1 {
-  color: rgba(255, 255, 255, 0.8);
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .white {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light #app {
-  transition: 0.25s;
-}
-#appBody.light .panel-title {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .panel-tools {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .weather .other-info .text {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .weather .other-info div.svg-icon svg use {
-  fill: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .security-days .text {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .security-days .num {
-  color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .security-days .text1 {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .save-item .save-value {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .save-item .save-name {
-  color: #5e6269;
-  transition: 0.25s;
-}
-#appBody.light .tab-box .tab-item span svg use {
-  fill: #000;
-  transition: 0.25s;
-}
-#appBody.light . {
-  border: 0;
-  transition: 0.25s;
-}
-#appBody.light . .header-title svg g:nth-child(1) path,
-#appBody.light . .header-title svg g:nth-child(1) polygon {
-  fill: #000;
-  transition: 0.25s;
-}
-#appBody.light .weather-info span svg use {
-  fill: #000;
-  transition: 0.25s;
-}
-#appBody.light .tab-box .tab-item.active {
-  color: #36348e;
-  position: relative;
-  background-image: linear-gradient(to top, rgba(57, 54, 143, 0.5), rgba(5, 187, 76, 0));
-  transition: 0.25s;
-}
-#appBody.light .tab-box .tab-item.active1,
-#appBody.light .rightTitle .active1 {
-  color: #36348e;
-  position: relative;
-  background-image: linear-gradient(to top, rgba(57, 54, 143, 0.5), #ffffff);
-  transition: 0.25s;
-}
-#appBody.light .tab-box .tab-item.active::after,
-#appBody.light .rightTitle .active1::after {
-  transition: 0.25s;
-}
-#appBody.light .header-menu .header-menu-list .header-menu-item.active::after {
-  border: 0.093vh solid #36348e;
-  transition: 0.25s;
-}
-#appBody.light .header-menu .header-menu-list .header-menu-item.active {
-  color: #36348e;
-  position: relative;
-  background: linear-gradient(to top, rgba(57, 54, 143, 0.5), rgba(5, 187, 76, 0));
-  border: 0.093vh solid #36348e;
-  transition: color 0.25s ease-in-out;
-}
-#appBody.light .home .table-card {
-  outline: none;
-  transition: 0.25s;
-  overflow: hidden;
-}
-#appBody.light .coulometric-analysis .card-1 .card-icon svg use {
-  fill: #36348e;
-  filter: drop-shadow(0 0 6px #36348e);
-  transition: 0.25s;
-}
-#appBody.light .map .compass svg g:nth-child(3) g g path {
-  fill: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .map .compass svg g:nth-child(4) g g path {
-  fill: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .map .compass::after {
-  box-shadow: inset 0px -5px 10px 0px #36348e;
-  transition: 0.25s;
-}
-#appBody.light .name-box-period-label {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .name-box-period-value {
-  color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .query.mg-b-8 {
-  padding-top: 10px;
-}
-#appBody.light .query.mg-b-16 {
-  padding-top: 10px;
-}
-#appBody.light .svg-map-nx .item-label rect {
-  fill: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .svg-map-nx .item-label .mapKey {
-  fill: #fff;
-  transition: 0.25s;
-}
-#appBody.light .svg-map-nx .popup-layer-svg .mapKey {
-  fill: #fff;
-  transition: 0.25s;
-}
-#appBody.light .svg-map-nx #popup-box-svg rect {
-  fill: #36348e;
-  opacity: 0.8;
-  transition: 0.25s;
-}
-#appBody.light .svg-map-nx .esp-1 {
-  stroke: #36348e;
-}
-#appBody.light .svg-map-nx .esp-6 {
-  stroke: #36348e;
-}
-#appBody.light .svg-map-nx .esp-c {
-  stroke: #36348e;
-}
-#appBody.light .svg-map .item-label rect {
-  fill: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .svg-map .item-label .mapKey {
-  fill: #fff;
-  transition: 0.25s;
-}
-#appBody.light .svg-map .popup-layer-svg .mapKey {
-  fill: #fff;
-  transition: 0.25s;
-}
-#appBody.light .svg-map #popup-box-svg rect {
-  fill: #36348e;
-  opacity: 0.8;
-  transition: 0.25s;
-}
-#appBody.light .svg-map .esp-1 {
-  stroke: #36348e;
-}
-#appBody.light .svg-map .esp-6 {
-  stroke: #36348e;
-}
-#appBody.light .svg-map .esp-c {
-  stroke: #36348e;
-}
-#appBody.light .status {
-  background-color: #ffffff;
-  padding: 10px;
-  margin-top: 10px;
-  border-radius: 10px;
-}
-#appBody.light .status .table-box1 {
-  border: 0.093vh solid #ffffff;
-}
-#appBody.light .status .com-table tbody tr:nth-child(2n) {
-  background-color: #ffffff;
-}
-#appBody.light .monitorOverview .stationName {
-  color: #000000;
-}
-#appBody.light .monitorOverview .station-info .item-title {
-  color: #000000;
-}
-#appBody.light .monitorOverview .station-info .item-name {
-  color: #000000;
-}
-#appBody.light .monitorOverview .station-info .item-unit {
-  color: #000000;
-}
-#appBody.light .monitorOverview .model .energy-title {
-  color: #000000;
-  background-color: rgba(83, 98, 104, 0.4);
-}
-#appBody.light .monitorOverview .model1 .energy-title {
-  color: #000000;
-  background-color: rgba(83, 98, 104, 0.4);
-}
-#appBody.light .monitorOverview .energy-content .num {
-  color: #000000;
-}
-#appBody.light .com-panel-3,
-#appBody.light .com-panel,
-#appBody.light . {
-  background: #fff;
-  transition: 0.25s;
-}
-#appBody.light .com-panel-3 .dot,
-#appBody.light .com-panel.line:before {
-  background: #000;
-  transition: 0.25s;
-}
-#appBody.light .panel-header {
-  background: #fff;
-  transition: 0.25s;
-}
-#appBody.light .fengji-icon svg use {
-  fill: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .modal.el-dialog {
-  background: rgba(255, 255, 255, 0.85);
-  border: 1px solid rgba(57, 54, 143, 0.5);
-  box-shadow: 0px 8px 17px 1px rgb(57, 54, 143 / 30%);
-  border-radius: 12px;
-  transition: 0.25s;
-}
-#appBody.light .modal.el-dialog .el-dialog__title {
-  transition: 0.25s;
-}
-#appBody.light .situation-body .value span:nth-child(2) {
-  font-weight: 700;
-  transition: 0.25s;
-}
-#appBody.light .coulometric-analysis .card-title {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .com-panel,
-#appBody.light .panel-header,
-#appBody.light .home .table-card,
-#appBody.light .com-panel-3.situation,
-#appBody.light .el-menu--collapse,
-#appBody.light .el-sub-menu,
-#appBody.light .el-sub-menu__title,
-#appBody.light .el-menu--popup,
-#appBody.light .el-menu-item {
-  border-radius: 12px;
-  transition: 0.25s;
-}
-#appBody.light .com-panel {
-  padding-bottom: 10px;
-  transition: 0.25s;
-}
-#appBody.light .com-panel.line::before {
-  width: 4px;
-  height: 4px;
-  background: #000;
-  margin: 0.85vh 0.556vh 0vh 0.85vh;
-  transition: 0.25s;
-}
-#appBody.light .com-panel.line {
-  border-left: 0;
-  transition: 0.25s;
-}
-#appBody.light .lightMenu {
-  width: 0;
-  height: calc(100% - 71px);
-  position: absolute;
-  left: 14px;
-  top: 57px;
-  z-index: 100;
-  border-radius: 20px;
-  border: 0;
-  overflow: hidden;
-  transition: 0.25s;
-}
-#appBody.light .lightMenu.show {
-  width: 54px;
-  transition: 0.25s;
-}
-#appBody.light .main-body {
-  transition: 0.25s;
-}
-#appBody.light .dot.top-left {
-  top: 0.85vh;
-  left: 0.85vh;
-  background: #000;
-  transition: 0.25s;
-}
-#appBody.light .dot.bottom-left {
-  bottom: 0.85vh;
-  left: 0.85vh;
-  background: #000;
-  transition: 0.25s;
-}
-#appBody.light .dot.top-rignt {
-  top: 0.85vh;
-  right: 0.85vh;
-  background: #000;
-  transition: 0.25s;
-}
-#appBody.light .dot.bottom-right {
-  bottom: 0.85vh;
-  right: 0.85vh;
-  background: #000;
-  transition: 0.25s;
-}
-#appBody.light .lightMenu .el-menu--collapse {
-  width: 54px;
-  transition: 0.25s;
-}
-#appBody.light .lightMenu .el-menu--collapse {
-  height: 100%;
-}
-#appBody.light .lightMenu .el-sub-menu__title {
-  text-align: center;
-  vertical-align: middle;
-  padding: 0 20px;
-  transition: 0.25s;
-}
-#appBody.light .lightMenu .el-sub-menu__title i {
-  color: #fff;
-  transition: 0.25s;
-}
-#appBody.light .el-popper.is-light.is-pure .el-menu--popup {
-  padding: 0;
-}
-#appBody.light .el-popper.is-light.is-pure .el-menu--popup .el-menu-item-group__title {
-  padding: 0;
-}
-#appBody.light .el-popper.is-light.is-pure .el-menu--popup .el-menu-item {
-  height: 46px;
-  line-height: 46px;
-}
-#appBody.light .el-popper.is-light {
-  border: none;
-}
-#appBody.light .el-popper.is-light .el-menu {
-  border-radius: 0px;
-}
-#appBody.light .com-panel-3 {
-  border: 0;
-  transition: 0.25s;
-}
-#appBody.light .map .return {
-  color: rgba(0, 0, 0, 0.8);
-  transition: 0.25s;
-}
-#appBody.light .map .return use {
-  fill: #000;
-  transition: 0.25s;
-}
-#appBody.light .map .return:hover {
-  color: #36348e;
-  border-color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .map .return:hover use {
-  fill: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .name-box .name-box-title {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .zbtjfx .zbtjfx-body .zbtjfx-up .zbtjfx-up-panel {
-  background: #ffffff;
-  border: 1px solid #ffffff;
-}
-#appBody.light .zbtjfx .zbtjfx-body .zbtjfx-up .zbtjfx-up-panel .zbtjfx-up-panel-l {
-  border-right: 1px dashed #36348e;
-}
-#appBody.light .zbtjfx .zbtjfx-body .zbtjfx-up .zbtjfx-up-panel .zbtjfx-up-panel-r-t {
-  color: #36348e;
-}
-#appBody.light .zbtjfx .zbtjfx-body .zbtjfx-up .zbtjfx-up-panel .zbtjfx-up-panel-r-b {
-  color: #000000;
-}
-#appBody.light .zbtjfx .zbtjfx-body .zbtjfx-mi .zbtjfx-mi-panel {
-  background: #ffffff;
-  border: 1px solid #ffffff;
-}
-#appBody.light .zbtjfx .zbtjfx-body .zbtjfx-mi .zbtjfx-mi-panel .zbtjfx-mi-panel-text {
-  color: #666666;
-}
-#appBody.light .zbtjfx .zbtjfx-body .zbtjfx-mi .zbtjfx-mi-panel .zbtjfx-mi-panel-text .zbtjfx-mi-panel-text-green {
-  color: #05bb4c;
-}
-#appBody.light .zbtjfx .zbtjfx-body .zbtjfx-dn {
-  color: #000000;
-}

+ 0 - 590
src/assets/styles/theme/light/light-jsc.less

@@ -1,590 +0,0 @@
-// 驾驶舱模块白色主题样式
-
-@import "./setting.less";
-
-#appBody.light {
-  color: @black;
-  transition: @transition;
-
-  .gray {
-    color: @black;
-    font-weight: 700;
-    transition: @transition;
-  }
-
-  .green {
-    color: #05bb4c;
-    font-weight: 700;
-    transition: @transition;
-  }
-
-  .green1 {
-    color: fade(@white, 80);
-    font-weight: 700;
-    transition: @transition;
-  }
-
-  .white {
-    color: @black;
-    transition: @transition;
-  }
-
-  #app {
-    // background: rgb(220, 221, 223);
-    transition: @transition;
-  }
-
-  .panel-title {
-    color: @black;
-    transition: @transition;
-  }
-
-  .panel-tools {
-    color: @black;
-    transition: @transition;
-  }
-
-  .weather {
-    .other-info {
-      .text {
-        color: @black;
-        transition: @transition;
-      }
-
-      div.svg-icon svg use {
-        fill: @deepblue;
-        transition: @transition;
-      }
-    }
-  }
-
-  .security-days {
-    .text {
-      color: @black;
-      transition: @transition;
-    }
-
-    .num {
-      color: @deepblue;
-      transition: @transition;
-    }
-    .text1 {
-      color: @black;
-      transition: @transition;
-    }
-  }
-
-  .save-item {
-    .save-value {
-      color: @black;
-      transition: @transition;
-    }
-    .save-name {
-      color: #5e6269;
-      transition: @transition;
-    }
-  }
-
-  .tab-box {
-    .tab-item {
-      span {
-        svg {
-          use {
-            fill: @black;
-            transition: @transition;
-          }
-        }
-      }
-    }
-  }
-
-  .header-body {
-    border: 0;
-    transition: @transition;
-
-    .header-title {
-      svg {
-        g:nth-child(1) {
-          path,
-          polygon {
-            fill: @black;
-            transition: @transition;
-          }
-        }
-      }
-    }
-  }
-
-  .weather-info {
-    span svg use {
-      fill: @black;
-      transition: @transition;
-    }
-  }
-
-  .tab-box .tab-item.active {
-    color: @deepblue;
-    position: relative;
-    background-image: linear-gradient(
-      to top,
-      rgba(57, 54, 143, 0.5),
-      rgba(5, 187, 76, 0)
-    );
-    transition: @transition;
-  }
-  .tab-box .tab-item.active1,
-  .rightTitle .active1 {
-    color: @deepblue;
-    position: relative;
-    background-image: linear-gradient(
-      to top,
-      rgba(57, 54, 143, 0.5),
-      rgba(255, 255, 255, 1)
-    );
-    transition: @transition;
-  }
-
-  .tab-box .tab-item.active::after,
-  .rightTitle .active1::after {
-    // border: 0.093vh solid @deepblue;
-    transition: @transition;
-  }
-
-  .header-menu .header-menu-list .header-menu-item.active::after {
-    border: 0.093vh solid @deepblue;
-    transition: @transition;
-  }
-
-  .header-menu .header-menu-list .header-menu-item.active {
-    color: @deepblue;
-    position: relative;
-    background: linear-gradient(
-      to top,
-      rgba(57, 54, 143, 0.5),
-      rgba(5, 187, 76, 0)
-    );
-    border: 0.093vh solid @deepblue;
-    transition: color @transition ease-in-out;
-  }
-
-  .home .table-card {
-    outline: none;
-    transition: @transition;
-    overflow: hidden;
-  }
-
-  .coulometric-analysis {
-    .card-1 {
-      .card-icon {
-        svg use {
-          fill: @deepblue;
-          filter: drop-shadow(0 0 6px @deepblue);
-          transition: @transition;
-        }
-      }
-    }
-  }
-
-  .map .compass {
-    svg g:nth-child(3) {
-      g g path {
-        fill: @deepblue;
-        transition: @transition;
-      }
-    }
-
-    svg g:nth-child(4) {
-      g g path {
-        fill: @deepblue;
-        transition: @transition;
-      }
-    }
-
-    &::after {
-      box-shadow: inset 0px -5px 10px 0px @deepblue;
-      transition: @transition;
-    }
-  }
-
-  .name-box-period-label {
-    color: @black;
-    transition: @transition;
-  }
-
-  .name-box-period-value {
-    color: @deepblue;
-    transition: @transition;
-  }
-
-  .query {
-    &.mg-b-8 {
-      padding-top: 10px;
-    }
-    &.mg-b-16 {
-      padding-top: 10px;
-    }
-  }
-
-  .svg-map-nx {
-    .item-label {
-      rect {
-        fill: @deepblue;
-        transition: @transition;
-      }
-
-      .mapKey {
-        fill: #fff;
-        transition: @transition;
-      }
-    }
-
-    .popup-layer-svg {
-      .mapKey {
-        fill: #fff;
-        transition: @transition;
-      }
-    }
-
-    #popup-box-svg rect {
-      fill: @deepblue;
-      opacity: 0.8;
-      transition: @transition;
-    }
-
-    .esp-1 {
-      stroke: @deepblue;
-    }
-
-    .esp-6 {
-      stroke: @deepblue;
-    }
-
-    .esp-c {
-      stroke: @deepblue;
-    }
-  }
-
-  .svg-map {
-    .item-label {
-      rect {
-        fill: @deepblue;
-        transition: @transition;
-      }
-
-      .mapKey {
-        fill: #fff;
-        transition: @transition;
-      }
-    }
-
-    .popup-layer-svg {
-      .mapKey {
-        fill: #fff;
-        transition: @transition;
-      }
-    }
-
-    #popup-box-svg rect {
-      fill: @deepblue;
-      opacity: 0.8;
-      transition: @transition;
-    }
-
-    .esp-1 {
-      stroke: @deepblue;
-    }
-
-    .esp-6 {
-      stroke: @deepblue;
-    }
-
-    .esp-c {
-      stroke: @deepblue;
-    }
-  }
-  .status {
-    background-color: #ffffff;
-    padding: 10px;
-    margin-top: 10px;
-    border-radius: 10px;
-    .table-box1 {
-      border: 0.093vh solid #ffffff;
-    }
-    .com-table tbody tr:nth-child(2n) {
-      background-color: #ffffff;
-    }
-  }
-  .monitorOverview {
-    .stationName {
-      color: #000000;
-    }
-    .station-info .item-title {
-      color: #000000;
-    }
-    .station-info .item-name {
-      color: #000000;
-    }
-    .station-info .item-unit {
-      color: #000000;
-    }
-    .model .energy-title {
-      color: #000000;
-      background-color: rgba(83, 98, 104, 0.4);
-      // background: #fff;
-    }
-
-    .model1 .energy-title {
-      color: #000000;
-      background-color: rgba(83, 98, 104, 0.4);
-      // background: #fff;
-    }
-
-    .energy-content .num {
-      color: #000000;
-    }
-  }
-  .com-panel-3,
-  .com-panel,
-  .header-body {
-    background: #fff;
-    transition: @transition;
-  }
-
-  .com-panel-3 .dot,
-  .com-panel.line:before {
-    background: @black;
-    transition: @transition;
-  }
-
-  .panel-header {
-    background: #fff;
-    transition: @transition;
-  }
-
-  .fengji-icon {
-    svg use {
-      fill: @deepblue;
-      transition: @transition;
-    }
-  }
-
-  .modal.el-dialog {
-    background: rgba(255, 255, 255, 0.85);
-    border: 1px solid rgba(57, 54, 143, 0.5);
-    box-shadow: 0px 8px 17px 1px rgb(57, 54, 143 / 30%);
-    border-radius: @borderRaduis;
-    transition: @transition;
-  }
-
-  .modal.el-dialog .el-dialog__title {
-    // color: rgba(0, 0, 0, 0.75);
-    transition: @transition;
-  }
-
-  .situation-body {
-    .value span:nth-child(2) {
-      font-weight: 700;
-      transition: @transition;
-    }
-  }
-
-  .coulometric-analysis .card-title {
-    color: @black;
-    transition: @transition;
-  }
-
-  .com-panel,
-  .panel-header,
-  .home .table-card,
-  .com-panel-3.situation,
-  .el-menu--collapse,
-  .el-sub-menu,
-  .el-sub-menu__title,
-  .el-menu--popup,
-  .el-menu-item {
-    border-radius: @borderRaduis;
-    transition: @transition;
-  }
-
-  .com-panel {
-    padding-bottom: 10px;
-    transition: @transition;
-  }
-
-  .com-panel.line::before {
-    width: 4px;
-    height: 4px;
-    background: @black;
-    margin: 0.85vh 0.556vh 0vh 0.85vh;
-    transition: @transition;
-  }
-
-  .com-panel.line {
-    border-left: 0;
-    transition: @transition;
-  }
-
-  .lightMenu {
-    width: 0;
-    height: calc(100% - 71px);
-    position: absolute;
-    left: 14px;
-    top: 57px;
-    z-index: 100;
-    border-radius: 20px;
-    border: 0;
-    overflow: hidden;
-    transition: @transition;
-  }
-
-  .lightMenu.show {
-    width: 54px;
-    transition: @transition;
-  }
-
-  .main-body {
-    transition: @transition;
-  }
-
-  .dot.top-left {
-    top: 0.85vh;
-    left: 0.85vh;
-    background: @black;
-    transition: @transition;
-  }
-
-  .dot.bottom-left {
-    bottom: 0.85vh;
-    left: 0.85vh;
-    background: @black;
-    transition: @transition;
-  }
-
-  .dot.top-rignt {
-    top: 0.85vh;
-    right: 0.85vh;
-    background: @black;
-    transition: @transition;
-  }
-
-  .dot.bottom-right {
-    bottom: 0.85vh;
-    right: 0.85vh;
-    background: @black;
-    transition: @transition;
-  }
-
-  .lightMenu .el-menu--collapse {
-    width: 54px;
-    transition: @transition;
-  }
-
-  .lightMenu .el-menu--collapse {
-    height: 100%;
-  }
-
-  .lightMenu .el-sub-menu__title {
-    text-align: center;
-    vertical-align: middle;
-    padding: 0 20px;
-    transition: @transition;
-  }
-
-  .lightMenu .el-sub-menu__title i {
-    color: #fff;
-    transition: @transition;
-  }
-
-  .el-popper.is-light.is-pure .el-menu--popup {
-    padding: 0;
-
-    .el-menu-item-group__title {
-      padding: 0;
-    }
-
-    .el-menu-item {
-      height: 46px;
-      line-height: 46px;
-    }
-  }
-
-  .el-popper.is-light {
-    border: none;
-
-    .el-menu {
-      border-radius: 0px;
-    }
-  }
-
-  .com-panel-3 {
-    border: 0;
-    transition: @transition;
-  }
-
-  .map .return {
-    color: rgba(0, 0, 0, 0.8);
-    transition: @transition;
-
-    use {
-      fill: @black;
-      transition: @transition;
-    }
-  }
-
-  .map .return:hover {
-    color: @deepblue;
-    border-color: @deepblue;
-    transition: @transition;
-
-    use {
-      fill: @deepblue;
-      transition: @transition;
-    }
-  }
-
-  .name-box {
-    .name-box-title {
-      color: @black;
-      transition: @transition;
-    }
-  }
-
-  background: rgb(220, 221, 223);
-  transition: @transition;
-
-  .zbtjfx .zbtjfx-body {
-    .zbtjfx-up .zbtjfx-up-panel {
-      background: #ffffff;
-      border: 1px solid #ffffff;
-
-      .zbtjfx-up-panel-l {
-        border-right: 1px dashed #36348e;
-      }
-
-      .zbtjfx-up-panel-r-t {
-        color: #36348e;
-      }
-
-      .zbtjfx-up-panel-r-b {
-        color: #000000;
-      }
-    }
-
-    .zbtjfx-mi .zbtjfx-mi-panel {
-      background: #ffffff;
-      border: 1px solid #ffffff;
-
-      .zbtjfx-mi-panel-text {
-        color: #666666;
-
-        .zbtjfx-mi-panel-text-green {
-          color: #05bb4c;
-        }
-      }
-    }
-
-    .zbtjfx-dn {
-      color: #000000;
-    }
-  }
-}

+ 0 - 196
src/assets/styles/theme/light/light-qt.css

@@ -1,196 +0,0 @@
-#appBody.light .sjcx-item {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .sjcx-item:hover {
-  color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .imgTitle {
-  color: #000;
-  transition: 0.25s;
-}
-#appBody.light .imgItem1:hover .imgTitle {
-  color: #36348e;
-  transition: 0.25s;
-}
-#appBody.light .el-carousel__item {
-  border-radius: 12px;
-}
-#appBody.light .el-date-editor.is-active,
-#appBody.light body .el-date-editor.is-active:hover,
-#appBody.light body .el-date-editor.is-focus .el-input__inner {
-  border-color: #36348e;
-}
-#appBody.light .el-date-editor .el-range__icon {
-  color: #000;
-}
-#appBody.light .el-date-editor .el-range__close-icon {
-  color: #000;
-}
-#appBody.light .el-picker-panel .el-picker-panel__footer {
-  background: #36348e;
-  border-color: #36348e;
-}
-#appBody.light .el-picker-panel .el-picker-panel__footer .el-button.is-plain {
-  color: #36348e;
-}
-#appBody.light .el-date-editor.el-date-editor--datetimerange .el-range-input {
-  color: #000;
-}
-#appBody.light .el-date-editor.el-date-editor--datetimerange .el-range-separator {
-  color: #000;
-}
-#appBody.light .main-body .el-card .el-card__header {
-  color: #000;
-  background: #ffffff;
-}
-#appBody.light .el-radio.is-bordered.el-radio--small .el-radio__label {
-  color: #000;
-}
-#appBody.light .el-radio.is-bordered.is-checked {
-  border-color: #36348e;
-}
-#appBody.light .el-radio.is-checked .el-radio__inner {
-  background: #36348e;
-  border-color: #36348e;
-}
-#appBody.light .el-radio.is-checked .el-radio__label {
-  color: #36348e;
-}
-#appBody.light .el-tree {
-  color: #000;
-  background: #ffffff;
-}
-#appBody.light .el-tree-node__expand-icon {
-  color: #000;
-}
-#appBody.light .el-tree.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
-  color: #36348e;
-}
-#appBody.light .el-tree .el-tree-node__content:hover,
-#appBody.light body .el-tree .el-upload-list__item:hover {
-  color: #36348e;
-  font-weight: bold;
-}
-#appBody.light .el-tree .el-checkbox__inner:hover {
-  border-color: #159AFA;
-}
-#appBody.light .el-picker-panel.el-date-range-picker .el-date-range-picker__content .el-date-table td.end-date span,
-#appBody.light .el-picker-panel.el-date-range-picker .el-date-range-picker__content .el-date-table td.start-date span {
-  background: rgba(54, 52, 142, 0.2);
-}
-#appBody.light .com-table td {
-  color: #000 !important;
-}
-#appBody.light .el-input__prefix {
-  color: #000;
-}
-#appBody.light .el-input__suffix {
-  color: #000;
-}
-#appBody.light .el-popper.el-select__popper[role="tooltip"] {
-  background: #ffffff;
-}
-#appBody.light .el-popper__arrow::before {
-  background: #ffffff !important;
-  border: 1px solid #ffffff !important;
-}
-#appBody.light .el-popper.el-select__popper[role="tooltip"] .el-select-dropdown__item.selected {
-  color: #36348e;
-}
-#appBody.light .el-popper.el-select__popper[role="tooltip"] .el-select-dropdown__item.hover {
-  background: #36348e;
-  color: #ffffff;
-}
-#appBody.light .el-popper.el-select__popper[role="tooltip"] .el-select-dropdown__item:hover {
-  background: #36348e;
-  color: #ffffff;
-}
-#appBody.light .el-select .el-input .el-select__caret {
-  color: #000;
-}
-#appBody.light .el-picker-panel.el-date-picker td.current .cell {
-  background-color: rgba(54, 52, 142, 0.2);
-  color: #36348e;
-}
-#appBody.light .el-tabs--card > .el-tabs__header .el-tabs__nav {
-  border: 1px solid #36348e;
-  background: rgba(54, 52, 142, 0.2);
-}
-#appBody.light .tab .el-tabs__item.is-active {
-  color: #36348e;
-  font-weight: bold;
-}
-#appBody.light .el-tabs--card > .el-tabs__header .el-tabs__item {
-  border-bottom: 1px solid #36348e;
-}
-#appBody.light .tab .el-tabs__item {
-  color: #000;
-}
-#appBody.light .el-pagination .btn-next .el-icon,
-#appBody.light .el-pagination .btn-prev .el-icon {
-  color: #000;
-}
-#appBody.light .el-pagination.is-background .el-pager li:not(.disabled).active {
-  background: linear-gradient(to top, #4b55ae, #36348e);
-  color: #ffffff;
-}
-#appBody.light .el-table__row {
-  background: #ffffff;
-}
-#appBody.light .el-popper.el-cascader__dropdown[role="tooltip"] .el-cascader-node.is-selectable.in-checked-path {
-  color: #000;
-}
-#appBody.light .el-popper.el-cascader__dropdown[role="tooltip"] .el-cascader-node:not(.is-disabled):hover {
-  color: #36348e;
-}
-#appBody.light .alarm-center .fj .fj-item .fj-title {
-  color: #000;
-}
-#appBody.light .action-bar .selections .item {
-  background: #ffffff;
-}
-#appBody.light .number {
-  background: #ffffff;
-  color: #000;
-}
-#appBody.light .custom-report-items .title {
-  background: #ffffff;
-  color: #000;
-}
-#appBody.light .el-pagination .el-pager li {
-  color: #000;
-}
-#appBody.light .know-info .table-card tr[data-v-68c7e6e4] {
-  font-size: 12px;
-  color: #000;
-}
-#appBody.light .mg-b-8 {
-  background: #dcdddf;
-}
-#appBody.light .mg-b-8[data-v-85e4c29a] {
-  width: 150vh;
-}
-#appBody.light .main-body .query .query-items[data-v-2fab00f5] {
-  padding-bottom: 1vh;
-}
-#appBody.light .main-body .query .query-items[data-v-2d26d8fa] {
-  padding-bottom: 1vh;
-}
-#appBody.light .el-table th.el-table__cell > .cell {
-  color: #000;
-  height: 3.8vh;
-  padding-top: 0.6vh;
-}
-#appBody.light .el-time-panel__footer {
-  background: #36348e;
-}
-#appBody.light .swiperBox .imageBox1 .imgItem1 .img1[data-v-247ee960]:hover,
-#appBody.light .itemBox .imageBox1 .imgItem1 .img1[data-v-247ee960]:hover {
-  border: 3px solid #36348e;
-}
-#appBody.light .el-picker-panel.el-date-range-picker .el-date-range-picker__time-header .el-date-range-picker__time-picker-wrap .el-time-panel .el-time-spinner__item:hover:not(.disabled):not(.active) {
-  color: #36348e;
-  font-weight: bold;
-}

+ 0 - 272
src/assets/styles/theme/light/light-qt.less

@@ -1,272 +0,0 @@
-// 其他模块白色主题样式
-
-@import "./setting.less";
-
-#appBody.light {
-
-    .sjcx-item {
-        color: @black;
-        transition: @transition;
-    }
-
-    .sjcx-item:hover {
-        color: @deepblue;
-        transition: @transition;
-    }
-
-    .imgTitle {
-        color: @black;
-        transition: @transition;
-    }
-
-    .imgItem1:hover .imgTitle {
-        color: @deepblue;
-        transition: @transition;
-    }
-
-    .el-carousel__item {
-        border-radius: @borderRaduis;
-    }
-
-
-    //原始数据查询-测点历史数据查询
-    .el-date-editor.is-active,
-    body .el-date-editor.is-active:hover,
-    body .el-date-editor.is-focus .el-input__inner {
-        border-color: @deepblue;
-    }
-
-    .el-date-editor .el-range__icon {
-        color: @black;
-    }
-
-    .el-date-editor .el-range__close-icon {
-        color: @black;
-    }
-
-    .el-picker-panel .el-picker-panel__footer {
-        background: @deepblue;
-        border-color: @deepblue;
-    }
-
-    .el-picker-panel .el-picker-panel__footer .el-button.is-plain {
-        color: @deepblue;
-    }
-
-    .el-date-editor.el-date-editor--datetimerange .el-range-input {
-        color: @black;
-    }
-
-    .el-date-editor.el-date-editor--datetimerange .el-range-separator {
-        color: @black;
-    }
-
-    .main-body .el-card .el-card__header {
-        color: @black;
-        background: @white;
-    }
-
-    .el-radio.is-bordered.el-radio--small .el-radio__label {
-        color: @black;
-    }
-
-    .el-radio.is-bordered.is-checked {
-        border-color: @deepblue;
-    }
-
-    .el-radio.is-checked .el-radio__inner {
-        background: @deepblue;
-        border-color: @deepblue;
-    }
-
-    .el-radio.is-checked .el-radio__label {
-        color: @deepblue;
-    }
-
-    .el-tree {
-        color: @black;
-        background: @white;
-    }
-
-    .el-tree-node__expand-icon {
-        color: @black;
-    }
-
-    .el-tree.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
-        color: @deepblue;
-    }
-
-    .el-tree .el-tree-node__content:hover,
-    body .el-tree .el-upload-list__item:hover {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    .el-tree .el-checkbox__inner:hover {
-        border-color: @blue;
-    }
-
-    .el-picker-panel.el-date-range-picker .el-date-range-picker__content .el-date-table td.end-date span,
-    .el-picker-panel.el-date-range-picker .el-date-range-picker__content .el-date-table td.start-date span {
-        background: rgba(@deepblueBg, 0.2);
-    }
-
-    // 原始数据查询-数据导出
-    .com-table td {
-        color: @black  !important;
-    }
-
-    .el-input__prefix {
-        color: @black;
-    }
-
-    .el-input__suffix {
-        color: @black;
-    }
-
-    .el-popper.el-select__popper[role="tooltip"] {
-        background: @white;
-    }
-
-    .el-popper__arrow::before {
-        background: @white  !important;
-        border: 1px solid @white  !important;
-    }
-
-    .el-popper.el-select__popper[role="tooltip"] .el-select-dropdown__item.selected {
-        color: @deepblue;
-    }
-
-    .el-popper.el-select__popper[role="tooltip"] .el-select-dropdown__item.hover {
-        background: @deepblue;
-        color: @white;
-    }
-
-    .el-popper.el-select__popper[role="tooltip"] .el-select-dropdown__item:hover {
-        background: @deepblue;
-        color: @white;
-    }
-
-    .el-select .el-input .el-select__caret {
-        color: @black;
-    }
-    .el-picker-panel.el-date-picker td.current .cell{
-        background-color: rgba(@deepblueBg, 0.2);
-        color: @deepblue;
-    }   
-
-    //设备管理
-    .el-tabs--card>.el-tabs__header .el-tabs__nav {
-        border: 1px solid @deepblue;
-        background: rgba(@deepblueBg, 0.2);
-    }
-
-    .tab .el-tabs__item.is-active {
-        color: @deepblue;
-        font-weight: bold;
-    }
-
-    .el-tabs--card>.el-tabs__header .el-tabs__item {
-        border-bottom: 1px solid @deepblue;
-    }
-
-    .tab .el-tabs__item {
-        color: @black;
-    }
-
-    .el-pagination .btn-next .el-icon,
-    .el-pagination .btn-prev .el-icon {
-        color: @black;
-    }
-
-    .el-pagination.is-background .el-pager li:not(.disabled).active {
-        background: linear-gradient(to top, #4b55ae, #36348e);
-        color: @white;
-    }
-
-    .el-table__row {
-        background: @white;
-    }
-
-    .el-popper.el-cascader__dropdown[role="tooltip"] .el-cascader-node.is-selectable.in-checked-path {
-        color: @black;
-    }
-
-    .el-popper.el-cascader__dropdown[role="tooltip"] .el-cascader-node:not(.is-disabled):hover {
-        color: @deepblue;
-    }
-
-    //预警记录-预警管理
-    .alarm-center .fj .fj-item .fj-title {
-        color: @black;
-    }
-
-    .action-bar .selections .item {
-        background: @white;
-    }
-
-    //预警记录-升压站报警
-    .number {
-        background: @white;
-        color: @black;
-    }
-
-    //预警记录-自定义报警记录
-    .custom-report-items .title {
-        background: @white;
-        color: @black;
-    }
-
-    .el-pagination .el-pager li {
-        color: @black;
-    }
-
-    .title {
-        // background: @white;
-    }
-
-    //专家知识-故障知识列表
-    .know-info .table-card tr[data-v-68c7e6e4] {
-        font-size: 12px;
-        color: @black;
-    }
-
-    //样本库-故障训练样本库
-    .mg-b-8 {
-        background: @gray-2;
-    }
-
-    .mg-b-8[data-v-85e4c29a] {
-        width: 150vh;
-    }
-
-    .main-body .query .query-items[data-v-2fab00f5] {
-        padding-bottom: 1vh;
-    }
-
-    .main-body .query .query-items[data-v-2d26d8fa] {
-        padding-bottom: 1vh;
-    }
-
-    //样本库-知识库
-    .el-table th.el-table__cell>.cell {
-        color: @black;
-        height: 3.8vh;
-        padding-top: 0.6vh;
-    }
-    .el-time-panel__footer{
-        background: @deepblue;
-    }
-
-    .swiperBox .imageBox1 .imgItem1 .img1[data-v-247ee960]:hover,
-    .itemBox .imageBox1 .imgItem1 .img1[data-v-247ee960]:hover {
-        border: 3px solid @deepblue;
-    }
-
-    .el-picker-panel.el-date-range-picker .el-date-range-picker__time-header 
-    .el-date-range-picker__time-picker-wrap 
-    .el-time-panel .el-time-spinner__item:hover:not(.disabled):not(.active){
-        color: @deepblue;
-        font-weight: bold;
-    }
-}

+ 0 - 140
src/assets/styles/theme/light/light-sp.less

@@ -1,140 +0,0 @@
-// 沙盘模块白色主题样式
-
-@import "./setting.less";
-
-#appBody.light {
-    .com-panel-sand {
-        background   : #fff;
-        border-top   : 1px solid transparent;
-        border-radius: @borderRaduis;
-        transition   : @transition;
-    }
-
-    .com-panel-sand::after {
-        background: transparent;
-        transition: @transition;
-    }
-
-    .com-panel-sand-header {
-        border-color: @deepblue;
-        font-weight : 700;
-        transition  : @transition;
-    }
-
-    .com-panel-sand .com-panel-sand-header::after,
-    .com-panel-sand .com-panel-sand-header::before {
-        background: @deepblue;
-        transition: @transition;
-    }
-
-    .com-panel-sand .com-panel-body .other-info {
-        .value {
-            color      : @black;
-            font-weight: 700;
-            transition : @transition;
-        }
-
-        .text {
-            color      : @black;
-            font-weight: 700;
-            transition : @transition;
-        }
-    }
-
-    .com-panel-sand .rank-table th {
-        color      : @black;
-        font-weight: 700;
-        transition : @transition;
-    }
-
-    .com-panel-sand .rank-table td {
-        font-weight: 700;
-        transition : @transition;
-    }
-
-    .sand-table-bottom {
-        .p-panel {
-            background   : #fff;
-            border-radius: @borderRaduis;
-        }
-
-        .p-panel-title {
-            color      : @black;
-            font-weight: 700;
-            transition : @transition;
-        }
-
-        .pp-info-data .gray-l {
-            color      : rgb(128, 128, 128);
-            font-weight: 700;
-            transition : @transition;
-        }
-    }
-
-    .sand-table-right .com-panel-body .com-table {
-        th {
-            color      : rgb(128, 128, 128);
-            font-weight: 700;
-            transition : @transition;
-        }
-
-
-        th.light {
-            color      : @deepblue  !important;
-            font-weight: 700;
-            transition : @transition;
-        }
-
-        td {
-            color      : @black;
-            font-weight: 700;
-            transition : @transition;
-        }
-
-        td.light {
-            color      : @deepblue  !important;
-            font-weight: 700;
-            transition : @transition;
-        }
-    }
-
-    .modal {
-        .el-dialog__body {
-            background: rgba(255, 255, 255, 0.8);
-            transition: @transition;
-
-
-            .el-form-item__label {
-                color     : @black;
-                transition: @transition;
-            }
-
-            .el-input__inner {
-                // background   : rgba(0, 0, 0, 0.5);
-                border :1px solid rgba(0, 0, 0, 0.5);
-                border-radius: @borderRaduis;
-                transition   : @transition;
-            }
-        }
-    }
-
-    .weatherBox {
-        .r {
-            .el-collapse-item__content {
-                background : transparent;
-                color      : @black;
-                font-weight: 700;
-                padding    : 20px;
-                transition : @transition;
-            }
-
-            .el-collapse-item__header {
-                background   : transparent;
-                border-bottom: 1px solid #999;
-                color        : rgba(0, 0, 0, 0.75);
-                transition   : @transition;
-            }
-        }
-
-    }
-}

+ 0 - 14
src/assets/styles/theme/light/setting.less

@@ -1,14 +0,0 @@
-// 亮色样式配置
-
-@black      : #000;
-@transition : 0.25s;
-@deepblue   : #36348e;
-@mapContentBright : red;
-@borderRaduis: 12px;
-@blue : #159AFA;
-@white : #ffffff;
-@gray-l     : #B3BDC0;
-@darkgray-1 : #7b7d7e;
-@green      : #05bb4c;
-@deepblueBg : 54, 52, 142;
-@gray-2:#dcdddf;

+ 0 - 445
src/assets/styles/theme/light/zhjx.less

@@ -1,445 +0,0 @@
-@import "./setting.less";
-#appBody.light {
-	// 故障诊断
-	.el-table{
-		th{
-			color:@black;
-		}
-		
-		.el-table__body tr.hover-row.current-row > td,
-		.el-table__body tr.hover-row.el-table__row--striped.current-row > td,
-		.el-table__body tr.hover-row.el-table__row--striped > td,
-		.el-table__body tr.hover-row > td {
-		  color: @blue;
-		}
-		
-		.ascending .sort-caret.ascending {
-		  border-bottom-color: @deepblue;
-		}
-		
-		.descending .sort-caret.descending {
-		  border-top-color: @deepblue;
-		}
-	} 
-	
-	
-	// 故障回溯
-	.el-checkbox {
-	  color: @black;
-	
-	  &.is-bordered {
-	    &.is-checked {
-	      border-color: @deepblue;
-	    }
-	  }
-	
-	  .el-checkbox__input.is-checked + .el-checkbox__label {
-	    color: @deepblue;
-	  }
-	  .el-checkbox__input.is-disabled+span.el-checkbox__label{
-		  color: @black;
-	  }
-	  .el-checkbox__input.is-checked .el-checkbox__inner,
-	  .el-checkbox__input.is-indeterminate .el-checkbox__inner {
-	    background-color: @deepblue;
-	    border-color: @deepblue;
-	  }
-	
-	  .el-checkbox__input.is-focus .el-checkbox__inner {
-	    border-color: @deepblue;
-	  }
-	}
-	
-	.time-axis-box {
-	    .time-axis-progress-box {
-	        .time-axis-progress {
-	            background: fade(@deepblue, 60);
-	        }
-	        .time-axis-progress-scale {
-	            border: 1px solid @deepblue;
-	        }
-	    }
-	}
-	
-	.fdp-sub-title {
-	    color: @deepblue;
-	}
-	
-	// 健康推荐
-  .selections {
-	.item {
-	  color: @black;
-	  background: fade(@black, 20);
-	  border: 1px solid fade(@black, 20);
-
-	  &:hover,
-	  &.active {
-		background: fade(@deepblue, 20);
-		border: 1px solid @deepblue;
-		color: @deepblue;
-	  }
-	}
-  }
-
-  .power-info {
-
-	.info-tab {
-	  .tab {
-		color: @black;
-		background: fade(@black, 20);
-		border: 1px solid fade(@black, 20);
-		i {
-		  svg use {
-			fill: @black;
-		  }
-		}
-
-		&:hover,
-		&.active {
-		  background: fade(@deepblue, 20);
-		  border: 1px solid @deepblue;
-		  color: @deepblue;
-
-		  i svg use {
-			fill: @deepblue;
-		  }
-		}
-
-		&.active::after {
-		  border-bottom: 9px solid @deepblue;
-		}
-
-		&.active::before {
-		  border-bottom: 9px solid #063319;
-		}
-	  }
-
-	}
-  }
-
-  .health-report {
-	// 健康报告 按钮样式
-	.actions {
-		.active{
-			border: 1px solid @deepblue;
-		}
-	  .item {
-		color: fade(@white, 75);
-		&.green {
-		  background: @deepblue;
-		}
-
-		&.purple {
-		  background: @purple;
-		}
-
-		&.gray {
-		  background: @black;
-		}
-	  }
-	}
-
-	.report-items {
-
-	  .item {
-		.title {
-		  background: fade(@black, 40);
-		  color: @black;
-		}
-
-		.info {
-		  background: fade(@black, 20);
-		  color: @font-color;
-		  .actions {
-			.success {
-			  border-color:@deepblue;
-			  color: @deepblue;
-			  background: fade(@deepblue,20);
-			}
-		  }
-		}
-	  }
-	}
-  }
-  
-  // 健康推荐-已分配任务
-  .track-info {
-    .form-info {
-      .work-flow {
-        background: fade(@gray, 20);
-        .work-flow-line {
-          background: @deepblue;
-        }
-  
-        .work-flow-item {
-          &.active {
-			  background: none;
-            .work-flow-icon-item {
-              .work-flow-icon-o {
-                  border: 1px solid @deepblue;
-                }
-  
-                .work-flow-icon-i {
-                  border: 2px solid @deepblue;
-                  background: linear-gradient(to bottom, @gray-l 0%,@gray-l 20%,@deepblue 100%);
-                }
-  
-                .svg-icon {
-                  svg {
-                    use {
-                      fill: @deepblue;
-                    }
-                  }
-                }
-            }
-  
-            .work-flow-text {
-              color: @deepblue;
-            }
-          }
-  
-          .work-flow-icon-item {
-            .work-flow-icon-o {
-              border: 1px solid #B3BDC0;
-            }
-  
-            .work-flow-icon-m {
-              border: 4px solid #212b2b;
-            }
-  
-            .work-flow-icon-i {
-              border: 2px solid @gray-l;
-              background: linear-gradient(to bottom, @gray 0%,@gray 20%,@gray-l 100%);
-            }
-  
-            .svg-icon {
-              svg {
-                use {
-                  fill: @gray-l;
-                }
-              }
-            }
-          }
-          .work-flow-text {
-              color: @black;
-            }
-        }
-      }
-    }
-  
-    .evaluate {
-  
-      .evaluate-item {
-        .evaluate-label,
-        .evaluate-unit {
-          color: @black;
-        }
-      }
-    }
-    .tabs {
-      border-left: 1px solid #53626833;
-  
-      .tab-box {
-  
-      .tab-item {
-        &.active {
-          color: @deepblue;
-          background-image: @deepblueLinearTop;
-  
-          &::after {
-            border: 1px solid @deepblue;
-          }
-        }
-      }
-    }
-    }
-  }
-  
-  .el-textarea {
-    .el-textarea__inner {
-      color: @black;
-	  background: fade(@gray-l, 20);
-    }
-  }
-  
-  .defect-elimination-tracking {
-	  background: fade(@white, 95);
-	  border: 1px solid fade(@deepblue, 50);
-	  
-    .defect-elimination-tracking-close {
-      &:hover {
-        i {
-          color: @blue;
-        }
-      }
-    }
-  
-    .header-tile-box {
-      .header-tile {
-  
-        .info-form-box {
-          .info-form {
-            .info-form-label {
-              color: @gray;
-            }
-            .info-form-value {
-              color: @black;
-            }
-          }
-        }
-      }
-    }
-    .det-chart-title {
-      color: @black;
-    }
-  
-    .det-chart-sub-title {
-      color: @black;
-    }
-  
-    .det-chart-sub-title-big {
-      color: @black;
-    }
-  }
-  
-  .health-2 {
-    // 电量健康情况
-    .power-info {
-      .info-tab {
-  
-        .tab {
-          color: @black;
-  
-          &:hover,
-          &.active {
-            background: fade(@deepblue, 20);
-            border: 1px solid @deepblue;
-            color: @deepblue;
-            i {
-              svg use {
-                fill: @deepblue;
-              }
-            }
-          }
-  
-          &.active::after {
-            border-bottom: 9px solid @deepblue;
-          }
-        }
-      }
-  
-    }
-    // 风场信息
-    .fc-info {
-      .fc-item {
-  
-        & > .title {
-          color: fade(@black, 75);
-        }
-  
-  
-        .tags {
-          .tag {
-            .tag-title {
-              color: @black;
-            }
-  
-            .tag-value {
-              color: @deepblue;
-              .unit {
-                color: @gray;
-              }
-            }
-          }
-        }
-        .health-info {
-          .title {
-            color: @black;
-            .actions {
-              .action {
-				  color: @gray;
-				  svg use {
-				    fill: @gray;
-				  }
-                &.active,
-                &:hover {
-					background: none;
-                  color: @deepblue;
-                  svg use {
-                    fill: @deepblue;
-                  }
-                }
-              }
-            }
-          }
-  
-          .info-body {
-            .device-list {
-              .item {
-                color: @black;
-                &.green {
-                  color: @green;
-                  background: fade(@green, 20);
-                  border-color: @green;
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-  
-  .health-3{
-	  .com-panel{
-		  .green{
-		  		color:@green;
-				&.lengend{
-					background:@blue;
-				}
-		  }
-	  }
-  }
-  .el-time-panel__btn.confirm {
-    color: @deepblue;
-  }
-  
-  // .el-time-panel__btn.cancel {
-  //   color: @gray;
-  // }
-  .health-6 .header-info .selections .item:hover i svg use, .health-6 .header-info .selections .item.active i svg use {
-      fill: @deepblue;
-  }
-  .health-matrix{
-	  .green{
-		  color:@green;
-	  }
-	  .health-matrix-panel {
-		  .header{
-			  .svg-icon svg use{
-				  fill:@black;
-			  }
-			  .tools .tool-block .legend-value{
-			  		color: @black;
-			  }
-		  } 
-	  }
-  }
-  
-  .wind-site .page-common-body .page-common-body-menu .page-common-body-menu-box {
-	  .page-common-body-menu-item{
-	  	  border: 0.093vh solid rgba(@deepblue, 0.4);
-		  &.active{
-			  background:transparent;
-			  border: 0.093vh solid #edbf03;
-			  &::after{
-				border: 0.093vh solid #edbf03;
-			  }
-		  }
-	  }
-  }
-  .main-body input{
-	  color:@black;
-	  background:@white;
-  }
-}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 5931
src/components/BoosterStation/dwk.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 4945
src/components/BoosterStation/hzj.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 2845
src/components/BoosterStation/mch.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 9139
src/components/BoosterStation/mhs.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 5433
src/components/BoosterStation/nss.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 5305
src/components/BoosterStation/pl1.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 3618
src/components/BoosterStation/pl2.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 4051
src/components/BoosterStation/qs.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 2503
src/components/BoosterStation/sbdl.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 4404
src/components/BoosterStation/sbq.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 12164
src/components/BoosterStation/xh.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 10412
src/components/BoosterStation/xs.vue


+ 122 - 95
src/components/alarm-badge/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div></div>
-  <!-- <div
+  <div
     draggable="true"
     @dragstart="startDrag"
     @dragend="stopDrag"
@@ -11,11 +11,16 @@
       :value="warnLength"
       :class="{ active: warnLength && !displayAlarms ? false : true }"
     >
-      <div class="alarmDeligo" @click="displayAlarm" v-if="warnLength">
+      <div class="alarmDeligo" @click="displayAlarm" v-if="warnLength" >
         <img src="@assets/imgs/ygj.png" class="trans" />
         <img src="@assets/imgs/ygj1.png" />
       </div>
-      <div class="alarmDeligo" @dblclick="setting" v-if="!warnLength">
+      <div
+        class="alarmDeligo"
+        @dblclick="setting"
+        v-if="!warnLength"
+        title="双击打开配置"
+      >
         <img src="@assets/imgs/wgj.png" class="trans" />
         <img src="@assets/imgs/wgj1.png" />
       </div>
@@ -34,14 +39,14 @@
       @cancleConfig="displaySetting = false"
       :alarmConfigArray="alarmConfigArray"
     />
-  </div> -->
+  </div>
 </template>
 
 <script>
 import deligoAlarmList from "@/components/deligoAlarmList";
 import alarmSetting from "@/components/alarm-badge/alarm-setting.vue";
 import { ElNotification } from "element-plus";
-import { GetDeviceTableData } from "@/api/zhbj/index.js";
+import { alarm_history } from "@/api/zhbj/index.js";
 import dayjs from "dayjs";
 export default {
   name: "alarmBadge",
@@ -88,6 +93,7 @@ export default {
       socketLeaveFlag1: false, // 离开标记(解决 退出登录再登录 时出现的 多次相同推送 问题,出现的本质是多次建立了WebSocket连接)
       alarmList: [],
       dialogList: [],
+      realList: [],
       //实时报警图标相关
       x: null,
       y: null,
@@ -118,6 +124,14 @@ export default {
           alarmType: "windturbine",
           deviceType: "",
         },
+        {
+          alarmType: "custom",
+          deviceType: "inverter",
+        },
+        {
+          alarmType: "custom",
+          deviceType: "windturbine",
+        },
       ],
       alarmConfigArray: [],
       displaySetting: false,
@@ -141,22 +155,26 @@ export default {
     this.x = window.innerWidth - 82;
     this.y = window.innerHeight - 32;
     let requestResult = [];
-    this.requestAlarmHistoryParams.forEach(({ alarmType }) => {
-      requestResult.push(this.getAlarmHistory(alarmType));
+    this.requestAlarmHistoryParams.forEach(({ alarmType, deviceType }) => {
+      requestResult.push(this.getAlarmHistory(alarmType, deviceType));
     });
 
     Promise.all(requestResult)
       .then((promiseResult) => {
         promiseResult.forEach(({ data }) => {
-          data?.records?.forEach((ele) => {
+          data?.ls?.forEach((ele) => {
             this.pushALarmItem(ele);
           });
         });
         this.dialogList.sort((a, b) => {
-          return b.lv - a.lv;
+          return b.ts - a.ts;
+        });
+        this.realList.sort((a, b) => {
+          return b.ts - a.ts;
         });
         this.$store.commit("changeAlarmlist", this.alarmList);
         this.$store.commit("setWarning", this.dialogList);
+        this.$store.commit("setWarningList", this.realList);
         if (!this.socketLeaveFlag) {
           // 没有离开——重连
           // websocket重连
@@ -207,76 +225,76 @@ export default {
       }
     },
     playAudioEffect() {
-      //   const lv1Config = this.getConfigItem(1);
-      //   let lv1Play = false;
-      //   if (lv1Config.isAlarmSound) {
-      //     lv1Play = this.dialogList.some((ele) => {
-      //       return ele.lv === 1 && !ele.confirm;
-      //     });
-      //   }
-      //   const lv2Config = this.getConfigItem(2);
-      //   let lv2Play = false;
-      //   if (lv2Config.isAlarmSound) {
-      //     lv2Play = this.dialogList.some((ele) => {
-      //       return ele.lv === 2 && !ele.confirm;
-      //     });
-      //   }
-      //   const lv3Config = this.getConfigItem(3);
-      //   let lv3Play = false;
-      //   if (lv3Config.isAlarmSound) {
-      //     lv3Play = this.dialogList.some((ele) => {
-      //       return ele.lv === 3 && !ele.confirm;
-      //     });
-      //   }
-      //   const lv4Config = this.getConfigItem(4);
-      //   let lv4Play = false;
-      //   if (lv4Config.isAlarmSound) {
-      //     lv4Play = this.dialogList.some((ele) => {
-      //       return ele.lv === 4 && !ele.confirm;
-      //     });
-      //   }
-      //   const lv5Config = this.getConfigItem(5);
-      //   let lv5Play = false;
-      //   if (lv5Config.isAlarmSound) {
-      //     lv5Play = this.dialogList.some((ele) => {
-      //       return ele.lv === 5 && !ele.confirm;
-      //     });
-      //   }
-      //   //   console.log(lv1Play, lv2Play, lv3Play, lv4Play, lv5Play);
-      //   if (lv5Play && !this.seriousWarning) {
-      //     this.seriousWarning = true;
-      //     this.audioElement = new Audio();
-      //     this.audioElement.src = "./static/sound/lv5.mp3";
-      //     this.audioElement.loop = true;
-      //     this.audioElement?.play();
-      //   } else if (
-      //     (lv1Play || lv2Play || lv3Play || lv4Play) &&
-      //     !this.seriousWarning
-      //   ) {
-      //     this.audioElement = new Audio();
-      //     this.audioElement.src = "./static/sound/lv4.mp3";
-      //     this.audioElement.addEventListener("ended", () => {
-      //       this.audioElement?.removeEventListener(
-      //         "ended",
-      //         this.stopPlayAudioEffect
-      //       );
-      //     });
-      //     this.audioElement?.play();
-      //   } else {
-      //     if (!this.seriousWarning) {
-      //       this.stopPlayAudioEffect();
-      //     }
-      //   }
+      const lv1Config = this.getConfigItem(1);
+      let lv1Play = false;
+      if (lv1Config.isAlarmSound) {
+        lv1Play = this.dialogList.some((ele) => {
+          return ele.lv === 1 && !ele.confirm;
+        });
+      }
+      const lv2Config = this.getConfigItem(2);
+      let lv2Play = false;
+      if (lv2Config.isAlarmSound) {
+        lv2Play = this.dialogList.some((ele) => {
+          return ele.lv === 2 && !ele.confirm;
+        });
+      }
+      const lv3Config = this.getConfigItem(3);
+      let lv3Play = false;
+      if (lv3Config.isAlarmSound) {
+        lv3Play = this.dialogList.some((ele) => {
+          return ele.lv === 3 && !ele.confirm;
+        });
+      }
+      const lv4Config = this.getConfigItem(4);
+      let lv4Play = false;
+      if (lv4Config.isAlarmSound) {
+        lv4Play = this.dialogList.some((ele) => {
+          return ele.lv === 4 && !ele.confirm;
+        });
+      }
+      const lv5Config = this.getConfigItem(5);
+      let lv5Play = false;
+      if (lv5Config.isAlarmSound) {
+        lv5Play = this.dialogList.some((ele) => {
+          return ele.lv === 5 && !ele.confirm;
+        });
+      }
+      //   console.log(lv1Play, lv2Play, lv3Play, lv4Play, lv5Play);
+      if (lv5Play && !this.seriousWarning) {
+        this.seriousWarning = true;
+        this.audioElement = new Audio();
+        this.audioElement.src = "./static/sound/lv5.mp3";
+        this.audioElement.loop = true;
+        this.audioElement?.play();
+      } else if (
+        (lv1Play || lv2Play || lv3Play || lv4Play) &&
+        !this.seriousWarning
+      ) {
+        this.audioElement = new Audio();
+        this.audioElement.src = "./static/sound/lv4.mp3";
+        this.audioElement.addEventListener("ended", () => {
+          this.audioElement?.removeEventListener(
+            "ended",
+            this.stopPlayAudioEffect
+          );
+        });
+        this.audioElement?.play();
+      } else {
+        if (!this.seriousWarning) {
+          this.stopPlayAudioEffect();
+        }
+      }
     },
 
     stopPlayAudioEffect() {
-      //   this.seriousWarning = false;
-      //   if (this.audioElement) {
-      //     this.audioElement.pause();
-      //     this.audioElement.currentTime = 0;
-      //     this.audioElement.loop = false;
-      //   }
-      //   this.audioElement = null;
+      this.seriousWarning = false;
+      if (this.audioElement) {
+        this.audioElement.pause();
+        this.audioElement.currentTime = 0;
+        this.audioElement.loop = false;
+      }
+      this.audioElement = null;
     },
     //获取报警配置
     getAlarmConfig() {
@@ -360,33 +378,35 @@ export default {
       }
     },
     //查历史报警
-    getAlarmHistory(alarmType) {
+    getAlarmHistory(alarmType, deviceType) {
       let params = {
         pageNum: 1,
-        pageSize: 5000,
+        pageSize: 50,
         alarmId: "",
         alarmType,
+        deviceType,
         stationid: "",
         deviceid: "",
         modelId: "",
         components: "",
         description: "",
         isclose: false,
-        begin: "",
-        end: "",
+        begin: dayjs().add(-1, "hour").format("YYYY-MM-DD HH:mm:ss"),
+        end: dayjs().format("YYYY-MM-DD HH:mm:ss"),
       };
       if (params.alarmType == "windturbine") {
         params.stationid = "SXJ_KGDL_DJY_FDC_STA";
       } else if (params.alarmType == "inverter") {
         params.stationid = "SXJ_KGDL_JR_GDC_STA";
       }
-      return GetDeviceTableData(params, 12000);
+      return alarm_history(params, 12000);
     },
     pushALarmItem(alarmItem, type) {
       const configItem = this.getConfigItem(alarmItem.rank);
       const alarmOption = {
         id: alarmItem.id ? alarmItem.id : alarmItem.tbname,
         lv: alarmItem.rank,
+        modelId: alarmItem.modelId,
         lvName: this.getLvName(alarmItem),
         rank: alarmItem.rank,
         confirmed: alarmItem.confirmed,
@@ -451,10 +471,9 @@ export default {
         }
       }
       if (
-        (configItem.isAlarmSound ||
-          configItem.isAlart ||
-          configItem.isContinuousAlarm) &&
-        alarmOption.deviceType != "custom"
+        configItem.isAlarmSound ||
+        configItem.isAlart ||
+        configItem.isContinuousAlarm
       ) {
         if (type && type == "ws") {
           this.dialogList.unshift(alarmOption);
@@ -462,6 +481,13 @@ export default {
           this.dialogList.push(alarmOption);
         }
       }
+      if (type && type == "ws") {
+        this.realList.unshift(alarmOption);
+      } else {
+        this.realList.push(alarmOption);
+      }
+
+      //    && alarmOption.deviceType != "custom"
       this.playAudioEffect();
     },
     getConfigItem(lv) {
@@ -481,17 +507,17 @@ export default {
       let x = event.clientX - this.currentX;
       let y = event.clientY - this.currentY;
       this.x += x;
-      if (this.x < 60) {
-        this.x = 60;
-      } else if (this.x > window.innerWidth - 20) {
-        this.x = window.innerWidth - 82;
-      }
+      //   if (this.x < 60) {
+      //     this.x = 60;
+      //   } else if (this.x > window.innerWidth - 20) {
+      //     this.x = window.innerWidth - 82;
+      //   }
       this.y += y;
-      if (this.y > window.innerHeight - 20) {
-        this.y = window.innerHeight - 32;
-      } else if (this.y < 0) {
-        this.y = 0;
-      }
+      //   if (this.y > window.innerHeight - 20) {
+      //     this.y = window.innerHeight - 32;
+      //   } else if (this.y < 0) {
+      //     this.y = 0;
+      //   }
     },
     //开关列表
     displayAlarm(val) {
@@ -603,6 +629,7 @@ export default {
           //   });
           this.$store.commit("changeAlarmlist", this.alarmList);
           this.$store.commit("setWarning", this.dialogList);
+          this.$store.commit("setWarningList", this.realList);
         }
       }
     },

+ 0 - 679
src/components/arcgis/DWK_GDC.vue

@@ -1,679 +0,0 @@
-<template>
-  <div class="map-1" style="width: 100%; height: 100%">
-    <arcgis @when="when" ref="arcgis" :data="arcgisData" @clickMap="clickMap">
-      <template v-slot:content>
-        <div class="panel-box">
-          <div
-            class="panel-item"
-            :class="panel.line"
-            v-for="(panel, index) of panels"
-            :key="index"
-          >
-            <svg
-              v-show="panel.type != 'none' && panel.type != 'syz'"
-              viewBox="0 0 800 800"
-              version="1.1"
-              xmlns="http://www.w3.org/2000/svg"
-              xmlns:xlink="http://www.w3.org/1999/xlink"
-              xml:space="preserve"
-            >
-              <defs>
-                <rect
-                  id="fill-rect"
-                  x="5"
-                  y="5"
-                  rx="8"
-                  ry="8"
-                  width="90"
-                  height="340"
-                  fill="#303B6F"
-                />
-                <rect
-                  id="none-rect"
-                  x="5"
-                  y="5"
-                  rx="8"
-                  ry="8"
-                  width="90"
-                  height="120"
-                  fill="#303B6F"
-                />
-                <g id="panel-deepblue">
-                  <polygon
-                    fill="#FFFFFF"
-                    points="300 13.73 60.07 13.73 60.07 13.73 22.48 13.73 0 109.84 0 109.84 0 109.84 0 109.84 0 109.84 22.48 205.95 272.88 205.95 272.88 205.61 300 205.61 300 13.73"
-                  />
-                  <polygon
-                    fill="#5C9BAF"
-                    points="250.4 109.84 3.26 109.84 29 0 276.14 0 250.4 109.84"
-                  />
-                  <polygon
-                    fill="#00486B"
-                    points="29 219.68 276.14 219.68 250.4 109.84 3.26 109.84 29 219.68"
-                  />
-                </g>
-                <g id="panel-blue">
-                  <polygon
-                    fill="#FFFFFF"
-                    points="300 13.73 60.07 13.73 60.07 13.73 22.48 13.73 0 109.84 0 109.84 0 109.84 0 109.84 0 109.84 22.48 205.95 272.88 205.95 272.88 205.61 300 205.61 300 13.73"
-                  />
-                  <polygon
-                    fill="#23ABFF"
-                    points="250.4 109.84 3.26 109.84 29 0 276.14 0 250.4 109.84"
-                  />
-                  <polygon
-                    fill="#0E6BBB"
-                    points="29 219.68 276.14 219.68 250.4 109.84 3.26 109.84 29 219.68"
-                  />
-                </g>
-                <g id="panel-red">
-                  <polygon
-                    fill="#FFFFFF"
-                    points="290 13.27 58.07 13.27 58.07 13.27 21.73 13.27 0 106.18 0 106.18 0 106.18 0 106.18 0 106.18 21.73 199.09 263.79 199.09 263.79 198.75 290 198.75 290 13.27"
-                  />
-                  <polygon
-                    fill="#EC1208"
-                    points="242.05 106.18 3.15 106.18 28.04 0 266.94 0 242.05 106.18"
-                  />
-                  <polygon
-                    fill="#AA0607"
-                    points="28.04 212.36 266.94 212.36 242.05 106.18 3.15 106.18 28.04 212.36"
-                  />
-                </g>
-              </defs>
-              <!-- 底图 左右两列矩形 -->
-              <g>
-                <use xlink:href="#fill-rect" x="50" y="50" />
-                <use xlink:href="#fill-rect" x="150" y="50" />
-                <use xlink:href="#fill-rect" x="550" y="50" />
-                <use xlink:href="#fill-rect" x="650" y="50" />
-                <use xlink:href="#fill-rect" x="50" y="400" />
-                <use xlink:href="#fill-rect" x="150" y="400" />
-                <use xlink:href="#fill-rect" x="550" y="400" />
-                <use xlink:href="#fill-rect" x="650" y="400" />
-              </g>
-
-              <!-- 中间上矩形 全部 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'fill' || panel.type == 'bottom'
-                    ? 'block'
-                    : 'none')
-                "
-              >
-                <use xlink:href="#fill-rect" x="250" y="50" />
-                <use xlink:href="#fill-rect" x="350" y="50" />
-                <use xlink:href="#fill-rect" x="450" y="50" />
-              </g>
-
-              <!-- 中间上矩形 一半 -->
-              <g
-                :style="'display: ' + (panel.type == 'top' ? 'block' : 'none')"
-              >
-                <use xlink:href="#none-rect" x="250" y="270" />
-                <use xlink:href="#none-rect" x="350" y="270" />
-                <use xlink:href="#none-rect" x="450" y="270" />
-              </g>
-
-              <!-- 中间上逆变器 深蓝色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'top' && panel.state == 'deepblue'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-deepblue" x="250" y="50" />
-              </g>
-
-              <!-- 中间上逆变器 蓝色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'top' && panel.state == 'blue'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-blue" x="250" y="50" />
-              </g>
-
-              <!-- 中间上逆变器 红色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'top' && panel.state == 'red'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-red" x="250" y="50" />
-              </g>
-
-              <!-- 中间上文字 -->
-              <g
-                :style="'display: ' + (panel.type == 'top' ? 'block' : 'none')"
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <text
-                  x="365"
-                  y="220"
-                  fill="#ffffff"
-                  font-size="150"
-                  text-anchor="middle"
-                >
-                  {{ panel.code }}
-                </text>
-              </g>
-
-              <!-- 中间下矩形 全部 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'fill' || panel.type == 'top'
-                    ? 'block'
-                    : 'none')
-                "
-              >
-                <use xlink:href="#fill-rect" x="250" y="400" />
-                <use xlink:href="#fill-rect" x="350" y="400" />
-                <use xlink:href="#fill-rect" x="450" y="400" />
-              </g>
-
-              <!-- 中间下矩形 一半 -->
-              <g
-                :style="
-                  'display: ' + (panel.type == 'bottom' ? 'block' : 'none')
-                "
-              >
-                <use xlink:href="#none-rect" x="250" y="400" />
-                <use xlink:href="#none-rect" x="350" y="400" />
-                <use xlink:href="#none-rect" x="450" y="400" />
-              </g>
-
-              <!-- 中间下逆变器 深蓝色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'bottom' && panel.state == 'deepblue'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-deepblue" x="250" y="530" />
-              </g>
-
-              <!-- 中间下逆变器 蓝色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'bottom' && panel.state == 'blue'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-blue" x="250" y="530" />
-              </g>
-
-              <!-- 中间下逆变器 红色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'bottom' && panel.state == 'red'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-red" x="250" y="530" />
-              </g>
-
-              <!-- 中间下文字 -->
-              <g
-                :style="
-                  'display: ' + (panel.type == 'bottom' ? 'block' : 'none')
-                "
-                class="can-click"
-                @click.prevent="clickEl(panel)"
-              >
-                <text
-                  x="460"
-                  y="740"
-                  fill="#ffffff"
-                  font-size="150"
-                  text-anchor="middle"
-                >
-                  {{ panel.code }}
-                </text>
-              </g>
-            </svg>
-            <div v-show="panel.type == 'syz'" class="panel-syz">
-              <img :src="syzImg" class="syz-img" />
-              <div class="syz-text">升压站</div>
-            </div>
-          </div>
-          <!-- <img :src="tempImg" style="width: 800px; height: 700px;"> -->
-        </div>
-      </template>
-    </arcgis>
-  </div>
-</template>
-
-<script>
-import arcgis from "./arcgis.vue";
-import dataService from "@/helper/data.js";
-
-export default {
-  // 名称
-  name: "Map",
-  // 使用组件
-  components: {
-    arcgis,
-  },
-  props: {
-    wpId: {
-      type: String,
-      default: "",
-    },
-  },
-  // 数据
-  data() {
-    return {
-      wpnumMap: {}, //风机监视数量
-      wpInfoMap: {}, //风机详情
-      fjmap: [], // 风机名
-      sourceId: "",
-      arcgisData: {
-        mode: "2D", // 模式 2D 3D
-        title: "宁夏地图", // 标题
-        center: [106.2953, 38.58533], // 初始中心点
-        height: 654, // 3D地图初始相机高度
-        tilt: 65, // 俯视角
-        scale: 15000,
-        rotation: 180,
-      },
-      tempImg: require("@assets/temp1.png"),
-      syzImg: require("@assets/png/booster-station.png"),
-      showPopup: true,
-      panels: 
-	  [{"id":"00","type":"top","code":1,"state":"deepblue","line":"top left"},
-	  {"id":"01","type":"top","code":2,"state":"deepblue","line":"top right"},
-	  {"id":"02","type":"top","code":3,"state":"deepblue","line":"top"},
-	  {"id":"03","type":"top","code":4,"state":"deepblue","line":"top right"},
-	  {"id":"04","type":"top","code":5,"state":"deepblue","line":"top"},
-	  {"id":"05","type":"top","code":6,"state":"deepblue","line":"top right"},
-	  {"id":"06","type":"top","code":7,"state":"deepblue","line":"top"},
-	  {"id":"07","type":"top","code":8,"state":"deepblue","line":"top right"},
-	  {"id":"08","type":"top","code":9,"state":"deepblue","line":"top"},
-	  {"id":"09","type":"top","code":10,"state":"deepblue","line":"top right"},
-	  {"id":"10","type":"top","code":11,"state":"deepblue","line":"top left"},
-	  {"id":"11","type":"top","code":12,"state":"deepblue","line":"top right"},
-	  {"id":"12","type":"top","code":13,"state":"deepblue","line":"top"},
-	  {"id":"13","type":"top","code":14,"state":"deepblue","line":"top right"},
-	  {"id":"14","type":"top","code":15,"state":"deepblue","line":"top"},
-	  {"id":"15","type":"top","code":16,"state":"deepblue","line":"top right"},
-	  {"id":"16","type":"top","code":17,"state":"deepblue","line":"top"},
-	  {"id":"17","type":"top","code":18,"state":"deepblue","line":"top right"},
-	  {"id":"18","type":"top","code":19,"state":"deepblue","line":"top"},
-	  {"id":"19","type":"top","code":20,"state":"deepblue","line":"top right"}]
-    };
-  },
-  created() {
-    let that = this;
-    that.sourceId = this.wpId;
-    that.$nextTick(() => {});
-  },
-  // 函数
-  methods: {
-    when: function () {
-      this.$refs.arcgis.addHtmlPoint(
-        [106.48638888888888, 38.924166666666665],
-        "content",
-        400,
-        350
-      );
-    },
-    clickMap: function (info) {
-      console.log(info);
-    },
-    clickEl: function (item) {
-		let wpId = this.$route.path.split('/').pop(),
-			wtId = wpId.split('_')[0] +'01_'+ item.id;
-		this.$router.push({
-		  path: `/monitor/windsite/inverter-info/`+wpId+`/`+wtId,
-		});
-    },
-  },
-  watch: {
-    wpId(res) {
-      this.sourceId = res;
-    },
-  },
-};
-</script>
-
-<style lang="less">
-@titleHeight: 40px;
-
-.map-1 {
-  width: 100%;
-  height: calc(100vh - 90px);
-  display: flex;
-  flex-direction: column;
-
-  .btn-group-tabs {
-    display: flex;
-    flex-direction: row;
-  }
-
-    .panel-box {
-        width: 840px;
-        padding: 20px;
-        display: flex;
-        flex-wrap: wrap;
-        background: #536268B8;
-
-        .panel-item {
-            width: 80px;
-            height: 80px;
-            position: relative;
-            
-            // margin-top: -20px;
-            // margin-left: -20px;
-
-            &.top {
-                &::after {
-                    top: -3px;
-                    opacity: 1;
-                }
-            }
-
-            &.bottom {
-                &::after {
-                    bottom: -3px;
-                    opacity: 1;
-                }
-            }
-
-            &.left {
-                &::before {
-                    left: -3px;
-                    opacity: 1;
-                }
-            }
-
-            &.right {
-                &::before {
-                    right: -3px;
-                    opacity: 1;
-                }
-            }
-
-            &::after {
-                content: '';
-                width: 100%;
-                height: 6px;
-                position: absolute;
-                left: 0;
-                background: @green;
-                opacity: 0;
-            }
-
-            &::before {
-                content: '';
-                width: 6px;
-                height: 100%;
-                position: absolute;
-                top: 0;
-                background: @green;
-                opacity: 0;
-            }
-
-            svg {
-                width: 80px;
-                height: 80px;
-            }
-
-            .panel-syz {
-                width: 100%;
-                height: 100%;
-                position: relative;
-
-                .syz-img {
-                    position: absolute;
-                    height: 70px;
-                    top: -35px;
-                    left: -10px;
-                }
-
-                .syz-text {
-                    position: absolute;
-                    color: @green;
-                    font-size: @fontsize-l;
-                    width: 100%;
-                    text-align: center;
-                    left: 0;
-                    top: -55px;
-                    font-weight: bold;
-                }
-            }
-        }
-
-    }
-
-  .can-click {
-    cursor: pointer;
-  }
-
-  .syz-img {
-    width: 65px;
-    height: 47px;
-
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
-
-  .panel-title {
-    width: 100%;
-    background-color: fade(@darkgray, 40%);
-    margin-top: 16px;
-    padding: 6px;
-    display: flex;
-    align-items: center;
-
-    .panel-title-name {
-      color: @green;
-      display: flex;
-      align-items: center;
-      line-height: 0;
-      font-size: 0;
-
-      i,
-      span {
-        margin: 0 0 0 16px;
-        line-height: 0;
-        font-size: 13px;
-      }
-    }
-
-    .sub-title-item {
-      display: flex;
-      align-items: center;
-      margin-left: 16px;
-
-      .sub-title {
-        font-size: 13px;
-        margin-left: 6px;
-      }
-
-      .sub-count {
-        font-size: 13px;
-        font-weight: 500;
-      }
-
-      img {
-        height: 31px;
-      }
-    }
-  }
-
-  .panel-body {
-    flex-grow: 1;
-    background-color: fade(@darkgray, 20%);
-    padding: 8px;
-    overflow: auto;
-    position: relative;
-
-    .arcgis-layer {
-      z-index: 1;
-    }
-
-    .map-popup-panel {
-      width: 760px;
-      position: absolute;
-      left: 71px;
-      top: 22px;
-      z-index: 2;
-
-      .map-popup-panel-header {
-        width: 100%;
-        background: fade(#152221, 90%);
-        display: flex;
-
-        .map-popup-panel-title {
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          position: relative;
-
-          &::before,
-          &::after {
-            position: absolute;
-            width: calc(50% - 6px);
-            bottom: 0;
-            border-bottom: 2px solid @green;
-          }
-
-          &::before {
-            content: "";
-            left: 0;
-          }
-
-          &::after {
-            content: "";
-            right: 0;
-          }
-
-          span {
-            position: absolute;
-            width: 11.3px;
-            height: 11.3px;
-            border-left: 2px solid @green;
-            border-top: 2px solid @green;
-            left: calc(50% - 5.65px);
-            bottom: -3px;
-            transform: rotate(45deg);
-          }
-        }
-
-        .map-popup-panel-date {
-          flex-grow: 1;
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          text-align: right;
-          border-bottom: 2px solid @green;
-        }
-
-        .map-popup-panel-back {
-          margin-left: auto;
-          width: 54px;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          position: relative;
-          cursor: pointer;
-
-          &::after {
-            content: "";
-            position: absolute;
-            left: 0;
-            height: 50%;
-            border-left: 1px solid @gray;
-            top: 25%;
-          }
-        }
-      }
-
-      .map-popup-panel-body {
-        background: fade(#152221, 75%);
-        border: 1px solid fade(@darkgray, 40);
-        border-top: 0px;
-
-        .table-form {
-          .text,
-          .unit {
-            font-weight: 400;
-          }
-
-          .unit {
-            min-width: auto;
-          }
-
-          .value,
-          .unit {
-            text-align: left;
-          }
-        }
-      }
-    }
-
-    .map-tool {
-      position: absolute;
-      right: 22px;
-      top: 22px;
-      z-index: 2;
-      background: #152221af;
-      padding: 18px 14px;
-
-      .m-btn {
-        width: 124px;
-        height: 44px;
-        background: #152221bf;
-        border: 1px solid #152221bf;
-        color: #ffffff;
-        transition: all 0.3s;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        cursor: pointer;
-
-        &:hover,
-        &.active {
-          background: #05bb4c33;
-          border: 1px solid #05bb4c;
-          color: #05bb4c;
-        }
-
-        + .m-btn {
-          margin-top: 16px;
-        }
-      }
-    }
-  }
-}
-</style>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 660
src/components/arcgis/HZJ_GDC.vue


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 662
src/components/arcgis/MCH_GDC.vue


+ 0 - 502
src/components/arcgis/MHS_FDC.vue

@@ -1,502 +0,0 @@
-<template>
-  <div style="width: 100%; height: 100%">
-    <arcgis
-      class="arcgis-layer"
-      @when="when"
-      ref="arcgis"
-      :data="arcgisData"
-      @clickMap="clickMap"
-    >
-      <template
-        v-for="(fan, index) of fans"
-        :key="index"
-        v-slot:[fan.attributes.code]
-      >
-        <svg
-          v-if="fan.attributes.code != '升压站'"
-          @click="clickFan(fan.attributes.code)"
-          class="can-click esri-component"
-          version="1.1"
-          xmlns="http://www.w3.org/2000/svg"
-          xmlns:xlink="http://www.w3.org/1999/xlink"
-          viewBox="0 0 200 240"
-          enable-background="new 0 0 200 240"
-          xml:space="preserve"
-          width="66"
-          height="66"
-        >
-          <!-- 底座 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M100.681,156.137c24.579,0,44.505,8.548,44.505,19.094
-                            c0,10.545-19.926,19.093-44.505,19.093c-24.577,0-42.878-8.548-42.878-19.093C57.803,164.685,76.104,156.137,100.681,156.137z"
-            />
-          </g>
-          <!-- 后面的脑袋 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.875,76.372l27.897-18.417c0,0,4.108-0.096,7.891,2.681
-                                c4.305,3.156,1.86,9.235,1.86,9.235l-24.374,23.292L92.875,76.372z"
-            />
-          </g>
-          <!-- 柱 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.152,175.229h18.689l-4.876-94.254H97.84L92.152,175.229z"
-            />
-          </g>
-          <!-- 风扇 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M109.007,85.525l-16.061,0.268l7.396-83.773L109.007,85.525z"
-            />
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M95.219,75.597l8.265,13.771l-76.25,35.483L95.219,75.597z
-                            M99.108,89.634l7.795-14.04l68.854,48.291L99.108,89.634z"
-            />
-            <animateTransform
-              v-if="fan.attributes.rotate"
-              attributeName="transform"
-              attributeType="XML"
-              type="rotate"
-              from="0 100 82"
-              to="359 100 82"
-              :dur="fan.attributes.dur + 's'"
-              repeatCount="indefinite"
-            />
-          </g>
-          <!-- 前面的尖 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M92.863,72.903c0,0,13.912-0.343,17.098,4.352
-                            c2.984,4.397-2.58,15.473-2.58,15.473l-24.376,0.436L92.863,72.903z"
-            />
-          </g>
-          <!-- 文字 -->
-          <g>
-            <text
-              x="100"
-              y="240"
-              fill="#ffffff"
-              font-size="40"
-              text-anchor="middle"
-              alignment-baseline="baseline"
-            >
-              {{ fan.attributes.code }}
-            </text>
-          </g>
-        </svg>
-        <div v-if="fan.attributes.code == '升压站'">
-          <div class="syz-img">
-            <img :src="syzImg" />
-          </div>
-          <div class="white font-sm mr-t-8" style="text-align: center">
-            {{ fan.attributes.code }}
-          </div>
-        </div>
-      </template>
-    </arcgis>
-  </div>
-</template>
-
-<script>
-import arcgis from "./arcgis.vue";
-import dataService from "@/helper/data.js";
-
-export default {
-  // 名称
-  name: "Map",
-  // 使用组件
-  components: {
-    arcgis,
-  },
-  props: {
-    wpId: {
-      type: String,
-      default: "",
-    },
-  },
-  // 数据
-  data() {
-    return {
-      wpnumMap: {}, //风机监视数量
-      wpInfoMap: {}, //风机详情
-      fjmap: [], // 风机名
-      sourceId: "",
-      arcgisData: {
-        mode: "2D", // 模式 2D 3D
-        title: "宁夏地图", // 标题
-        center: [107.0391975, 37.31469028], // 初始中心点 106.230909, 38.487193
-        height: 654, // 3D地图初始相机高度
-        tilt: 65, // 俯视角
-        scale: 30000,
-        rotation: -45,
-        ox: -600,
-        oy: -50,
-      },
-      showPopup: false,
-      mapToolIndex: 0,
-      fans: [],
-      colors: {
-        0: ["#05bb4c", "#4ad476", "#9fedb2"],
-        1: ["#4b55ae", "#959dc7", "#d3d6e0"],
-        2: ["#BA3237", "#d4807d", "#eddad8"],
-        3: ["#606769", "#757575", "#AFAFAF"],
-        4: ["#e17e23", "#fabf78", "#ffebcc"],
-        5: ["#c531c7", "#e080dc", "#fadef7"],
-        6: ["#c531c7", "#e080dc", "#fadef7"],
-      },
-      syzImg: require("@assets/png/booster-station.png"),
-    };
-  },
-  created() {
-    let that = this;
-    that.sourceId = this.wpId;
-    that.$nextTick(() => {
-      that.requestData();
-    });
-  },
-  // 函数
-  methods: {
-    select(res) {
-      this.$router.replace({
-        path: `/monitor/windsite/map/${res.code}`,
-      });
-    },
-    // 风机状态监视
-    requestData() {
-      let that = this;
-      that.API.requestData({
-        method: "POST",
-        subUrl: "monitor/findGeneralAppearance",
-        data: {
-          wpId: that.wpId,
-        },
-        success(res) {
-          if (res.code == 200) {
-            that.wpnumMap = res.data.fczbmap.jczbmap;
-            that.wpInfoMap = res.data.wxssmap;
-            that.fjmap = res.data.fjmap[0];
-			that.when();
-          }
-        },
-      });
-    },
-    when: function () {
-      let jsonObj = dataService.get("arcgis-mhs");
-      this.fans = jsonObj;
-      jsonObj.forEach((item) => {
-        let obj = this.fjmap.find((t) => {
-          let wtid = t.wtId.replace("01_", "");
-          if (wtid == item.attributes.code) return t;
-        });
-        if (obj) {
-          item.attributes.state = String(obj.fjzt);
-        } else {
-          item.attributes.state = "4";
-        }
-        switch (item.attributes.state) {
-          case "0": //待机
-            item.attributes.rotate = false; // 转
-            item.attributes.dur = 8; // 转一圈时间
-            break;
-          case "1": //运行
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 2; // 转一圈时间
-            break;
-          case "2": //故障
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "3": //中断
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "4": //维护
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "5": //限电
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 6;
-            break;
-          case "6": //停机
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          default:
-            item.attributes.rotate = false;
-            item.attributes.dur = 8;
-            break;
-        }
-        this.$refs.arcgis.addHtmlPoint(
-          [item.geometry.x, item.geometry.y],
-          item.attributes.code,
-          33,
-          50,
-          false
-        );
-      });
-      let lineJsonObj = dataService.get("arcgis-mhs-line");
-      this.$refs.arcgis.addFanByJson(jsonObj, lineJsonObj);
-    },
-    clickMap: function (info) {
-      console.log(info);
-    },
-    clickFan: function (code) {
-      let wtId = code.replace("G", "G01_");
-      this.$router.push(`/monitor/windsite/info/${this.wpId}/${wtId}`);
-    },
-    popupBack: function () {
-      this.showPopup = false;
-    },
-    clickMapTool: function (index) {
-      //   this.mapToolIndex = index;
-      this.showPopup = !this.showPopup;
-    },
-  },
-  watch: {
-    wpId(res) {
-      this.sourceId = res;
-      if (res) {
-        this.requestData();
-      }
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-@titleHeight: 40px;
-
-.map-1 {
-  width: 100%;
-  height: calc(100vh - 90px);
-  display: flex;
-  flex-direction: column;
-
-  .btn-group-tabs {
-    display: flex;
-    flex-direction: row;
-  }
-
-  .can-click {
-    cursor: pointer;
-  }
-
-  .syz-img {
-    width: 65px;
-    height: 47px;
-
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
-
-  .panel-title {
-    width: 100%;
-    background-color: fade(@darkgray, 40%);
-    margin-top: 16px;
-    padding: 6px;
-    display: flex;
-    align-items: center;
-
-    .panel-title-name {
-      color: @green;
-      display: flex;
-      align-items: center;
-      line-height: 0;
-      font-size: 0;
-
-      i,
-      span {
-        margin: 0 0 0 16px;
-        line-height: 0;
-        font-size: 13px;
-      }
-    }
-
-    .sub-title-item {
-      display: flex;
-      align-items: center;
-      margin-left: 16px;
-
-      .sub-title {
-        font-size: 13px;
-        margin-left: 6px;
-      }
-
-      .sub-count {
-        font-size: 13px;
-        font-weight: 500;
-      }
-
-      img {
-        height: 31px;
-      }
-    }
-  }
-
-  .panel-body {
-    flex-grow: 1;
-    background-color: fade(@darkgray, 20%);
-    padding: 8px;
-    overflow: auto;
-    position: relative;
-
-    .arcgis-layer {
-      z-index: 1;
-    }
-
-    .map-popup-panel {
-      width: 760px;
-      position: absolute;
-      left: 71px;
-      top: 22px;
-      z-index: 2;
-
-      .map-popup-panel-header {
-        width: 100%;
-        background: fade(#152221, 90%);
-        display: flex;
-
-        .map-popup-panel-title {
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          position: relative;
-
-          &::before,
-          &::after {
-            position: absolute;
-            width: calc(50% - 6px);
-            bottom: 0;
-            border-bottom: 2px solid @green;
-          }
-
-          &::before {
-            content: "";
-            left: 0;
-          }
-
-          &::after {
-            content: "";
-            right: 0;
-          }
-
-          span {
-            position: absolute;
-            width: 11.3px;
-            height: 11.3px;
-            border-left: 2px solid @green;
-            border-top: 2px solid @green;
-            left: calc(50% - 5.65px);
-            bottom: -3px;
-            transform: rotate(45deg);
-          }
-        }
-
-        .map-popup-panel-date {
-          flex-grow: 1;
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          text-align: right;
-          border-bottom: 2px solid @green;
-        }
-
-        .map-popup-panel-back {
-          margin-left: auto;
-          width: 54px;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          position: relative;
-          cursor: pointer;
-
-          &::after {
-            content: "";
-            position: absolute;
-            left: 0;
-            height: 50%;
-            border-left: 1px solid @gray;
-            top: 25%;
-          }
-        }
-      }
-
-      .map-popup-panel-body {
-        background: fade(#152221, 75%);
-        border: 1px solid fade(@darkgray, 40);
-        border-top: 0px;
-
-        .table-form {
-          .text,
-          .unit {
-            font-weight: 400;
-          }
-
-          .unit {
-            min-width: auto;
-          }
-
-          .value,
-          .unit {
-            text-align: left;
-          }
-        }
-      }
-    }
-
-    .map-tool {
-      position: absolute;
-      right: 22px;
-      top: 22px;
-      z-index: 2;
-      background: #152221af;
-      padding: 18px 14px;
-
-      .m-btn {
-        width: 124px;
-        height: 44px;
-        background: #152221bf;
-        border: 1px solid #152221bf;
-        color: #ffffff;
-        transition: all 0.3s;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        cursor: pointer;
-
-        &:hover,
-        &.active {
-          background: #05bb4c33;
-          border: 1px solid #05bb4c;
-          color: #05bb4c;
-        }
-
-        + .m-btn {
-          margin-top: 16px;
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 502
src/components/arcgis/NSS_FDC.vue

@@ -1,502 +0,0 @@
-<template>
-  <div style="width: 100%; height: 100%">
-    <arcgis
-      class="arcgis-layer"
-      @when="when"
-      ref="arcgis"
-      :data="arcgisData"
-      @clickMap="clickMap"
-    >
-      <template
-        v-for="(fan, index) of fans"
-        :key="index"
-        v-slot:[fan.attributes.code]
-      >
-        <svg
-          v-if="fan.attributes.code != '升压站'"
-          @click="clickFan(fan.attributes.code)"
-          class="can-click esri-component"
-          version="1.1"
-          xmlns="http://www.w3.org/2000/svg"
-          xmlns:xlink="http://www.w3.org/1999/xlink"
-          viewBox="0 0 200 240"
-          enable-background="new 0 0 200 240"
-          xml:space="preserve"
-          width="66"
-          height="66"
-        >
-          <!-- 底座 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M100.681,156.137c24.579,0,44.505,8.548,44.505,19.094
-                            c0,10.545-19.926,19.093-44.505,19.093c-24.577,0-42.878-8.548-42.878-19.093C57.803,164.685,76.104,156.137,100.681,156.137z"
-            />
-          </g>
-          <!-- 后面的脑袋 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.875,76.372l27.897-18.417c0,0,4.108-0.096,7.891,2.681
-                                c4.305,3.156,1.86,9.235,1.86,9.235l-24.374,23.292L92.875,76.372z"
-            />
-          </g>
-          <!-- 柱 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.152,175.229h18.689l-4.876-94.254H97.84L92.152,175.229z"
-            />
-          </g>
-          <!-- 风扇 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M109.007,85.525l-16.061,0.268l7.396-83.773L109.007,85.525z"
-            />
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M95.219,75.597l8.265,13.771l-76.25,35.483L95.219,75.597z
-                            M99.108,89.634l7.795-14.04l68.854,48.291L99.108,89.634z"
-            />
-            <animateTransform
-              v-if="fan.attributes.rotate"
-              attributeName="transform"
-              attributeType="XML"
-              type="rotate"
-              from="0 100 82"
-              to="359 100 82"
-              :dur="fan.attributes.dur + 's'"
-              repeatCount="indefinite"
-            />
-          </g>
-          <!-- 前面的尖 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M92.863,72.903c0,0,13.912-0.343,17.098,4.352
-                            c2.984,4.397-2.58,15.473-2.58,15.473l-24.376,0.436L92.863,72.903z"
-            />
-          </g>
-          <!-- 文字 -->
-          <g>
-            <text
-              x="100"
-              y="240"
-              fill="#ffffff"
-              font-size="40"
-              text-anchor="middle"
-              alignment-baseline="baseline"
-            >
-              {{ fan.attributes.code }}
-            </text>
-          </g>
-        </svg>
-        <div v-if="fan.attributes.code == '升压站'">
-          <div class="syz-img">
-            <img :src="syzImg" />
-          </div>
-          <div class="white font-sm mr-t-8" style="text-align: center">
-            {{ fan.attributes.code }}
-          </div>
-        </div>
-      </template>
-    </arcgis>
-  </div>
-</template>
-
-<script>
-import arcgis from "./arcgis.vue";
-import dataService from "@/helper/data.js";
-
-export default {
-  // 名称
-  name: "Map",
-  // 使用组件
-  components: {
-    arcgis,
-  },
-  props: {
-    wpId: {
-      type: String,
-      default: "",
-    },
-  },
-  // 数据
-  data() {
-    return {
-      wpnumMap: {}, //风机监视数量
-      wpInfoMap: {}, //风机详情
-      fjmap: [], // 风机名
-      sourceId: "",
-      arcgisData: {
-        mode: "2D", // 模式 2D 3D
-        title: "宁夏地图", // 标题
-        center: [106.0231304, 37.76323706], // 初始中心点 106.230909, 38.487193
-        height: 654, // 3D地图初始相机高度
-        tilt: 65, // 俯视角
-        scale: 50000,
-        rotation: -45,
-        ox: -600,
-        oy: -50,
-      },
-      showPopup: false,
-      mapToolIndex: 0,
-      fans: [],
-      colors: {
-        0: ["#05bb4c", "#4ad476", "#9fedb2"],
-        1: ["#4b55ae", "#959dc7", "#d3d6e0"],
-        2: ["#BA3237", "#d4807d", "#eddad8"],
-        3: ["#606769", "#757575", "#AFAFAF"],
-        4: ["#e17e23", "#fabf78", "#ffebcc"],
-        5: ["#c531c7", "#e080dc", "#fadef7"],
-        6: ["#c531c7", "#e080dc", "#fadef7"],
-      },
-      syzImg: require("@assets/png/booster-station.png"),
-    };
-  },
-  created() {
-    let that = this;
-    that.sourceId = this.wpId;
-    that.$nextTick(() => {
-      that.requestData();
-    });
-  },
-  // 函数
-  methods: {
-    select(res) {
-      this.$router.replace({
-        path: `/monitor/windsite/map/${res.code}`,
-      });
-    },
-    // 风机状态监视
-    requestData() {
-      let that = this;
-      that.API.requestData({
-        method: "POST",
-        subUrl: "monitor/findGeneralAppearance",
-        data: {
-          wpId: that.wpId,
-        },
-        success(res) {
-          if (res.code == 200) {
-            that.wpnumMap = res.data.fczbmap.jczbmap;
-            that.wpInfoMap = res.data.wxssmap;
-            that.fjmap = res.data.fjmap[0];
-			that.when();
-          }
-        },
-      });
-    },
-    when: function () {
-      let jsonObj = dataService.get("arcgis-nss");
-      this.fans = jsonObj;
-      jsonObj.forEach((item) => {
-        let obj = this.fjmap.find((t) => {
-          let wtid = t.wtId.replace("01_", "");
-          if (wtid == item.attributes.code) return t;
-        });
-        if (obj) {
-          item.attributes.state = String(obj.fjzt);
-        } else {
-          item.attributes.state = "4";
-        }
-        switch (item.attributes.state) {
-          case "0": //待机
-            item.attributes.rotate = false; // 转
-            item.attributes.dur = 8; // 转一圈时间
-            break;
-          case "1": //运行
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 2; // 转一圈时间
-            break;
-          case "2": //故障
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "3": //中断
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "4": //维护
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "5": //限电
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 6;
-            break;
-          case "6": //停机
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          default:
-            item.attributes.rotate = false;
-            item.attributes.dur = 8;
-            break;
-        }
-        this.$refs.arcgis.addHtmlPoint(
-          [item.geometry.x, item.geometry.y],
-          item.attributes.code,
-          33,
-          50,
-          false
-        );
-      });
-      let lineJsonObj = dataService.get("arcgis-nss-line");
-      this.$refs.arcgis.addFanByJson(jsonObj, lineJsonObj);
-    },
-    clickMap: function (info) {
-      console.log(info);
-    },
-    clickFan: function (code) {
-      let wtId = code.replace("G", "G01_");
-      this.$router.push(`/monitor/windsite/info/${this.wpId}/${wtId}`);
-    },
-    popupBack: function () {
-      this.showPopup = false;
-    },
-    clickMapTool: function (index) {
-      //   this.mapToolIndex = index;
-      this.showPopup = !this.showPopup;
-    },
-  },
-  watch: {
-    wpId(res) {
-      this.sourceId = res;
-      if (res) {
-        this.requestData();
-      }
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-@titleHeight: 40px;
-
-.map-1 {
-  width: 100%;
-  height: calc(100vh - 90px);
-  display: flex;
-  flex-direction: column;
-
-  .btn-group-tabs {
-    display: flex;
-    flex-direction: row;
-  }
-
-  .can-click {
-    cursor: pointer;
-  }
-
-  .syz-img {
-    width: 65px;
-    height: 47px;
-
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
-
-  .panel-title {
-    width: 100%;
-    background-color: fade(@darkgray, 40%);
-    margin-top: 16px;
-    padding: 6px;
-    display: flex;
-    align-items: center;
-
-    .panel-title-name {
-      color: @green;
-      display: flex;
-      align-items: center;
-      line-height: 0;
-      font-size: 0;
-
-      i,
-      span {
-        margin: 0 0 0 16px;
-        line-height: 0;
-        font-size: 13px;
-      }
-    }
-
-    .sub-title-item {
-      display: flex;
-      align-items: center;
-      margin-left: 16px;
-
-      .sub-title {
-        font-size: 13px;
-        margin-left: 6px;
-      }
-
-      .sub-count {
-        font-size: 13px;
-        font-weight: 500;
-      }
-
-      img {
-        height: 31px;
-      }
-    }
-  }
-
-  .panel-body {
-    flex-grow: 1;
-    background-color: fade(@darkgray, 20%);
-    padding: 8px;
-    overflow: auto;
-    position: relative;
-
-    .arcgis-layer {
-      z-index: 1;
-    }
-
-    .map-popup-panel {
-      width: 760px;
-      position: absolute;
-      left: 71px;
-      top: 22px;
-      z-index: 2;
-
-      .map-popup-panel-header {
-        width: 100%;
-        background: fade(#152221, 90%);
-        display: flex;
-
-        .map-popup-panel-title {
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          position: relative;
-
-          &::before,
-          &::after {
-            position: absolute;
-            width: calc(50% - 6px);
-            bottom: 0;
-            border-bottom: 2px solid @green;
-          }
-
-          &::before {
-            content: "";
-            left: 0;
-          }
-
-          &::after {
-            content: "";
-            right: 0;
-          }
-
-          span {
-            position: absolute;
-            width: 11.3px;
-            height: 11.3px;
-            border-left: 2px solid @green;
-            border-top: 2px solid @green;
-            left: calc(50% - 5.65px);
-            bottom: -3px;
-            transform: rotate(45deg);
-          }
-        }
-
-        .map-popup-panel-date {
-          flex-grow: 1;
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          text-align: right;
-          border-bottom: 2px solid @green;
-        }
-
-        .map-popup-panel-back {
-          margin-left: auto;
-          width: 54px;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          position: relative;
-          cursor: pointer;
-
-          &::after {
-            content: "";
-            position: absolute;
-            left: 0;
-            height: 50%;
-            border-left: 1px solid @gray;
-            top: 25%;
-          }
-        }
-      }
-
-      .map-popup-panel-body {
-        background: fade(#152221, 75%);
-        border: 1px solid fade(@darkgray, 40);
-        border-top: 0px;
-
-        .table-form {
-          .text,
-          .unit {
-            font-weight: 400;
-          }
-
-          .unit {
-            min-width: auto;
-          }
-
-          .value,
-          .unit {
-            text-align: left;
-          }
-        }
-      }
-    }
-
-    .map-tool {
-      position: absolute;
-      right: 22px;
-      top: 22px;
-      z-index: 2;
-      background: #152221af;
-      padding: 18px 14px;
-
-      .m-btn {
-        width: 124px;
-        height: 44px;
-        background: #152221bf;
-        border: 1px solid #152221bf;
-        color: #ffffff;
-        transition: all 0.3s;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        cursor: pointer;
-
-        &:hover,
-        &.active {
-          background: #05bb4c33;
-          border: 1px solid #05bb4c;
-          color: #05bb4c;
-        }
-
-        + .m-btn {
-          margin-top: 16px;
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 678
src/components/arcgis/PL_GDC.vue

@@ -1,678 +0,0 @@
-<template>
-  <div class="map-1" style="width: 100%; height: 100%">
-    <arcgis @when="when" ref="arcgis" :data="arcgisData" @clickMap="clickMap">
-      <template v-slot:content>
-        <div class="panel-box">
-          <div
-            class="panel-item"
-            :class="panel.line"
-            v-for="(panel, index) of panels"
-            :key="index"
-          >
-            <svg
-              v-show="panel.type != 'none' && panel.type != 'syz'"
-              viewBox="0 0 800 800"
-              version="1.1"
-              xmlns="http://www.w3.org/2000/svg"
-              xmlns:xlink="http://www.w3.org/1999/xlink"
-              xml:space="preserve"
-            >
-              <defs>
-                <rect
-                  id="fill-rect"
-                  x="5"
-                  y="5"
-                  rx="8"
-                  ry="8"
-                  width="90"
-                  height="340"
-                  fill="#303B6F"
-                />
-                <rect
-                  id="none-rect"
-                  x="5"
-                  y="5"
-                  rx="8"
-                  ry="8"
-                  width="90"
-                  height="120"
-                  fill="#303B6F"
-                />
-                <g id="panel-deepblue">
-                  <polygon
-                    fill="#FFFFFF"
-                    points="300 13.73 60.07 13.73 60.07 13.73 22.48 13.73 0 109.84 0 109.84 0 109.84 0 109.84 0 109.84 22.48 205.95 272.88 205.95 272.88 205.61 300 205.61 300 13.73"
-                  />
-                  <polygon
-                    fill="#5C9BAF"
-                    points="250.4 109.84 3.26 109.84 29 0 276.14 0 250.4 109.84"
-                  />
-                  <polygon
-                    fill="#00486B"
-                    points="29 219.68 276.14 219.68 250.4 109.84 3.26 109.84 29 219.68"
-                  />
-                </g>
-                <g id="panel-blue">
-                  <polygon
-                    fill="#FFFFFF"
-                    points="300 13.73 60.07 13.73 60.07 13.73 22.48 13.73 0 109.84 0 109.84 0 109.84 0 109.84 0 109.84 22.48 205.95 272.88 205.95 272.88 205.61 300 205.61 300 13.73"
-                  />
-                  <polygon
-                    fill="#23ABFF"
-                    points="250.4 109.84 3.26 109.84 29 0 276.14 0 250.4 109.84"
-                  />
-                  <polygon
-                    fill="#0E6BBB"
-                    points="29 219.68 276.14 219.68 250.4 109.84 3.26 109.84 29 219.68"
-                  />
-                </g>
-                <g id="panel-red">
-                  <polygon
-                    fill="#FFFFFF"
-                    points="290 13.27 58.07 13.27 58.07 13.27 21.73 13.27 0 106.18 0 106.18 0 106.18 0 106.18 0 106.18 21.73 199.09 263.79 199.09 263.79 198.75 290 198.75 290 13.27"
-                  />
-                  <polygon
-                    fill="#EC1208"
-                    points="242.05 106.18 3.15 106.18 28.04 0 266.94 0 242.05 106.18"
-                  />
-                  <polygon
-                    fill="#AA0607"
-                    points="28.04 212.36 266.94 212.36 242.05 106.18 3.15 106.18 28.04 212.36"
-                  />
-                </g>
-              </defs>
-              <!-- 底图 左右两列矩形 -->
-              <g>
-                <use xlink:href="#fill-rect" x="50" y="50" />
-                <use xlink:href="#fill-rect" x="150" y="50" />
-                <use xlink:href="#fill-rect" x="550" y="50" />
-                <use xlink:href="#fill-rect" x="650" y="50" />
-                <use xlink:href="#fill-rect" x="50" y="400" />
-                <use xlink:href="#fill-rect" x="150" y="400" />
-                <use xlink:href="#fill-rect" x="550" y="400" />
-                <use xlink:href="#fill-rect" x="650" y="400" />
-              </g>
-
-              <!-- 中间上矩形 全部 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'fill' || panel.type == 'bottom'
-                    ? 'block'
-                    : 'none')
-                "
-              >
-                <use xlink:href="#fill-rect" x="250" y="50" />
-                <use xlink:href="#fill-rect" x="350" y="50" />
-                <use xlink:href="#fill-rect" x="450" y="50" />
-              </g>
-
-              <!-- 中间上矩形 一半 -->
-              <g
-                :style="'display: ' + (panel.type == 'top' ? 'block' : 'none')"
-              >
-                <use xlink:href="#none-rect" x="250" y="270" />
-                <use xlink:href="#none-rect" x="350" y="270" />
-                <use xlink:href="#none-rect" x="450" y="270" />
-              </g>
-
-              <!-- 中间上逆变器 深蓝色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'top' && panel.state == 'deepblue'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-deepblue" x="250" y="50" />
-              </g>
-
-              <!-- 中间上逆变器 蓝色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'top' && panel.state == 'blue'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-blue" x="250" y="50" />
-              </g>
-
-              <!-- 中间上逆变器 红色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'top' && panel.state == 'red'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-red" x="250" y="50" />
-              </g>
-
-              <!-- 中间上文字 -->
-              <g
-                :style="'display: ' + (panel.type == 'top' ? 'block' : 'none')"
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <text
-                  x="365"
-                  y="220"
-                  fill="#ffffff"
-                  font-size="150"
-                  text-anchor="middle"
-                >
-                  {{ panel.code }}
-                </text>
-              </g>
-
-              <!-- 中间下矩形 全部 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'fill' || panel.type == 'top'
-                    ? 'block'
-                    : 'none')
-                "
-              >
-                <use xlink:href="#fill-rect" x="250" y="400" />
-                <use xlink:href="#fill-rect" x="350" y="400" />
-                <use xlink:href="#fill-rect" x="450" y="400" />
-              </g>
-
-              <!-- 中间下矩形 一半 -->
-              <g
-                :style="
-                  'display: ' + (panel.type == 'bottom' ? 'block' : 'none')
-                "
-              >
-                <use xlink:href="#none-rect" x="250" y="400" />
-                <use xlink:href="#none-rect" x="350" y="400" />
-                <use xlink:href="#none-rect" x="450" y="400" />
-              </g>
-
-              <!-- 中间下逆变器 深蓝色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'bottom' && panel.state == 'deepblue'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-deepblue" x="250" y="530" />
-              </g>
-
-              <!-- 中间下逆变器 蓝色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'bottom' && panel.state == 'blue'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-blue" x="250" y="530" />
-              </g>
-
-              <!-- 中间下逆变器 红色 -->
-              <g
-                :style="
-                  'display: ' +
-                  (panel.type == 'bottom' && panel.state == 'red'
-                    ? 'block'
-                    : 'none')
-                "
-                class="can-click esri-component"
-                @click.prevent="clickEl(panel)"
-              >
-                <use xlink:href="#panel-red" x="250" y="530" />
-              </g>
-
-              <!-- 中间下文字 -->
-              <g
-                :style="
-                  'display: ' + (panel.type == 'bottom' ? 'block' : 'none')
-                "
-                class="can-click"
-                @click.prevent="clickEl(panel)"
-              >
-                <text
-                  x="460"
-                  y="740"
-                  fill="#ffffff"
-                  font-size="150"
-                  text-anchor="middle"
-                >
-                  {{ panel.code }}
-                </text>
-              </g>
-            </svg>
-            <div v-show="panel.type == 'syz'" class="panel-syz">
-              <img :src="syzImg" class="syz-img" />
-              <div class="syz-text">升压站</div>
-            </div>
-          </div>
-          <!-- <img :src="tempImg" style="width: 800px; height: 700px;"> -->
-        </div>
-      </template>
-    </arcgis>
-  </div>
-</template>
-
-<script>
-import arcgis from "./arcgis.vue";
-import dataService from "@/helper/data.js";
-
-export default {
-  // 名称
-  name: "Map",
-  // 使用组件
-  components: {
-    arcgis,
-  },
-  props: {
-    wpId: {
-      type: String,
-      default: "",
-    },
-  },
-  // 数据
-  data() {
-    return {
-      wpnumMap: {}, //风机监视数量
-      wpInfoMap: {}, //风机详情
-      fjmap: [], // 风机名
-      sourceId: "",
-      arcgisData: {
-        mode: "2D", // 模式 2D 3D
-        title: "宁夏地图", // 标题
-        center: [106.2850, 38.5528], // 初始中心点
-        height: 654, // 3D地图初始相机高度
-        tilt: 65, // 俯视角
-        scale: 15000,
-        rotation: 180,
-      },
-      tempImg: require("@assets/temp1.png"),
-      syzImg: require("@assets/png/booster-station.png"),
-      showPopup: true,
-      panels: 
-	  [{"id":"00","type":"top","code":1,"state":"deepblue","line":"top left"},
-	  {"id":"01","type":"top","code":2,"state":"deepblue","line":"top right"},
-	  {"id":"02","type":"top","code":3,"state":"deepblue","line":"top"},
-	  {"id":"03","type":"top","code":4,"state":"deepblue","line":"top right"},
-	  {"id":"04","type":"top","code":5,"state":"deepblue","line":"top"},
-	  {"id":"05","type":"top","code":6,"state":"deepblue","line":"top right"},
-	  {"id":"06","type":"top","code":7,"state":"deepblue","line":"top"},
-	  {"id":"07","type":"top","code":8,"state":"deepblue","line":"top right"},
-	  {"id":"08","type":"top","code":9,"state":"deepblue","line":"top"},
-	  {"id":"09","type":"top","code":10,"state":"deepblue","line":"top right"},
-	  {"id":"10","type":"top","code":11,"state":"deepblue","line":"top left"},
-	  {"id":"11","type":"top","code":12,"state":"deepblue","line":"top right"},
-	  {"id":"12","type":"top","code":13,"state":"deepblue","line":"top"},
-	  {"id":"13","type":"top","code":14,"state":"deepblue","line":"top right"},
-	  {"id":"14","type":"top","code":15,"state":"deepblue","line":"top"},
-	  {"id":"15","type":"top","code":16,"state":"deepblue","line":"top right"},
-	  {"id":"16","type":"top","code":17,"state":"deepblue","line":"top"},
-	  {"id":"17","type":"top","code":18,"state":"deepblue","line":"top right"},
-	  {"id":"18","type":"top","code":19,"state":"deepblue","line":"top right"}]
-    };
-  },
-  created() {
-    let that = this;
-    that.sourceId = this.wpId;
-    that.$nextTick(() => {});
-  },
-  // 函数
-  methods: {
-    when: function () {
-      this.$refs.arcgis.addHtmlPoint(
-        [106.48638888888888, 38.924166666666665],
-        "content",
-        400,
-        350
-      );
-    },
-    clickMap: function (info) {
-      console.log(info);
-    },
-    clickEl: function (item) {
-		let wpId = this.$route.path.split('/').pop(),
-			wtId = wpId.split('_')[0] +'01_'+ item.id;
-		this.$router.push({
-		  path: `/monitor/windsite/inverter-info/`+wpId+`/`+wtId,
-		});
-    },
-  },
-  watch: {
-    wpId(res) {
-      this.sourceId = res;
-    },
-  },
-};
-</script>
-
-<style lang="less">
-@titleHeight: 40px;
-
-.map-1 {
-  width: 100%;
-  height: calc(100vh - 90px);
-  display: flex;
-  flex-direction: column;
-
-  .btn-group-tabs {
-    display: flex;
-    flex-direction: row;
-  }
-
-    .panel-box {
-        width: 840px;
-        padding: 20px;
-        display: flex;
-        flex-wrap: wrap;
-        background: #536268B8;
-
-        .panel-item {
-            width: 80px;
-            height: 80px;
-            position: relative;
-            
-            // margin-top: -20px;
-            // margin-left: -20px;
-
-            &.top {
-                &::after {
-                    top: -3px;
-                    opacity: 1;
-                }
-            }
-
-            &.bottom {
-                &::after {
-                    bottom: -3px;
-                    opacity: 1;
-                }
-            }
-
-            &.left {
-                &::before {
-                    left: -3px;
-                    opacity: 1;
-                }
-            }
-
-            &.right {
-                &::before {
-                    right: -3px;
-                    opacity: 1;
-                }
-            }
-
-            &::after {
-                content: '';
-                width: 100%;
-                height: 6px;
-                position: absolute;
-                left: 0;
-                background: @green;
-                opacity: 0;
-            }
-
-            &::before {
-                content: '';
-                width: 6px;
-                height: 100%;
-                position: absolute;
-                top: 0;
-                background: @green;
-                opacity: 0;
-            }
-
-            svg {
-                width: 80px;
-                height: 80px;
-            }
-
-            .panel-syz {
-                width: 100%;
-                height: 100%;
-                position: relative;
-
-                .syz-img {
-                    position: absolute;
-                    height: 70px;
-                    top: -35px;
-                    left: -10px;
-                }
-
-                .syz-text {
-                    position: absolute;
-                    color: @green;
-                    font-size: @fontsize-l;
-                    width: 100%;
-                    text-align: center;
-                    left: 0;
-                    top: -55px;
-                    font-weight: bold;
-                }
-            }
-        }
-
-    }
-
-  .can-click {
-    cursor: pointer;
-  }
-
-  .syz-img {
-    width: 65px;
-    height: 47px;
-
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
-
-  .panel-title {
-    width: 100%;
-    background-color: fade(@darkgray, 40%);
-    margin-top: 16px;
-    padding: 6px;
-    display: flex;
-    align-items: center;
-
-    .panel-title-name {
-      color: @green;
-      display: flex;
-      align-items: center;
-      line-height: 0;
-      font-size: 0;
-
-      i,
-      span {
-        margin: 0 0 0 16px;
-        line-height: 0;
-        font-size: 13px;
-      }
-    }
-
-    .sub-title-item {
-      display: flex;
-      align-items: center;
-      margin-left: 16px;
-
-      .sub-title {
-        font-size: 13px;
-        margin-left: 6px;
-      }
-
-      .sub-count {
-        font-size: 13px;
-        font-weight: 500;
-      }
-
-      img {
-        height: 31px;
-      }
-    }
-  }
-
-  .panel-body {
-    flex-grow: 1;
-    background-color: fade(@darkgray, 20%);
-    padding: 8px;
-    overflow: auto;
-    position: relative;
-
-    .arcgis-layer {
-      z-index: 1;
-    }
-
-    .map-popup-panel {
-      width: 760px;
-      position: absolute;
-      left: 71px;
-      top: 22px;
-      z-index: 2;
-
-      .map-popup-panel-header {
-        width: 100%;
-        background: fade(#152221, 90%);
-        display: flex;
-
-        .map-popup-panel-title {
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          position: relative;
-
-          &::before,
-          &::after {
-            position: absolute;
-            width: calc(50% - 6px);
-            bottom: 0;
-            border-bottom: 2px solid @green;
-          }
-
-          &::before {
-            content: "";
-            left: 0;
-          }
-
-          &::after {
-            content: "";
-            right: 0;
-          }
-
-          span {
-            position: absolute;
-            width: 11.3px;
-            height: 11.3px;
-            border-left: 2px solid @green;
-            border-top: 2px solid @green;
-            left: calc(50% - 5.65px);
-            bottom: -3px;
-            transform: rotate(45deg);
-          }
-        }
-
-        .map-popup-panel-date {
-          flex-grow: 1;
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          text-align: right;
-          border-bottom: 2px solid @green;
-        }
-
-        .map-popup-panel-back {
-          margin-left: auto;
-          width: 54px;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          position: relative;
-          cursor: pointer;
-
-          &::after {
-            content: "";
-            position: absolute;
-            left: 0;
-            height: 50%;
-            border-left: 1px solid @gray;
-            top: 25%;
-          }
-        }
-      }
-
-      .map-popup-panel-body {
-        background: fade(#152221, 75%);
-        border: 1px solid fade(@darkgray, 40);
-        border-top: 0px;
-
-        .table-form {
-          .text,
-          .unit {
-            font-weight: 400;
-          }
-
-          .unit {
-            min-width: auto;
-          }
-
-          .value,
-          .unit {
-            text-align: left;
-          }
-        }
-      }
-    }
-
-    .map-tool {
-      position: absolute;
-      right: 22px;
-      top: 22px;
-      z-index: 2;
-      background: #152221af;
-      padding: 18px 14px;
-
-      .m-btn {
-        width: 124px;
-        height: 44px;
-        background: #152221bf;
-        border: 1px solid #152221bf;
-        color: #ffffff;
-        transition: all 0.3s;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        cursor: pointer;
-
-        &:hover,
-        &.active {
-          background: #05bb4c33;
-          border: 1px solid #05bb4c;
-          color: #05bb4c;
-        }
-
-        + .m-btn {
-          margin-top: 16px;
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 502
src/components/arcgis/QS_FDC.vue

@@ -1,502 +0,0 @@
-<template>
-  <div style="width: 100%; height: 100%">
-    <arcgis
-      class="arcgis-layer"
-      @when="when"
-      ref="arcgis"
-      :data="arcgisData"
-      @clickMap="clickMap"
-    >
-      <template
-        v-for="(fan, index) of fans"
-        :key="index"
-        v-slot:[fan.attributes.code]
-      >
-        <svg
-          v-if="fan.attributes.code != '升压站'"
-          @click="clickFan(fan.attributes.code)"
-          class="can-click esri-component"
-          version="1.1"
-          xmlns="http://www.w3.org/2000/svg"
-          xmlns:xlink="http://www.w3.org/1999/xlink"
-          viewBox="0 0 200 240"
-          enable-background="new 0 0 200 240"
-          xml:space="preserve"
-          width="66"
-          height="66"
-        >
-          <!-- 底座 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M100.681,156.137c24.579,0,44.505,8.548,44.505,19.094
-                            c0,10.545-19.926,19.093-44.505,19.093c-24.577,0-42.878-8.548-42.878-19.093C57.803,164.685,76.104,156.137,100.681,156.137z"
-            />
-          </g>
-          <!-- 后面的脑袋 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.875,76.372l27.897-18.417c0,0,4.108-0.096,7.891,2.681
-                                c4.305,3.156,1.86,9.235,1.86,9.235l-24.374,23.292L92.875,76.372z"
-            />
-          </g>
-          <!-- 柱 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.152,175.229h18.689l-4.876-94.254H97.84L92.152,175.229z"
-            />
-          </g>
-          <!-- 风扇 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M109.007,85.525l-16.061,0.268l7.396-83.773L109.007,85.525z"
-            />
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M95.219,75.597l8.265,13.771l-76.25,35.483L95.219,75.597z
-                            M99.108,89.634l7.795-14.04l68.854,48.291L99.108,89.634z"
-            />
-            <animateTransform
-              v-if="fan.attributes.rotate"
-              attributeName="transform"
-              attributeType="XML"
-              type="rotate"
-              from="0 100 82"
-              to="359 100 82"
-              :dur="fan.attributes.dur + 's'"
-              repeatCount="indefinite"
-            />
-          </g>
-          <!-- 前面的尖 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M92.863,72.903c0,0,13.912-0.343,17.098,4.352
-                            c2.984,4.397-2.58,15.473-2.58,15.473l-24.376,0.436L92.863,72.903z"
-            />
-          </g>
-          <!-- 文字 -->
-          <g>
-            <text
-              x="100"
-              y="240"
-              fill="#ffffff"
-              font-size="40"
-              text-anchor="middle"
-              alignment-baseline="baseline"
-            >
-              {{ fan.attributes.code }}
-            </text>
-          </g>
-        </svg>
-        <div v-if="fan.attributes.code == '升压站'">
-          <div class="syz-img">
-            <img :src="syzImg" />
-          </div>
-          <div class="white font-sm mr-t-8" style="text-align: center">
-            {{ fan.attributes.code }}
-          </div>
-        </div>
-      </template>
-    </arcgis>
-  </div>
-</template>
-
-<script>
-import arcgis from "./arcgis.vue";
-import dataService from "@/helper/data.js";
-
-export default {
-  // 名称
-  name: "Map",
-  // 使用组件
-  components: {
-    arcgis,
-  },
-  props: {
-    wpId: {
-      type: String,
-      default: "",
-    },
-  },
-  // 数据
-  data() {
-    return {
-      wpnumMap: {}, //风机监视数量
-      wpInfoMap: {}, //风机详情
-      fjmap: [], // 风机名
-      sourceId: "",
-      arcgisData: {
-        mode: "2D", // 模式 2D 3D
-        title: "宁夏地图", // 标题
-        center: [107.217636108398, 37.5134917819943], // 初始中心点 106.230909, 38.487193
-        height: 654, // 3D地图初始相机高度
-        tilt: 65, // 俯视角
-        scale: 55000,
-        rotation: -45,
-        ox: -600,
-        oy: -50,
-      },
-      showPopup: false,
-      mapToolIndex: 0,
-      fans: [],
-      colors: {
-        0: ["#05bb4c", "#4ad476", "#9fedb2"],
-        1: ["#4b55ae", "#959dc7", "#d3d6e0"],
-        2: ["#BA3237", "#d4807d", "#eddad8"],
-        3: ["#606769", "#757575", "#AFAFAF"],
-        4: ["#e17e23", "#fabf78", "#ffebcc"],
-        5: ["#c531c7", "#e080dc", "#fadef7"],
-        6: ["#c531c7", "#e080dc", "#fadef7"],
-      },
-      syzImg: require("@assets/png/booster-station.png"),
-    };
-  },
-  created() {
-    let that = this;
-    that.sourceId = this.wpId;
-    that.$nextTick(() => {
-      that.requestData();
-    });
-  },
-  // 函数
-  methods: {
-    select(res) {
-      this.$router.replace({
-        path: `/monitor/windsite/map/${res.code}`,
-      });
-    },
-    // 风机状态监视
-    requestData() {
-      let that = this;
-      that.API.requestData({
-        method: "POST",
-        subUrl: "monitor/findGeneralAppearance",
-        data: {
-          wpId: that.wpId,
-        },
-        success(res) {
-          if (res.code == 200) {
-            that.wpnumMap = res.data.fczbmap.jczbmap;
-            that.wpInfoMap = res.data.wxssmap;
-            that.fjmap = res.data.fjmap[0];
-			that.when();
-          }
-        },
-      });
-    },
-    when: function () {
-      let jsonObj = dataService.get("arcgis-qs");
-      this.fans = jsonObj;
-      jsonObj.forEach((item) => {
-        let obj = this.fjmap.find((t) => {
-          let wtid = t.wtId.replace("01_", "");
-          if (wtid == item.attributes.code) return t;
-        });
-        if (obj) {
-          item.attributes.state = String(obj.fjzt);
-        } else {
-          item.attributes.state = "4";
-        }
-        switch (item.attributes.state) {
-          case "0": //待机
-            item.attributes.rotate = false; // 转
-            item.attributes.dur = 8; // 转一圈时间
-            break;
-          case "1": //运行
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 2; // 转一圈时间
-            break;
-          case "2": //故障
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "3": //中断
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "4": //维护
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "5": //限电
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 6;
-            break;
-          case "6": //停机
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          default:
-            item.attributes.rotate = false;
-            item.attributes.dur = 8;
-            break;
-        }
-        this.$refs.arcgis.addHtmlPoint(
-          [item.geometry.x, item.geometry.y],
-          item.attributes.code,
-          33,
-          50,
-          false
-        );
-      });
-      let lineJsonObj = dataService.get("arcgis-qs-line");
-      this.$refs.arcgis.addFanByJson(jsonObj, lineJsonObj);
-    },
-    clickMap: function (info) {
-      console.log(info);
-    },
-    clickFan: function (code) {
-      let wtId = code.replace("G", "G01_");
-      this.$router.push(`/monitor/windsite/info/${this.wpId}/${wtId}`);
-    },
-    popupBack: function () {
-      this.showPopup = false;
-    },
-    clickMapTool: function (index) {
-      //   this.mapToolIndex = index;
-      this.showPopup = !this.showPopup;
-    },
-  },
-  watch: {
-    wpId(res) {
-      this.sourceId = res;
-      if (res) {
-        this.requestData();
-      }
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-@titleHeight: 40px;
-
-.map-1 {
-  width: 100%;
-  height: calc(100vh - 90px);
-  display: flex;
-  flex-direction: column;
-
-  .btn-group-tabs {
-    display: flex;
-    flex-direction: row;
-  }
-
-  .can-click {
-    cursor: pointer;
-  }
-
-  .syz-img {
-    width: 65px;
-    height: 47px;
-
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
-
-  .panel-title {
-    width: 100%;
-    background-color: fade(@darkgray, 40%);
-    margin-top: 16px;
-    padding: 6px;
-    display: flex;
-    align-items: center;
-
-    .panel-title-name {
-      color: @green;
-      display: flex;
-      align-items: center;
-      line-height: 0;
-      font-size: 0;
-
-      i,
-      span {
-        margin: 0 0 0 16px;
-        line-height: 0;
-        font-size: 13px;
-      }
-    }
-
-    .sub-title-item {
-      display: flex;
-      align-items: center;
-      margin-left: 16px;
-
-      .sub-title {
-        font-size: 13px;
-        margin-left: 6px;
-      }
-
-      .sub-count {
-        font-size: 13px;
-        font-weight: 500;
-      }
-
-      img {
-        height: 31px;
-      }
-    }
-  }
-
-  .panel-body {
-    flex-grow: 1;
-    background-color: fade(@darkgray, 20%);
-    padding: 8px;
-    overflow: auto;
-    position: relative;
-
-    .arcgis-layer {
-      z-index: 1;
-    }
-
-    .map-popup-panel {
-      width: 760px;
-      position: absolute;
-      left: 71px;
-      top: 22px;
-      z-index: 2;
-
-      .map-popup-panel-header {
-        width: 100%;
-        background: fade(#152221, 90%);
-        display: flex;
-
-        .map-popup-panel-title {
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          position: relative;
-
-          &::before,
-          &::after {
-            position: absolute;
-            width: calc(50% - 6px);
-            bottom: 0;
-            border-bottom: 2px solid @green;
-          }
-
-          &::before {
-            content: "";
-            left: 0;
-          }
-
-          &::after {
-            content: "";
-            right: 0;
-          }
-
-          span {
-            position: absolute;
-            width: 11.3px;
-            height: 11.3px;
-            border-left: 2px solid @green;
-            border-top: 2px solid @green;
-            left: calc(50% - 5.65px);
-            bottom: -3px;
-            transform: rotate(45deg);
-          }
-        }
-
-        .map-popup-panel-date {
-          flex-grow: 1;
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          text-align: right;
-          border-bottom: 2px solid @green;
-        }
-
-        .map-popup-panel-back {
-          margin-left: auto;
-          width: 54px;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          position: relative;
-          cursor: pointer;
-
-          &::after {
-            content: "";
-            position: absolute;
-            left: 0;
-            height: 50%;
-            border-left: 1px solid @gray;
-            top: 25%;
-          }
-        }
-      }
-
-      .map-popup-panel-body {
-        background: fade(#152221, 75%);
-        border: 1px solid fade(@darkgray, 40);
-        border-top: 0px;
-
-        .table-form {
-          .text,
-          .unit {
-            font-weight: 400;
-          }
-
-          .unit {
-            min-width: auto;
-          }
-
-          .value,
-          .unit {
-            text-align: left;
-          }
-        }
-      }
-    }
-
-    .map-tool {
-      position: absolute;
-      right: 22px;
-      top: 22px;
-      z-index: 2;
-      background: #152221af;
-      padding: 18px 14px;
-
-      .m-btn {
-        width: 124px;
-        height: 44px;
-        background: #152221bf;
-        border: 1px solid #152221bf;
-        color: #ffffff;
-        transition: all 0.3s;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        cursor: pointer;
-
-        &:hover,
-        &.active {
-          background: #05bb4c33;
-          border: 1px solid #05bb4c;
-          color: #05bb4c;
-        }
-
-        + .m-btn {
-          margin-top: 16px;
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 502
src/components/arcgis/SBQ_FDC.vue

@@ -1,502 +0,0 @@
-<template>
-  <div style="width: 100%; height: 100%">
-    <arcgis
-      class="arcgis-layer"
-      @when="when"
-      ref="arcgis"
-      :data="arcgisData"
-      @clickMap="clickMap"
-    >
-      <template
-        v-for="(fan, index) of fans"
-        :key="index"
-        v-slot:[fan.attributes.code]
-      >
-        <svg
-          v-if="fan.attributes.code != '升压站'"
-          @click="clickFan(fan.attributes.code)"
-          class="can-click esri-component"
-          version="1.1"
-          xmlns="http://www.w3.org/2000/svg"
-          xmlns:xlink="http://www.w3.org/1999/xlink"
-          viewBox="0 0 200 240"
-          enable-background="new 0 0 200 240"
-          xml:space="preserve"
-          width="66"
-          height="66"
-        >
-          <!-- 底座 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M100.681,156.137c24.579,0,44.505,8.548,44.505,19.094
-                            c0,10.545-19.926,19.093-44.505,19.093c-24.577,0-42.878-8.548-42.878-19.093C57.803,164.685,76.104,156.137,100.681,156.137z"
-            />
-          </g>
-          <!-- 后面的脑袋 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.875,76.372l27.897-18.417c0,0,4.108-0.096,7.891,2.681
-                                c4.305,3.156,1.86,9.235,1.86,9.235l-24.374,23.292L92.875,76.372z"
-            />
-          </g>
-          <!-- 柱 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.152,175.229h18.689l-4.876-94.254H97.84L92.152,175.229z"
-            />
-          </g>
-          <!-- 风扇 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M109.007,85.525l-16.061,0.268l7.396-83.773L109.007,85.525z"
-            />
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M95.219,75.597l8.265,13.771l-76.25,35.483L95.219,75.597z
-                            M99.108,89.634l7.795-14.04l68.854,48.291L99.108,89.634z"
-            />
-            <animateTransform
-              v-if="fan.attributes.rotate"
-              attributeName="transform"
-              attributeType="XML"
-              type="rotate"
-              from="0 100 82"
-              to="359 100 82"
-              :dur="fan.attributes.dur + 's'"
-              repeatCount="indefinite"
-            />
-          </g>
-          <!-- 前面的尖 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M92.863,72.903c0,0,13.912-0.343,17.098,4.352
-                            c2.984,4.397-2.58,15.473-2.58,15.473l-24.376,0.436L92.863,72.903z"
-            />
-          </g>
-          <!-- 文字 -->
-          <g>
-            <text
-              x="100"
-              y="240"
-              fill="#ffffff"
-              font-size="40"
-              text-anchor="middle"
-              alignment-baseline="baseline"
-            >
-              {{ fan.attributes.code }}
-            </text>
-          </g>
-        </svg>
-        <div v-if="fan.attributes.code == '升压站'">
-          <div class="syz-img">
-            <img :src="syzImg" />
-          </div>
-          <div class="white font-sm mr-t-8" style="text-align: center">
-            {{ fan.attributes.code }}
-          </div>
-        </div>
-      </template>
-    </arcgis>
-  </div>
-</template>
-
-<script>
-import arcgis from "./arcgis.vue";
-import dataService from "@/helper/data.js";
-
-export default {
-  // 名称
-  name: "Map",
-  // 使用组件
-  components: {
-    arcgis,
-  },
-  props: {
-    wpId: {
-      type: String,
-      default: "",
-    },
-  },
-  // 数据
-  data() {
-    return {
-      wpnumMap: {}, //风机监视数量
-      wpInfoMap: {}, //风机详情
-      fjmap: [], // 风机名
-      sourceId: "",
-      arcgisData: {
-        mode: "2D", // 模式 2D 3D
-        title: "宁夏地图", // 标题
-        center: [106.4515667, 37.60171667], // 初始中心点 106.230909, 38.487193
-        height: 654, // 3D地图初始相机高度
-        tilt: 65, // 俯视角
-        scale: 120000,
-        rotation: -45,
-        ox: -600,
-        oy: -50,
-      },
-      showPopup: false,
-      mapToolIndex: 0,
-      fans: [],
-      colors: {
-        0: ["#05bb4c", "#4ad476", "#9fedb2"],
-        1: ["#4b55ae", "#959dc7", "#d3d6e0"],
-        2: ["#BA3237", "#d4807d", "#eddad8"],
-        3: ["#606769", "#757575", "#AFAFAF"],
-        4: ["#e17e23", "#fabf78", "#ffebcc"],
-        5: ["#c531c7", "#e080dc", "#fadef7"],
-        6: ["#c531c7", "#e080dc", "#fadef7"],
-      },
-      syzImg: require("@assets/png/booster-station.png"),
-    };
-  },
-  created() {
-    let that = this;
-    that.sourceId = this.wpId;
-    that.$nextTick(() => {
-      that.requestData();
-    });
-  },
-  // 函数
-  methods: {
-    select(res) {
-      this.$router.replace({
-        path: `/monitor/windsite/map/${res.code}`,
-      });
-    },
-    // 风机状态监视
-    requestData() {
-      let that = this;
-      that.API.requestData({
-        method: "POST",
-        subUrl: "monitor/findGeneralAppearance",
-        data: {
-          wpId: that.wpId,
-        },
-        success(res) {
-          if (res.code == 200) {
-            that.wpnumMap = res.data.fczbmap.jczbmap;
-            that.wpInfoMap = res.data.wxssmap;
-            that.fjmap = res.data.fjmap[0];
-			that.when();
-          }
-        },
-      });
-    },
-    when: function () {
-      let jsonObj = dataService.get("arcgis-sbq");
-      this.fans = jsonObj;
-      jsonObj.forEach((item) => {
-        let obj = this.fjmap.find((t) => {
-          let wtid = t.wtId.replace("01_", "");
-          if (wtid == item.attributes.code) return t;
-        });
-        if (obj) {
-          item.attributes.state = String(obj.fjzt);
-        } else {
-          item.attributes.state = "4";
-        }
-        switch (item.attributes.state) {
-          case "0": //待机
-            item.attributes.rotate = false; // 转
-            item.attributes.dur = 8; // 转一圈时间
-            break;
-          case "1": //运行
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 2; // 转一圈时间
-            break;
-          case "2": //故障
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "3": //中断
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "4": //维护
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "5": //限电
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 6;
-            break;
-          case "6": //停机
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          default:
-            item.attributes.rotate = false;
-            item.attributes.dur = 8;
-            break;
-        }
-        this.$refs.arcgis.addHtmlPoint(
-          [item.geometry.x, item.geometry.y],
-          item.attributes.code,
-          33,
-          50,
-          false
-        );
-      });
-      let lineJsonObj = dataService.get("arcgis-sbq-line");
-      this.$refs.arcgis.addFanByJson(jsonObj, lineJsonObj);
-    },
-    clickMap: function (info) {
-      console.log(info);
-    },
-    clickFan: function (code) {
-      let wtId = code.replace("G", "G01_");
-      this.$router.push(`/monitor/windsite/info/${this.wpId}/${wtId}`);
-    },
-    popupBack: function () {
-      this.showPopup = false;
-    },
-    clickMapTool: function (index) {
-      //   this.mapToolIndex = index;
-      this.showPopup = !this.showPopup;
-    },
-  },
-  watch: {
-    wpId(res) {
-      this.sourceId = res;
-      if (res) {
-        this.requestData();
-      }
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-@titleHeight: 40px;
-
-.map-1 {
-  width: 100%;
-  height: calc(100vh - 90px);
-  display: flex;
-  flex-direction: column;
-
-  .btn-group-tabs {
-    display: flex;
-    flex-direction: row;
-  }
-
-  .can-click {
-    cursor: pointer;
-  }
-
-  .syz-img {
-    width: 65px;
-    height: 47px;
-
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
-
-  .panel-title {
-    width: 100%;
-    background-color: fade(@darkgray, 40%);
-    margin-top: 16px;
-    padding: 6px;
-    display: flex;
-    align-items: center;
-
-    .panel-title-name {
-      color: @green;
-      display: flex;
-      align-items: center;
-      line-height: 0;
-      font-size: 0;
-
-      i,
-      span {
-        margin: 0 0 0 16px;
-        line-height: 0;
-        font-size: 13px;
-      }
-    }
-
-    .sub-title-item {
-      display: flex;
-      align-items: center;
-      margin-left: 16px;
-
-      .sub-title {
-        font-size: 13px;
-        margin-left: 6px;
-      }
-
-      .sub-count {
-        font-size: 13px;
-        font-weight: 500;
-      }
-
-      img {
-        height: 31px;
-      }
-    }
-  }
-
-  .panel-body {
-    flex-grow: 1;
-    background-color: fade(@darkgray, 20%);
-    padding: 8px;
-    overflow: auto;
-    position: relative;
-
-    .arcgis-layer {
-      z-index: 1;
-    }
-
-    .map-popup-panel {
-      width: 760px;
-      position: absolute;
-      left: 71px;
-      top: 22px;
-      z-index: 2;
-
-      .map-popup-panel-header {
-        width: 100%;
-        background: fade(#152221, 90%);
-        display: flex;
-
-        .map-popup-panel-title {
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          position: relative;
-
-          &::before,
-          &::after {
-            position: absolute;
-            width: calc(50% - 6px);
-            bottom: 0;
-            border-bottom: 2px solid @green;
-          }
-
-          &::before {
-            content: "";
-            left: 0;
-          }
-
-          &::after {
-            content: "";
-            right: 0;
-          }
-
-          span {
-            position: absolute;
-            width: 11.3px;
-            height: 11.3px;
-            border-left: 2px solid @green;
-            border-top: 2px solid @green;
-            left: calc(50% - 5.65px);
-            bottom: -3px;
-            transform: rotate(45deg);
-          }
-        }
-
-        .map-popup-panel-date {
-          flex-grow: 1;
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          text-align: right;
-          border-bottom: 2px solid @green;
-        }
-
-        .map-popup-panel-back {
-          margin-left: auto;
-          width: 54px;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          position: relative;
-          cursor: pointer;
-
-          &::after {
-            content: "";
-            position: absolute;
-            left: 0;
-            height: 50%;
-            border-left: 1px solid @gray;
-            top: 25%;
-          }
-        }
-      }
-
-      .map-popup-panel-body {
-        background: fade(#152221, 75%);
-        border: 1px solid fade(@darkgray, 40);
-        border-top: 0px;
-
-        .table-form {
-          .text,
-          .unit {
-            font-weight: 400;
-          }
-
-          .unit {
-            min-width: auto;
-          }
-
-          .value,
-          .unit {
-            text-align: left;
-          }
-        }
-      }
-    }
-
-    .map-tool {
-      position: absolute;
-      right: 22px;
-      top: 22px;
-      z-index: 2;
-      background: #152221af;
-      padding: 18px 14px;
-
-      .m-btn {
-        width: 124px;
-        height: 44px;
-        background: #152221bf;
-        border: 1px solid #152221bf;
-        color: #ffffff;
-        transition: all 0.3s;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        cursor: pointer;
-
-        &:hover,
-        &.active {
-          background: #05bb4c33;
-          border: 1px solid #05bb4c;
-          color: #05bb4c;
-        }
-
-        + .m-btn {
-          margin-top: 16px;
-        }
-      }
-    }
-  }
-}
-</style>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 659
src/components/arcgis/XH_GDC.vue


+ 0 - 502
src/components/arcgis/XS_FDC.vue

@@ -1,502 +0,0 @@
-<template>
-  <div style="width: 100%; height: 100%">
-    <arcgis
-      class="arcgis-layer"
-      @when="when"
-      ref="arcgis"
-      :data="arcgisData"
-      @clickMap="clickMap"
-    >
-      <template
-        v-for="(fan, index) of fans"
-        :key="index"
-        v-slot:[fan.attributes.code]
-      >
-        <svg
-          v-if="fan.attributes.code != '升压站'"
-          @click="clickFan(fan.attributes.code)"
-          class="can-click esri-component"
-          version="1.1"
-          xmlns="http://www.w3.org/2000/svg"
-          xmlns:xlink="http://www.w3.org/1999/xlink"
-          viewBox="0 0 200 240"
-          enable-background="new 0 0 200 240"
-          xml:space="preserve"
-          width="66"
-          height="66"
-        >
-          <!-- 底座 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M100.681,156.137c24.579,0,44.505,8.548,44.505,19.094
-                            c0,10.545-19.926,19.093-44.505,19.093c-24.577,0-42.878-8.548-42.878-19.093C57.803,164.685,76.104,156.137,100.681,156.137z"
-            />
-          </g>
-          <!-- 后面的脑袋 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.875,76.372l27.897-18.417c0,0,4.108-0.096,7.891,2.681
-                                c4.305,3.156,1.86,9.235,1.86,9.235l-24.374,23.292L92.875,76.372z"
-            />
-          </g>
-          <!-- 柱 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][0]"
-              d="M92.152,175.229h18.689l-4.876-94.254H97.84L92.152,175.229z"
-            />
-          </g>
-          <!-- 风扇 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M109.007,85.525l-16.061,0.268l7.396-83.773L109.007,85.525z"
-            />
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][1]"
-              d="M95.219,75.597l8.265,13.771l-76.25,35.483L95.219,75.597z
-                            M99.108,89.634l7.795-14.04l68.854,48.291L99.108,89.634z"
-            />
-            <animateTransform
-              v-if="fan.attributes.rotate"
-              attributeName="transform"
-              attributeType="XML"
-              type="rotate"
-              from="0 100 82"
-              to="359 100 82"
-              :dur="fan.attributes.dur + 's'"
-              repeatCount="indefinite"
-            />
-          </g>
-          <!-- 前面的尖 -->
-          <g>
-            <path
-              fill-rule="evenodd"
-              clip-rule="evenodd"
-              :fill="colors[fan.attributes.state][2]"
-              d="M92.863,72.903c0,0,13.912-0.343,17.098,4.352
-                            c2.984,4.397-2.58,15.473-2.58,15.473l-24.376,0.436L92.863,72.903z"
-            />
-          </g>
-          <!-- 文字 -->
-          <g>
-            <text
-              x="100"
-              y="240"
-              fill="#ffffff"
-              font-size="40"
-              text-anchor="middle"
-              alignment-baseline="baseline"
-            >
-              {{ fan.attributes.code }}
-            </text>
-          </g>
-        </svg>
-        <div v-if="fan.attributes.code == '升压站'">
-          <div class="syz-img">
-            <img :src="syzImg" />
-          </div>
-          <div class="white font-sm mr-t-8" style="text-align: center">
-            {{ fan.attributes.code }}
-          </div>
-        </div>
-      </template>
-    </arcgis>
-  </div>
-</template>
-
-<script>
-import arcgis from "./arcgis.vue";
-import dataService from "@/helper/data.js";
-
-export default {
-  // 名称
-  name: "Map",
-  // 使用组件
-  components: {
-    arcgis,
-  },
-  props: {
-    wpId: {
-      type: String,
-      default: "",
-    },
-  },
-  // 数据
-  data() {
-    return {
-      wpnumMap: {}, //风机监视数量
-      wpInfoMap: {}, //风机详情
-      fjmap: [], // 风机名
-      sourceId: "",
-      arcgisData: {
-        mode: "2D", // 模式 2D 3D
-        title: "宁夏地图", // 标题
-        center: [105.2139616, 37.15630397], // 初始中心点 106.230909, 38.487193
-        height: 654, // 3D地图初始相机高度
-        tilt: 65, // 俯视角
-        scale: 45000,
-        rotation: -45,
-        ox: -600,
-        oy: -50,
-      },
-      showPopup: false,
-      mapToolIndex: 0,
-      fans: [],
-      colors: {
-        0: ["#05bb4c", "#4ad476", "#9fedb2"],
-        1: ["#4b55ae", "#959dc7", "#d3d6e0"],
-        2: ["#BA3237", "#d4807d", "#eddad8"],
-        3: ["#606769", "#757575", "#AFAFAF"],
-        4: ["#e17e23", "#fabf78", "#ffebcc"],
-        5: ["#c531c7", "#e080dc", "#fadef7"],
-        6: ["#c531c7", "#e080dc", "#fadef7"],
-      },
-      syzImg: require("@assets/png/booster-station.png"),
-    };
-  },
-  created() {
-    let that = this;
-    that.sourceId = this.wpId;
-    that.$nextTick(() => {
-      that.requestData();
-    });
-  },
-  // 函数
-  methods: {
-    select(res) {
-      this.$router.replace({
-        path: `/monitor/windsite/map/${res.code}`,
-      });
-    },
-    // 风机状态监视
-    requestData() {
-      let that = this;
-      that.API.requestData({
-        method: "POST",
-        subUrl: "monitor/findGeneralAppearance",
-        data: {
-          wpId: that.wpId,
-        },
-        success(res) {
-          if (res.code == 200) {
-            that.wpnumMap = res.data.fczbmap.jczbmap;
-            that.wpInfoMap = res.data.wxssmap;
-            that.fjmap = res.data.fjmap[0];
-			that.when();
-          }
-        },
-      });
-    },
-    when: function () {
-      let jsonObj = dataService.get("arcgis-xs");
-      this.fans = jsonObj;
-      jsonObj.forEach((item) => {
-        let obj = this.fjmap.find((t) => {
-          let wtid = t.wtId.replace("01_", "");
-          if (wtid == item.attributes.code) return t;
-        });
-        if (obj) {
-          item.attributes.state = String(obj.fjzt);
-        } else {
-          item.attributes.state = "4";
-        }
-        switch (item.attributes.state) {
-          case "0": //待机
-            item.attributes.rotate = false; // 转
-            item.attributes.dur = 8; // 转一圈时间
-            break;
-          case "1": //运行
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 2; // 转一圈时间
-            break;
-          case "2": //故障
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "3": //中断
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "4": //维护
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          case "5": //限电
-            item.attributes.rotate = true; // 转
-            item.attributes.dur = 6;
-            break;
-          case "6": //停机
-            item.attributes.rotate = false; // 不转
-            item.attributes.dur = 8;
-            break;
-          default:
-            item.attributes.rotate = false;
-            item.attributes.dur = 8;
-            break;
-        }
-        this.$refs.arcgis.addHtmlPoint(
-          [item.geometry.x, item.geometry.y],
-          item.attributes.code,
-          33,
-          50,
-          false
-        );
-      });
-      let lineJsonObj = dataService.get("arcgis-xs-line");
-      this.$refs.arcgis.addFanByJson(jsonObj, lineJsonObj);
-    },
-    clickMap: function (info) {
-      console.log(info);
-    },
-    clickFan: function (code) {
-      let wtId = code.replace("G", "G01_");
-      this.$router.push(`/monitor/windsite/info/${this.wpId}/${wtId}`);
-    },
-    popupBack: function () {
-      this.showPopup = false;
-    },
-    clickMapTool: function (index) {
-      //   this.mapToolIndex = index;
-      this.showPopup = !this.showPopup;
-    },
-  },
-  watch: {
-    wpId(res) {
-      this.sourceId = res;
-      if (res) {
-        this.requestData();
-      }
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-@titleHeight: 40px;
-
-.map-1 {
-  width: 100%;
-  height: calc(100vh - 90px);
-  display: flex;
-  flex-direction: column;
-
-  .btn-group-tabs {
-    display: flex;
-    flex-direction: row;
-  }
-
-  .can-click {
-    cursor: pointer;
-  }
-
-  .syz-img {
-    width: 65px;
-    height: 47px;
-
-    img {
-      width: 100%;
-      height: 100%;
-    }
-  }
-
-  .panel-title {
-    width: 100%;
-    background-color: fade(@darkgray, 40%);
-    margin-top: 16px;
-    padding: 6px;
-    display: flex;
-    align-items: center;
-
-    .panel-title-name {
-      color: @green;
-      display: flex;
-      align-items: center;
-      line-height: 0;
-      font-size: 0;
-
-      i,
-      span {
-        margin: 0 0 0 16px;
-        line-height: 0;
-        font-size: 13px;
-      }
-    }
-
-    .sub-title-item {
-      display: flex;
-      align-items: center;
-      margin-left: 16px;
-
-      .sub-title {
-        font-size: 13px;
-        margin-left: 6px;
-      }
-
-      .sub-count {
-        font-size: 13px;
-        font-weight: 500;
-      }
-
-      img {
-        height: 31px;
-      }
-    }
-  }
-
-  .panel-body {
-    flex-grow: 1;
-    background-color: fade(@darkgray, 20%);
-    padding: 8px;
-    overflow: auto;
-    position: relative;
-
-    .arcgis-layer {
-      z-index: 1;
-    }
-
-    .map-popup-panel {
-      width: 760px;
-      position: absolute;
-      left: 71px;
-      top: 22px;
-      z-index: 2;
-
-      .map-popup-panel-header {
-        width: 100%;
-        background: fade(#152221, 90%);
-        display: flex;
-
-        .map-popup-panel-title {
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          position: relative;
-
-          &::before,
-          &::after {
-            position: absolute;
-            width: calc(50% - 6px);
-            bottom: 0;
-            border-bottom: 2px solid @green;
-          }
-
-          &::before {
-            content: "";
-            left: 0;
-          }
-
-          &::after {
-            content: "";
-            right: 0;
-          }
-
-          span {
-            position: absolute;
-            width: 11.3px;
-            height: 11.3px;
-            border-left: 2px solid @green;
-            border-top: 2px solid @green;
-            left: calc(50% - 5.65px);
-            bottom: -3px;
-            transform: rotate(45deg);
-          }
-        }
-
-        .map-popup-panel-date {
-          flex-grow: 1;
-          padding: 17px 24px;
-          font-size: @fontsize-s;
-          text-align: right;
-          border-bottom: 2px solid @green;
-        }
-
-        .map-popup-panel-back {
-          margin-left: auto;
-          width: 54px;
-          display: flex;
-          align-items: center;
-          justify-content: center;
-          position: relative;
-          cursor: pointer;
-
-          &::after {
-            content: "";
-            position: absolute;
-            left: 0;
-            height: 50%;
-            border-left: 1px solid @gray;
-            top: 25%;
-          }
-        }
-      }
-
-      .map-popup-panel-body {
-        background: fade(#152221, 75%);
-        border: 1px solid fade(@darkgray, 40);
-        border-top: 0px;
-
-        .table-form {
-          .text,
-          .unit {
-            font-weight: 400;
-          }
-
-          .unit {
-            min-width: auto;
-          }
-
-          .value,
-          .unit {
-            text-align: left;
-          }
-        }
-      }
-    }
-
-    .map-tool {
-      position: absolute;
-      right: 22px;
-      top: 22px;
-      z-index: 2;
-      background: #152221af;
-      padding: 18px 14px;
-
-      .m-btn {
-        width: 124px;
-        height: 44px;
-        background: #152221bf;
-        border: 1px solid #152221bf;
-        color: #ffffff;
-        transition: all 0.3s;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        cursor: pointer;
-
-        &:hover,
-        &.active {
-          background: #05bb4c33;
-          border: 1px solid #05bb4c;
-          color: #05bb4c;
-        }
-
-        + .m-btn {
-          margin-top: 16px;
-        }
-      }
-    }
-  }
-}
-</style>

+ 0 - 516
src/components/arcgis/arcgis.vue

@@ -1,516 +0,0 @@
-<template>
-    <div class="arcgis" :class="{'pointer': pointer}">
-        <div id="viewDiv"></div>
-        <teleport to=".esri-ui" v-if="teleport">
-            <div id="marker">
-                <div v-for="(marker, index) of markers" :key="index" v-show="marker.show" 
-                    :id="'arcgic-marker-' + marker.slot" class="arcgis-marker" :style="'left: '+marker.x+'px; top: '+marker.y+'px; transform: scale('+marker.scale+')'">
-                    <slot :name="marker.slot"></slot>
-                </div>
-            </div>
-        </teleport>
-    </div>
-</template>
-
-<script>
-    import Map from "@arcgis/core/Map";
-    import Basemap from "@arcgis/core/Basemap";
-    import Graphic from "@arcgis/core/Graphic";
-    import SpatialReference from "@arcgis/core/geometry/SpatialReference";
-    import MapView from "@arcgis/core/views/MapView";
-    import SceneView from "@arcgis/core/views/SceneView";
-    import MapImageLayer from "@arcgis/core/layers/MapImageLayer";
-    import GraphicsLayer from "@arcgis/core/layers/GraphicsLayer";
-    import SimpleMarkerSymbol from "@arcgis/core/symbols/SimpleMarkerSymbol";
-    import "@arcgis/core/assets/esri/themes/light/main.css";
-
-    const mapUrl = "http://10.155.32.4:9080/arcgis/rest/services/nxmap/MapServer"; // ArcMap地址
-    // const mapUrl = "http://10.155.32.4:9080/arcgis/rest/services/NX_MAP_15/MapServer"; // ArcMap地址
-    let basemap = null;
-    let map = null;
-    let view = null;
-    let point_graphicsLayer = null;
-    let line_graphicsLayer = null;
-    let text_graphicsLayer = null;
-    let img_graphicsLayer = null;
-    let html_graphicsLayer = null;
-    let point_graphics = [];
-    let line_graphics = [];
-    let text_graphics = [];
-    let img_graphics = [];
-    let html_graphics = [];
-
-    export default {
-        // 名称
-        name: "arcgis",
-        // 使用组件
-        components: {},
-        // 传入参数
-        props: {
-            data: {
-                type: Object,
-                default: () => {
-                    return {
-                        mode: "2D", // 模式 2D 3D
-                        title: "宁夏地图", // 标题
-                        center: [106.230909, 38.487193], // 初始中心点
-                        height: 654, // 3D地图初始相机高度
-                        tilt: 65, // 俯视角
-                        scale: 128000, // 缩放
-                        rotation: 0, // 正北顺时针旋转角度
-                        ox: 0, // 标记整体偏移
-                        oy: 0, // 标记整体偏移
-                    }
-                },
-            }
-        },
-        // 自定义事件
-        emits: {
-            when: null, // 地图加载完成
-            clickMap: null, // 点击地图(可点击元素)
-        },
-        // 数据
-        data() {
-            return {
-                fanStateImgMapping: [{
-                        name: "待机",
-                        code: "0",
-                        img: require("@assets/map/fan/green.png")
-                    },
-                    {
-                        name: "运行",
-                        code: "1",
-                        img: require("@assets/map/fan/blue.png")
-                    },
-                    {
-                        name: "故障",
-                        code: "2",
-                        img: require("@assets/map/fan/red.png")
-                    },
-                    {
-                        name: "离线",
-                        code: "3",
-                        img: require("@assets/map/fan/black.png")
-                    },               
-                    {
-                        name: "检修",
-                        code: "4",
-                        img: require("@assets/map/fan/orange.png")
-                    },
-                    {
-                        name: "限电",
-                        code: "5",
-                        img: require("@assets/map/fan/purple.png")
-                    },
-                    {
-                        name: "限停",
-                        code: "6",
-                        img: require("@assets/map/fan/white.png")
-                    },
-                ],
-                syzImg: require("@assets/png/booster-station.png"),
-                markers: [],
-                pointer: false,
-                teleport: false, // 是否进行传送
-            }
-        },
-        // 函数
-        methods: {
-            // 世界转屏幕
-            worldToScreen: function (point) {
-                // var world = new Point(point.x, point.y, SpatialReference.WGS84);
-                // var screenPoint = map.toScreen(point);
-            },
-            // 屏幕转世界
-            screenToWorld: function (point) {},
-            // 偏移转经纬度
-            oToLL: function (x, y) {
-                return {
-                    x: 0.00000899 * x,
-                    y: 0.00001141 * y
-                }
-            },
-            // 初始化地图
-            initMap: function() {
-                basemap = new Basemap({
-                    // 底图
-                    baseLayers: [
-                        new MapImageLayer({
-                            url: mapUrl,
-                            title: this.data.title,
-                            spatialReference: SpatialReference.WGS84,
-                        }),
-                    ],
-                    title: this.data.title,
-                    spatialReference: SpatialReference.WGS84,
-                });
-                map = new Map({
-                    // 地图容器
-                    basemap: basemap,
-                });
-                if (this.data.mode == "3D") {
-                    view = new SceneView({
-                        // 3D显示图层
-                        map: map,
-                        center: this.data.center,
-                        camera: {
-                            position: {
-                                x: this.data.center[0], // lon
-                                y: this.data.center[1], // lat
-                                z: this.data.height, // elevation in meters
-                            },
-                            tilt: this.data.tilt,
-                        },
-                        container: this.$el.querySelector("#viewDiv"),
-                    });
-                } else {
-                    view = new MapView({
-                        // 2D显示图层
-                        map: map,
-                        center: this.data.center,
-                        container: this.$el.querySelector("#viewDiv"),
-                        rotation: this.data.rotation,
-                    });
-                }
-                view.scale = this.data.scale;
-                //去掉版权
-                view.ui._removeComponents(["attribution"]);
-                view.when(() => {
-                    this.when();
-                    this.$emit('when');
-                });
-            },
-            when: function() {
-                // 当地图加载完成
-                this.teleport = true; // 传送
-                point_graphicsLayer = new GraphicsLayer({
-                    graphics: []
-                });
-                line_graphicsLayer = new GraphicsLayer({
-                    graphics: []
-                });
-                text_graphicsLayer = new GraphicsLayer({
-                    graphics: []
-                });
-                img_graphicsLayer = new GraphicsLayer({
-                    graphics: []
-                });
-                html_graphicsLayer = new GraphicsLayer({
-                    graphics: []
-                });
-                map.add(line_graphicsLayer);
-                map.add(point_graphicsLayer);
-                map.add(text_graphicsLayer);
-                map.add(img_graphicsLayer);
-                map.add(html_graphicsLayer);
-                view.on("click", (event) => { // 监听鼠标点击 判断是否可以点击
-                    view.hitTest(event).then((response) => {
-                        let result = null;
-                        if (response.results.length) {
-                            const canClick = ["picture-marker", "text"];
-                            response.results.forEach(item => {
-                                if (canClick.indexOf(item.graphic.symbol.type) >= 0) {
-                                    result = item.graphic.attributes;
-                                }
-                            })
-                        }
-                        if (result != null) {
-                            this.$emit('clickMap', result);
-                        }
-                    })
-                });
-                view.on("pointer-move", (event) => { // 监听鼠标移动 判断是否把鼠标变成小手
-                    view.hitTest(event).then((response) => {
-                        let result = null;
-                        if (response.results.length) {
-                            const canClick = ["picture-marker", "text"];
-                            response.results.forEach(item => {
-                                if (canClick.indexOf(item.graphic.symbol.type) >= 0) {
-                                    result = item.graphic.attributes;
-                                }
-                            })
-                        }
-                        if (result) {
-                            this.pointer= true;
-                        } else {
-                            this.pointer= false;
-                        }
-                    })
-                })
-                view.watch("extent", (evt) => {
-                    this.markers.forEach((marker, index) => {
-                        let graphics = html_graphics[index];
-                        let screenPoint = view.toScreen(graphics.geometry);
-                        marker.x = screenPoint.x - marker.ox;
-                        marker.y = screenPoint.y - marker.oy;
-                        if (marker.canScale) {
-                            marker.scale =  0.0272 / evt.height;
-                            // console.log(evt.height)
-                            if (evt.height < 0.295) { 
-                                if (!marker.show) {
-                                    marker.show = true;
-                                    graphics.symbol = new SimpleMarkerSymbol({
-                                        color: "transparent",
-                                        outline: {
-                                            color: [255, 255, 255],
-                                            width: 0
-                                        }
-                                    });
-                                }
-                            } else {
-                                if (marker.show) {
-                                    marker.show = false;
-                                    graphics.symbol = new SimpleMarkerSymbol({
-                                        color: [5,187,76,0.75],
-                                        outline: {
-                                            color: [5,187,76],
-                                            width: 2
-                                        }
-                                    });
-                                }
-                            }
-                        }
-                    });
-                });
-            },
-            // 通过name或code获取img
-            getFanImg: function(nameOrState) {
-                const item = this.fanStateImgMapping.find(t => t.name == nameOrState || t.code ==
-                    nameOrState);
-                if (item) {
-                    return item.img;
-                } else {
-                    console.error(nameOrState, "对应的图片不存在");
-                    return "";
-                }
-            },
-            // 添加html
-            addHtmlPoint: function (point, slot, ox=0, oy=0, scale=true) {
-                point[0] += this.oToLL(this.data.ox, this.data.oy).x;
-                point[1] += this.oToLL(this.data.ox, this.data.oy).y;
-                let item = {
-                    geometry: {
-                        type: "point",
-                        spatialReference: SpatialReference.WGS84,
-                        x: point[0],
-                        y: point[1],
-                    },
-                    symbol: {
-                        type: "simple-marker",
-                        color: "transparent",
-                        outline: {
-                            color: [255, 255, 255],
-                            width: 0
-                        }
-                    },
-                    // symbol: null,
-                    attributes: {},
-                    popupTemplate: null
-                };
-                let graphic = new Graphic(item);
-                html_graphics.push(graphic);
-                html_graphicsLayer.add(graphic);
-                let screenPoint = view.toScreen(graphic.geometry);
-                let marker = {
-                    slot: slot,
-                    ox: ox,
-                    oy: oy,
-                    x: screenPoint.x - ox,
-                    y: screenPoint.y - oy,
-                    scale: 1,
-                    canScale: scale,
-                    show: true,
-                };
-                this.markers.push(marker);
-                return marker;
-            },
-            // 添加图片点
-            addImagePoint: function (point, src, width, height) {
-                let item = {
-                    geometry: {
-                        type: "point",
-                        spatialReference: SpatialReference.WGS84,
-                        x: point[0],
-                        y: point[1]
-                    },
-                    symbol: {
-                        type: "picture-marker",
-                        url: this.tempImg,
-                        width: width,
-                        height: height,
-                        xoffset: 0,
-                        yoffset: 0
-                    },
-                    attributes: {},
-                    popupTemplate: null
-                };
-            
-                let graphic = new Graphic(item);
-                img_graphics.push(graphic);
-                img_graphicsLayer.add(graphic);
-            },
-            // 移除
-            remove: function (type, obj) {
-                if (type == "html") {
-                    let markerIndex = this.markers.findIndex(t => t.slot == obj.slot);
-                    // let marker = this.markers[markerIndex];
-                    this.markers.splice(markerIndex, 1);
-                    let graphic = html_graphics[markerIndex];
-                    html_graphics.splice(markerIndex, 1);
-                    html_graphicsLayer.remove(graphic);
-                } else {
-                    console.info("arcgis: No type:", type)
-                }
-            },
-            // 添加图片点
-            addImgPoint: function(jsonItem) {
-                let item = JSON.parse(JSON.stringify(jsonItem));
-                item.geometry.type = "point";
-                item.geometry.spatialReference = SpatialReference.WGS84;
-                item.geometry.x += this.oToLL(this.data.ox, this.data.oy).x;
-                item.geometry.y += this.oToLL(this.data.ox, this.data.oy).y;
-                item.symbol = {
-                    type: "picture-marker",
-                    url: item.attributes.type == "升压站" ? this.syzImg : this.getFanImg(item.attributes.state),
-                    width: item.attributes.type == "升压站" ? "96px" : "48px",
-                    height: item.attributes.type == "升压站" ? "96px" : "48px",
-                    xoffset: 0,
-                    yoffset: 18
-                };
-                let graphic = new Graphic(item);
-                point_graphics.push(graphic);
-                point_graphicsLayer.add(graphic);
-                this.addImgText(jsonItem);
-            },
-            // 添加图片文字
-            addImgText: function(jsonItem) {
-                let item = JSON.parse(JSON.stringify(jsonItem));
-                item.geometry.type = "point";
-                item.geometry.spatialReference = SpatialReference.WGS84;
-                item.geometry.x += this.oToLL(this.data.ox, this.data.oy).x;
-                item.geometry.y += this.oToLL(this.data.ox, this.data.oy).y;
-                item.symbol = {
-                    type: "text",
-                    color: "white",
-                    haloColor: "black",
-                    haloSize: "1px",
-                    text: item.attributes.code,
-                    xoffset: 0,
-                    yoffset: -10,
-                    font: {
-                        size: 12,
-                        // family: "Josefin Slab",/
-                        weight: "bold"
-                    }
-                };
-                let graphic = new Graphic(item);
-                text_graphics.push(graphic);
-                text_graphicsLayer.add(graphic);
-            },
-            // 添加线段
-            addLine: function(jsonItem) {
-                let item = JSON.parse(JSON.stringify(jsonItem));
-                item.geometry.type = "polyline";
-                item.geometry.spatialReference = SpatialReference.WGS84;
-                item.geometry.paths.forEach(item => {
-                    item[0] += this.oToLL(this.data.ox, this.data.oy).x;
-                    item[1] += this.oToLL(this.data.ox, this.data.oy).y;
-                });
-                item.symbol = {
-                    type: "simple-line",
-                    color: "#05bb4c",
-                    width: item.attributes.width,
-                }
-                let graphic = new Graphic(item);
-                line_graphics.push(graphic);
-                line_graphicsLayer.add(graphic);
-            },
-            addFanByJson: function(jsonObj, lineJsonObj) {
-                // jsonObj.forEach(item => {
-                //     this.addImgPoint(item);
-                // });
-                lineJsonObj.forEach(item => {
-                    this.addLine(item);
-                });
-            },
-            goto: function(point) {
-                view.goTo({
-                    center: point
-                }).catch(function(error) {
-                    if (error.name != "AbortError") {
-                        console.error(error);
-                    }
-                });
-            }
-        },
-        // 生命周期钩子
-        beforeCreate() {
-            // 创建前
-        },
-        created() {
-            // 创建后
-        },
-        beforeMount() {
-            // 渲染前
-        },
-        mounted() {
-            // 渲染后
-			basemap = null;
-            map = null;
-            view = null;
-            point_graphicsLayer = null;
-            line_graphicsLayer = null;
-            text_graphicsLayer = null;
-            img_graphicsLayer = null;
-            html_graphicsLayer = null;
-            point_graphics = [];
-            line_graphics = [];
-            text_graphics = [];
-            img_graphics = [];
-            html_graphics = [];
-            this.initMap();
-        },
-        beforeUpdate() {
-            // 数据更新前
-        },
-        updated() {
-            // 数据更新后
-        },
-    }
-</script>
-
-<style lang="less">
-    .arcgis {
-        width: 100%;
-        height: 100%;
-        position: relative;
-        overflow: hidden;
-
-        &.pointer {
-            cursor: pointer;
-        }
-
-        #viewDiv {
-            position: absolute;
-            z-index: 1;
-            width: 100%;
-            height: 100%;
-            top: 0;
-            left: 0;
-        }
-
-        #marker {
-            position: absolute;
-            z-index: 2;
-            width: 0;
-            height: 0;
-            top: 0;
-            left: 0;
-        }
-
-        .arcgis-marker {
-            position: absolute;
-            z-index: 2;
-        }
-    }
-</style>

+ 19 - 19
src/components/coms/table/table-qc.vue

@@ -173,34 +173,34 @@ export default {
       let method = "GET";
       if ("deviationRate2" == col.field) {
         data.type = "sjbz";
-      } else if ("deviationRate1" == col.field) {
-        data.type = "sjzy";
-      } else if ("deviationRate3" == col.field) {
-        data.type = "zybz";
-      } else if ("monthDeviationRate" == col.field) {
+        subUrl = curIndex
+          ? "/leaderboard/getCurvechatAjax"
+          : "/leaderboard/curveMonthchatAjax";
+      }
+      //   else if ("deviationRate1" == col.field) {
+      //     data.type = "sjzy";
+      //   } else if ("deviationRate3" == col.field) {
+      //     data.type = "zybz";
+      //   }
+      else if ("monthDeviationRate" == col.field) {
         data.type = "hb";
+        subUrl = curIndex
+          ? "/leaderboard/curvechatAjaxhb"
+          : "/leaderboard/curveMonthchatAjaxhb";
       } else if ("yearDeviationRate" == col.field) {
         data.type = "tb";
+        subUrl = curIndex
+          ? "/leaderboard/curvechatAjaxtb"
+          : "/leaderboard/curveMonthchatAjaxtb";
       } else if ("standardDeviationRate" == col.field) {
         data.type = "bg";
+        subUrl = curIndex
+          ? "/leaderboard/curvechatAjaxbg"
+          : "/leaderboard/curveMonthchatAjaxbg";
       } else {
         return 0;
       }
 
-      if (curIndex) {
-        if (data.type.length < 2) {
-          subUrl = "/leaderboard/getCurvechatAjax";
-        } else {
-          subUrl = "/leaderboard/curvechatAjaxhb";
-        }
-      } else {
-        if (data.type.length < 2) {
-          subUrl = "/leaderboard/curveMonthchatAjax";
-        } else {
-          subUrl = "/leaderboard/curveMonthchatAjaxtb";
-        }
-      }
-
       this.dialogShow = true;
       this.dialogTitle = "曲线偏差率排行";
 

+ 0 - 564
src/components/dialog/gfIndex.vue

@@ -1,564 +0,0 @@
-<template>
-    <el-dialog title="逆变器详情" width="75%" top="10vh" @opened="opened()" @closed="closed()" :show-close="true"
-        class="my-info-dialog" custom-class="modal" :close-on-click-modal="false">
-        <div class="body">
-            <div class="titleList">{{inverterInfo.wpname}} <text v-if="wpId">-{{wpId}}</text></div>
-            <el-row style="height: 93%;margin-top: 10px;">
-                <el-col :span="12" style="height: 100%">
-                    <div class="info">
-                        <div class="hookup">
-                            <div class="modelTitle">主接线图</div>
-                            <div class="hookupImg"></div>
-                        </div>
-                        <div class="pointInfo">
-                            <div class="modelTitle">遥信值</div>
-                            <div class="point-data">
-                                <div class="point-item">逆变器单元一绝缘阻抗低</div>
-                                <div class="point-item">直流功率</div>
-                                <div class="point-item">直流功率</div>
-                                <div class="point-item">直流功率</div>
-                                <div class="point-item">逆变器单元一绝缘阻抗低</div>
-                                <div class="point-item">直流功率</div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="simulation">
-                        <div class="modelTitle">整机模拟量</div>
-                        <div class="simulationNum">
-                            <table class="table-form">
-                                <tr v-for="(pItem, pIndex) in sourceMapAI" :key="pIndex">
-                                    <template v-for="(cItem, cIndex) in pItem" :key="cIndex">
-                                        <td class="text gray">{{ cItem.name }}</td>
-                                        <td class="value green">{{ cItem.value }}</td>
-                                        <td class="unit gray">{{ cItem.unit }}</td>
-                                    </template>
-                                </tr>
-                            </table>
-                        </div>
-                    </div>
-                </el-col>
-                <el-col :span="12" style="height: 100%">
-                    <div class="inverter">
-                        <div class="modelTitle"
-                            style="display: flex;flex-direction: row; justify-content: space-between;align-items: center;padding:0 20px">
-                            <div>{{ inverterInfo.code }}</div>
-                            <div style="display: flex;flex-direction: row;align-items: center;">
-                                <div style="margin-right: 30px">逆变器型号:{{ inverterInfo.info?.modelid }}</div>
-                                <div>状态:</div>
-                                <div class="statusBar" :style="`background: ${inverterInfo.color}`"></div>
-                            </div>
-                        </div>
-                        <div class="inverterInfo">
-                            <div class="inverter-point">
-                                <table class="table-form">
-                                    <tr v-for="(pItem, pIndex) in sourceMapDI" :key="pIndex">
-                                        <template v-for="(cItem, cIndex) in pItem" :key="cIndex">
-                                            <td class="text gray">{{ cItem.name }}</td>
-                                            <td class="value green">{{ cItem.value }}</td>
-                                            <td class="unit gray">{{ cItem.unit }}</td>
-                                        </template>
-                                    </tr>
-                                </table>
-                            </div>
-                            <div class="inverter-power">
-                                <table class="table-form">
-                                    <tr v-for="(pItem, pIndex) in dataList" :key="pIndex">
-                                        <td class="text gray">{{ pItem.name }}</td>
-                                        <td>
-                                            <div :class="pItem.type ? 'value-green' : 'value-red'"></div>
-                                        </td>
-                                    </tr>
-                                </table>
-                            </div>
-                        </div>
-                    </div>
-                </el-col>
-            </el-row>
-        </div>
-    </el-dialog>
-</template>
-<script>
-import api from "@api/cockpit/matrix/index.js";
-export default {
-    props: {
-        wpId: {
-            type: String,
-            default: "",
-        },
-        wtId: {
-            type: String,
-            default: "",
-        },
-    },
-    // 使用组件
-    components: {
-
-    },
-    data() {
-        return {
-            inverterInfo: {},
-            dataList: [
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-            ],
-            sourceMapAI: [
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                ],
-            ],
-            sourceMapDI: [
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-            ],
-            timmer:'',
-        };
-    },
-    methods: {
-        opened() {
-            this.getData()
-            this.timmer = setInterval(() => {
-                this.getData();
-            }, this.$store.state.websocketTimeSec);
-        },
-        closed() {
-            clearInterval(this.timmer);
-            this.timmer = null;
-        },
-        getData() {
-            api.findInverterInfo({
-                wtId: this.wtId
-            }).then(res => {
-                if (res.data) {
-                    res.data.color = this.getColor(res.data.NBQ?.filter(item => item.code === 'FJZT')[0]?.value)
-                    this.inverterInfo = res.data
-                }
-            })
-        },
-        getColor(fjzt) {
-            switch (fjzt) {
-                case 0:
-                    return "#05bb4c";
-                    break;
-                case 1:
-                    return "#1a93cf";
-                    break;
-                case 2:
-                    return "#BA3237";
-                    break;
-                case 3:
-                    return "#606769";
-                    break;
-                case 4:
-                    return "#e17e23";
-                    break;
-                case 5:
-                    return "#4b55ae";
-                    break;
-                case 6:
-                    return "#ffffff";
-                    break;
-            }
-        },
-    },
-};
-</script>
-<style lang="less" scoped>
-.body {
-    height: 70vh;
-}
-
-.titleList {
-    width: 100%;
-    height: 47px;
-    display: flex;
-    align-items: center;
-    font-size: 16px;
-    color: @green;
-    background-color: rgba(83, 98, 104, .2);
-    padding-left: 22px;
-}
-
-.modelTitle {
-    width: 100%;
-    height: 37px;
-    font-size: 14px;
-    color: #ffffff;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    background-color: rgba(83, 98, 104, .2);
-    margin-bottom: 10px;
-}
-
-.info {
-    width: 100%;
-    height: 60%;
-    display: flex;
-    flex-direction: row;
-    align-items: center;
-
-    .hookup {
-        display: flex;
-        flex-direction: column;
-        width: 64%;
-        height: 100%;
-        margin: 0 1% 0 0;
-    }
-
-    .pointInfo {
-        display: flex;
-        flex-direction: column;
-        width: 35%;
-        height: 100%;
-
-        .point-data {
-            display: flex;
-            flex-direction: column;
-            overflow-y: scroll;
-            width: 100%;
-            height: 85%;
-            line-height: 50px;
-
-            .point-item {
-                width: 100%;
-                height: 28px;
-                display: flex;
-                align-items: center;
-                justify-content: center;
-                font-size: 12px;
-                color: #ffffff;
-                background-color: #BD3338;
-                margin-bottom: 5px;
-            }
-        }
-
-        .point-data::-webkit-scrollbar {
-            display: none
-        }
-    }
-}
-
-.simulation {
-    height: 40%;
-
-    .simulationNum {
-        height: 100%;
-        overflow-y: scroll;
-    }
-
-    .simulationNum::-webkit-scrollbar {
-        display: none
-    }
-}
-
-.inverter {
-    height: 100%;
-    display: flex;
-    flex-direction: column;
-
-    .inverterInfo {
-        display: flex;
-        flex-direction: row;
-        height: 100%;
-
-        .inverter-point {
-            width: 64%;
-            margin: 0 1% 0 0;
-            // border: 1px solid #536268;
-            height: 100%;
-        }
-
-        .inverter-power {
-            width: 35%;
-            height: 100%;
-        }
-    }
-}
-
-.table-form {
-    .dot {
-        color: @gray;
-
-        &.red {
-            color: @red;
-
-            &::before {
-                background: @red;
-            }
-        }
-
-        &::before {
-            content: " ";
-            display: inline-block;
-            width: 8px;
-            height: 8px;
-            background: @green;
-            margin-right: 8px;
-            border-radius: 50%;
-        }
-    }
-
-    .location-tr {
-        width: 100%;
-    }
-
-    .location-td {
-        // width: 20%;
-        // padding-left: 7%;
-        text-align: left;
-    }
-}
-
-.value-green {
-    width: 14px;
-    height: 14px;
-    background: #BD3338;
-    border-radius: 50%;
-}
-
-.value-green {
-    width: 14px;
-    height: 14px;
-    background: @green;
-    border-radius: 50%;
-}
-.statusBar{
-    width: 8px;
-    height: 8px;
-}
-</style>

+ 0 - 637
src/components/dialog/gfzcIndex.vue

@@ -1,637 +0,0 @@
-<template>
-    <el-dialog title="逆变器详情" width="75%" top="10vh" @opened="opened()" @closed="closed()" :show-close="true" class="my-info-dialog" custom-class="modal" :close-on-click-modal="false">
-        <div class="body">
-            <div class="titleList">{{inverterInfo.wpname}} <text v-if="wpId">-{{wpId}}</text></div>
-            <el-row style="height: 93%;margin-top: 10px;">
-                <el-col :span="24" style="height: 100%">
-                    <div class="inverter">
-                        <div class="modelTitle"
-                            style="display: flex;flex-direction: row; justify-content: space-between;align-items: center;padding:0 20px">
-                            <div>{{ inverterInfo.code }}</div>
-                            <div style="display: flex;flex-direction: row;align-items: center;">
-                                <div style="margin-right: 30px">逆变器型号:{{ inverterInfo.info?.modelid }}</div>
-                                <div>状态:</div>
-                                <div class="statusBar" :style="`background: ${inverterInfo.color}`"></div>
-                            </div>
-                        </div>
-                        <div class="body-content">
-                            <div class="left-content">
-                                <div class="title"><span>遥测</span></div>
-                                <div class="item-box clearfix">
-                                    <div class="item" v-for="(val, index) in sourceMapDI" :key="index" v-show="val.pointtype == 'ai'">
-                                        <el-row>
-                                            <el-col :span="8"><span>{{ val.name }}</span></el-col>
-                                            <el-col :span="8"><span>{{ val.value }}</span></el-col>
-                                            <el-col :span="8"><span>{{ val.unit }}</span></el-col>
-                                        </el-row>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="right-content">
-                                <div class="title"><span>遥信</span></div>
-                                <div class="item-box clearfix">
-                                    <div class="item" :class="val.rate == 1 ?'open':''" v-for="(val, index) in sourceMapDI" :key="index" v-show="val.pointtype == 'di'" >
-                                        <span>{{ val.name }}</span>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </el-col>
-            </el-row>
-        </div>
-    </el-dialog>
-</template>
-<script>
-import api from "@api/cockpit/matrix/index.js";
-export default {
-    props: {
-        wpId: {
-            type: String,
-            default: "",
-        },
-        wtId: {
-            type: String,
-            default: "",
-        },
-    },
-    // 使用组件
-    components: {
-
-    },
-    data() {
-        return {
-            inverterInfo: {},
-            dataList: [
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-                {
-                    name: '直流功率',
-                    type: true,
-                },
-            ],
-            sourceMapAI: [
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                ],
-            ],
-            sourceMapDI: [
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-                [
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    },
-                    {
-                        code: "U1YZWD",
-                        modelid: "/HW3-S2500(121)",
-                        name: "U1绕组温度",
-                        pointtype: "ai",
-                        rate: 1,
-                        types: "FDJ",
-                        unit: "°c",
-                        value: 0,
-                    }
-                ],
-            ],
-            timmer:'',
-        };
-    },
-    methods: {
-        opened() {
-            this.getData()
-            this.timmer = setInterval(() => {
-                this.getData();
-            }, this.$store.state.websocketTimeSec);
-        },
-        closed() {
-            clearInterval(this.timmer);
-            this.timmer = null;
-        },
-        getData() {
-            api.findInverterInfo({
-                wtId: this.wtId
-            }).then(res => {
-                if (res.data) {
-                    res.data.color = this.getColor(res.data.NBQ?.filter(item => item.code === 'FJZT')[0]?.value)
-                    this.inverterInfo = res.data
-                    this.sourceMapDI = res.data.NBQ 
-                }
-            })
-        },
-        getColor(fjzt) {
-            switch (fjzt) {
-                case 0:
-                    return "#05bb4c";
-                    break;
-                case 1:
-                    return "#1a93cf";
-                    break;
-                case 2:
-                    return "#BA3237";
-                    break;
-                case 3:
-                    return "#606769";
-                    break;
-                case 4:
-                    return "#e17e23";
-                    break;
-                case 5:
-                    return "#4b55ae";
-                    break;
-                case 6:
-                    return "#ffffff";
-                    break;
-            }
-        },
-    },
-};
-</script>
-<style lang="less" scoped>
-.clearfix::after {
-  content: "";
-  clear: both;
-  height: 0;
-  line-height: 0;
-  visibility: hidden;
-  display: block;
-}
-
-.clearfix {
-  zoom: 1;
-}
-
-.body-content {
-    height: 100%;
-    display: flex;
-    overflow: hidden;
-    .title {
-        height: 30px;
-        line-height: 30px;
-        text-align: center;
-        border-bottom: 3px solid rgb(75, 70, 70);
-        span {
-            color: #fff;
-        }
-    }
-    .left-content {
-        width: 70%;
-        .item-box {
-            height: calc(100% - 30px);
-            overflow: auto;
-            .item {
-                width: 50%;
-                height: 30px;
-                line-height: 30px;
-                float: left;
-                padding-left: 10px;
-                box-sizing: border-box;
-                span {
-                    color: #fff;
-                    font-size: 12px;
-                }
-            }
-            .item:nth-child(2n) {
-                border-left: 1px solid rgb(114, 101, 101);;
-            }
-            .item:hover {
-                background-color: rgb(114, 101, 101);
-            }
-        }
-    }
-    .right-content {
-        width: 29%;
-        .item-box {
-            height: calc(100% - 30px);
-            overflow: auto;
-            .item {
-                height: 30px;
-                line-height: 30px;
-                box-sizing: border-box;
-                background-color: rgb(146, 145, 145);
-                margin: 2px 5px;
-                text-align: center;
-                span {
-                    color: #fff;
-                    font-size: 12px;
-                }
-            }
-            .item:hover {
-                background-color: rgb(182, 179, 179);
-            }
-            .open {
-                background-color: rgb(9, 187, 9);
-            }
-        }
-    }
-}
-.body {
-    height: 70vh;
-}
-
-.titleList {
-    width: 100%;
-    height: 47px;
-    display: flex;
-    align-items: center;
-    font-size: 16px;
-    color: @green;
-    background-color: rgba(83, 98, 104, .2);
-    padding-left: 22px;
-}
-
-.modelTitle {
-    width: 100%;
-    height: 37px;
-    font-size: 14px;
-    color: #ffffff;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    background-color: rgba(83, 98, 104, .2);
-    margin-bottom: 10px;
-}
-
-.info {
-    width: 100%;
-    height: 60%;
-    display: flex;
-    flex-direction: row;
-    align-items: center;
-
-    .hookup {
-        display: flex;
-        flex-direction: column;
-        width: 64%;
-        height: 100%;
-        margin: 0 1% 0 0;
-    }
-
-    .pointInfo {
-        display: flex;
-        flex-direction: column;
-        width: 35%;
-        height: 100%;
-
-        .point-data {
-            display: flex;
-            flex-direction: column;
-            overflow-y: scroll;
-            width: 100%;
-            height: 85%;
-            line-height: 50px;
-
-            .point-item {
-                width: 100%;
-                height: 28px;
-                display: flex;
-                align-items: center;
-                justify-content: center;
-                font-size: 12px;
-                color: #ffffff;
-                background-color: #BD3338;
-                margin-bottom: 5px;
-            }
-        }
-
-        .point-data::-webkit-scrollbar {
-            display: none
-        }
-    }
-}
-
-.simulation {
-    height: 40%;
-
-    .simulationNum {
-        height: 100%;
-        overflow-y: scroll;
-    }
-
-    .simulationNum::-webkit-scrollbar {
-        display: none
-    }
-}
-
-.inverter {
-    height: 100%;
-    display: flex;
-    flex-direction: column;
-
-    .inverterInfo {
-        display: flex;
-        flex-direction: row;
-        height: 100%;
-
-        .inverter-point {
-            width: 64%;
-            margin: 0 1% 0 0;
-            // border: 1px solid #536268;
-            height: 100%;
-        }
-
-        .inverter-power {
-            width: 35%;
-            height: 100%;
-        }
-    }
-}
-
-.table-form {
-    .dot {
-        color: @gray;
-
-        &.red {
-            color: @red;
-
-            &::before {
-                background: @red;
-            }
-        }
-
-        &::before {
-            content: " ";
-            display: inline-block;
-            width: 8px;
-            height: 8px;
-            background: @green;
-            margin-right: 8px;
-            border-radius: 50%;
-        }
-    }
-
-    .location-tr {
-        width: 100%;
-    }
-
-    .location-td {
-        // width: 20%;
-        // padding-left: 7%;
-        text-align: left;
-    }
-}
-
-.value-green {
-    width: 14px;
-    height: 14px;
-    background: #BD3338;
-    border-radius: 50%;
-}
-
-.value-green {
-    width: 14px;
-    height: 14px;
-    background: @green;
-    border-radius: 50%;
-}
-.statusBar{
-    width: 8px;
-    height: 8px;
-}
-</style>

+ 0 - 253
src/components/dialog/index.vue

@@ -1,253 +0,0 @@
-<template>
-  <el-dialog
-    title="风机详情"
-    width="75%"
-    top="10vh"
-    @opened="opened()"
-    @closed="closed()"
-    :show-close="true"
-    class="my-info-dialog"
-    custom-class="modal"
-    :close-on-click-modal="false"
-  >
-    <div class="body">
-      <div class="wind-site-info-body">
-        <div class="info-menu">
-          <div
-            class="info-menu-item"
-            v-for="(item, index) in InfoBtns.data"
-            :key="item"
-            :class="{ active: InfoBtns.activeIndex == index }"
-            @click="onInfoMenuItemClick(item, index)"
-          >
-            {{ item.text }}
-          </div>
-        </div>
-        <el-row style="height: calc(100% - 45px)">
-          <!-- 基本信息 使用 v-if 每次点击重新加载  -->
-          <!-- 使用 v-show 首次全部加载 之后隐藏 点击后显示 -->
-          <base-info v-show="InfoBtns.activeIndex == 0" ref="baseInfo" />
-          <!-- <base-info v-if="InfoBtns.activeIndex == 2" /> -->
-          <!-- <div class="windParts"> -->
-            <div
-            :style="
-              $store.state.themeName === 'dark'
-                ? 'text-align:center;'
-                : 'text-align:center;background:#fff;'
-            "
-          >
-            <StandAloneImg
-              class="sai"
-              v-show="InfoBtns.activeIndex != 0"
-              :activeIndex="InfoBtns.activeIndex"
-              @selectSvg="selectSvg"
-            ></StandAloneImg>
-          </div>
-          <div class="saigs">
-            <generator
-            v-show="InfoBtns.activeIndex != 0"
-            :index="InfoBtns.activeIndex"
-            :data="sourceMap"
-            ref="generator"
-          ></generator>
-          </div>
-          
-          <!-- </div> -->
-          
-        </el-row>
-      </div>
-    </div>
-  </el-dialog>
-</template>
-<script>
-import BaseInfo from "../../views/WindSite/pages/Info/Base-Info.vue";
-import StandAloneImg from "../../views/WindSite/pages/Info/StandAloneImg.vue";
-import generator from "../../views/WindSite/pages/Info/pages/generator.vue";
-import api from "@api/cockpit/matrix/index.js";
-import BASE from "@tools/basicTool.js";
-export default {
-  props: {
-    wpId: {
-      type: String,
-      default: "",
-    },
-    wtId: {
-      type: String,
-      default: "",
-    },
-  },
-  data() {
-    return {
-      timmer: '',
-      InfoBtns: {
-        activeIndex: 0,
-        data: [
-          {
-            id: "base-info",
-            text: "基本信息",
-          },
-          {
-            id: "generator",
-            text: "发电机",
-          },
-          {
-            id: "gear-box",
-            text: "齿轮箱",
-          },
-          {
-            id: "pitch",
-            text: "变桨",
-          },
-          {
-            id: "yaw",
-            text: "偏航",
-          },
-          {
-            id: "hydraulic-pressure",
-            text: "液压",
-          },
-          {
-            id: "cabin-info",
-            text: "机舱信息",
-          },
-          // {
-          //   id: "principal-axis",
-          //   text: "主轴",
-          // },
-        ],
-      },
-    };
-  },
-  components: {
-    BaseInfo,
-    StandAloneImg,
-    generator,
-  },
-  methods: {
-    opened() {
-    this.$nextTick(() => {
-      this.getWtInfo();
-      this.timmer = setInterval(() => {
-        this.getWtInfo();
-      }, this.$store.state.websocketTimeSec);
-    });
-    },
-    closed() {
-      clearInterval(this.timmer);
-      this.timmer = null;
-    },
-    onInfoMenuItemClick(item, index) {
-      this.InfoBtns.activeIndex = index;
-    },
-    selectSvg(index) {
-      this.InfoBtns.activeIndex = index;
-    },
-    // 获取风机信息
-    getWtInfo() {
-      api
-        .findWtInfo({
-          wtId: this.wtId,
-        })
-        .then((res) => {
-          let map = ["bjmap", "fdjmap", "clxmap", "yymap", "phmap", "jcmap"];
-          let data = res.data;
-          for (var key in data) {
-            if (map.includes(key) && key.endsWith("map")) {
-              let json = data[key];
-              let arrayai = [];
-              let arraydi = [];
-              for (var i = 0; i < json.length; i++) {
-                let obj = {
-                  name: json[i][0],
-                  unit: json[i][1],
-                  value: json[i][3],
-                };
-                if (json[i][2] == "ai") arrayai.push(obj);
-                else arraydi.push(obj);
-              }
-              data[key] = { ai: arrayai, di: arraydi };
-            }
-          }
-          this.sourceMap = data;
-          this.$refs.baseInfo.dataDeal(data)
-          this.$refs.generator.dataDeal(data)
-        });
-    },
-  },
-};
-</script>
-<style lang="less" scoped>
-.body {
-  height: 75vh;
-  overflow-y: scroll;
-}
-.wind-site-info {
-  display: flex;
-
-  .sai {
-    width: 65%;
-  }
-
-  .saig {
-    position: absolute;
-    width: 100%;
-    bottom: 0;
-  }
-
-  .wind-site-menu {
-    flex: 0 0 13.889vh;
-    color: @gray;
-    background: fade(@darkgray, 10);
-    height: calc(100vh - 122px);
-
-    .wind-site-title {
-      font-size: 14px;
-      font-weight: 600;
-      padding: 16px;
-    }
-  }
-}
-.wind-site-info-body {
-  flex: auto;
-  padding-left: 1.481vh;
-  height: 100%;
-
-  .info-menu {
-    width: 100%;
-    margin-bottom: 10px;
-    .info-menu-item {
-      display: inline-block;
-      border: 1px solid fade(@darkgray, 80);
-      border-radius: 2px;
-      color: @gray;
-      font-size: @fontsize-s;
-      letter-spacing: 1px;
-      cursor: pointer;
-      width: 12.5%;
-      height: 30px;
-      line-height: 30px;
-      text-align: center;
-
-      &.active {
-        color: @white;
-        background: fade(@purple, 60);
-        border-color: fade(@purple, 60);
-      }
-
-      & + .info-menu-item {
-        margin-left: 2.2vh;
-      }
-    }
-  }
-}
-.windParts{
-  display: flex;
-  flex-direction: row;
-}
-.saigs{
-  // position: absolute;
-  bottom: 0;
-  left: 28px;
-  width: 100%;
-}
-</style>

+ 0 - 129
src/components/menuNav/index.vue

@@ -1,129 +0,0 @@
-<template>
-  <el-menu :default-active="activeIndex" class="el-menu-vertical-demo" collapse="true" @mouseleave="hideMenu"
-           v-show="showMenu"
-           text-color="#85878B" active-text-color="rgba(28, 153, 255, 1)" background-color="transparent">
-    <template v-for="(item, index) in secondLevelTitle" :key="index">
-      <el-sub-menu :index="index" v-if="item.children">
-        <template #title>
-          <!--                  <router-link :to="item.path">-->
-          <el-icon :class="item.icon">
-          </el-icon>
-          <!--                  </router-link>-->
-        </template>
-        <el-menu-item-group v-for="(menu, idx) in item.children" :index="idx" :key="idx">
-          <router-link :to="menu.path">
-            <el-menu-item>{{ menu.titleName }}</el-menu-item>
-          </router-link>
-        </el-menu-item-group>
-      </el-sub-menu>
-      <el-menu-item  v-else>
-        <el-tooltip class="item" effect="light" :content="item.titleName" placement="right">
-          <router-link :to="item.path">
-            <i :class="item.icon"></i>
-          </router-link>
-        </el-tooltip>
-      </el-menu-item>
-    </template>
-
-    <li class="el-sub-menu bottom-[60px] left-0 !absolute">
-      <div class="w-[55px] h-[55px] flex items-center justify-center">
-        <!-- :fill="stickMenu? '#1296db': '#515151'" -->
-        <svg t="1669786260824" v-if="stickMenu" @click="funStickChange" class="icon cursor-pointer"
-             viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="24315" width="24"
-             height="24">
-          <path
-              d="M672 32a64 64 0 0 1 64 64v81.856a64 64 0 0 1-43.776 60.736L640 256l32 288 108.544 21.696A64 64 0 0 1 832 628.48V736a64 64 0 0 1-64 64h-224v192a32 32 0 0 1-64 0v-192H256a64 64 0 0 1-64-64v-107.52a64 64 0 0 1 51.456-62.784L352 544l32-288-52.224-17.408A64 64 0 0 1 288 177.856V96a64 64 0 0 1 64-64h320z"
-              p-id="24316" fill="#85878b"></path>
-        </svg>
-        <svg t="1669786308333" v-else @click="funStickChange" class="icon cursor-pointer" viewBox="0 0 1024 1024"
-             version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="24499" width="24" height="24">
-          <path
-              d="M712.704 48.32l222.4 222.4a64 64 0 0 1 0 90.496l-56.224 56.224a64 64 0 0 1-73.856 12l-48.16-24.064-178.816 223.488 60.32 90.464a64 64 0 0 1-8 80.736l-74.112 74.112a64 64 0 0 1-90.496 0l-140.704-140.704-130.016 130.048a31.616 31.616 0 0 1-44.704-44.704l130.016-130.048-171.104-171.104a64 64 0 0 1 0-90.496l74.112-74.112a64 64 0 0 1 80.736-8l90.464 60.32 223.488-178.816-24.064-48.16a64 64 0 0 1 12-73.856l56.224-56.224a64 64 0 0 1 90.496 0z"
-              p-id="24500" fill="#85878b"></path>
-        </svg>
-      </div>
-    </li>
-  </el-menu>
-</template>
-
-<script>
-
-export default {
-  name: 'menuNav',//状态监视
-  props: {
-    showMenu: {
-      default: 'false',
-      required: true,
-    },
-    secondLevelTitle: {
-      type: Array,
-      required: true,
-    }
-  },
-  data() {
-    return {
-      stickMenu: false,
-      activeIndex:'1',
-    }
-  },
-  created() {
-   let  flge= JSON.parse(window.localStorage.getItem('menuState'));
-   if(flge!=null){
-     this.stickMenu=flge;
-     this.$emit('stickMenu', this.stickMenu);
-   }else {
-    this.stickMenu=false;
-   }
-  },
-  methods: {
-    hideMenu() {
-      if (!this.stickMenu) {
-        this.$emit('hideMenuNav');
-      }
-    },
-    funStickChange() {
-      this.stickMenu = !this.stickMenu
-      window.localStorage.setItem('menuState',JSON.stringify(this.stickMenu));
-      this.$emit('stickMenu', this.stickMenu)
-      this.$store.state.isLeft = this.stickMenu
-    }
-  },
-  computed: {}
-}
-</script>
-
-<style lang="less" scoped>
-.el-menu-vertical-demo:not(.el-menu--collapse) {
-  width: 150px;
-  height: 100%;
-}
-
-.el-menu--collapse {
-  text-align: center;
-  width: 55px !important;
-}
-
-.el-menu {
-  position: fixed;
-  height: 100%;
-  background: linear-gradient(278deg, #002767, transparent);
-  -o-border-image: linear-gradient(180deg, transparent, #1a7ccd, #1a7ccd, transparent) 2 1;
-  border-image: linear-gradient(180deg, transparent, #1a7ccd, #1a7ccd, transparent) 2 1;
-  border-color: #002767;
-  backdrop-filter: blur(5px);
-  z-index: 2001;
-  overflow: revert !important;
-
-  .el-sub-menu a i {
-    font-size: 19px;
-  }
-
-  .is-opened {
-    a > i {
-      color: #999999 !important;
-    }
-  }
-}
-
-
-</style>

+ 0 - 181
src/components/sbsAlarm/index.vue

@@ -1,181 +0,0 @@
-<template>
-  <el-drawer
-    class="custom-drawer"
-    v-model="drawer"
-    :title="title + '报警列表'"
-    direction="rtl"
-    size="45%"
-    :before-close="handleClose"
-  >
-    <div class="drawer-form">
-      <div class="select-item">
-        开始日期:
-        <el-date-picker
-          v-model="begin"
-          type="datetime"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          placeholder="选择日期"
-          size="mini"
-          popper-class="date-select"
-        >
-        </el-date-picker>
-      </div>
-      <div class="select-item">
-        结束日期:
-        <el-date-picker
-          v-model="end"
-          type="datetime"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          placeholder="选择日期"
-          size="mini"
-          popper-class="date-select"
-        >
-        </el-date-picker>
-      </div>
-      <div class="btns">
-        <el-button round size="mini" class="buttons" @click="getAlarm"
-          >搜索</el-button
-        >
-      </div>
-    </div>
-    <div class="table-wrapper">
-      <el-table height="100%" :data="drawerList">
-        <el-table-column
-          v-for="(item, index) in tableHeader"
-          :key="index"
-          sortable
-          :prop="item.code"
-          :label="item.title"
-          align="center"
-          :width="item.width"
-        >
-          <template #default="{ row }">
-            <span v-if="item.code == 'rank'">{{ getRank(row.rank) }}</span>
-            <span v-else-if="item.code == 'endts'">{{
-              row.endts ? "解除" : "未解除"
-            }}</span>
-            <span v-else>{{ row[item.code] }}</span>
-          </template>
-        </el-table-column>
-      </el-table>
-      <el-pagination
-        style="display: flex; justify-content: flex-end; align-items: center"
-        @current-change="handleCurrentChange"
-        :current-page="page.currentPage"
-        :page-size="page.pagesize"
-        layout="total, prev, pager, next, jumper"
-        :total="page.total"
-      >
-      </el-pagination>
-    </div>
-  </el-drawer>
-</template>
-<script>
-import { GetTableData } from "@/api/zhbj/index.js";
-import dayjs from "dayjs";
-export default {
-  name: "sbsAlarm", //
-  components: {},
-  props: {},
-  data() {
-    return {
-       drawer: false,
-      title: "",
-      drawerList: [],
-      description: "",
-      sub: "",
-      begin: "",
-      end: "",
-      page: { currentPage: 1, pagesize: 22, total: 0 },
-      tableHeader: [
-        { title: "时间", code: "ts", width: "160" },
-        { title: "场站名称", code: "stationname", width: "140" },
-        { title: "报警描述", code: "description" },
-        // { title: "级别", code: "rank", width: "110" },
-        { title: "是否确认", code: "confirmed", width: "110" },
-        { title: "是否解除", code: "endts", width: "110" },
-      ],
-    };
-  },
- watch: {
-    "$store.state.drawer": {
-      handler(val) {
-        this.drawer = val;
-      },
-      immediate: true,
-    },
-  },
-  methods: {
-    getRank(rank) {
-      if (rank === 1) {
-        return "低级";
-      } else if (rank === 2) {
-        return "低中级";
-      } else if (rank === 3) {
-        return "中级";
-      } else if (rank === 4) {
-        return "中高级";
-      } else if (rank === 5) {
-        return "高级";
-      }
-    },
-    // 初始化弹窗数据
-    openDialog(wtid, wpid, type) {
-      this.wtype = type;
-      this.wtid = wtid;
-      this.wpid = wpid;
-      if (wtid && wpid) {
-        this.getTableData();
-        this.dialogVisible = true;
-      }
-    },
-    getTableData() {
-      GetTableData({
-        begin: dayjs().startOf("day").format("YYYY-MM-DD HH:mm:ss"),
-        end: dayjs().format("YYYY-MM-DD HH:mm:ss"),
-        alarmType: this.wtype == -1 ? "windturbine" : "inverter",
-        stationid: this.wpid,
-        deviceid: this.wtid,
-        pageNum: this.page.currentPage,
-        pageSize: this.page.pagesize,
-        description: "",
-      }).then(({ data }) => {
-        if (data.ls.length) {
-          this.tableData = data.ls.map((item) => {
-            return {
-              ...item,
-              confirmed: item.confirmed ? "是" : "否",
-              ts: dayjs(item.ts).format("YYYY-MM-DD HH:mm:ss"),
-            };
-          });
-          this.page.total = data.total;
-        } else {
-          this.tableData = [];
-          this.page.total = 0;
-        }
-      });
-    },
-    // 取消操作
-    cancel() {
-      this.wtid = "";
-      this.wpid = "";
-      this.page.currentPage = 1;
-      this.dialogVisible = false;
-    },
-
-    handleCurrentChange(val) {
-      this.page.currentPage = val;
-      this.getTableData();
-    },
-  },
-  mounted() {},
-  computed: {},
-};
-</script>
-<style lang="less" scoped>
-.el-pagination {
-  display: flex;
-  align-items: center;
-  justify-content: flex-end;
-}
-</style>

+ 0 - 176
src/components/three/wave.vue

@@ -1,176 +0,0 @@
-<template>
-  <div class="wave"></div>
-</template>
-
-<script>
-import * as THREE from "three";
-import $ from "jquery";
-
-let scene, camera, renderer, particles;
-
-export default {
-  // 名称
-  name: "wave",
-  // 使用组件
-  components: {},
-  // 传入参数
-  props: {},
-  // 自定义事件
-  emits: {},
-  // 数据
-  data() {
-    return {
-      SEPARATION: 100,
-      AMOUNTX: 100,
-      AMOUNTY: 100,
-      count: 0,
-      mouseX: 0,
-      mouseY: -400,
-      windowHalfX: window.innerWidth / 2,
-      windowHalfY: window.innerHeight / 2,
-    };
-  },
-  // 函数
-  methods: {
-    init() {
-      camera = new THREE.PerspectiveCamera(
-        50,
-        window.innerWidth / window.innerHeight,
-        1,
-        10000
-      );
-      camera.position.z = 1000;
-      scene = new THREE.Scene();
-      const numParticles = this.AMOUNTX * this.AMOUNTY;
-      const positions = new Float32Array(numParticles * 3);
-      const scales = new Float32Array(numParticles);
-      let i = 0,
-        j = 0;
-      for (let ix = 0; ix < this.AMOUNTX; ix++) {
-        for (let iy = 0; iy < this.AMOUNTY; iy++) {
-          positions[i] =
-            ix * this.SEPARATION - (this.AMOUNTX * this.SEPARATION) / 2; // x
-          positions[i + 1] = 0; // y
-          positions[i + 2] =
-            iy * this.SEPARATION - (this.AMOUNTY * this.SEPARATION) / 2; // z
-          scales[j] = 1;
-          i += 3;
-          j++;
-        }
-      }
-      const geometry = new THREE.BufferGeometry();
-      geometry.setAttribute(
-        "position",
-        new THREE.BufferAttribute(positions, 3)
-      );
-      geometry.setAttribute("scale", new THREE.BufferAttribute(scales, 1));
-      const material = new THREE.ShaderMaterial({
-        uniforms: {
-          color: {
-            value: new THREE.Color(
-              this.$store.state.themeName === "dark" ? 0x05bb4c : 0x36348e
-            ),
-          },
-        },
-        vertexShader: `attribute float scale;
-                        void main() {
-                            vec4 mvPosition = modelViewMatrix * vec4( position, 2.0 );
-                            gl_PointSize = scale * ( 200.0 / - mvPosition.z );
-                            gl_Position = projectionMatrix * mvPosition;
-                        }`,
-        fragmentShader: `uniform vec3 color;
-                        void main() {
-                            if ( length( gl_PointCoord - vec2( 0.5, 0.5 ) ) > 0.475 ) discard;
-                            gl_FragColor = vec4( color, 0.7 );
-                        }`,
-        transparent: true,
-      });
-      particles = new THREE.Points(geometry, material);
-      scene.add(particles);
-      renderer = new THREE.WebGLRenderer({
-        antialias: true,
-        alpha: true,
-      });
-      renderer.setSize(window.innerWidth, window.innerHeight);
-      renderer.setPixelRatio(window.devicePixelRatio);
-      renderer.setAnimationLoop(this.render);
-      this.$el.appendChild(renderer.domElement);
-    },
-    render() {
-      camera.position.x += (this.mouseX - camera.position.x) * 0.05;
-      camera.position.y += (-this.mouseY - camera.position.y) * 0.05;
-      camera.lookAt(scene.position);
-      const positions = particles.geometry.attributes.position.array;
-      const scales = particles.geometry.attributes.scale.array;
-      let i = 0,
-        j = 0;
-      for (let ix = 0; ix < this.AMOUNTX; ix++) {
-        for (let iy = 0; iy < this.AMOUNTY; iy++) {
-          positions[i + 1] =
-            Math.sin((ix + this.count) * 0.3) * 50 +
-            Math.sin((iy + this.count) * 0.5) * 50;
-          scales[j] =
-            (Math.sin((ix + this.count) * 0.3) + 1) * 20 +
-            (Math.sin((iy + this.count) * 0.5) + 1) * 20;
-          i += 3;
-          j++;
-        }
-      }
-      particles.geometry.attributes.position.needsUpdate = true;
-      particles.geometry.attributes.scale.needsUpdate = true;
-      renderer.render(scene, camera);
-      this.count += 0.1;
-    },
-  },
-  // 生命周期钩子
-  beforeCreate() {
-    // 创建前
-  },
-  created() {
-    // 创建后
-  },
-  beforeMount() {
-    // 渲染前
-  },
-  mounted() {
-    // 渲染后
-    camera = null;
-    scene = null;
-    renderer = null;
-    this.init();
-  },
-  beforeUpdate() {
-    // 数据更新前
-  },
-  updated() {
-    // 数据更新后
-  },
-  beforeUnmount() {
-    // 销毁前
-    renderer.setAnimationLoop(null);
-    camera = null;
-    scene = null;
-    renderer = null;
-  },
-
-  watch: {
-    "$store.state.themeName"() {
-      $(".wave").empty();
-      renderer.setAnimationLoop(null);
-      this.init();
-    },
-  },
-};
-</script>
-
-<style lang="less">
-.wave {
-  position: absolute;
-  left: 0;
-  top: 0;
-  width: 100%;
-  height: 60%;
-  z-index: -1;
-  overflow: hidden;
-}
-</style>

+ 0 - 208
src/components/utils/boxSelect.vue

@@ -1,208 +0,0 @@
-<template>
-  <div
-    class="box-select__container"
-    @mousedown.left="mouseDown"
-    @mousemove.stop="mouseMove"
-    :class="uuid"
-  >
-    <div
-      class="box-select__coordinate"
-      :style="style"
-      ref="selectContainer"
-    ></div>
-    <slot></slot>
-  </div>
-</template>
-
-<script>
-import { debounce, isNumber } from "lodash";
-import { ref, onUnmounted, nextTick, shallowRef } from "vue";
-
-/**
- * @description 判断元素是否在范围内
- * @param {Object} dom dom元素
- */
-const isWithinRange = (dom, top, bottom, left, right) => {
-  const eleRect = dom.getBoundingClientRect();
-  return !(
-    eleRect.top > bottom ||
-    eleRect.bottom < top ||
-    eleRect.right < left ||
-    eleRect.left > right
-  );
-};
-
-export default {
-  name: "BoxSelect",
-  /**
-   * @member props
-   * @property  {String} [node] 要框选的元素,可以是元素名,也可以是class名, 也可以是id名
-   * @property  {String} [selectedClass] 已选中元素附加的class名
-   */
-  props: {
-    node: {
-      required: true,
-      type: String,
-    },
-    selectedClass: {
-      type: String,
-      default: "box-select__hypocritical",
-    },
-  },
-  // 鼠标按下
-  emits: ["mouseUp", "mouseDown"],
-  setup(props, { emit }) {
-    let top = 0,
-      left = 0,
-      width = 0,
-      height = 0,
-      startX = 0,
-      startY = 0,
-      timer = null,
-      // 记录是框选还是点击
-      mouseOn = false;
-
-    const style = ref({}),
-      selectContainer = ref(null),
-      // 给当前框容器加一个唯一识别符, 以保证所选择到的元素都是当前容器的. 否则会选择到容器外同名的元素
-      uuid = shallowRef("uuid_" + new Date().valueOf());
-
-    const query = (className = "") => {
-      let domName = `.${uuid.value} ${props.node}`;
-      className && (domName += `.${className}`);
-      return Array.from(document.querySelectorAll(domName) || []);
-    };
-
-    const classOperation = (ele, method = "add", className = "") =>
-      ele.classList[method](className);
-
-    const setStyle = (styles = {}, newStyles = {}) => {
-      Object.keys(styles).map((item) => {
-        newStyles[item] = styles[item] + (isNumber(styles[item]) ? "px" : "");
-      });
-      style.value = newStyles;
-    };
-
-    const getAreaWithinElements = () => {
-      const { bottom, left, right, top } =
-        selectContainer.value.getBoundingClientRect();
-
-      // 所有可框选元素
-      const elements = query();
-      // // 已选中元素
-      // const selectedElements = elements.filter((item) =>
-      //   classOperation(item, "contains", props.selectedClass)
-      // );
-      // // 未选中元素
-      // const unselectedElements = elements.filter(
-      //   (item) => !classOperation(item, "contains", props.selectedClass)
-      // );
-      // 本次框选元素
-      let selctList = [];
-      for (const i in elements) {
-        if (Number(i) || i === "0") {
-          let val = elements[i];
-          const withinRange = isWithinRange(val, top, bottom, left, right);
-          if (withinRange) {
-            selctList.push(val);
-          }
-        }
-      }
-
-      emit("selectList", selctList);
-      // selectedElements.map((item) => {
-      //     const withinRange = isWithinRange(item, top, bottom, left, right);
-      //     withinRange &&
-      //       classOperation(item, "add", props.selectedClass)
-      //   });
-      //   unselectedElements.map(
-      //     (item) =>
-      //       isWithinRange(item, top, bottom, left, right) &&
-      //       classOperation(item, "add", props.selectedClass)
-      //   );
-
-      // return query(props.selectedClass);
-    };
-
-    const mouseDown = debounce((event) => {
-      timer = setTimeout(() => {
-        mouseOn = true;
-        startX = event.clientX;
-        startY = event.clientY;
-        emit("mouseDown");
-      }, 300);
-      // 重置本次框选的元素列表
-      setStyle({
-        left,
-        startX,
-        top: startY,
-        width: 0,
-        height: 0,
-        display: "block",
-      });
-    });
-
-    const mouseMove = debounce((event) => {
-      if (!mouseOn) return false;
-      const _width = event.clientX - startX;
-      const _height = event.clientY - startY;
-
-      top = _height > 0 ? startY : event.clientY;
-      left = _width > 0 ? startX : event.clientX;
-      width = Math.abs(_width);
-      height = Math.abs(_height);
-      setStyle({ left, top, width, height });
-    });
-
-    const mouseUp = debounce((event) => {
-      timer && clearTimeout(timer);
-      // 判断是否鼠标左键
-      if (event.which !== 1) return false;
-      // 判断是框选还是点击
-      if (!mouseOn) return false;
-      mouseOn = false;
-      setStyle({ display: "none" });
-      // 获得已选中的元素
-      const selectedEles = getAreaWithinElements();
-      // 响应事件,并传递本次框选的元素列表
-      emit("mouseUp", selectedEles);
-    });
-
-    nextTick(() => document.addEventListener("mouseup", mouseUp));
-    onUnmounted(() => document.removeEventListener("mouseup", mouseUp));
-
-    return {
-      mouseUp,
-      mouseDown,
-      mouseMove,
-      timer,
-      style,
-      selectContainer,
-      uuid,
-    };
-  },
-};
-</script>
-
-<style lang="scss">
-.box-select__container {
-  // height: 50vh;
-}
-
-.box-select__coordinate {
-  position: fixed;
-  z-index: 11;
-  left: 0;
-  top: 0;
-  width: 0;
-  height: 0;
-  background: rgb(106, 90, 205,.5);
-  border: 1px solid blue;
-  opacity: 0.6;
-  pointer-events: none;
-}
-
-.box-select__hypocritical {
-  background-color: blue;
-}
-</style>

+ 0 - 0
src/components/utils/svg-loader.vue


+ 2 - 1
src/components/windDetail/index.vue

@@ -285,6 +285,8 @@
                   {{
                     item.name.includes("状态")
                       ? item.value
+                      : item.name == "总发电量"
+                      ? (item.value / 10000).toFixed(2)
                       : Number(item.value).toFixed(2)
                   }}
                   <div v-if="item.valueUnit != 'NULL'" class="unit">
@@ -603,7 +605,6 @@ export default {
           }
           this.partDInfos = partDInfo;
           this.partAInfos = partAInfo;
-          console.log(this.partAInfos);
         })
         .catch((e) => {
           // 失败的时候则返回最先被reject失败状态的值

+ 428 - 227
src/router/index.js

@@ -71,6 +71,7 @@ export const asyncRoutes = [
               permissions: ["jn_fdcz_sjzb"],
             },
           },
+
           {
             path: "matrixMonitor",
             component: () =>
@@ -111,6 +112,19 @@ export const asyncRoutes = [
             },
           },
           {
+            path: "millivolt",
+            component: () =>
+              import(
+                "@/views/stateMonitor/factoryMonitor/windPowerPlant/millivolt"
+              ),
+            name: "millivolt",
+            meta: {
+              title: "电计量",
+              icon: "svg-djl",
+              permissions: ["jn_fdcz_syz"],
+            },
+          },
+          {
             path: "windPower",
             component: () =>
               import(
@@ -230,6 +244,19 @@ export const asyncRoutes = [
             },
           },
           {
+            path: "lightMillivolt",
+            component: () =>
+              import(
+                "@/views/stateMonitor/factoryMonitor/photovoltaic/lightMillivolt"
+              ),
+            name: "lightMillivolt",
+            meta: {
+              title: "电计量",
+              icon: "svg-djl",
+              permissions: ["jn_fdcz_syz"],
+            },
+          },
+          {
             path: "lightGeomorphologicMap",
             component: () =>
               import(
@@ -244,6 +271,16 @@ export const asyncRoutes = [
           },
         ],
       },
+      //   {
+      //     path: "agc",
+      //     component: () => import("@/views/stateMonitor/Agc/Agc.vue"),
+      //     name: "agc",
+      //     meta: {
+      //       title: "agc",
+      //       icon: "svg-s指标列表",
+      //       permissions: ["jn_fdcz_sjzb"],
+      //     },
+      //   },
       {
         path: "lightmatrix", // 基础矩阵
         name: "LightMatrix",
@@ -297,230 +334,230 @@ export const asyncRoutes = [
           permissions: ["jn_zhzb"],
         },
       },
-      {
-        path: "factoryMonitor",
-        redirect: "factoryMonitor/windPowerPlant",
-        component: () => import("@/views/stateMonitor/factoryMonitor"),
-        name: "factoryMonitor",
-        meta: {
-          title: "厂站监视",
-          icon: "svg-single-station-surveillance",
-          permissions: ["jn_czjs"],
-        },
-        hidden: true,
-        children: [
-          {
-            path: "windPowerPlant",
-            redirect: { name: "windhome" },
-            component: () =>
-              import("@/views/stateMonitor/factoryMonitor/windPowerPlant"),
-            name: "windPowerPlant",
-            meta: {
-              title: "风电场站",
-              icon: "",
-              permissions: ["jn_fdcz"],
-            },
-            children: [
-              {
-                path: "windhome",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/windPowerPlant/windhome"
-                  ),
-                name: "windhome",
-                meta: {
-                  title: "场站监视",
-                  icon: "svg-station-surveillance",
-                  permissions: ["jn_fdcz_czjs"],
-                },
-              },
-              {
-                path: "DataTarget",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/windPowerPlant/DataTarget"
-                  ),
-                name: "DataTarget",
-                meta: {
-                  title: "数据指标",
-                  icon: "svg-s指标列表",
-                  permissions: ["jn_fdcz_sjzb"],
-                },
-              },
-              {
-                path: "matrixMonitor",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/windPowerPlant/matrixMonitor"
-                  ),
-                name: "matrixMonitor",
-                meta: {
-                  title: "矩阵监视",
-                  icon: "svg-matrix",
-                  permissions: ["jn_fdcz_jzjs"],
-                },
-              },
-              {
-                path: "draughtFan",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/windPowerPlant/draughtFan"
-                  ),
-                name: "draughtFan",
-                meta: {
-                  title: "风机设备",
-                  icon: "svg-wind-site",
-                  permissions: ["jn_fdcz_fjsb"],
-                },
-              },
-              {
-                path: "boosterStation",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation"
-                  ),
-                name: "boosterStation",
-                meta: {
-                  title: "升压站",
-                  icon: "svg-s升压站",
-                  permissions: ["jn_fdcz_syz"],
-                },
-              },
-              {
-                path: "windPower",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/windPowerPlant/windPower"
-                  ),
-                name: "windPower",
-                meta: {
-                  title: "测风塔",
-                  permissions: ["jn_fdcz_cft"],
-                  icon: "svg-s测风塔",
-                },
-              },
-              {
-                path: "geomorphologicMap",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/windPowerPlant/geomorphologicMap"
-                  ),
-                name: "geomorphologicMap",
-                meta: {
-                  title: "地貌图",
-                  permissions: ["jn_fdcz_dmt"],
-                  icon: "svg-s地图",
-                },
-              },
-            ],
-          },
-          {
-            path: "photovoltaic",
-            redirect: { name: "lighthome" },
-            component: () =>
-              import("@/views/stateMonitor/factoryMonitor/photovoltaic"),
-            name: "photovoltaic",
-            meta: {
-              title: "光伏场站",
-              icon: "",
-              permissions: ["jn_gfcz"],
-            },
-            children: [
-              {
-                path: "lighthome",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/photovoltaic/lighthome"
-                  ),
-                name: "lighthome",
-                meta: {
-                  title: "场站监视",
-                  icon: "svg-station-surveillance",
-                  permissions: ["jn_gfcz_czjs"],
-                },
-              },
-              {
-                path: "lightDataTarget",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/photovoltaic/lightDataTarget"
-                  ),
-                name: "lightDataTarget",
-                meta: {
-                  title: "数据指标",
-                  permissions: ["jn_gfcz_sjzb"],
-                  icon: "svg-s指标列表",
-                },
-              },
-              {
-                path: "lightMatrixMonitor",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor"
-                  ),
-                name: "lightMatrixMonitor",
-                meta: {
-                  title: "矩阵监视",
-                  permissions: ["jn_gfcz_jzjs"],
-                  icon: "svg-matrix",
-                },
-              },
-              {
-                path: "lightMatrix",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/photovoltaic/lightMatrix"
-                  ),
-                name: "lightMatrix",
-                meta: {
-                  title: "分类矩阵",
-                  permissions: ["jn_gfcz_fljz"],
-                  icon: "svg-fljz",
-                },
-              },
-              {
-                path: "photovoltaicFacility",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/photovoltaic/photovoltaicFacility"
-                  ),
-                name: "photovoltaicFacility",
-                meta: {
-                  title: "光伏设备",
-                  permissions: ["jn_gfcz_gfsb"],
-                  icon: "svg-photovoltaic",
-                },
-              },
-              {
-                path: "lightBoosterStation",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/photovoltaic/lightBoosterStation"
-                  ),
-                name: "lightBoosterStation",
-                meta: {
-                  title: "升压站",
-                  permissions: ["jn_gfcz_syz"],
-                  icon: "svg-s升压站",
-                },
-              },
-              {
-                path: "lightGeomorphologicMap",
-                component: () =>
-                  import(
-                    "@/views/stateMonitor/factoryMonitor/photovoltaic/lightGeomorphologicMap"
-                  ),
-                name: "lightGeomorphologicMap",
-                meta: {
-                  title: "地貌图",
-                  permissions: ["jn_gfcz_dmt"],
-                  icon: "svg-s地图",
-                },
-              },
-            ],
-          },
-        ],
-      },
+      //   {
+      //     path: "factoryMonitor",
+      //     redirect: "factoryMonitor/windPowerPlant",
+      //     component: () => import("@/views/stateMonitor/factoryMonitor"),
+      //     name: "factoryMonitor",
+      //     meta: {
+      //       title: "厂站监视",
+      //       icon: "svg-single-station-surveillance",
+      //       permissions: ["jn_czjs"],
+      //     },
+      //     hidden: true,
+      //     children: [
+      //       {
+      //         path: "windPowerPlant",
+      //         redirect: { name: "windhome" },
+      //         component: () =>
+      //           import("@/views/stateMonitor/factoryMonitor/windPowerPlant"),
+      //         name: "windPowerPlant",
+      //         meta: {
+      //           title: "风电场站",
+      //           icon: "",
+      //           permissions: ["jn_fdcz"],
+      //         },
+      //         children: [
+      //           {
+      //             path: "windhome",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/windPowerPlant/windhome"
+      //               ),
+      //             name: "windhome",
+      //             meta: {
+      //               title: "场站监视",
+      //               icon: "svg-station-surveillance",
+      //               permissions: ["jn_fdcz_czjs"],
+      //             },
+      //           },
+      //           {
+      //             path: "DataTarget",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/windPowerPlant/DataTarget"
+      //               ),
+      //             name: "DataTarget",
+      //             meta: {
+      //               title: "数据指标",
+      //               icon: "svg-s指标列表",
+      //               permissions: ["jn_fdcz_sjzb"],
+      //             },
+      //           },
+      //           {
+      //             path: "matrixMonitor",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/windPowerPlant/matrixMonitor"
+      //               ),
+      //             name: "matrixMonitor",
+      //             meta: {
+      //               title: "矩阵监视",
+      //               icon: "svg-matrix",
+      //               permissions: ["jn_fdcz_jzjs"],
+      //             },
+      //           },
+      //           {
+      //             path: "draughtFan",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/windPowerPlant/draughtFan"
+      //               ),
+      //             name: "draughtFan",
+      //             meta: {
+      //               title: "风机设备",
+      //               icon: "svg-wind-site",
+      //               permissions: ["jn_fdcz_fjsb"],
+      //             },
+      //           },
+      //           {
+      //             path: "boosterStation",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/windPowerPlant/boosterStation"
+      //               ),
+      //             name: "boosterStation",
+      //             meta: {
+      //               title: "升压站",
+      //               icon: "svg-s升压站",
+      //               permissions: ["jn_fdcz_syz"],
+      //             },
+      //           },
+      //           {
+      //             path: "windPower",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/windPowerPlant/windPower"
+      //               ),
+      //             name: "windPower",
+      //             meta: {
+      //               title: "测风塔",
+      //               permissions: ["jn_fdcz_cft"],
+      //               icon: "svg-s测风塔",
+      //             },
+      //           },
+      //           {
+      //             path: "geomorphologicMap",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/windPowerPlant/geomorphologicMap"
+      //               ),
+      //             name: "geomorphologicMap",
+      //             meta: {
+      //               title: "地貌图",
+      //               permissions: ["jn_fdcz_dmt"],
+      //               icon: "svg-s地图",
+      //             },
+      //           },
+      //         ],
+      //       },
+      //       {
+      //         path: "photovoltaic",
+      //         redirect: { name: "lighthome" },
+      //         component: () =>
+      //           import("@/views/stateMonitor/factoryMonitor/photovoltaic"),
+      //         name: "photovoltaic",
+      //         meta: {
+      //           title: "光伏场站",
+      //           icon: "",
+      //           permissions: ["jn_gfcz"],
+      //         },
+      //         children: [
+      //           {
+      //             path: "lighthome",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/photovoltaic/lighthome"
+      //               ),
+      //             name: "lighthome",
+      //             meta: {
+      //               title: "场站监视",
+      //               icon: "svg-station-surveillance",
+      //               permissions: ["jn_gfcz_czjs"],
+      //             },
+      //           },
+      //           {
+      //             path: "lightDataTarget",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/photovoltaic/lightDataTarget"
+      //               ),
+      //             name: "lightDataTarget",
+      //             meta: {
+      //               title: "数据指标",
+      //               permissions: ["jn_gfcz_sjzb"],
+      //               icon: "svg-s指标列表",
+      //             },
+      //           },
+      //           {
+      //             path: "lightMatrixMonitor",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/photovoltaic/lightMatrixMonitor"
+      //               ),
+      //             name: "lightMatrixMonitor",
+      //             meta: {
+      //               title: "矩阵监视",
+      //               permissions: ["jn_gfcz_jzjs"],
+      //               icon: "svg-matrix",
+      //             },
+      //           },
+      //           {
+      //             path: "lightMatrix",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/photovoltaic/lightMatrix"
+      //               ),
+      //             name: "lightMatrix",
+      //             meta: {
+      //               title: "分类矩阵",
+      //               permissions: ["jn_gfcz_fljz"],
+      //               icon: "svg-fljz",
+      //             },
+      //           },
+      //           {
+      //             path: "photovoltaicFacility",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/photovoltaic/photovoltaicFacility"
+      //               ),
+      //             name: "photovoltaicFacility",
+      //             meta: {
+      //               title: "光伏设备",
+      //               permissions: ["jn_gfcz_gfsb"],
+      //               icon: "svg-photovoltaic",
+      //             },
+      //           },
+      //           {
+      //             path: "lightBoosterStation",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/photovoltaic/lightBoosterStation"
+      //               ),
+      //             name: "lightBoosterStation",
+      //             meta: {
+      //               title: "升压站",
+      //               permissions: ["jn_gfcz_syz"],
+      //               icon: "svg-s升压站",
+      //             },
+      //           },
+      //           {
+      //             path: "lightGeomorphologicMap",
+      //             component: () =>
+      //               import(
+      //                 "@/views/stateMonitor/factoryMonitor/photovoltaic/lightGeomorphologicMap"
+      //               ),
+      //             name: "lightGeomorphologicMap",
+      //             meta: {
+      //               title: "地貌图",
+      //               permissions: ["jn_gfcz_dmt"],
+      //               icon: "svg-s地图",
+      //             },
+      //           },
+      //         ],
+      //       },
+      //     ],
+      //   },
       {
         path: "alarmCenter", // 报警列表
         name: "alarmCenter",
@@ -544,6 +581,171 @@ export const asyncRoutes = [
       }*/
     ],
   },
+  //综合报警
+  {
+    path: "/integratedAlarm",
+    component: () => import("@/views/IntegratedAlarm"),
+    name: "integratedAlarm",
+    meta: {
+      title: "综合报警",
+      icon: "",
+      permissions: ["jn_integratedAlarm"],
+    },
+    children: [
+      {
+        path: "safe", // 综合报警
+        name: "safe",
+        component: () => import("@/views/IntegratedAlarm/safe"),
+        meta: {
+          title: "综合报警",
+          icon: "svg-zhbj",
+          permissions: ["jn_safe"],
+        },
+        children: [
+          {
+            path: "realwarning", // 综合报警
+            name: "realwarning",
+            component: () => import("@/views/IntegratedAlarm/safe/realWarning"),
+            meta: {
+              title: "实时报警",
+              icon: "",
+              permissions: ["jn_safe_ssbj"],
+            },
+          },
+          {
+            path: "historyWarning", // 报警查询
+            name: "historyWarning",
+            component: () =>
+              import("@/views/IntegratedAlarm/safe/historyWarning"),
+            meta: {
+              title: "报警查询",
+              icon: "",
+              permissions: ["jn_safe_bjcx"],
+            },
+          },
+          {
+            path: "customWarning", // 预警查询
+            name: "customWarning",
+            component: () =>
+              import("@/views/IntegratedAlarm/safe/customWarning"),
+            meta: {
+              title: "预警查询",
+              icon: "",
+              permissions: ["jn_safe_yjcx"],
+            },
+          },
+          {
+            path: "stopQuery", //停机查询
+            name: "stopQuery",
+            component: () => import("@/views/IntegratedAlarm/safe/stopQuery"),
+            meta: {
+              title: "停机查询",
+              icon: "",
+              permissions: ["jn_safe_tjcx"],
+            },
+          },
+          {
+            path: "dataSearch", //数据查询
+            name: "dataSearch",
+            component: () => import("@/views/IntegratedAlarm/safe/dataSearch"),
+            meta: {
+              title: "数据查询",
+              icon: "",
+              permissions: ["jn_safe_sjcx"],
+            },
+          },
+        ],
+      },
+      {
+        path: "reliability", // 可靠性分析
+        name: "reliability",
+        component: () => import("@/views/IntegratedAlarm/reliability"),
+        meta: {
+          title: "可靠性分析",
+          icon: "svg-kkxfx",
+          permissions: ["jn_reliability"],
+        },
+        children: [
+          {
+            path: "customAnalyse", // 预警分析
+            name: "customAnalyse",
+            component: () =>
+              import("@/views/IntegratedAlarm/reliability/customAnalyse"),
+            meta: {
+              title: "预警分析",
+              icon: "",
+              permissions: ["jn_reliability_yjfx"],
+            },
+          },
+          {
+            path: "historyAnalyse", // 报警分析
+            name: "historyAnalyse",
+            component: () =>
+              import("@/views/IntegratedAlarm/reliability/historyAnalyse"),
+            meta: {
+              title: "报警分析",
+              icon: "",
+              permissions: ["jn_reliability_bjfx"],
+            },
+          },
+        ],
+      },
+      {
+        path: "alarmConfig", // 报警配置
+        name: "alarmConfig",
+        component: () => import("@/views/IntegratedAlarm/alarmConfig"),
+        meta: {
+          title: "报警配置",
+          icon: "svg-bjpz",
+          permissions: ["jn_alarmConfig"],
+        },
+        children: [
+          {
+            path: "customConfig", // 预警配置
+            name: "customConfig",
+            component: () =>
+              import("@/views/IntegratedAlarm/alarmConfig/customConfig"),
+            meta: {
+              title: "预警配置",
+              icon: "",
+              permissions: ["jn_safe_ssbj"],
+            },
+          },
+          {
+            path: "historyConfig", // 报警配置
+            name: "historyConfig",
+            component: () =>
+              import("@/views/IntegratedAlarm/alarmConfig/historyConfig"),
+            meta: {
+              title: "报警配置",
+              icon: "",
+              permissions: ["jn_alarmConfig_bjpz"],
+            },
+          },
+          {
+            path: "logs", // 规则修改日志
+            name: "logs",
+            component: () => import("@/views/IntegratedAlarm/alarmConfig/logs"),
+            meta: {
+              title: "规则修改日志",
+              icon: "",
+              permissions: ["jn_alarmConfig_bjpz"],
+            },
+          },
+        ],
+      },
+      {
+        path: "deviceConfig", // 设备模型配置
+        name: "deviceConfig",
+        component: () => import("@/views/IntegratedAlarm/deviceConfig"),
+        meta: {
+          title: "设备模型配置",
+          icon: "svg-bjpz",
+          permissions: ["jn_alarmConfig"],
+        },
+      },
+    ],
+  },
   //经济运行
   {
     path: "/economicsOperation",
@@ -1412,9 +1614,8 @@ export const asyncRoutes = [
   },
   // 智能报表
   {
-    path: "/others",
-    redirect: "/others/report/gjyrbb",
-    name: "others",
+    path: "/report",
+    name: "report",
     meta: {
       title: "智能报表",
       icon: "",

+ 78 - 14
src/store/index.js

@@ -14,12 +14,22 @@ const state = {
   windturbineMap: {},
   moudleName: localStorage.getItem("ModuleName") || "",
   isFixed: JSON.parse(localStorage.getItem("isFixed")) || true,
-  boosterList: JSON.parse(localStorage.getItem("boosterList")) || [],
-  cftList: JSON.parse(localStorage.getItem("cftList")) || [],
+  boosterList: localStorage.getItem("boosterList")
+    ? JSON.parse(localStorage.getItem("boosterList"))
+    : [],
+  cftList: localStorage.getItem("cftList")
+    ? JSON.parse(localStorage.getItem("cftList"))
+    : [],
+  stationListAll: localStorage.getItem("stationListAll")
+    ? JSON.parse(localStorage.getItem("stationListAll"))
+    : [],
   boosterAlarm: JSON.parse(localStorage.getItem("boosterAlarm")) || 0,
   drawer: JSON.parse(localStorage.getItem("drawer")) || false,
   alarmList: JSON.parse(localStorage.getItem("alarmList")) || [],
-  warnList: [],
+  warnList: [], //弹窗报警列表
+  warningList: [], //实时报警列表
+  //实时报警列表最大长度
+  warningListLimitLength: 30,
   setConfig: 1,
   menuState: 1,
 };
@@ -39,12 +49,7 @@ const mutations = {
   update(state, newData) {
     state.windturbineMap = newData.data;
   },
-  changeMenuData(state, newData) {
-    state.menuData = newData;
-  },
-  changeModuleName(state, newData) {
-    state.moudleName = newData;
-  },
+  //首次加载请求公共数据
   changeBooster(state, data) {
     state.boosterList = data;
     localStorage.setItem("boosterList", JSON.stringify(data));
@@ -53,25 +58,27 @@ const mutations = {
     state.cftList = data;
     localStorage.setItem("cftList", JSON.stringify(data));
   },
+  changeStationAll(state, data) {
+    state.stationListAll = data;
+    localStorage.setItem("stationListAll", JSON.stringify(data));
+  },
   changeBoosterAlarm(state, data) {
     state.boosterAlarm = data;
     localStorage.setItem("boosterAlarm", JSON.stringify(data));
   },
+  //升压站报警列表弹窗
   changeDrawer(state, data) {
     state.drawer = data;
     localStorage.setItem("drawer", data);
   },
+  //修改升压站报警列表
   changeAlarmlist(state, data) {
     state.alarmList = data;
     localStorage.setItem("alarmList", JSON.stringify(state.alarmList));
   },
+  //修改弹窗报警列表事件
   setWarning(state, data) {
     state.warnList = data;
-    // localStorage.setItem("warnList", JSON.stringify(state.warnList));
-  },
-  changeWarning(state, data) {
-    state.warnList.unshift(data);
-    // localStorage.setItem("warnList", JSON.stringify(state.warnList));
   },
   removeWarning(state, data) {
     if (Array.isArray(data)) {
@@ -93,6 +100,63 @@ const mutations = {
   emptyWarning(state) {
     state.warnList = [];
   },
+  //修改实时报警列表事件
+  setWarningList(state, data) {
+    state.warningList = data;
+  },
+  removeWarningList(state, data) {
+    // if (Array.isArray(data)) {
+    //   data.forEach((ele) => {
+    //     for (let i = 0; i < state.warningList.length; i++) {
+    //       if (
+    //         `${ele.id}${ele.ts}` ===
+    //         `${state.warningList[i].id}${state.warningList[i].ts}`
+    //       ) {
+    //         setTimeout(() => {
+    //           state.warningList.splice(i, 1);
+    //         }, 0);
+    //         break;
+    //       }
+    //     }
+    //   });
+    // }
+    if (Array.isArray(data)) {
+      data.forEach((ele) => {
+        for (let i = 0; i < state.warningList.length; i++) {
+          if (
+            `${ele.id}${ele.ts}` ===
+            `${state.warningList[i].id}${state.warningList[i].ts}`
+          ) {
+            setTimeout(() => {
+              state.warningList.splice(i, 1);
+            }, 0);
+            break;
+          }
+        }
+      });
+    } else {
+      for (let i = 0; i < state.warningList.length; i++) {
+        if (
+          `${state.warningList[i].id}${state.warningList[i].ts}` ===
+          `${data.id}${data.ts}`
+        ) {
+          state.warningList.splice(i, 1);
+          break;
+        }
+      }
+    }
+  },
+  emptyWarningList(state, data) {
+    state.warningList = [];
+  },
+
+  //菜单相关
+  changeMenuData(state, newData) {
+    state.menuData = newData;
+  },
+  changeModuleName(state, newData) {
+    state.moudleName = newData;
+  },
   changeMenuState(state) {
     state.menuState++;
   },

+ 0 - 411
src/utills/BackgroundData.js

@@ -1,411 +0,0 @@
-import api from "@api/stateMonitor/index.js";
-
-export default class BackgroundData {
-    /* 当前登录用户 */
-    LoginUser;
-    /* 标题栏数据 */
-    // TopPoint = [
-    //     {
-    //         pointName: "TotalPower",// 实时总功率
-    //         pointTag: "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0135",
-    //         value: 0
-    //     }, {
-    //         pointName: "DailyPowerGeneration",// 日发电量
-    //         pointTag: "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0088",
-    //         value: 0
-    //     }, {
-    //         pointName: "GridPower",// 上网电量
-    //         pointTag: "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0136",
-    //         value: 0
-    //     }, {
-    //         pointName: "MonthlyPowerGeneration",// 月发电量
-    //         pointTag: "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0146",
-    //         value: 0
-    //     }, {
-    //         pointName: "AnnualPowerGeneration",// 年发电量
-    //         pointTag: "JSFW.NX_GD_XXX_XX_XX_XXX_XXX_CI0037",
-    //         value: 0
-    //     },
-    // ];
-    /* 推荐区数据 */
-    // Recommends = {
-    //     "DWK": {
-    //         stationName: "大武口光伏电站",
-    //         content: "通讯中断",
-    //         createTime: this.formatDate(new Date("2021-04-15 8:17:59"), 'YY-MM-DD hh:mm'),
-    //         isActive: false,
-    //         stationID: 'DWK_AGC',
-    //         values:'DWK'
-    //     },
-    //     "NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0263": {
-    //         stationName: "牛首山风电场",
-    //         id: 'NSS_BT',
-    //         content: "限电",
-    //         createTime: new Date(),
-    //         isActive: false,
-    //         stationID: 'NSS_AGC',
-    //         values:'NSSFCJSFW.NX_GD_NSSF_XX_XX_XXX_XXX_CI0263'
-    //     },
-    //     "QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0263": {
-    //         stationName: "青山风电场",
-    //         content: "限电",
-    //         createTime: new Date(),
-    //         isActive: false,
-    //         stationID: 'QS_AGC',
-    //         id: 'QS_BT',
-    //         values:'QSFCJSFW.NX_GD_QSF_XX_XX_XXX_XXX_CI0263'
-    //     },
-
-    //     "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0263": {
-    //         stationName: "星能第六风电场",
-    //         content: "限电",
-    //         createTime: new Date(),
-    //         isActive: false,
-    //         stationID: 'XNL_AGC',
-    //         id: 'XN6_BT',
-    //         values:'SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI0263'
-    //     },
-    //     "MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0263": {
-    //         stationName: "麻黄山风电场",
-    //         id: 'MHS_BT',
-    //         content: "限电",
-    //         createTime: new Date(),
-    //         isActive: false,
-    //         stationID: 'MHS_AGC',
-    //         values:'MHSFCJSFW.NX_GD_MHSF_XX_XX_XXX_XXX_CI0263'
-    //     },
-    //     "XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0263": {
-    //         stationName: "香山风电场",
-    //         content: "限电",
-    //         createTime: new Date(),
-    //         isActive: false,
-    //         stationID: 'XS_AGC',
-    //         id: 'XS_BT',
-    //         values:'XSFCJSFW.NX_GD_XSF_XX_XX_XXX_XXX_CI0263'
-    //     },
-    //     "SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI026X": {
-    //         stationName: "牛首山第五风电场",
-    //         content: "限电",
-    //         createTime: new Date(),
-    //         isActive: false,
-    //         stationID: 'NW_AGC',
-    //         id: 'N5_BT',
-    //         values:'SBQFCJSFW.NX_GD_SBQF_XX_XX_XXX_XXX_CI026X'
-    //     },
-    //     "SLAGC.NX_GD_QSF_DQ_P1_L1_001_DI0165": {
-    //         stationName: "宋堡第六风电场",
-    //         content: "限电",
-    //         createTime: new Date(),
-    //         isActive: false,
-    //         stationID: 'QS3_AGC',
-    //         id: 'SL_BT',
-    //         values:'SLAGC.NX_GD_QSF_DQ_P1_L1_001_DI0165'
-    //     },
-    // };
-    /* 隐患数据 */
-    HiddenProblems = new Array();
-    /* 缺陷数据 */
-    Defects = new Array();
-    /* 故障数据 */
-    Failure = new Array();
-    /* 事故数据 */
-    Accidents = new Array();
-
-    /* 标记数据 */
-    Marks = [];
-    /* 校验区数据 */
-    checkouts = [];
-    MarkIndex = 0;
-
-    constructor() {
-        // this.refreshTPData = this.refreshTPData.bind(this);
-        // this.onTPMessage = this.onTPMessage.bind(this);
-        // this.refreshAlarmData = this.refreshAlarmData.bind(this);
-        this.onHiddenProblemsMessage = this.onHiddenProblemsMessage.bind(this);
-        this.formatDate = this.formatDate.bind(this);
-        this.onDefectsMessage = this.onDefectsMessage.bind(this);
-        this.onAccidentsMessage = this.onAccidentsMessage.bind(this);
-        this.isContains = this.isContains.bind(this);
-        this.refreshRecommendData = this.refreshRecommendData.bind(this);
-        this.onRDMessage = this.onRDMessage.bind(this);
-        this.windturbineControl = this.windturbineControl.bind(this);
-        this.marking = this.marking.bind(this);
-        this.removeMarked = this.removeMarked.bind(this);
-        // this.initWinturbineBaseData = this.initWinturbineBaseData.bind(this);
-        // this.refreshTPData();
-        // this.refreshAlarmData();
-        this.refreshRecommendData();
-        // this.refreshTPTimer = setInterval(this.refreshTPData, 3000);// 标题栏数据
-        // this.refreshAlarmTimer = setInterval(this.refreshAlarmData, 10000);// 报警数据
-        this.refreshRecommendTimer = setInterval(this.refreshRecommendData, 3000);// 推荐数据
-    }
-
-    /* 数据刷新 */
-    // refreshTPData() {
-    //     let val = '';
-    //     for (let v in this.TopPoint) {
-    //         val += this.TopPoint[v].pointTag + ',';
-    //     }
-    //     api.refreshData(val).then(this.onTPMessage)
-    // }
-
-    /* 刷新推荐信息 */
-    refreshRecommendData() {
-        let val = '';
-        for (let v in this.Recommends) {
-            val += v + ',';
-        }
-        // api.refreshData(val).then(this.onRDMessage)
-    }
-
-    /* 刷新报警信息 */
-    refreshAlarmData() {
-        // http://192.168.10.18:8075/alarm
-        // 1、读取一天内的所有open的4级custom报警,作为隐患数据ar
-        let enddt = new Date();
-        let tm = enddt.getTime();
-        enddt = new Date(tm + 900000);
-        let startdt = new Date(tm - 86400000);
-        // api.getSnap({
-        //     pagenum:'1',
-        //     pagesize:'500',
-        //     category1:'custom',
-        //     isopened:'1',
-        //     starttime:this.formatDate(startdt),
-        //     endtime:this.formatDate(enddt),
-        // }).then(this.onHiddenProblemsMessage)
-        // api.getSnap({
-        //     pagenum:'1',
-        //     pagesize:'500',
-        //     category1:'windturbine',
-        //     isopened:'1',
-        //     starttime:this.formatDate(startdt),
-        //     endtime:this.formatDate(enddt),
-        // }).then(this.onHiddenProblemsMessage)
-        // api.getSnap({
-        //     pagenum:'1',
-        //     pagesize:'500',
-        //     category1:'SYZ',
-        //     isopened:'1',
-        //     starttime:this.formatDate(startdt),
-        //     endtime:this.formatDate(enddt),
-        // }).then(this.onHiddenProblemsMessage)
-    }
-
-    /* 获得故障数据 */
-    onAccidentsMessage(msg) {
-        if (!msg.data) return;
-        this.Accidents = new Array();
-        for (let v in msg.data.records) {
-            let val = msg.data.records[v];
-            if (this.isContains(val.alertText, ["跳闸", "开关", "刀闸", "断路器", "合位", "分位"])) {
-                // todo 暂时隐藏事故报警
-                //this.Accidents.push(val);
-            } else {
-                if (val.rank == "5") {
-                    this.Failure.push(val);
-                } else {
-                    this.Defects.push(val);
-                }
-            }
-        }
-    }
-
-    /* 获得缺陷数据 */
-    onDefectsMessage(msg) {
-        if (!msg.data) return;
-        this.Defects = new Array();
-        this.Failure = new Array();
-        for (let v in msg.data.records) {
-            let val = msg.data.records[v];
-            if (val.alertText.indexOf("故障") > 0) {
-                this.Failure.push(val);
-            } else {
-                this.Defects.push(val);
-            }
-        }
-    }
-
-    /* 获得隐患数据 */
-    onHiddenProblemsMessage(msg) {
-        if (!msg.data) return;
-        this.HiddenProblems = msg.data.records;
-    }
-
-    /* 获得标题栏数据 */
-    // onTPMessage(msg) {
-    //     if (!msg.data) return;
-    //     for (let v in this.TopPoint) {
-    //         let val = this.TopPoint[v];
-    //         val.value = msg.data[val.pointTag].doubleValue;
-    //     }
-    // }
-
-    /* 获得推荐信息数据 */
-    onRDMessage(msg) {
-        if (!msg.data) return;
-        // for (let v in msg.data) {
-        //     let isact = false;
-        //     if (!msg.data[v].doubleValue) {
-        //         isact = msg.data[v].booleanValue
-        //     } else {
-        //         isact = msg.data[v].doubleValue != 0;
-        //     }
-        //     if (isact && !this.Recommends[v].isActive) {
-        //         this.Recommends[v].createTime = this.formatDate(new Date(), 'YY-MM-DD hh:mm');
-        //     }
-        //     this.Recommends[v].isActive = isact;
-        // }
-    }
-
-    /* 格式化时间 */
-    formatDate(time, format = 'YY-MM-DD HH:mm:ss') {
-        let date = new Date(time);
-
-        let year = date.getFullYear(),
-            month = date.getMonth() + 1,//月份是从0开始的
-            day = date.getDate(),
-            hour = date.getHours(),
-            min = date.getMinutes(),
-            sec = date.getSeconds();
-        let preArr = Array.apply(null, Array(10)).map(function (elem, index) {
-            return '0' + index;
-        });
-
-        let newTime = format.replace(/YY/g, year)
-            .replace(/MM/g, preArr[month] || month)
-            .replace(/DD/g, preArr[day] || day)
-            .replace(/hh/g, preArr[hour] || hour)
-            .replace(/mm/g, preArr[min] || min)
-            .replace(/ss/g, preArr[sec] || sec);
-        return newTime;
-    }
-
-    /* 判断一个字符串中是否包含第二个字符串列表中的字符 */
-    isContains(str, strs) {
-        for (let v in strs) {
-            if (str.indexOf(strs[v]) > 0) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /* 风机控制 */
-    windturbineControl(windturbines, isLockOrUnlock, automatic, test, success, error) {
-        let pairs = {};
-        for (let ind in windturbines) {
-            let wb = windturbines[ind];
-            let ct = {
-                windturbineId: wb.windturbineId,
-                stationId: wb.stationId,
-                projectId: wb.projectId,
-                modelId: wb.modelId,
-                controlType: wb.controlType,
-                lockType: wb.lockType,
-                userName: automatic ? 'system_' + this.LoginUser.name : this.LoginUser.name,
-                userId: this.LoginUser.id,
-            };
-            pairs[ct.windturbineId] = ct;
-        }
-        api.windturbControl(pairs).then(res => {
-            success(res);
-        })
-    }
-
-    /* 系统控制风机,自动下发命令 */
-    windturbineControlSystem(windturbines) {
-        let pairs = {};
-        for (let ind in windturbines) {
-            let wb = windturbines[ind];
-            let ct = {
-                windturbineId: wb.windturbineId,
-                stationId: wb.stationId,
-                projectId: wb.projectId,
-                modelId: wb.modelId,
-                controlType: wb.controlType,
-                lockType: wb.lockType,
-                userName: 'system',
-                userId: 0,
-            };
-            pairs[ct.windturbineId] = ct;
-        }
-        let isLockOrUnlock = false
-        api.windturbControl(pairs).then(res => {
-            // eslint-disable-next-line no-undef
-            success(res);
-        })
-    }
-
-    /* 标记 */
-    marking(windturbines) {
-        for (let v in windturbines) {
-            ++this.MarkIndex;
-            this.Marks.push({title: windturbines[v].windturbineId, id: this.MarkIndex});
-        }
-    }
-
-    updateMarks(windturbine, value) {
-        this.Marks.forEach(item => {
-            if (windturbine.windturbineId === item.title) {
-                item.value = value
-            }
-        })
-    }
-
-    /* 校验区数据 */
-    checkout(windturbines) {
-        windturbines.forEach(item => {
-            item.checkTime = (new Date()).getTime()
-            if (!this.checkouts.filter(items => items.windturbineId === item.windturbineId)[0]) {
-                this.checkouts.push(item)
-            }
-        })
-    }
-
-    removeCheckouts(mk) {
-        let indx = -1;
-        for (let id in this.checkouts) {
-            if (this.checkouts[id].windturbineId == mk.windturbineId) {
-                indx = id;
-                break;
-            }
-        }
-        if (indx < 0) return;
-        this.checkouts.splice(indx, 1);
-    }
-
-    /* 移除标记 */
-    removeMarked(mk) {
-        let indx = -1;
-        for (let id in this.Marks) {
-            if (this.Marks[id].id == mk.id) {
-                indx = id;
-                break;
-            }
-        }
-        if (indx < 0) return;
-        this.Marks.splice(indx, 1);
-    }
-
-    /* 获取风机详情页面数据 */
-    initWinturbineBaseData(info, action) {
-        api.nitWinturbineBaseData({
-            thingType: 'windturbine',
-            thingId: info.windturbineId,
-            uniformCodes: info.codes,
-        }).then(res => {
-            action(res.data);
-        }).catch(err => {
-            console.log(err);
-        });
-    }
-
-    /* 单例 */
-    static getInstance() {
-        if (!BackgroundData.instance) {
-            BackgroundData.instance = new BackgroundData();
-        }
-        return BackgroundData.instance;
-    }
-}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 2032
src/utills/BoosterStation.js


+ 3 - 4
src/views/HealthControl/HealthTab3.vue

@@ -69,7 +69,7 @@
         </div>
       </div>
       <div class="query-actions" style="margin-right: 500px">
-        <button class="btn green" @click="onClickSearch">搜索</button>
+        <button class="btn green" @click="onClickSearch">搜 索</button>
       </div>
     </div>
     <div class="table-box">
@@ -192,7 +192,7 @@ export default {
         if (res.code == 200) {
           this.stations = res.data;
           this.station = this.stations[0]?.id;
-        //  this.windturbine = this.windturbines[0]?.id;
+          //  this.windturbine = this.windturbines[0]?.id;
           this.requestUnfinishedList();
         }
       });
@@ -219,8 +219,7 @@ export default {
         .then((res) => {
           if (res.code == 200) {
             this.windturbines = res.data;
-         this.windturbine = this.windturbines[0].id;
-
+            this.windturbine = this.windturbines[0].id;
           }
         });
 

+ 7 - 7
src/views/HealthControl/HealthTab4.vue

@@ -70,7 +70,7 @@
       </div>
 
       <div class="query-actions" style="margin-right: 500px">
-        <button class="btn green" @click="onClickSearch">搜索</button>
+        <button class="btn green" @click="onClickSearch">搜 索</button>
       </div>
     </div>
     <div class="table-box">
@@ -314,15 +314,15 @@ export default {
     },
     // 通过消缺单获得详细信息
     requestTrack(row) {
-
-      api.recommenFindMainTrack({
-         rid: row.rid,
-      }).then((res) => {
+      api
+        .recommenFindMainTrack({
+          rid: row.rid,
+        })
+        .then((res) => {
           if (res.code == 200) {
             this.trackDate = res.data;
           }
-      });
-
+        });
 
       // let that = this;
       // that.API.requestData({

+ 3 - 1
src/views/HealthControl/assess/assessconfig.vue

@@ -11,7 +11,9 @@
           </div>
         </div>
         <div class="query-actions">
-          <button class="btn green mg-l-30" @click="onClickSearch">搜索</button>
+          <button class="btn green mg-l-30" @click="onClickSearch">
+            搜 索
+          </button>
           <button class="btn green mg-l-30" @click="onClickCreate">新增</button>
         </div>
       </div>

+ 1 - 1
src/views/HealthControl/energyEfficAnalyse/evaluationAnalysis/index.vue

@@ -65,7 +65,7 @@
         </div>
       </div>
       <div class="query-actions">
-        <button class="btn green" @click="getTableData">搜索</button>
+        <button class="btn green" @click="getTableData">搜 索</button>
       </div>
     </div>
     <el-table

+ 1 - 2
src/views/HealthControl/energyEfficAnalyse/malfunctionAnalysis/index.vue

@@ -65,7 +65,7 @@
         </div>
       </div>
       <div class="query-actions">
-        <button class="btn green" @click="getTableData">搜索</button>
+        <button class="btn green" @click="getTableData">搜 索</button>
       </div>
     </div>
     <el-table
@@ -240,4 +240,3 @@ export default {
   padding: 10px 20px 15px 20px;
 }
 </style>
-

+ 1 - 1
src/views/HealthControl/energyEfficAnalyse/powerAnalysis/index.vue

@@ -65,7 +65,7 @@
         </div>
       </div>
       <div class="query-actions">
-        <button class="btn green" @click="getTableData">搜索</button>
+        <button class="btn green" @click="getTableData">搜 索</button>
       </div>
     </div>
     <el-table

+ 1 - 1
src/views/HealthControl/healthManagement/wtSaturability/tab1.vue

@@ -45,7 +45,7 @@
         </div>
       </div>
       <div class="query-actions">
-        <button class="btn green" @click="search">搜索</button>
+        <button class="btn green" @click="search">搜 索</button>
       </div>
     </div>
     <div class="df-table">

+ 1 - 1
src/views/HealthControl/healthManagement/wtSaturability/tab2.vue

@@ -58,7 +58,7 @@
         </div>
       </div>
       <div class="query-actions">
-        <button class="btn green" @click="search">搜索</button>
+        <button class="btn green" @click="search">搜 索</button>
       </div>
     </div>
     <div class="df-table">

+ 1 - 1
src/views/HealthControl/healthManagement/wtSaturability/tab3.vue

@@ -58,7 +58,7 @@
         </div>
       </div>
       <div class="query-actions">
-        <button class="btn green" @click="search">搜索</button>
+        <button class="btn green" @click="search">搜 索</button>
       </div>
     </div>
     <div class="df-table">

+ 1 - 1
src/views/Home/components/map.vue

@@ -966,7 +966,7 @@
               <div class="titles">
                 <div class="amount">
                   <div class="icon fengji-icon svg-icon svg-icon-white"></div>
-                  <img class="amount-image" src="@/assets/png/sun.png" alt="" />
+                  <img class="amount-image" src="@/assets/png/sy-sun.png" alt="" />
                   <div class="amount-nums">
                     <text class="num-item">{{
                       Number(

+ 3 - 3
src/views/Home/index.vue

@@ -29,7 +29,7 @@ export default {
 .home {
   width: 100%;
   height: 100%;
-  background: url(../../assets/newHome_h.png);
+  background: url('~@/assets/newHome_h.png');
   background-repeat: round;
   .date {
     display: flex;
@@ -399,7 +399,7 @@ export default {
         position: relative;
         width: 84px;
         height: 84px;
-        background: url("../../assets/imgs/instrumentPanel.png") no-repeat;
+        background: url("~@/assets/imgs/instrumentPanel.png") no-repeat;
 
         img {
           position: absolute;
@@ -468,7 +468,7 @@ export default {
           background: linear-gradient(90deg, #561f00, #853000, #f78712);
 
           .img {
-            background: url("../../assets/imgs/generatingCapacityDay.png")
+            background: url("~@/assets/imgs/generatingCapacityDay.png")
               no-repeat;
           }
         }

+ 842 - 0
src/views/IntegratedAlarm/alarmConfig/components/custom_components.vue

@@ -0,0 +1,842 @@
+<template>
+  <el-dialog v-model="isShow" width="60%" @close="closeDialog" destroy-on-close>
+    <el-form
+      ref="ruleFormRef"
+      :model="form"
+      :rules="rules"
+      label-position="top"
+      label-width="200px"
+      class="custom-comp-form"
+    >
+      <el-row
+        type="flex"
+        justify="space-between"
+        align="middle"
+        class="first-row"
+        :gutter="10"
+      >
+        <el-col :span="15" class="first-row-first-col">
+          <el-form-item prop="name">
+            <el-tag size="small">规则名称</el-tag>
+            <el-input v-model="form.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="9" class="first-row-second-col">
+          <el-form-item prop="category">
+            <el-tag size="small">报警类别</el-tag>
+            <el-select
+              v-model="form.category"
+              size="mini"
+              @change="categorychanged"
+            >
+              <el-option
+                key="1"
+                label="风机报警"
+                value="windturbine"
+              ></el-option>
+              <el-option
+                key="2"
+                label="升压站报警"
+                value="booststation"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="rank">
+            <el-tag size="small">报警级别</el-tag>
+            <el-select v-model="form.rank" size="mini">
+              <el-option
+                v-for="item in rankList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="enable">
+            <el-tag size="small">是否启用</el-tag>
+            <el-switch
+              v-model="form.enable"
+              :active-value="true"
+              :inactive-value="false"
+              active-color="#13ce66"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="10" class="second-row">
+        <el-col :span="6">
+          <el-form-item prop="station">
+            <el-tag size="small">{{
+              form.category == "windturbine" ? "风场" : "电站"
+            }}</el-tag>
+            <el-select
+              v-model="form.stationId"
+              size="mini"
+              @change="stationChange"
+            >
+              <el-option
+                v-for="item in stationList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="modelId" v-if="form.category == 'windturbine'">
+            <el-tag size="small">风机型号</el-tag>
+            <el-select
+              v-model="form.modelId"
+              size="mini"
+              @change="modelIdChange"
+            >
+              <el-option
+                v-for="item in state.modelList"
+                :key="item"
+                :value="item.id"
+                :label="item.aname"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item
+            prop="relatedParts"
+            v-if="form.category == 'windturbine'"
+          >
+            <el-tag size="small">所属部件</el-tag>
+            <el-select v-model="form.relatedParts" style="width: 100%">
+              <el-option
+                v-for="item in state.relatedPartsList"
+                :key="item.nemCode"
+                :label="item.name"
+                :value="item.nemCode"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="fault">
+            <el-tag size="small">预警类型</el-tag>
+            <el-select v-model="form.range" style="width: 100%">
+              <el-option
+                v-for="i in faultList"
+                :key="i.nemCode"
+                :value="i.nemCode"
+                :label="i.name"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="9">
+          <el-form-item prop="expression">
+            <el-tag size="small">表达式</el-tag>
+            <el-input
+              type="textarea"
+              rows="14"
+              v-model="form.expression"
+              id="expressionInput"
+              @keyup.z.stop="handle"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="9">
+          <el-tabs type="border-card">
+            <el-tab-pane label="AI测点">
+              <el-input v-model="state.AIPointSearch"> </el-input>
+              <el-table
+                size="mini"
+                fit
+                :show-header="false"
+                stripe
+                height="204"
+                :data="filterAIList"
+                @row-dblclick="rowDbclick"
+              >
+                <el-table-column prop="uniformCode" width="120" />
+                <el-table-column prop="name" />
+              </el-table>
+            </el-tab-pane>
+            <el-tab-pane label="DI测点">
+              <el-input v-model="state.DIPointSearch"> </el-input>
+              <el-table
+                size="mini"
+                fit
+                :show-header="false"
+                stripe
+                height="204"
+                :data="filterDIList"
+                @row-dblclick="rowDbclick"
+              >
+                <el-table-column prop="uniformCode" width="120" />
+                <el-table-column prop="name" />
+              </el-table>
+            </el-tab-pane>
+            <el-tab-pane label="函数">
+              <el-table
+                size="mini"
+                fit
+                :show-header="false"
+                stripe
+                height="240"
+                :data="func"
+                @row-dblclick="tabFuncRowClickHandle"
+              >
+                <el-table-column min-width="60%">
+                  <template #default="scope">
+                    <el-popover trigger="hover" placement="bottom">
+                      <p>描述:{{ scope.row.describe }}</p>
+                      <p>参数:{{ scope.row.param }}</p>
+                      <template #reference>
+                        <span size="medium" transition="fade-in-linear">{{
+                          scope.row.lab
+                        }}</span>
+                      </template>
+                    </el-popover>
+                  </template>
+                </el-table-column>
+                <el-table-column min-width="40%">
+                  <template #default="scope">
+                    <el-popover trigger="hover" placement="bottom">
+                      <p>描述:{{ scope.row.describe }}</p>
+                      <p>参数:{{ scope.row.param }}</p>
+                      <template #reference>
+                        <span size="medium" transition="fade-in-linear">{{
+                          scope.row.name
+                        }}</span>
+                      </template>
+                    </el-popover>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </el-tab-pane>
+            <el-tab-pane label="运算符">
+              <div class="operator">
+                <el-button
+                  v-for="item in operator"
+                  :key="item"
+                  size="mini"
+                  class="buttons"
+                  @click="elInputSplit(item)"
+                >
+                  {{ item }}
+                </el-button>
+              </div>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-row>
+      <el-row :gutter="24">
+        <el-col :span="24">
+          <el-form-item prop="description">
+            <el-tag size="small">规则描述</el-tag>
+            <el-input
+              type="textarea"
+              rows="4"
+              v-model="form.description"
+              id="descriptionInput"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <template #footer>
+      <span class="footerButton">
+        <el-button round size="mini" @click="closeDialog">取 消</el-button>
+        <el-button round size="mini" @click="submitForm(ruleFormRef)"
+          >确 定</el-button
+        >
+      </span>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import {
+  ref,
+  onMounted,
+  reactive,
+  computed,
+  watch,
+  nextTick,
+  defineEmits,
+  defineProps,
+} from "vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import {
+  custombj_postSave,
+  fetch_electrical_point_ai,
+  fetch_electrical_point_di,
+  getStationinfo,
+  fetchPointList,
+  fetchPointListByBootst,
+} from "@/api/zhbj/index.js";
+import { useStore } from "vuex";
+const store = useStore();
+const emits = defineEmits(["close"]);
+const props = defineProps({
+  //是否显示
+  isVisible: {
+    type: Boolean,
+    defaule: false,
+  },
+  //表单
+  dialogOptions: {
+    type: Object,
+  },
+  //型号接口数据
+  modelListAll: {
+    type: Object,
+  },
+  //所属部件及预警类型
+  fetchListAll: {
+    type: Array,
+  },
+  //报警级别
+  rankList: {
+    type: Array,
+  },
+});
+watch(
+  () => props.isVisible,
+  (val, old) => {
+    nextTick(() => {
+      isShow.value = val;
+    });
+  },
+  {
+    deep: true,
+  }
+);
+watch(
+  () => props.dialogOptions,
+  (val, old) => {
+    nextTick(() => {
+      form.value = val;
+      if (val.id && val.id != "") {
+        if (val?.stationId.includes("FDC") || val?.stationId.includes("GDC")) {
+          getfetchPointList();
+        } else {
+          getfetchPointListByBootst();
+        }
+      }
+    });
+  },
+  {
+    deep: true,
+  }
+);
+watch(
+  () => props.dialogOptions?.stationId,
+  (val, old) => {
+    if (val && val != "") {
+      nextTick(async () => {
+        state.modelList = props.modelListAll[val];
+        if (val.includes("FDC")) {
+          state.relatedPartsList = props.fetchListAll?.fjbj;
+        } else if (val.includes("GDC")) {
+          state.relatedPartsList = props.fetchListAll?.gfbj;
+        } else {
+          state.relatedPartsList = [];
+        }
+      });
+    } else {
+      state.relatedPartsList = [];
+      state.modelList = [];
+    }
+  }
+);
+
+const isShow = ref(false);
+
+const form = ref({
+  id: "",
+  category: "windturbine", //报警类别
+  description: "", //描述
+  name: "", //规则名称
+  enable: true, //是否启用
+  expression: "", //表达式
+  range: "", //预警类型
+  rank: "", //报警级别
+  relatedParts: "", //所属部件
+  stationId: "", //场站id
+  deviceId: "",
+  electricalId: "",
+  lineId: "",
+  modelId: "",
+  projectId: "",
+  tag: "",
+  uniformCode: "",
+});
+const getExtraCharacters = (str1, str2) => {
+  let result = "";
+  if (str1 && str2) {
+    if (str1.length < str2.length) {
+      result = str2.slice(str1.length);
+    } else if (str1.length > str2.length) {
+      result = str1.slice(str2.length);
+    }
+  }
+
+  return result;
+};
+const newVal = ref("");
+watch(
+  () => form.value.expression,
+  (val, old) => {
+    console.log(val, old);
+    let a = getExtraCharacters(val, old);
+    newVal.value = a;
+  },
+  {
+    immediate: true,
+  }
+);
+// 场站列表/升压站列表
+const stationList = computed(() => {
+  if (form.value.category == "windturbine") {
+    return store.state.stationListAll;
+  } else {
+    return store.state.booststationList;
+  }
+});
+const toEmits = () => {
+  emits("close"); // 向父组件传递数据
+};
+const state = reactive({
+  modelList: [], //型号列表
+  relatedPartsList: [], //部件列表
+  AIPointList: [],
+  DIPointList: [],
+  AIPointSearch: "",
+  DIPointSearch: "",
+});
+const operator = [
+  "+",
+  "-",
+  "*",
+  "/",
+  "(",
+  ")",
+  ">",
+  ">=",
+  "<",
+  "<=",
+  "==",
+  "!=",
+  "&&",
+  "||",
+  "!",
+  "%",
+  "true",
+  "false",
+  ".",
+];
+const func = [
+  {
+    lab: "MR",
+    name: "移动极差",
+    param: "测点名,时间(秒)",
+    describe: "是指两个或多个连续样本值中最大值与最小值之差",
+    scene: "测点的移动极差超限报警",
+  },
+  {
+    lab: "MAR",
+    name: "均值极差",
+    param: "测点名,时间(秒)",
+    describe: "",
+    scene: "测点的均值极差计算",
+  },
+  {
+    lab: "RiseExceed",
+    name: "上升趋势",
+    param: "测点名,时间(秒),阈值",
+    describe: "取测点在给定的时间范围内数据上升的量是否超过阈值",
+    scene: "测点值的上升速度过快等",
+  },
+  {
+    lab: "Sustain",
+    name: "持续时间",
+    param: "表达式,时间(秒)",
+    describe:
+      "判定状态(表达式成立)持续的时间是否超过给定的时间判断状态持续的时间",
+    scene: "",
+  },
+  {
+    lab: "LastUpdateTime",
+    name: "最近数据时间",
+    param: "测点名",
+    describe: "",
+    scene: "判定离线,状态持续时间等",
+  },
+  {
+    lab: "abs",
+    name: "取绝对值",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "acos",
+    name: "反余弦",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "asin",
+    name: "反正弦",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "atan",
+    name: "反正切",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "atan2",
+    name: "xy坐标转为极坐标",
+    param: "x,y",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "ceiling",
+    name: "向上取整",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "cos",
+    name: "余弦",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "cosh",
+    name: "双曲线余弦",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "exp",
+    name: "欧拉数 e 的 double 次幂的值",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "floor",
+    name: "向下取整",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "log",
+    name: "自然对数",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "log10",
+    name: "底数为 10 的对数",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "max",
+    name: "比较最大值",
+    param: "double a, double b",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "min",
+    name: "比较最小值",
+    param: "double a, double b",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "pow",
+    name: "返回第一个参数的第二个参数次幂的值",
+    param: "double a, double b",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "round",
+    name: "返回最接近参数的 long,或int",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "sign",
+    name: "负数返回-1.0,整数返回1.0,0返回0.0",
+    param: "float f/double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "sin",
+    name: "三角正弦值",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "sinh",
+    name: "双曲线正弦",
+    param: "double x",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "sqrt",
+    name: "正平方根",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "tan",
+    name: "正切",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "tanh",
+    name: "双曲线正切",
+    param: "double x",
+    describe: "",
+    scene: "",
+  },
+  { lab: "PI", name: "圆周率", param: "", describe: "", scene: "" },
+  { lab: "E", name: "自然对数", param: "", describe: "", scene: "" },
+];
+const faultList = computed(() => props.fetchListAll.yj); //预警类型列表
+const ruleFormRef = ref(null);
+const rules = reactive({
+  name: [{ required: true, message: "请输入规则名称", trigger: "blur" }],
+  category: [{ required: true, message: "请选择报警类别", trigger: "change" }],
+  rank: [{ required: true, message: "请选择报警级别", trigger: "change" }],
+  stationId: [{ required: true, message: "请选择风场", trigger: "change" }],
+  expression: [
+    { required: true, message: "表达式不能为空", trigger: ["change"] },
+  ],
+});
+
+//categorychanged
+const categorychanged = async (val) => {
+  form.value.stationId = "";
+  form.value.modelId = "";
+  form.value.expression = "";
+  form.value.relatedParts = "";
+  state.AIPointList = [];
+  state.DIPointList = [];
+};
+//stationChange
+const stationChange = async (val) => {
+  if (form.value.category == "windturbine") {
+    form.value.modelId = "";
+    state.modelList = props.modelListAll[val];
+  } else {
+    getfetchPointListByBootst();
+  }
+};
+//modelIdChange
+const modelIdChange = async () => {
+  getfetchPointList();
+};
+// 根据场站和型号查询测点数据
+const getfetchPointList = async () => {
+  const { data } = await fetchPointList(
+    form.value.stationId,
+    form.value.modelId
+  );
+  if (Object.keys(data).length) {
+    state.AIPointList = data.ai.sort(function (a, b) {
+      return a.uniformCode - b.uniformCode;
+    });
+    state.DIPointList = data.di.sort(function (a, b) {
+      return a.uniformCode - b.uniformCode;
+    });
+  }
+};
+
+// 根据升压站查询测点数据
+const getfetchPointListByBootst = async () => {
+  const { data } = await fetchPointListByBootst(form.value.stationId);
+  if (Object.keys(data).length) {
+    state.AIPointList = data.ai.sort(function (a, b) {
+      return a.uniformCode - b.uniformCode;
+    });
+    state.DIPointList = data.di.sort(function (a, b) {
+      return a.uniformCode - b.uniformCode;
+    });
+  }
+};
+//筛选AI测点
+const filterAIList = computed(() =>
+  state.AIPointList?.filter(
+    (data) =>
+      !state.AIPointSearch ||
+      data.uniformCode.includes(state.AIPointSearch) ||
+      data.name.includes(state.AIPointSearch)
+  )
+);
+//筛选DI测点
+const filterDIList = computed(() =>
+  state.DIPointList?.filter(
+    (data) =>
+      !state.DIPointSearch ||
+      data.uniformCode.includes(state.DIPointSearch) ||
+      data.name.includes(state.DIPointSearch)
+  )
+);
+
+// 函数点击事件
+const tabFuncRowClickHandle = (row) => {
+  let elInput = document.getElementById("expressionInput");
+  let startPos = elInput.selectionStart; //第0个字符到选中的字符
+  let endPos = elInput.selectionEnd; //选中字符到末尾字符
+  if (startPos === undefined || endPos === undefined) return;
+  let txt = elInput.value;
+  let func;
+  if (
+    row.lab === "MR" ||
+    row.lab === "MAR" ||
+    row.lab === "RiseExceed" ||
+    row.lab === "Sustain" ||
+    row.lab === "LastUpdateTime"
+  ) {
+    func = row.lab + "()";
+  } else if (row.lab === "PI" || row.lab === "E") {
+    func = "Math." + row.lab;
+  } else {
+    func = "Math." + row.lab + "()";
+  }
+  // 将插值添加到选中光标位置
+  let result = txt.substring(0, startPos) + func + txt.substring(endPos);
+  elInput.value = result;
+  // 重新定义光标位置
+  elInput.focus();
+  if (row.lab === "PI" || row.lab === "E") {
+    elInput.selectionStart = startPos + func.length;
+    elInput.selectionEnd = startPos + func.length;
+  } else {
+    elInput.selectionStart = startPos + func.length - 1;
+    elInput.selectionEnd = startPos + func.length - 1;
+  }
+  form.value.expression = result; // 赋值给表单中的的字段
+};
+//rowDbclick
+const rowDbclick = (row) => {
+  elInputSplit(row);
+};
+// 表达式字符串拼接
+const elInputSplit = async (val) => {
+  let elInput = document.getElementById("expressionInput");
+  let startPos = elInput.selectionStart;
+  let endPos = elInput.selectionEnd;
+  if (startPos === undefined || endPos === undefined) return;
+  let txt = elInput.value;
+  let txtSplit = val.uniformCode || val;
+  let result = txt.substring(0, startPos) + txtSplit + txt.substring(endPos);
+  elInput.value = result;
+  elInput.focus();
+  elInput.selectionStart = startPos + txtSplit.length;
+  elInput.selectionEnd = startPos + txtSplit.length;
+  form.value.expression = result;
+};
+const handle = (e) => {
+  if (e.ctrlKey && e.key == "z") {
+    form.value.expression = form.value.expression.replace(newVal.value, "");
+  }
+};
+//提交
+const submitForm = async (formEl) => {
+  if (!formEl) return;
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      save();
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+};
+//保存
+const save = async () => {
+  const res = await custombj_postSave(form.value);
+  console.warn(res);
+  if (res.code != 200) {
+    ElMessage.error(res.msg);
+  } else {
+    ElMessage.success(`保存成功!`);
+    closeDialog();
+  }
+};
+//reset
+const resetForm = (formEl) => {
+  formEl.resetFields();
+};
+//confirm关闭
+const handleClose = () => {
+  ElMessageBox.confirm("确认关闭?")
+    .then(() => {
+      closeDialog();
+    })
+    .catch(() => {
+      // catch error
+    });
+};
+//关闭触发事件
+const closeDialog = () => {
+  resetForm(ruleFormRef.value);
+  form.value = {};
+  state.AIPointList = [];
+  state.DIPointList = [];
+  toEmits();
+};
+</script>
+<style lang="less" scoped>
+.col-box {
+  display: flex;
+  flex-direction: column;
+}
+
+.select-mini {
+  width: 120px;
+}
+
+.el-tabs__content {
+  padding: 0 !important;
+}
+
+.el-tabs--border-card {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.border {
+  border: solid red 1px;
+}
+
+.el-table--mini td {
+  padding: 3px 0;
+}
+
+.el-button-group .el-button--primary {
+  border: none;
+}
+
+.el-form--label-top .el-form-item__label {
+  padding: 0;
+}
+</style>

+ 482 - 0
src/views/IntegratedAlarm/alarmConfig/components/windturbine_components.vue

@@ -0,0 +1,482 @@
+<template>
+  <el-dialog
+    v-model="isShow"
+    width="800px"
+    @close="resetOptions"
+    destroy-on-close
+  >
+    <template #title>
+      <div class="dialog-title">
+        <div class="title">{{ title }}</div>
+      </div>
+    </template>
+    <el-form
+      :model="dialogOptions"
+      :rules="rules"
+      label-width="120px"
+      ref="formRef"
+      inline
+      class="wind-comp-form"
+    >
+      <el-form-item label="报警类别" prop="deviceType">
+        <el-select
+          v-model="dialogOptions.deviceType"
+          filterable
+          placeholder="请选择"
+          @change="
+            (res) => {
+              dialogOptions.stationId = '';
+              dialogOptions.characteristic =
+                dialogOptions.deviceType == 'booststation'
+                  ? '报警'
+                  : '正常停机';
+              checkRules();
+              getWpList();
+            }
+          "
+        >
+          <el-option
+            v-for="item in categoryArray"
+            :key="item.id"
+            :label="item.label"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="序列号">
+        <el-input
+          v-model="dialogOptions.id"
+          placeholder="自动生成"
+          clearable
+          readonly
+        />
+      </el-form-item>
+      <el-form-item label="场站" prop="stationId">
+        <el-select
+          v-model="dialogOptions.stationId"
+          filterable
+          placeholder="请选择"
+          :disabled="!wpArray?.length"
+          @change="
+            (res) => {
+              dialogOptions.modelId = '';
+              getWtModel();
+            }
+          "
+        >
+          <el-option
+            v-for="item in wpArray"
+            :key="item.id"
+            :label="item.aname"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="设备型号"
+        prop="modelId"
+        v-if="dialogOptions.deviceType !== 'booststation'"
+      >
+        <el-select
+          v-model="dialogOptions.modelId"
+          filterable
+          placeholder="请选择"
+          :disabled="!modelArray?.length"
+        >
+          <el-option
+            v-for="item in modelArray"
+            :key="item"
+            :label="item"
+            :value="item"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="统一编码" prop="uniformCode">
+        <el-input v-model="dialogOptions.uniformCode" clearable />
+      </el-form-item>
+      <el-form-item label="特性" prop="characteristic">
+        <el-select
+          v-model="dialogOptions.characteristic"
+          filterable
+          placeholder="请选择"
+        >
+          <el-option
+            v-for="item in dialogOptions.deviceType == 'booststation'
+              ? characteristicArray1
+              : characteristicArray"
+            :key="item"
+            :label="item"
+            :value="item"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="故障编码">
+        <el-input v-model="dialogOptions.nemCode" clearable />
+      </el-form-item>
+      <el-form-item label="描述" prop="description">
+        <el-input
+          v-model="dialogOptions.description"
+          placeholder="请输入"
+          clearable
+        />
+      </el-form-item>
+      <el-form-item label="报警级别">
+        <el-select v-model="dialogOptions.rank" filterable placeholder="请选择">
+          <el-option
+            v-for="item in levelArray"
+            :key="item.id"
+            :label="item.label"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="测点"
+        prop="tagId"
+        v-if="dialogOptions.deviceType === 'booststation'"
+      >
+        <el-select
+          v-model="dialogOptions.tagId"
+          filterable
+          placeholder="请选择"
+        >
+          <el-option
+            v-for="item in pointArray"
+            :key="item.nemCode"
+            :label="item.name"
+            :value="item.nemCode"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="关键部件"
+        prop="components"
+        v-if="dialogOptions.deviceType !== 'booststation'"
+      >
+        <el-select v-model="dialogOptions.components" filterable>
+          <el-option-group
+            v-for="group in associatedComponentsArray"
+            :key="group.label"
+            :label="group.label"
+          >
+            <el-option
+              v-for="item in group.options"
+              :key="item.nemCode"
+              :label="item.name"
+              :value="item.nemCode"
+            />
+          </el-option-group>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="是否启用">
+        <el-radio-group size="small" v-model="dialogOptions.enable">
+          <el-radio-button :label="true">是</el-radio-button>
+          <el-radio-button :label="false">否</el-radio-button>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="是否可复位">
+        <el-radio-group size="small" v-model="dialogOptions.resetTable">
+          <el-radio-button :label="true">是</el-radio-button>
+          <el-radio-button :label="false">否</el-radio-button>
+        </el-radio-group>
+      </el-form-item>
+    </el-form>
+    <el-row class="footerButton" style="margin-top: 20px">
+      <el-button size="mini" round @click="cancle">取 消</el-button>
+      <el-button size="mini" round @click="checkData">确 定</el-button>
+    </el-row>
+  </el-dialog>
+</template>
+<script>
+import {
+  getWpList,
+  getBpList,
+  getWtModel,
+  getPointList,
+  fetchRelatePartAndAlarmType,
+  saveAlarmconfiguration,
+} from "@api/zhbj/index.js";
+export default {
+  props: {
+    isVisible: {
+      type: Boolean,
+      default: () => false,
+    },
+    form: {
+      type: Object,
+      default: () => {},
+    },
+    title: {
+      type: String,
+    },
+  },
+
+  data() {
+    return {
+      isShow: false,
+      dialogOptions: {
+        deviceType: "",
+        id: "",
+        stationId: "",
+        modelId: "",
+        uniformCode: "",
+        nemCode: "",
+        characteristic: "",
+        description: "",
+        rank: 1,
+        tagId: "",
+        components: "",
+        enable: false,
+        resetTable: false,
+      },
+      rules: {
+        deviceType: [
+          {
+            required: true,
+            message: "报警类型不可为空",
+            trigger: "change",
+          },
+        ],
+        stationId: [
+          {
+            required: true,
+            message: "场站不可为空",
+            trigger: "change",
+          },
+        ],
+        modelId: [
+          {
+            required: true,
+            message: "设备型号不可为空",
+            trigger: "change",
+          },
+        ],
+        uniformCode: [
+          {
+            required: true,
+            message: "统一编码不可为空",
+            trigger: "change",
+          },
+        ],
+        characteristic: [
+          {
+            required: true,
+            message: "统一编码不可为空",
+            trigger: "change",
+          },
+        ],
+        tagId: [
+          {
+            required: true,
+            message: "测点不可为空",
+            trigger: "change",
+          },
+        ],
+        description: [
+          {
+            required: true,
+            message: "描述不可为空",
+            trigger: "change",
+          },
+        ],
+        components: [
+          {
+            required: true,
+            message: "部件不可为空",
+            trigger: "change",
+          },
+        ],
+      },
+      categoryArray: [
+        { id: "windturbine", label: "风机报警" },
+        { id: "booststation", label: "升压站报警" },
+        { id: "inverter", label: "光伏报警" },
+      ],
+      wpArray: [],
+      modelArray: [],
+      characteristicArray: [
+        "安全链停机",
+        "启动禁止",
+        "报警",
+        "手动停机",
+        "安全停机",
+        "禁止启动",
+        "电网故障",
+        "电网停机故障",
+        "记录",
+        "紧急停机",
+        "变桨停机",
+        "正常停机",
+        "偏航停机",
+        "报警记录",
+        "日志",
+        "正常停机故障",
+        "电网故障停机",
+        "快速停机",
+        "总故障",
+      ],
+      characteristicArray1: ["动作", "事故", "报警"],
+      levelArray: [
+        { id: 1, label: "低级" },
+        { id: 2, label: "低中级" },
+        { id: 3, label: "中级" },
+        { id: 4, label: "中高级" },
+        { id: 5, label: "高级" },
+      ],
+      pointArray: [],
+      associatedComponentsArray: [],
+    };
+  },
+
+  created() {
+    this.isShow = this.isVisible;
+    this.dialogOptions = Object.assign(this.dialogOptions, this.form);
+    this.checkRules();
+    this.getWpList();
+    this.getfetchRelatePart();
+  },
+
+  methods: {
+    cancle() {
+      this.$confirm("确认关闭?")
+        .then(() => {
+          this.isShow = false;
+        })
+        .catch(() => {});
+    },
+
+    checkRules() {
+      const isBp = this.dialogOptions.deviceType === "booststation";
+      const isWt = this.dialogOptions.deviceType === "windturbine";
+      const isInv = this.dialogOptions.deviceType === "inverter";
+      this.rules.tagId.forEach((ele) => {
+        ele.required = isBp;
+      });
+
+      this.rules.modelId.forEach((ele) => {
+        ele.required = !isBp;
+      });
+
+      this.rules.components.forEach((ele) => {
+        ele.required = isWt || isInv;
+      });
+    },
+
+    getWpList() {
+      if (
+        this.dialogOptions.deviceType === "windturbine" ||
+        this.dialogOptions.deviceType === "inverter"
+      ) {
+        getWpList(this.dialogOptions.deviceType).then((res) => {
+          this.dialogOptions.stationId = res?.data?.[0]?.id || "";
+          this.wpArray = res.data;
+          this.getWtModel();
+        });
+      } else {
+        getBpList().then((res) => {
+          this.dialogOptions.stationId = res?.data?.[0]?.id || "";
+          this.wpArray = res.data;
+          this.getWtModel();
+        });
+      }
+    },
+
+    getWtModel() {
+      getWtModel(this.dialogOptions.stationId).then((res) => {
+        this.dialogOptions.modelId = res?.data?.[0] || "";
+        this.modelArray = res.data;
+        if (this.dialogOptions.deviceType === "booststation") {
+          this.getPointList();
+        }
+      });
+    },
+
+    getPointList() {
+      getPointList({
+        subId: this.dialogOptions.stationId,
+      }).then((res) => {
+        this.pointArray = res.data.total;
+      });
+    },
+
+    getfetchRelatePart() {
+      fetchRelatePartAndAlarmType().then((res) => {
+        const keyMap = {
+          fjbj: "风机部件",
+          gfbj: "光伏部件",
+        };
+
+        let associatedComponentsArray = [];
+
+        for (let key in keyMap) {
+          associatedComponentsArray.push({
+            id: key,
+            label: keyMap[key],
+            options: res.data[key] || [],
+          });
+        }
+        this.dialogOptions.components =
+          associatedComponentsArray?.[0]?.options?.[0]?.nemCode || "";
+        this.associatedComponentsArray = associatedComponentsArray;
+      });
+    },
+
+    checkData() {
+      this.$refs.formRef.validate((valid, fields) => {
+        if (valid) {
+          saveAlarmconfiguration(
+            Object.assign(this.dialogOptions, {
+              alarmType:
+                this.dialogOptions.alarmType || this.dialogOptions.deviceType,
+            })
+          ).then((res) => {
+            if (res.code === 200) {
+              this.BASE.showMsg({
+                type: "success",
+                msg: "提交成功",
+              });
+              this.isShow = false;
+            }
+          });
+        }
+      });
+    },
+
+    resetOptions() {
+      this.dialogOptions = {
+        deviceType: "",
+        id: "",
+        stationId: "",
+        modelId: "",
+        uniformCode: "",
+        characteristic:
+          this.dialogOptions.deviceType == "booststation" ? "报警" : "正常停机",
+        nemCode: "",
+        description: "",
+        rank: 1,
+        tagId: "",
+        components: "",
+        enable: false,
+        resetTable: false,
+      };
+      this.resetForm();
+      this.isShow = false;
+    },
+
+    resetForm() {
+      this.$refs.formRef.resetFields();
+    },
+  },
+
+  watch: {
+    isVisible(value) {
+      this.isShow = value;
+    },
+    form(value) {
+      this.dialogOptions = value;
+      this.checkRules();
+      this.getWpList();
+    },
+  },
+};
+</script>

+ 577 - 0
src/views/IntegratedAlarm/alarmConfig/customConfig/index.vue

@@ -0,0 +1,577 @@
+<template>
+  <div class="custom-config">
+    <div class="form-wrapper">
+      <div class="btns" style="margin-bottom: 10px">
+        <el-button class="buttons" size="mini" round @click="handleInsert">
+          新增记录
+        </el-button>
+        <el-button class="buttons" size="mini" round @click="export2Excel">
+          批量导出</el-button
+        >
+        <el-button class="buttons" size="mini" round @click="outExe">
+          模板下载</el-button
+        >
+        <el-upload
+          style="display: inline; margin-left: 10px"
+          :action="url + 'alertrule/import'"
+          :show-file-list="false"
+          :on-success="handleSuccess"
+          :on-progress="handleProgress"
+          :on-error="handleError"
+        >
+          <el-button
+            class="buttons"
+            size="mini"
+            round
+            @click="exportShow = true"
+          >
+            批量导入</el-button
+          >
+        </el-upload>
+      </div>
+      <div class="search-wrapper">
+        <el-select
+          v-model="query.category"
+          size="mini"
+          class="search-item"
+          popper-class="select"
+          @change="categorychanged"
+        >
+          <el-option key="1" label="风机报警" value="windturbine"></el-option>
+          <!-- <el-option
+            key="2"
+            label="升压站报警"
+            value="booststation"
+          ></el-option> -->
+          <el-option key="3" label="光伏报警" value="inverter"></el-option>
+        </el-select>
+        <el-select
+          v-model="query.wpId"
+          clearable
+          size="mini"
+          class="search-item"
+          :placeholder="'全部场站'"
+          popper-class="select"
+          @change="changeStation"
+        >
+          <el-option
+            v-for="item in stationList"
+            :key="item.id"
+            :value="item.id"
+            :label="item.aname"
+          ></el-option>
+        </el-select>
+        <el-select
+          v-model="query.relatedparts"
+          clearable
+          size="mini"
+          class="search-item"
+          placeholder="所属部件"
+        >
+          <el-option
+            v-for="item in fetchList"
+            :key="item.id"
+            :label="item.name"
+            :value="item.nemCode"
+          >
+          </el-option>
+        </el-select>
+        <el-select
+          v-model="query.enabled"
+          clearable
+          size="mini"
+          class="search-item"
+          placeholder="是否可用"
+        >
+          <el-option
+            v-for="item in state.isEnabled"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          >
+          </el-option>
+        </el-select>
+        <el-select
+          v-model="query.modelId"
+          clearable
+          size="mini"
+          class="search-item"
+          placeholder="全部机型"
+          popper-class="select"
+        >
+          <el-option
+            v-for="item in modelList"
+            :key="item.id"
+            :value="item.id"
+            :label="item.aname"
+          ></el-option>
+        </el-select>
+        <!-- <el-select
+          v-model="query.rank"
+          clearable
+          size="mini"
+          class="search-item"
+          placeholder="全部级别"
+          popper-class="select"
+        >
+          <el-option
+            v-for="item in state.rankList"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select> -->
+        <el-input
+          placeholder="请输入名称"
+          v-model="query.name"
+          size="mini"
+          class="search-item"
+          clearable
+        ></el-input>
+        <el-button class="buttons" round size="mini" @click="getData"
+          >搜索</el-button
+        >
+      </div>
+    </div>
+    <div class="table-wrapper">
+      <div class="leftContent">
+        <span>{{ pageTitle }}</span>
+      </div>
+      <el-table
+        :data="state.tableData"
+        stripe
+        height="calc(100% - 42px - 45px)"
+      >
+        <el-table-column
+          v-for="item in state.tableHeader"
+          :key="item.code"
+          :label="item.title"
+          align="center"
+          :prop="item.code"
+          :minWidth="item.width ? item.width : 60"
+          show-overflow-tooltip
+        >
+          <template #default="scope">
+            <span v-if="item.code == 'rank'">
+              {{ rankConvert(scope.row.rank) }}
+            </span>
+            <span v-else-if="item.code == 'category'">
+              {{ categoryConvert(scope.row.category) }}
+            </span>
+            <span v-else-if="item.code == 'enable'">
+              {{ enabledConvert(scope.row.enable) }}
+            </span>
+            <span v-else>
+              {{ scope.row[item.code] }}
+            </span>
+          </template>
+        </el-table-column>
+
+        <el-table-column label="操作" align="center" width="100">
+          <template #default="scope">
+            <el-button
+              type="text"
+              style="color: #05bb4c"
+              size="mini"
+              @click="handleEditClick(scope.row)"
+              >编辑</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination">
+        <el-pagination
+          :current-page="query.pageNum"
+          :page-size="query.pageSize"
+          :total="total"
+          layout="total, sizes, prev, pager, next"
+          :page-sizes="[22, 50, 100, 200, 500]"
+          @size-change="
+            (value) => {
+              query.pageSize = value;
+              query.pageNum = 1;
+              getData();
+            }
+          "
+          @current-change="handlePageChange"
+        ></el-pagination>
+      </div>
+    </div>
+    <customcomponents
+      @close="dialogclose"
+      :isVisible="state.visible"
+      :dialogOptions="state.form"
+      :rankList="state.rankList"
+      :modelListAll="state.modelListAll"
+      :fetchListAll="state.fetchListAll"
+    />
+  </div>
+</template>
+<script setup>
+import {
+  custombj_fetchTableData,
+  getStationinfo,
+  fetchRelatePartAndAlarmType,
+  fetchModel,
+  fetchBooststation,
+  custombj_importTemplate,
+  getWpList,
+} from "@/api/zhbj/index.js";
+import { outExportExcel } from "@/tools/excel/exportExcel.js"; //引入文件
+import {
+  ref,
+  onMounted,
+  provide,
+  computed,
+  reactive,
+  watch,
+  nextTick,
+} from "vue";
+import { useStore } from "vuex";
+import { useRouter } from "vue-router";
+import { ElMessageBox, ElMessage } from "element-plus";
+import customcomponents from "@/views/IntegratedAlarm/alarmConfig/components/custom_components.vue";
+const pageTitle = "预警配置";
+const store = useStore();
+const token = { token: store.state.user.authToken };
+const url = process.env.VUE_APP_ALARM;
+const router = useRouter();
+const query = reactive({
+  pageNum: 1,
+  pageSize: 22,
+  name: "",
+  wpId: "",
+  rank: "",
+  modelId: "",
+  category: "windturbine",
+  enabled: "",
+  relatedparts: "",
+});
+const state = reactive({
+  tableData: [],
+  fetchListAll: [], //部件及预警类型
+  modelListAll: {}, //型号所有列表
+  isEnabled: [
+    {
+      id: false,
+      name: "否",
+    },
+    {
+      id: true,
+      name: "是",
+    },
+  ],
+  rankList: [
+    {
+      id: 1,
+      name: "低",
+    },
+    {
+      id: 2,
+      name: "中低",
+    },
+    {
+      id: 3,
+      name: "中",
+    },
+    {
+      id: 4,
+      name: "中高",
+    },
+    {
+      id: 5,
+      name: "高",
+    },
+  ],
+  visible: false,
+  form: {},
+  tableHeader: [
+    { title: "编码", code: "id" },
+    { title: "场站", code: "stationName", width: "100" },
+    { title: "机型", code: "modelId" },
+    { title: "规则名称", code: "name", width: "150" },
+    { title: "表达式", code: "expression", width: "150" },
+    { title: "描述", code: "description", width: "150" },
+    { title: "所属部件", code: "relatedPartsName" },
+    // { title: "级别", code: "rank" },
+    { title: "类型", code: "category" },
+    { title: "是否启用", code: "enable" },
+  ],
+  tableHeader1: [
+    { title: "编码", code: "id" },
+    { title: "升压站", code: "stationName" },
+    { title: "规则名称", code: "name" },
+    { title: "表达式", code: "expression" },
+    { title: "描述", code: "description" },
+    // { title: "级别", code: "rank" },
+    { title: "类型", code: "category" },
+    { title: "是否启用", code: "enable" },
+  ],
+});
+//型号列表
+const modelList = computed(() => {
+  if (query.wpId == "") {
+    return [];
+  } else {
+    return state.modelListAll[query.wpId];
+  }
+});
+//部件列表
+const fetchList = computed(() => {
+  if (query.wpId == "") {
+    return [];
+  } else {
+    if (query.wpId.includes("FDC")) {
+      return state.fetchListAll?.fjbj;
+    } else {
+      return state.fetchListAll?.gfbj;
+    }
+  }
+});
+
+// 场站列表/升压站列表
+const stationList = ref([]);
+let total = ref(0);
+onMounted(() => {
+  getWpArray();
+  getfetchRelatePart();
+  getequipmentmodel_list();
+  getData();
+});
+
+const dialogclose = () => {
+  state.visible = false;
+  state.form = {};
+  getData();
+};
+const getWpArray = async () => {
+  const { data } = await getWpList(query.category);
+  stationList.value = data;
+};
+const getData = async () => {
+  const { data } = await custombj_fetchTableData(query);
+  state.tableData = data.records;
+  total.value = data.total;
+};
+//所属部件
+const getfetchRelatePart = async () => {
+  const { data } = await fetchRelatePartAndAlarmType();
+  state.fetchListAll = data;
+  //   if (router && router.currentRoute.value.query.name) {
+  //     let queryName = router.currentRoute.value.query.name;
+  //     query.relatedparts = queryName;
+  //   }
+  //   getData();
+};
+// 机型
+const getequipmentmodel_list = async () => {
+  const { data } = await fetchModel();
+  state.modelListAll = data;
+};
+const handleEditClick = (row) => {
+  let obj = Object.assign({}, row);
+  state.form = obj;
+  state.visible = true;
+};
+const handleInsert = () => {
+  state.form = {
+    category: "windturbine",
+    enable: true,
+    stationId: "",
+    expression: "",
+  };
+  state.visible = true;
+};
+
+//changeStation
+const changeStation = async () => {
+  query.modelId = "";
+  query.relatedparts = "";
+};
+//categorychanged
+const categorychanged = async () => {
+  getWpArray();
+  this.clean();
+  getData();
+};
+
+// 分页导航
+const handlePageChange = (val) => {
+  query.pageNum = val;
+  getData();
+};
+
+// 批量导出
+const export2Excel = async () => {
+  let tableHeader = [];
+  let tableKey = [];
+  const { data } = await custombj_fetchTableData({
+    pageNum: 1,
+    pageSize: total.value,
+    ...query,
+  });
+  ElMessage.success(`导出成功!`);
+  if (query.category == "windturbine") {
+    tableHeader = state.tableHeader.map((item) => item.title);
+    tableKey = state.tableHeader.map((item) => item.code);
+  } else if (query.category == "booststation") {
+    tableHeader = state.tableHeader1.map((item) => item.title);
+    tableKey = state.tableHeader1.map((item) => item.code);
+  }
+  outExportExcel(
+    tableHeader,
+    tableKey,
+    data.records,
+    "自定义预警配置导出excel"
+  );
+};
+// 模板下载
+const outExe = () => {
+  custombj_importTemplate().then((response) => {
+    const link = document.createElement("a");
+    const blob = new Blob([response], {
+      type: "application/vnd.ms-excel",
+    });
+    link.style.display = "none";
+    link.href = URL.createObjectURL(blob);
+    link.download = "自定义报警模板.xlsx";
+    document.body.appendChild(link);
+    link.click();
+    document.body.removeChild(link);
+  });
+};
+// 批量导入
+const handleSuccess = (response) => {
+  if (response.code == "200") {
+    ElMessage.success("导入成功!");
+    getData();
+  } else {
+    ElMessage.error(response.msg);
+  }
+};
+// 批量导入中
+const handleProgress = (response) => {};
+// 批量导入失败
+const handleError = (response) => {
+  ElMessage.success("导入失败!");
+};
+// 清空字段
+const clean = () => {
+  query.modelId = "";
+  query.relatedparts = "";
+  query.wpId = "";
+  query.enabled = "";
+  query.rank = "";
+  query.name = "";
+  query.pageNum = 1;
+  state.tableData = [];
+  total.value = 0;
+};
+
+const rankConvert = (val) => {
+  if (val == 1) {
+    return "低";
+  } else if (val == 2) {
+    return "中低";
+  } else if (val == 3) {
+    return "中";
+  } else if (val == 4) {
+    return "中高";
+  } else if (val == 5) {
+    return "高";
+  }
+};
+// 类型
+const categoryConvert = (val) => {
+  if (val === "windturbine") {
+    return "风机";
+  } else if (val === "inverter") {
+    return "光伏";
+  }
+};
+// 状态
+const enabledConvert = (val) => {
+  if (val === false) {
+    return "停用";
+  } else if (val === true) {
+    return "启用";
+  }
+};
+</script>
+<style scoped lang="less">
+.custom-config {
+  height: 100%;
+  width: 100%;
+  padding: 0 20px;
+  padding-bottom: 10px;
+  .form-wrapper {
+    display: flex;
+    padding-top: 10px;
+    justify-content: space-between;
+    .search-wrapper::v-deep {
+      display: flex;
+      align-items: center;
+      font-size: 14px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #b3b3b3;
+      margin-bottom: 10px;
+      .search-item {
+        margin-right: 10px;
+        max-width: 190px;
+      }
+    }
+
+    .btns {
+      display: flex;
+      justify-content: flex-end;
+      margin-right: 10px;
+      //   position: absolute;
+      //   right: 0;
+      //   top: 53px;
+      .el-button + .el-button {
+        margin-left: 10px;
+      }
+    }
+
+    .buttons {
+      background-color: rgba(5, 187, 76, 0.2);
+      border: 1px solid #3b6c53;
+      color: #b3b3b3;
+      font-size: 14px;
+      &:hover {
+        background-color: rgba(5, 187, 76, 0.5);
+        color: #ffffff;
+      }
+    }
+  }
+}
+.table-wrapper {
+  height: calc(100% - 43px);
+  width: 100%;
+  .leftContent {
+    width: 242px;
+    height: 41px;
+    display: flex;
+    align-items: center;
+    background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+
+    span {
+      font-size: 16px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #05bb4c;
+      margin-left: 25px;
+    }
+  }
+  .el-table::v-deep {
+    .el-table__body-wrapper {
+      height: calc(100% - 45px) !important;
+    }
+  }
+  .pagination-wrapper ::v-deep {
+    text-align: right;
+    margin-top: 10px;
+  }
+}
+</style>

+ 638 - 0
src/views/IntegratedAlarm/alarmConfig/historyConfig/index.vue

@@ -0,0 +1,638 @@
+<template>
+  <div class="history-config">
+    <div class="form-wrapper">
+      <div class="btns" style="margin-bottom: 10px">
+        <el-button size="mini" round class="buttons" @click="handleInsert">
+          新增记录
+        </el-button>
+        <el-button size="mini" round class="buttons" @click="export2Excel">
+          批量导出</el-button
+        >
+        <el-button size="mini" round class="buttons" @click="outExe">
+          模板下载</el-button
+        >
+        <el-upload
+          style="display: inline; margin-left: 10px"
+          action="/sharding/warning2/import"
+          :headers="token"
+          :show-file-list="false"
+          :on-success="handleSuccess"
+          :on-progress="handleProgress"
+          :on-error="handleError"
+        >
+          <el-button
+            size="mini"
+            round
+            class="buttons"
+            @click="exportShow = true"
+          >
+            批量导入</el-button
+          >
+        </el-upload>
+      </div>
+      <div class="search-wrapper">
+        <el-select
+          class="search-item"
+          v-model="query.alarmType"
+          size="mini"
+          popper-class="select"
+          @change="categorychanged"
+        >
+          <el-option key="2" label="升压站" value="booststation"></el-option>
+          <el-option key="1" label="风机" value="windturbine"></el-option>
+          <el-option key="3" label="光伏" value="inverter"></el-option>
+        </el-select>
+        <el-select
+          class="search-item"
+          v-model="query.wpId"
+          clearable
+          size="mini"
+          :placeholder="
+            query.alarmType == 'booststation' ? '全部升压站' : '全部场站'
+          "
+          popper-class="select"
+          @change="changeStation"
+        >
+          <el-option
+            v-for="item in stationList"
+            :key="item.id"
+            :value="item.id"
+            :label="item.aname"
+          ></el-option>
+        </el-select>
+        <el-select
+          class="search-item"
+          v-if="query.alarmType != 'booststation'"
+          v-model="query.modelId"
+          clearable
+          size="mini"
+          placeholder="全部机型"
+          popper-class="select"
+        >
+          <el-option
+            v-for="item in modelList"
+            :key="item.id"
+            :value="item.id"
+            :label="item.aname"
+          ></el-option>
+        </el-select>
+        <el-input
+          class="search-item"
+          placeholder="请输入名称"
+          v-model="query.name"
+          size="mini"
+          clearable
+        ></el-input>
+        <el-button class="buttons" round size="mini" @click="getData"
+          >搜 索</el-button
+        >
+      </div>
+    </div>
+    <div class="table-wrapper">
+      <div class="leftContent">
+        <span>{{ pageTitle }}</span>
+      </div>
+      <el-table
+        :data="state.tableData"
+        stripe
+        height="calc(100% - 52px - 42px)"
+      >
+        <el-table-column
+          v-for="item in query.alarmType == 'windturbine' ||
+          query.alarmType == 'inverter'
+            ? state.tableHeader
+            : state.tableHeader1"
+          :key="item.code"
+          :label="item.title"
+          align="center"
+          :prop="item.code"
+          show-overflow-tooltip
+        >
+          <template #default="scope">
+            <span v-if="item.code == 'rank'">
+              {{ rankConvert(scope.row.rank) }}
+            </span>
+            <span v-else-if="item.code == 'alarmType'">
+              {{ alarmTypeConvert("alarmType", scope.row.alarmType) }}
+            </span>
+            <span v-else-if="item.code == 'deviceType'">
+              {{ alarmTypeConvert("deviceType", scope.row.deviceType) }}
+            </span>
+            <span v-else-if="item.code == 'enable'">
+              {{ enabledConvert(scope.row.enable) }}
+            </span>
+            <span v-else>
+              {{ scope.row[item.code] }}
+            </span>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" align="center" width="100">
+          <template #default="scope">
+            <el-button
+              type="text"
+              style="color: #05bb4c"
+              size="mini"
+              @click="handleEditClick(scope.row)"
+            >
+              编辑</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination">
+        <el-pagination
+          layout="total, sizes, prev, pager, next"
+          :current-page="query.pageNum"
+          :page-size="query.pageSize"
+          :page-sizes="[22, 50, 100, 200, 500]"
+          :total="total"
+          @size-change="
+            (value) => {
+              query.pageSize = value;
+              query.pageNum = 1;
+              getData();
+            }
+          "
+          @current-change="handlePageChange"
+        ></el-pagination>
+      </div>
+    </div>
+    <windturbinecomponents
+      :title="state.title"
+      @close="dialogclose"
+      :isVisible="state.visible"
+      :form="state.form"
+    />
+  </div>
+</template>
+<script setup>
+import {
+  windturbinebj_fetchTableData,
+  getStationinfo,
+  fetchRelatePartAndAlarmType,
+  fetchModel,
+  getWpList,
+} from "@/api/zhbj/index.js";
+import { outExportExcel } from "@/tools/excel/exportExcel.js"; //引入文件
+import {
+  ref,
+  onMounted,
+  provide,
+  computed,
+  reactive,
+  watch,
+  nextTick,
+} from "vue";
+import { useStore } from "vuex";
+import { ElMessageBox, ElMessage } from "element-plus";
+import windturbinecomponents from "@/views/IntegratedAlarm/alarmConfig/components/windturbine_components.vue";
+const pageTitle = "报警配置";
+const store = useStore();
+const token = { token: store.state.user.authToken };
+onMounted(() => {
+  getWpArray();
+  getequipmentmodel_list();
+  getData();
+});
+const query = reactive({
+  pageNum: 1,
+  pageSize: 22,
+  wpId: "",
+  modelId: "",
+  name: "",
+  alarmType: "windturbine",
+});
+const state = reactive({
+  title: "",
+  tableData: [],
+  modelList: [],
+  modelListAll: {}, //型号所有列表
+  visible: false,
+  form: {},
+  tableHeader: [
+    { title: "编码", code: "id" },
+    { title: "场站", code: "stationName" },
+    // { title: "设备", code: "deviceId", },
+    { title: "机型", code: "modelId" },
+    { title: "报警描述", code: "description" },
+    { title: "设备部件", code: "componentsName" },
+    { title: "特性", code: "characteristic" },
+    { title: "设备类型", code: "deviceType" },
+    { title: "报警类型", code: "alarmType" },
+    // { title: "级别", code: "rankName" },
+    { title: "是否启用", code: "enable" },
+    { title: "是否可复位", code: "resetTableName" },
+  ],
+  tableHeader1: [
+    { title: "编码", code: "id" },
+    { title: "升压站", code: "stationName" },
+    // { title: "规则名称", code: "name" },
+    // { title: "表达式", code: "expression" },
+
+    { title: "类型", code: "alarmType" },
+    // { title: "级别", code: "rank" },
+    { title: "是否启用", code: "enable" },
+    { title: "描述", code: "description" },
+  ],
+});
+// 机型
+const getequipmentmodel_list = async () => {
+  const { data } = await fetchModel();
+  state.modelListAll = data;
+};
+// 场站列表/升压站列表
+const stationList = ref([]);
+const categorychanged = async (value) => {
+  query.alarmType = value;
+  query.wpId = "";
+  query.modelId = "";
+  getWpArray();
+  getData();
+};
+const getWpArray = async () => {
+  const { data } = await getWpList(query.alarmType);
+  stationList.value = data;
+};
+//型号列表
+const modelList = computed(() => {
+  if (query.wpId == "") {
+    return [];
+  } else {
+    return state.modelListAll[query.wpId];
+  }
+});
+const isStation = computed(() => store.getters.isStation);
+
+let total = ref(0);
+const hisTable = ref();
+const getData = async () => {
+  const { data: res } = await windturbinebj_fetchTableData(query);
+  res.records.forEach((ele) => {
+    ele.rankName = getRankName(ele.rank);
+    ele.resetTableName = ele.resetTable ? "是" : "否";
+  });
+  state.tableData = res.records;
+  console.log(hisTable.value);
+  total.value = res.total;
+};
+
+const getRankName = (rank) => {
+  if (rank === 1) {
+    return "低级";
+  } else if (rank === 2) {
+    return "低中级";
+  } else if (rank === 3) {
+    return "中级";
+  } else if (rank === 4) {
+    return "中高级";
+  } else if (rank === 5) {
+    return "高极";
+  }
+};
+//changeStation
+const changeStation = async () => {
+  query.modelId = "";
+  getData();
+};
+const dialogclose = () => {
+  state.visible = false;
+  getData();
+};
+
+const handleInsert = () => {
+  state.visible = true;
+  state.title = "新增";
+};
+const handleEditClick = (row) => {
+  state.title = "编辑";
+  let obj = Object.assign({}, row);
+  obj && (obj.manufacturerCode = "");
+  state.form = obj;
+  state.visible = true;
+};
+
+// 分页导航
+const handlePageChange = (val) => {
+  query.pageNum = val;
+  getData();
+};
+
+const tableHeader = [
+  "id",
+  "报警级别(ZC_BJ:运转正常;YJ_BJ:运转状态超出标准范围;GZ_BJ:非正常停止运转;WH_BJ:停机维护;XD_BJ:限电/计划停机)",
+  "制造商(HFYG_CS:合肥阳光电源有限公司;AMS_CS:艾默生;NRJD_CS:国电南瑞吉电新能源;MGSK_CS:美国赛康;LHDL_CS:联合动力;SYHC_CS:沈阳华创)",
+  "名称",
+  "上一级节点",
+  "是否有子节点",
+  "序列号",
+  "类别 :正常停机,正常启动,快速停机,紧急停机",
+  "设备型号",
+  "全部默认为1",
+  "统一编码",
+  "是否展示(0:是;1:否)",
+  "报警分类(bj:变桨;bpq:变频器;clx:齿轮箱;fdj:发电机;hh:滑环;jcjr:机舱加热;lq:冷却;ph:偏航;rh:润滑;yy:液压;zz:主轴;other:其它;kz:控制;yl:叶轮;jc:机舱;xb:箱变;dw:电网;td:塔底;fsy:风速仪)",
+  "消缺规定时间",
+  "是否可以复位(0:是;1:否)",
+  "报警类型编号",
+  "故障编码",
+  "关联部件",
+];
+
+const tableKey = [
+  "id",
+  "levelId",
+  "manufacturerCode",
+  "chineseText",
+  "parentId",
+  "isleaf",
+  "sequenceNumber",
+  "characteristic",
+  "modelId",
+  "codeName",
+  "ednaValue",
+  "display",
+  "warningClassIfyId",
+  "standardTime",
+  "isreset",
+  "warningTypeId",
+  "faultCode",
+  "relatedParts",
+];
+// 批量导出
+const export2Excel = async () => {
+  let { name, wpId, modelId } = query;
+  const res = await windturbinebj_fetchTableData({
+    pageNum: 1,
+    pageSize: 999999,
+    name,
+    wpId,
+    modelId,
+  });
+
+  ElMessage.success(`导出成功!`);
+  outExportExcel(
+    tableHeader,
+    tableKey,
+    res.data.records,
+    "设备报警配置导出excel"
+  );
+};
+// 模板下载
+const outExe = () => {
+  const data = [];
+  ElMessage.success(`导出成功!`);
+  outExportExcel(tableHeader, tableKey, data, "设备报警模板");
+};
+// 批量导入
+const handleSuccess = (response, file, fileList) => {
+  ElMessage.success("导入成功!");
+  getData();
+};
+const handleProgress = (response, file, fileList) => {};
+const handleError = (response, file, fileList) => {
+  ElMessage.success("导入失败!");
+};
+//级别
+const rankConvert = (val) => {
+  if (val == 1) {
+    return "低级";
+  } else if (val == 2) {
+    return "低中级";
+  } else if (val == 3) {
+    return "中级";
+  } else if (val == 4) {
+    return "中高级";
+  } else if (val == 5) {
+    return "高级";
+  }
+};
+// 类型
+const alarmTypeConvert = (type, val) => {
+  if (type === "alarmType") {
+    if (val === "windturbine") {
+      return "风机";
+    } else if (val === "booststation") {
+      return "升压站";
+    } else if (val === "inverter") {
+      return "光伏";
+    } else if (val === "custom") {
+      return "自定义";
+    }
+  } else {
+    if (val === "windturbine") {
+      return "风机";
+    } else if (val === "booststation") {
+      return "升压站";
+    } else if (val === "inverter") {
+      return "光伏";
+    }
+  }
+};
+// 状态
+const enabledConvert = (val) => {
+  if (val === false) {
+    return "停用";
+  } else if (val === true) {
+    return "启用";
+  }
+};
+// 报警分类
+const warningClassIfyIdConvert = (val) => {
+  switch (val) {
+    case "bj":
+      return "变桨";
+
+    case "bpq":
+      return "变频器";
+
+    case "clx":
+      return "齿轮箱";
+
+    case "fdj":
+      return "发电机";
+
+    case "hh":
+      return "滑环";
+
+    case "jcjr":
+      return "机舱加热";
+
+    case "lq":
+      return "冷却";
+
+    case "ph":
+      return "偏航";
+
+    case "rh":
+      return "润滑";
+
+    case "yy":
+      return "液压";
+
+    case "zz":
+      return "主轴";
+
+    case "other":
+      return "其它";
+
+    case "kz":
+      return "控制";
+
+    case "yl":
+      return "叶轮";
+
+    case "jc":
+      return "机舱";
+
+    case "xb":
+      return "箱变";
+
+    case "dw":
+      return "电网";
+
+    case "td":
+      return "塔底";
+
+    case "fsy":
+      return "风速仪";
+  }
+};
+// 是否可以复位
+const isresetConvert = (val) => {
+  switch (val) {
+    case 0:
+      return "是";
+    case 1:
+      return "否";
+  }
+};
+
+// 统一编码
+const ednaValueConvert = (val) => {
+  if (val === 0) {
+    return "";
+  } else if (val < 100 && val > 0) {
+    return "DI0" + val;
+  } else if (val >= 100) {
+    return "DI" + val;
+  }
+};
+// 关联部件
+const relatePartConvert = (val) => {
+  switch (val) {
+    case "YP":
+      return "叶片";
+    case "LG":
+      return "轮毂";
+    case "TZ":
+      return "塔架";
+    case "JC":
+      return "机舱";
+    case "KZXT":
+      return "控制系统";
+    case "BJXT":
+      return "变桨系统";
+    case "PHXT":
+      return "偏航系统";
+    case "CLX":
+      return "齿轮箱";
+    case "FDJ":
+      return "发电机";
+    case "BPQ":
+      return "变频器";
+    case "YYXT":
+      return "液压系统";
+    case "FZXT":
+      return "辅助系统";
+    case "CFXT":
+      return "测风系统";
+    case "DWXT":
+      return "电网系统";
+    case "TDG":
+      return "塔底柜";
+    case "CDL":
+      return "传动链";
+    case "QT":
+      return "其他";
+    default:
+  }
+};
+</script>
+<style scoped lang="less">
+.history-config {
+  height: 100%;
+  width: 100%;
+  padding: 0 20px;
+  padding-bottom: 10px;
+  .form-wrapper {
+    display: flex;
+    padding-top: 10px;
+    justify-content: space-between;
+    .search-wrapper::v-deep {
+      display: flex;
+      align-items: center;
+      font-size: 14px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #b3b3b3;
+      margin-bottom: 10px;
+      .search-item {
+        margin-right: 10px;
+        max-width: 190px;
+      }
+    }
+
+    .btns {
+      display: flex;
+      justify-content: flex-end;
+      margin-right: 10px;
+      //   position: absolute;
+      //   right: 0;
+      //   top: 53px;
+    }
+
+    .buttons {
+      background-color: rgba(5, 187, 76, 0.2);
+      border: 1px solid #3b6c53;
+      color: #b3b3b3;
+      font-size: 14px;
+      &:hover {
+        background-color: rgba(5, 187, 76, 0.5);
+        color: #ffffff;
+      }
+    }
+  }
+}
+.table-wrapper {
+  height: calc(100% - 43px);
+  width: 100%;
+  .leftContent {
+    width: 242px;
+    height: 41px;
+    display: flex;
+    align-items: center;
+    background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+
+    span {
+      font-size: 16px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #05bb4c;
+      margin-left: 25px;
+    }
+  }
+  .el-table::v-deep {
+    .el-table__body-wrapper {
+      height: calc(100% - 45px) !important;
+    }
+  }
+  .pagination-wrapper ::v-deep {
+    text-align: right;
+    margin-top: 10px;
+  }
+}
+
+.el-button + .el-button {
+  margin-left: 10px;
+}
+</style>

+ 11 - 0
src/views/IntegratedAlarm/alarmConfig/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <router-view />
+</template>
+
+<script>
+export default {
+  name: "alarmConfig", //报警配置
+};
+</script>
+
+<style scoped lang="less"></style>

+ 241 - 0
src/views/IntegratedAlarm/alarmConfig/logs/index.vue

@@ -0,0 +1,241 @@
+<template>
+  <div class="logs">
+    <div class="form-wrapper">
+      <div class="search-wrapper">
+        <el-select
+          v-model="value"
+          style="margin-right: 10px"
+          clearable
+          size="mini"
+          placeholder="类型"
+        >
+          <el-option
+            v-for="item in options"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+            :disabled="item.disabled"
+          />
+        </el-select>
+        <el-input
+          v-model="input"
+          clearable
+          size="mini"
+          placeholder="名称检索"
+          style="width: 200px; margin-right: 10px"
+        />
+      </div>
+      <div class="btns">
+        <el-button round size="mini" class="buttons" @click="search"
+          >搜 索</el-button
+        >
+      </div>
+    </div>
+    <div class="table-wrapper">
+      <div class="leftContent">
+        <span>{{ pageTitle }}</span>
+      </div>
+      <el-table
+        :data="tableData"
+        height="calc(100% - 57px - 40px)"
+        stripe
+        style="width: 100%"
+      >
+        <el-table-column
+          prop="ruleName"
+          label="规则名称"
+          width="300"
+          align="center"
+        />
+        <el-table-column
+          prop="ruleType"
+          label="规则类型"
+          width="120"
+          align="center"
+        />
+        <el-table-column
+          prop="stationName"
+          label="场站名称"
+          width="140"
+          align="center"
+        />
+        <el-table-column
+          prop="modelId"
+          label="风机型号"
+          width="200"
+          align="center"
+        />
+        <el-table-column label="更改内容" show-overflow-tooltip>
+          <template #default="scope">
+            <div v-for="item in scope.row.infoList" :key="item">
+              {{ item.fieldName }} :更改前: {{ item.beforValue }}
+              <el-divider direction="vertical" /> 更改后:
+              {{ item.afterValue }}
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="updateTimeName"
+          label="操作时间"
+          width="150"
+          align="center"
+        />
+        <el-table-column
+          prop="updateType"
+          label="操作类型"
+          width="100"
+          align="center"
+        />
+        <el-table-column
+          prop="updateUser"
+          label="操作人"
+          width="100"
+          align="center"
+        />
+      </el-table>
+      <div class="pagination">
+        <el-pagination
+          layout="total,sizes, prev, pager, next"
+          hide-on-single-page
+          :current-page="query.page"
+          :page-size="query.limit"
+          :page-sizes="[22, 50, 100, 200, 500]"
+          :total="query.pageTotal"
+          @current-change="handlePageChange"
+          @size-change="
+            (value) => {
+              query.limit = value;
+              query.page = 1;
+              logsList();
+            }
+          "
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { ref, onMounted, reactive, nextTick, watch, computed } from "vue";
+import { ElMessage, ElMessageBox } from "element-plus";
+import { fetchruleventLogs } from "@/api/zhbj/index.js";
+import dayjs from "dayjs";
+onMounted(() => {
+  logsList();
+});
+const pageTitle = "规则修改日志";
+const query = reactive({
+  page: 1,
+  limit: 22,
+  pageTotal: null,
+});
+let tableData = ref(null);
+let input = ref("");
+let value = ref("");
+let options = ref([
+  {
+    label: "自定义报警",
+    value: "自定义报警",
+  },
+  {
+    label: "风机报警",
+    value: "风机报警",
+  },
+  {
+    label: "升压站报警",
+    value: "升压站报警",
+  },
+]);
+//
+const search = () => {
+  logsList();
+};
+const logsList = async () => {
+  const { data } = await fetchruleventLogs(
+    query.page,
+    query.limit,
+    input.value,
+    value.value
+  );
+  data.records.forEach((ele) => {
+    ele.updateTimeName = dayjs(ele.updateTime).format("YYYY-MM-DD:HH:mm:ss");
+  });
+  query.pageTotal = data.total;
+  tableData.value = data.records;
+};
+// 分页导航
+const handlePageChange = (val) => {
+  query.page = val;
+  logsList();
+};
+</script>
+<style lang="less" scoped>
+.logs {
+  height: 100%;
+  width: 100%;
+  padding: 0 20px;
+  padding-bottom: 10px;
+  .form-wrapper {
+    display: flex;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    .search-wrapper::v-deep {
+      display: flex;
+      align-items: center;
+      font-size: 14px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #b3b3b3;
+
+      .search-item {
+        margin-right: 10px;
+        max-width: 190px;
+      }
+    }
+
+    .btns {
+      display: flex;
+      align-items: center;
+    }
+
+    .buttons {
+      background-color: rgba(5, 187, 76, 0.2);
+      border: 1px solid #3b6c53;
+      color: #b3b3b3;
+      font-size: 14px;
+      &:hover {
+        background-color: rgba(5, 187, 76, 0.5);
+        color: #ffffff;
+      }
+    }
+  }
+}
+.table-wrapper {
+  height: calc(100% - 43px);
+  width: 100%;
+  .leftContent {
+    width: 242px;
+    height: 41px;
+    display: flex;
+    align-items: center;
+    background: url("~@/assets/imgs/title_left_bg1.png") no-repeat;
+
+    span {
+      font-size: 16px;
+      font-family: Microsoft YaHei;
+      font-weight: 400;
+      color: #05bb4c;
+      margin-left: 25px;
+    }
+  }
+  .el-table::v-deep {
+    .el-table__body-wrapper {
+      height: calc(100% - 45px) !important;
+    }
+  }
+  .pagination-wrapper ::v-deep {
+    text-align: right;
+    margin-top: 10px;
+  }
+}
+</style>

+ 391 - 0
src/views/IntegratedAlarm/deviceConfig/components/custom.vue

@@ -0,0 +1,391 @@
+<template>
+  <el-row type="flex" justify="space-between">
+    <div class="handle-box" style="margin-bottom: 10px">
+      <el-button class="buttons" size="mini" round @click="handleInsert">
+        新增记录
+      </el-button>
+      <el-button class="buttons" size="mini" round @click="export2Excel">
+        批量导出</el-button
+      >
+      <el-button class="buttons" size="mini" round @click="outExe">
+        模板下载</el-button
+      >
+      <el-upload
+        style="display: inline; margin-left: 10px"
+        action="/sharding/alertrule2/import"
+        :headers="token"
+        :show-file-list="false"
+        :on-success="handleSuccess"
+        :on-progress="handleProgress"
+        :on-error="handleError"
+      >
+        <el-button class="buttons" size="mini" round @click="exportShow = true">
+          批量导入</el-button
+        >
+      </el-upload>
+    </div>
+    <div style="display: flex; flex-direction: row; margin-bottom: 10px">
+      <el-select
+        v-model="query.category"
+        size="mini"
+        style="width: 150px"
+        popper-class="select"
+      >
+        <el-option
+          key="windturbine"
+          label="风机"
+          value="windturbine"
+        ></el-option>
+        <el-option key="inverter" label="逆变器" value="inverter"></el-option>
+        <!-- <el-option
+          key="booststation"
+          label="升压站"
+          value="booststation"
+        ></el-option> -->
+      </el-select>
+      <el-select
+        v-model="query.station"
+        clearable
+        filterable
+        size="mini"
+        style="width: 150px"
+        placeholder="全部场站"
+        popper-class="select"
+        @change="changeStation()"
+      >
+        <el-option
+          v-for="item in stationList"
+          :key="item.id"
+          :value="item.id"
+          :label="item.name"
+        ></el-option>
+      </el-select>
+      <el-select
+        v-model="query.modelId"
+        clearable
+        filterable
+        size="mini"
+        style="width: 150px"
+        placeholder="全部机型"
+        popper-class="select"
+      >
+        <el-option
+          v-for="item in state.modelList"
+          :key="item"
+          :value="item"
+          :label="item"
+        ></el-option>
+      </el-select>
+      <el-select
+        v-model="query.rank"
+        clearable
+        filterable
+        size="mini"
+        style="width: 150px"
+        placeholder="全部级别"
+        popper-class="select"
+      >
+        <el-option
+          v-for="item in state.rankList"
+          :key="item.id"
+          :value="item.id"
+          :label="item.name"
+        ></el-option>
+      </el-select>
+      <el-input
+        placeholder="请输入名称"
+        v-model="query.name"
+        style="width: 150px; margin-right: 10px"
+        size="mini"
+        clearable
+      ></el-input>
+      <el-button
+        icon="el-icon-search"
+        class="buttons"
+        round
+        size="mini"
+        @click="getData"
+        >搜索</el-button
+      >
+    </div>
+  </el-row>
+  <div class="custom-table">
+    <el-table
+      :data="state.tableData"
+      stripe
+      height="calc(100% - 45px)"
+      style="width: 100%"
+    >
+      <el-table-column label="编码" align="center" prop="id" width="50" />
+      <el-table-column
+        label="场站"
+        align="center"
+        prop="stationName"
+        min-width="50"
+      />
+      <el-table-column
+        label="机型"
+        align="center"
+        prop="modelId"
+        min-width="50"
+      />
+      <el-table-column label="名称" align="left" prop="name" min-width="50" />
+      <el-table-column label="表达式" align="left" prop="expression" />
+      <el-table-column label="级别" align="center" prop="rank" min-width="20">
+        <template #default="scope">{{ rankConvert(scope.row.rank) }}</template>
+      </el-table-column>
+      <el-table-column
+        label="类型"
+        align="center"
+        prop="category"
+        min-width="20"
+      >
+        <template #default="scope">{{
+          categoryConvert(scope.row.category)
+        }}</template>
+      </el-table-column>
+      <el-table-column label="描述" align="left" prop="description" />
+      <el-table-column
+        label="是否启用"
+        align="center"
+        prop="enabled"
+        width="80"
+      >
+        <template #default="scope">
+          {{ scope.row.enabled ? "启用" : "未启用" }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="所属部件"
+        align="center"
+        prop="relatedPartsName"
+        min-width="30"
+      />
+      <el-table-column label="操作" align="center" width="80">
+        <template #default="scope">
+          <el-button
+            style="color: #05bb4c"
+            type="text"
+            icon="el-icon-lx-edit"
+            :disabled="scope.row.range == 1"
+            @click="handleEditClick(scope.row)"
+            >编辑</el-button
+          >
+          <!-- <el-button type="primary" plain round size="mini" icon="el-icon-search" @click="handleViewClick(scope.$index, scope.row)">查看</el-button> -->
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        layout="total, sizes, prev, pager, next"
+        :page-sizes="[19, 50, 100, 200, 500]"
+        @size-change="
+          (value) => {
+            query.pageSize = value;
+            query.pageNum = 1;
+            getData();
+          }
+        "
+        :current-page="query.pageNum"
+        :page-size="query.pageSize"
+        :total="total"
+        @current-change="handlePageChange"
+      ></el-pagination>
+    </div>
+  </div>
+  <customcomponents
+    @close="dialogclose"
+    :isVisible="state.visible"
+    :form="state.form"
+  />
+</template>
+<script setup>
+import { custombj_fetchTableData, getWtModel } from "@/api/zhbj/index.js";
+import { outExportExcel } from "@/tools/excel/exportExcel.js"; //引入文件
+import { ref, onMounted, provide, computed, reactive, watch } from "vue";
+import { useStore } from "vuex";
+import { ElMessageBox, ElMessage } from "element-plus";
+import customcomponents from "./custom_components.vue";
+const token = { token: sessionStorage.getItem("token") };
+const store = useStore();
+const stationList = computed(() => store.state.stationList);
+const isStation = computed(() => store.getters.isStation);
+const state = reactive({
+  tableData: [],
+  modelList: [],
+  rankList: [
+    {
+      id: 1,
+      name: "低级",
+    },
+    {
+      id: 2,
+      name: "低中",
+    },
+    {
+      id: 3,
+      name: "中级",
+    },
+    {
+      id: 4,
+      name: "中高级",
+    },
+    {
+      id: 5,
+      name: "高级",
+    },
+  ],
+  visible: false,
+  form: {},
+});
+const query = reactive({
+  pageNum: 1,
+  pageSize: 19,
+  name: "",
+  station: "",
+  rank: "",
+  modelId: "",
+  category: "windturbine",
+});
+let total = ref(0);
+onMounted(() => {
+  getData();
+  getequipmentmodel_list();
+});
+const dialogclose = () => {
+  state.visible = false;
+  getData();
+};
+const getData = async () => {
+  const { data } = await custombj_fetchTableData(query);
+  state.tableData = data.records;
+  total.value = data.total;
+};
+const handleEditClick = (row) => {
+  let obj = Object.assign({}, row);
+  state.form = obj;
+  state.visible = true;
+};
+const handleInsert = () => {
+  state.visible = true;
+};
+
+//changeStation
+const changeStation = async () => {
+  query.modelId = "";
+  await getequipmentmodel_list();
+};
+// 机型
+const getequipmentmodel_list = async () => {
+  const { data } = await getWtModel(query.station);
+  state.modelList = data;
+};
+// 分页导航
+const handlePageChange = (val) => {
+  query.pagenum = val;
+  getData();
+};
+const tableHeader = [
+  "id",
+  "规则名称",
+  "报警类别(1:风气;2:升压站)",
+  "报警级别(1:低级;2:低中级;3:中级;4:中高级;5:高级)",
+  "是否启用(0:停用;1:启用)",
+  "风场",
+  "风机类型",
+  "所属部件",
+  "表达式",
+  "规则描述",
+];
+
+const tableKey = [
+  "id",
+  "name",
+  "category",
+  "rank",
+  "enabled",
+  "station",
+  "modelId",
+  "relatedParts",
+  "expressionShow",
+  "descriptionShow",
+];
+// 批量导出
+const export2Excel = async () => {
+  let { name, station, rank, modelId, category } = query;
+  const res = await custombj_fetchTableData({
+    pageNum: 1,
+    pageSize: 999999,
+    name,
+    station,
+    rank,
+    modelId,
+    category,
+  });
+
+  ElMessage.success(`导出成功!`);
+  outExportExcel(tableHeader, tableKey, res.records, "自定义预警配置导出excel");
+};
+// 模板下载
+const outExe = () => {
+  const data = [];
+  ElMessage.success(`导出成功!`);
+  outExportExcel(tableHeader, tableKey, data, "自定义报警模板");
+};
+// 批量导入
+const handleSuccess = (response, file, fileList) => {
+  ElMessage.success("导入成功!");
+  getData();
+};
+const handleProgress = (response, file, fileList) => {};
+const handleError = (response, file, fileList) => {
+  ElMessage.success("导入失败!");
+};
+const rankConvert = (val) => {
+  if (val === 1) {
+    return "低级";
+  } else if (val === 2) {
+    return "低中级";
+  } else if (val === 3) {
+    return "中级";
+  } else if (val === 4) {
+    return "中高级";
+  } else if (val === 5) {
+    return "高级";
+  }
+};
+// 类型
+const categoryConvert = (val) => {
+  if (val === "windturbine") {
+    return "风机";
+  } else if (val === "inverter") {
+    return "逆变器";
+  } else if (val === "booststation") {
+    return "升压站";
+  }
+};
+</script>
+<style scoped lang="less">
+.custom-table {
+  height: calc(100% - 40px);
+}
+.buttons {
+  background-color: rgba(5, 187, 76, 0.2);
+  border: 1px solid #3b6c53;
+  color: #b3b3b3;
+  font-size: 14px;
+  &:hover {
+    background-color: rgba(5, 187, 76, 0.5);
+    color: #ffffff;
+  }
+}
+.el-select ::v-deep {
+  margin-right: 10px;
+}
+.el-button + .el-button {
+  margin-left: 10px;
+}
+.pagination {
+  padding-top: 10px;
+}
+</style>

+ 754 - 0
src/views/IntegratedAlarm/deviceConfig/components/custom_components.vue

@@ -0,0 +1,754 @@
+<template>
+  <el-dialog v-model="isShow" width="1100px" :before-close="handleClose">
+    <el-form
+      ref="ruleFormRef"
+      :model="form"
+      :rules="rules"
+      label-position="top"
+      label-width="200px"
+      class="custom-comp-form"
+    >
+      <el-row
+        type="flex"
+        justify="space-between"
+        align="middle"
+        :gutter="10"
+        class="first-row"
+      >
+        <el-col :span="15" class="first-row-first-col">
+          <el-form-item prop="name">
+            <el-tag size="small">规则名称</el-tag>
+            <el-input v-model="form.name" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="9" class="first-row-second-col">
+          <el-form-item prop="category">
+            <el-tag size="small">报警类别</el-tag>
+            <el-select v-model="form.category" class="select-mini">
+              <el-option
+                key="windturbine"
+                label="风机"
+                value="windturbine"
+              ></el-option>
+              <el-option
+                key="inverter"
+                label="逆变器"
+                value="inverter"
+              ></el-option>
+              <el-option
+                key="booststation"
+                label="升压站"
+                value="booststation"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="rank">
+            <el-tag size="small">报警级别</el-tag>
+            <el-select v-model="form.rank" class="select-mini">
+              <el-option key="1" label="低级" value="1" />
+              <el-option key="2" label="低中级" value="2" />
+              <el-option key="3" label="中级" value="3" />
+              <el-option key="4" label="中高级" value="4" />
+              <el-option key="5" label="高级" value="5" />
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="enabled">
+            <el-tag size="small">是否启用</el-tag>
+            <el-switch
+              v-model="form.enabled"
+              :active-value="true"
+              :inactive-value="false"
+              active-color="#13ce66"
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="10" class="second-row">
+        <el-col :span="6">
+          <el-form-item prop="stationId">
+            <el-tag size="small">风场</el-tag>
+            <el-select
+              v-model="form.stationId"
+              style="width: 100%"
+              @change="stationChange"
+            >
+              <el-option
+                v-for="item in stationList"
+                :key="item.id"
+                :value="item.id"
+                :label="item.name"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="modelId">
+            <el-tag size="small">风机型号</el-tag>
+            <el-select
+              v-model="form.modelId"
+              style="width: 100%"
+              @change="modelIdChange"
+            >
+              <el-option
+                v-for="item in state.modelList"
+                :key="item"
+                :value="item"
+                :label="item"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="relatedParts">
+            <el-tag size="small">所属部件</el-tag>
+            <el-select v-model="form.relatedParts" style="width: 100%">
+              <el-option
+                v-for="i in state.relatePartList"
+                :key="i.partCode"
+                :value="i.partCode"
+                :label="i.name"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item prop="fault">
+            <el-tag size="small">预警类型</el-tag>
+            <el-select v-model="form.project" style="width: 100%">
+              <el-option
+                v-for="i in faultList"
+                :key="i.value"
+                :value="i.value"
+                :label="i.name"
+              />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="9">
+          <el-form-item prop="expression">
+            <el-tag size="small">表达式</el-tag>
+            <el-input
+              type="textarea"
+              rows="14"
+              v-model="form.expression"
+              :value="form.expression"
+              id="expressionInput"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="9">
+          <el-tabs type="border-card">
+            <el-tab-pane label="AI测点">
+              <el-input v-model="state.AIPointSearch"> </el-input>
+              <el-table
+                size="mini"
+                fit
+                :show-header="false"
+                stripe
+                height="204"
+                :data="filterAIList"
+                @row-dblclick="rowDbclick"
+              >
+                <el-table-column prop="uniformCode" />
+                <el-table-column prop="name" />
+              </el-table>
+            </el-tab-pane>
+            <el-tab-pane label="DI测点">
+              <el-input v-model="state.DIPointSearch"> </el-input>
+              <el-table
+                size="mini"
+                fit
+                :show-header="false"
+                stripe
+                height="204"
+                :data="filterDIList"
+                @row-dblclick="rowDbclick"
+              >
+                <el-table-column prop="uniformCode" />
+                <el-table-column prop="name" />
+              </el-table>
+            </el-tab-pane>
+            <el-tab-pane label="函数">
+              <el-table
+                size="mini"
+                fit
+                :show-header="false"
+                stripe
+                height="240"
+                :data="func"
+                @row-dblclick="tabFuncRowClickHandle"
+              >
+                <el-table-column min-width="60%">
+                  <template #default="scope">
+                    <el-popover trigger="hover" placement="bottom">
+                      <p>描述:{{ scope.row.describe }}</p>
+                      <p>参数:{{ scope.row.param }}</p>
+                      <template #reference>
+                        <span size="medium" transition="fade-in-linear">{{
+                          scope.row.lab
+                        }}</span>
+                      </template>
+                    </el-popover>
+                  </template>
+                </el-table-column>
+                <el-table-column min-width="40%">
+                  <template #default="scope">
+                    <el-popover trigger="hover" placement="bottom">
+                      <p>描述:{{ scope.row.describe }}</p>
+                      <p>参数:{{ scope.row.param }}</p>
+                      <template #reference>
+                        <span size="medium" transition="fade-in-linear">{{
+                          scope.row.name
+                        }}</span>
+                      </template>
+                    </el-popover>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </el-tab-pane>
+            <el-tab-pane label="运算符">
+              <div class="operator">
+                <el-button
+                  v-for="item in operator"
+                  :key="item"
+                  size="mini"
+                  class="buttons"
+                  @click="elInputSplit(item)"
+                >
+                  {{ item }}
+                </el-button>
+              </div>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-row>
+      <el-row :gutter="24">
+        <el-col :span="24">
+          <el-form-item prop="descriptionShow">
+            <el-tag size="small">规则描述</el-tag>
+            <el-input type="textarea" rows="4" v-model="form.descriptionShow" />
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <template #footer>
+      <span class="footerButton">
+        <el-button round size="mini" @click="closeDialog">取 消</el-button>
+        <el-button round size="mini" @click="submitForm(ruleFormRef)"
+          >确 定</el-button
+        >
+      </span>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { ref, onMounted, reactive, computed, watch, nextTick } from "vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import {
+  //   fetchAIPointList,
+  //   fetchDIPointList,
+  //   fetchRelatePart,
+  custombj_postSave,
+  fetch_electrical_point_ai,
+  fetch_electrical_point_di,
+  getWtModel,
+  fetchRelatePartAndAlarmType,
+} from "@/api/zhbj/index.js";
+import { useStore } from "vuex";
+const store = useStore();
+const stationList = computed(() => store.state.stationList);
+onMounted(() => {
+  getfetchRelatePart();
+});
+watch(
+  () => props.isVisible,
+  (val, old) => {
+    isShow.value = val;
+  },
+  {
+    deep: true,
+  }
+);
+watch(
+  () => props.form?.id,
+  (val, old) => {
+    if (val != "") {
+      nextTick(async () => {
+        getfetchAIPointList();
+        getfetchDIPointList();
+      });
+    }
+  },
+  {
+    deep: true,
+  }
+);
+watch(
+  () => props.form,
+  (val, old) => {
+    nextTick(() => {
+      form.value = val;
+    });
+  },
+  {
+    deep: true,
+  }
+);
+const isShow = ref(false);
+const form = ref({
+  id: "",
+  name: "",
+  descriptionShow: "",
+  expression: "",
+  tag: "",
+  rank: "",
+  enabled: "1", // 1可用-0禁用
+  modelId: "",
+  ednaValue: "",
+  category: "",
+  range: 0,
+  station: "",
+  windturbine: "",
+  line: "",
+  project: "",
+  electrical: "",
+  taskstart: "",
+  relatedParts: "",
+  userName: "",
+});
+const emits = defineEmits(["close"]);
+const props = defineProps({
+  isVisible: {
+    type: Boolean,
+    defaule: false,
+  },
+  form: {
+    type: Object,
+  },
+});
+const toEmits = () => {
+  emits("close"); // 向父组件传递数据
+};
+const state = reactive({
+  relatePartList: [],
+  modelList: [],
+  AIPointList: [],
+  DIPointList: [],
+  AIPointSearch: "",
+  DIPointSearch: "",
+});
+const operator = [
+  "+",
+  "-",
+  "*",
+  "/",
+  "(",
+  ")",
+  ">",
+  ">=",
+  "<",
+  "<=",
+  "==",
+  "!=",
+  "&&",
+  "||",
+  "!",
+  "%",
+  "true",
+  "false",
+  ".",
+];
+const func = [
+  {
+    lab: "MR",
+    name: "移动极差",
+    param: "测点名,时间(秒)",
+    describe: "是指两个或多个连续样本值中最大值与最小值之差",
+    scene: "测点的移动极差超限报警",
+  },
+  {
+    lab: "MAR",
+    name: "均值极差",
+    param: "测点名,时间(秒)",
+    describe: "",
+    scene: "测点的均值极差计算",
+  },
+  {
+    lab: "RiseExceed",
+    name: "上升趋势",
+    param: "测点名,时间(秒),阈值",
+    describe: "取测点在给定的时间范围内数据上升的量是否超过阈值",
+    scene: "测点值的上升速度过快等",
+  },
+  {
+    lab: "Sustain",
+    name: "持续时间",
+    param: "表达式,时间(秒)",
+    describe:
+      "判定状态(表达式成立)持续的时间是否超过给定的时间判断状态持续的时间",
+    scene: "",
+  },
+  {
+    lab: "LastUpdateTime",
+    name: "最近数据时间",
+    param: "测点名",
+    describe: "",
+    scene: "判定离线,状态持续时间等",
+  },
+  {
+    lab: "abs",
+    name: "取绝对值",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "acos",
+    name: "反余弦",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "asin",
+    name: "反正弦",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "atan",
+    name: "反正切",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "atan2",
+    name: "xy坐标转为极坐标",
+    param: "x,y",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "ceiling",
+    name: "向上取整",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "cos",
+    name: "余弦",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "cosh",
+    name: "双曲线余弦",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "exp",
+    name: "欧拉数 e 的 double 次幂的值",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "floor",
+    name: "向下取整",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "log",
+    name: "自然对数",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "log10",
+    name: "底数为 10 的对数",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "max",
+    name: "比较最大值",
+    param: "double a, double b",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "min",
+    name: "比较最小值",
+    param: "double a, double b",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "pow",
+    name: "返回第一个参数的第二个参数次幂的值",
+    param: "double a, double b",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "round",
+    name: "返回最接近参数的 long,或int",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "sign",
+    name: "负数返回-1.0,整数返回1.0,0返回0.0",
+    param: "float f/double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "sin",
+    name: "三角正弦值",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "sinh",
+    name: "双曲线正弦",
+    param: "double x",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "sqrt",
+    name: "正平方根",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "tan",
+    name: "正切",
+    param: "double a",
+    describe: "",
+    scene: "",
+  },
+  {
+    lab: "tanh",
+    name: "双曲线正切",
+    param: "double x",
+    describe: "",
+    scene: "",
+  },
+  { lab: "PI", name: "圆周率", param: "", describe: "", scene: "" },
+  { lab: "E", name: "自然对数", param: "", describe: "", scene: "" },
+];
+const faultList = [
+  {
+    value: "sensors",
+    name: "传感器异常",
+  },
+  {
+    value: "parts",
+    name: "零部件隐患",
+  },
+  {
+    value: "control",
+    name: "控制参数优化",
+  },
+  {
+    value: "performance",
+    name: "性能下降",
+  },
+];
+const ruleFormRef = ref(null);
+const rules = reactive({
+  name: [{ required: true, message: "请输入规则名称", trigger: "blur" }],
+  category: [{ required: true, message: "请选择报警类别", trigger: "change" }],
+  rank: [{ required: true, message: "请选择报警级别", trigger: "change" }],
+  stationId: [{ required: true, message: "请选择风场", trigger: "change" }],
+  expression: [
+    { required: true, message: "表达式不能为空", trigger: "change" },
+  ],
+});
+
+//stationChange
+const stationChange = async () => {
+  form.value.modelId = "";
+  getequipmentmodel_list();
+};
+//modelIdChange
+const modelIdChange = async () => {
+  getfetchAIPointList();
+  getfetchDIPointList();
+};
+//机型
+const getequipmentmodel_list = async () => {
+  const { data } = await getWtModel(form.value.stationId);
+  state.modelList = data;
+};
+//所属部件
+const getfetchRelatePart = async () => {
+  const res = await fetchRelatePartAndAlarmType();
+  state.relatePartList = res;
+};
+// 查询风场AI、DI测点
+const getfetchAIPointList = async () => {
+  //   const res = await fetchAIPointList(form.value.station, form.value.modelId);
+  //   state.AIPointList = res.sort(function (a, b) {
+  //     return a.uniformCode - b.uniformCode;
+  //   });
+};
+const filterAIList = computed(() =>
+  state.AIPointList?.filter(
+    (data) =>
+      !state.AIPointSearch ||
+      data.uniformCode.includes(state.AIPointSearch) ||
+      data.name.includes(state.AIPointSearch)
+  )
+);
+const filterDIList = computed(() =>
+  state.DIPointList?.filter(
+    (data) =>
+      !state.DIPointSearch ||
+      data.uniformCode.includes(state.DIPointSearch) ||
+      data.name.includes(state.DIPointSearch)
+  )
+);
+const getfetchDIPointList = async () => {
+  const res = await fetchDIPointList(form.value.station, form.value.modelId);
+  state.DIPointList = res.sort(function (a, b) {
+    return a.uniformCode - b.uniformCode;
+  });
+};
+// 函数点击事件
+const tabFuncRowClickHandle = (row) => {
+  let elInput = document.getElementById("expressionInput");
+  let startPos = elInput.selectionStart; //第0个字符到选中的字符
+  let endPos = elInput.selectionEnd; //选中字符到末尾字符
+  if (startPos === undefined || endPos === undefined) return;
+  let txt = elInput.value;
+  let func;
+  if (
+    row.lab === "MR" ||
+    row.lab === "MAR" ||
+    row.lab === "RiseExceed" ||
+    row.lab === "Sustain" ||
+    row.lab === "LastUpdateTime"
+  ) {
+    func = row.lab + "()";
+  } else if (row.lab === "PI" || row.lab === "E") {
+    func = "Math." + row.lab;
+  } else {
+    func = "Math." + row.lab + "()";
+  }
+  // 将插值添加到选中光标位置
+  let result = txt.substring(0, startPos) + func + txt.substring(endPos);
+  elInput.value = result;
+  // 重新定义光标位置
+  elInput.focus();
+  if (row.lab === "PI" || row.lab === "E") {
+    elInput.selectionStart = startPos + func.length;
+    elInput.selectionEnd = startPos + func.length;
+  } else {
+    elInput.selectionStart = startPos + func.length - 1;
+    elInput.selectionEnd = startPos + func.length - 1;
+  }
+  form.value.expression = result; // 赋值给表单中的的字段
+};
+//rowDbclick
+const rowDbclick = (row) => {
+  elInputSplit(row.uniformCode);
+};
+// 表达式字符串拼接
+const elInputSplit = async (val) => {
+  let elInput = document.getElementById("expressionInput");
+  let startPos = elInput.selectionStart;
+  let endPos = elInput.selectionEnd;
+  if (startPos === undefined || endPos === undefined) return;
+  let txt = elInput.value;
+  let txtSplit = val;
+  let result = txt.substring(0, startPos) + txtSplit + txt.substring(endPos);
+  elInput.value = result;
+  elInput.focus();
+  elInput.selectionStart = startPos + txtSplit.length;
+  elInput.selectionEnd = startPos + txtSplit.length;
+};
+//保存
+const save = async () => {
+  const res = await custombj_postSave(form.value);
+  console.warn(res);
+  ElMessage.success(`保存成功!`);
+  closeDialog();
+};
+//提交
+const submitForm = async (formEl) => {
+  if (!formEl) return;
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      save();
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+};
+//reset
+const resetForm = (formEl) => {
+  formEl.resetFields();
+};
+//confirm关闭
+const handleClose = () => {
+  ElMessageBox.confirm("确认关闭?")
+    .then(() => {
+      closeDialog();
+    })
+    .catch(() => {
+      // catch error
+    });
+};
+//关闭触发事件
+const closeDialog = () => {
+  resetForm(ruleFormRef.value);
+  state.AIPointList = [];
+  state.DIPointList = [];
+  toEmits();
+};
+</script>
+<style lang="scss" scoped>
+.col-box {
+  display: flex;
+  flex-direction: column;
+}
+
+.select-mini {
+  width: 120px;
+}
+
+.el-tabs__content {
+  padding: 0 !important;
+}
+
+.el-tabs--border-card {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.border {
+  border: solid red 1px;
+}
+
+.el-table--mini td {
+  padding: 3px 0;
+}
+
+.el-button-group .el-button--primary {
+  border: none;
+}
+
+.el-form--label-top .el-form-item__label {
+  padding: 0;
+}
+</style>

+ 345 - 0
src/views/IntegratedAlarm/deviceConfig/components/faultmode.vue

@@ -0,0 +1,345 @@
+<template>
+  <div style="width: 100%; height: 100%">
+    <div class="btns">
+      <el-button
+        size="mini"
+        class="buttons"
+        round
+        @click="handleEdit(state.addFormData)"
+        >新增</el-button
+      >
+      <el-upload
+        style="display: inline-block; margin: 0 10px 10px 10px"
+        class="upload-demo"
+        action="/sharding/device/faultmode/input"
+        :show-file-list="false"
+        :on-success="handleSuccess"
+        :on-progress="handleProgress"
+        :on-error="handleError"
+      >
+        <el-button
+          size="mini"
+          class="buttons"
+          round
+          :disabled="state.faultmodeTableData.length == 0"
+          >导入</el-button
+        >
+      </el-upload>
+      <el-button
+        size="mini"
+        class="buttons"
+        round
+        @click="export2Excel"
+        :disabled="state.faultmodeTableData.length == 0"
+        >导出</el-button
+      >
+    </div>
+
+    <el-table
+      :data="state.faultmodeTableData"
+      stripe
+      style="width: 100%"
+      height="calc(100% - 38px)"
+    >
+      <el-table-column type="index" width="50" />
+      <el-table-column prop="name" label="名称"></el-table-column>
+      <el-table-column prop="code" label="故障编码"></el-table-column>
+      <el-table-column label="频度" width="50">
+        <template #default="scope">
+          {{ rank(scope.row.occurence) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="严酷度" width="70">
+        <template #default="scope">
+          {{ rank(scope.row.severity) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="难检度" width="70">
+        <template #default="scope">
+          {{ rank(scope.row.detection) }}
+        </template>
+      </el-table-column>
+      <el-table-column prop="cause" label="原因"></el-table-column>
+      <el-table-column prop="effects" label="导致结果"></el-table-column>
+      <el-table-column prop="measure" label="处理方法"></el-table-column>
+      <el-table-column label="操作" width="180" align="center">
+        <template #default="scope">
+          <el-button
+            type="text"
+            style="color: #05bb4c"
+            @click="handleEdit(scope.row)"
+            >编辑</el-button
+          >
+          <el-button
+            type="text"
+            style="color: red"
+            @click="handleDelete(scope.row)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 传感点编辑弹出框 -->
+    <el-dialog v-model="editVisible" width="40%">
+      <el-form :model="editFormData" label-width="80px">
+        <el-form-item label="故障编码">
+          <el-input v-model="editFormData.code"></el-input>
+        </el-form-item>
+        <el-form-item label="名称">
+          <el-input v-model="editFormData.name"></el-input>
+        </el-form-item>
+        <el-form-item label="导致结果">
+          <el-input
+            v-model="editFormData.effects"
+            :rows="2"
+            clearable
+            type="textarea"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="原因">
+          <el-input
+            v-model="editFormData.cause"
+            :rows="2"
+            clearable
+            type="textarea"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="处理方法">
+          <el-input
+            v-model="editFormData.measure"
+            :rows="3"
+            clearable
+            type="textarea"
+          ></el-input>
+        </el-form-item>
+        <el-row :gutter="24">
+          <el-col :span="12">
+            <el-form-item label="严酷度">
+              <el-select v-model="editFormData.severity">
+                <el-option
+                  v-for="item in selectOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="频度">
+              <el-select v-model="editFormData.occurence">
+                <el-option
+                  v-for="item in selectOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option
+              ></el-select> </el-form-item
+          ></el-col>
+        </el-row>
+        <el-row :gutter="24">
+          <el-col :span="12"
+            ><el-form-item label="难检度">
+              <el-select v-model="editFormData.detection">
+                <el-option
+                  v-for="item in selectOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                >
+                </el-option
+              ></el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="结构">
+              <el-cascader
+                v-model="editFormData.structurecode"
+                :options="cascaderdata"
+                :props="{ checkStrictly: true, emitPath: false }"
+                clearable
+              /> </el-form-item
+          ></el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="footerButton">
+          <el-button size="mini" round @click="editVisible = false"
+            >取 消</el-button
+          >
+          <el-button size="mini" round type="primary" @click="saveEdit"
+            >确 定</el-button
+          >
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+<script setup>
+import { ref, onMounted, reactive, inject, watch } from "vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import { outExportExcel } from "@/tools/excel/exportExcel.js"; //引入文件
+import {
+  faultmode_windturbine,
+  faultmode_structurecode,
+  faultmode_delete,
+  faultmode_add_edit,
+} from "@/api/zhbj/index.js";
+let cascaderdata = inject("cascaderdata");
+let desc = inject("desc");
+let treeId = inject("treeId");
+watch(
+  () => treeId,
+  (val, old) => {
+    getfaultmode(desc.value.code);
+  },
+  {
+    deep: true,
+  }
+);
+let editVisible = ref(false);
+let editFormData = ref({});
+onMounted(() => {
+  getfaultmode(desc.value.code);
+});
+const selectV = {
+  1: "I",
+  2: "II",
+  3: "III",
+  4: "IV",
+  5: "V",
+};
+const selectOptions = [
+  {
+    label: "I",
+    value: 1,
+  },
+  {
+    label: "II",
+    value: 2,
+  },
+  {
+    label: "III",
+    value: 3,
+  },
+  {
+    label: "IV",
+    value: 4,
+  },
+  {
+    label: "V",
+    value: 5,
+  },
+];
+const rank = (v) => {
+  return selectV[v] || "";
+};
+let state = reactive({
+  faultmodeTableData: [],
+  addFormData: {
+    code: "",
+    name: "",
+    effects: "",
+    cause: "",
+    measure: "",
+    severity: null,
+    occurence: null,
+    detection: null,
+    deviceid: "windturbine",
+    structurecode: "",
+    models: null,
+  },
+});
+// 新增 编辑
+const handleEdit = (row) => {
+  editFormData.value = row;
+  editVisible.value = true;
+};
+
+// 测点 删除
+const handleDelete = (row) => {
+  // 二次确认删除
+  ElMessageBox.confirm("确定要删除吗?", "提示", {
+    type: "warning",
+  })
+    .then(async () => {
+      const res = await faultmode_delete(row.id);
+      if (res == 1) {
+        ElMessage.success(`删除成功!`);
+      } else {
+        ElMessage.success("删除失败");
+      }
+      getfaultmode(desc.value.code);
+    })
+    .catch(() => {});
+};
+// 保存编辑
+const saveEdit = async () => {
+  const res = await faultmode_add_edit(editFormData.value);
+  if (res.code === 200) {
+    ElMessage.success(`操作成功!`);
+    editVisible.value = false;
+    getfaultmode(desc.value.code);
+  } else {
+    ElMessage.success(res.msg);
+  }
+};
+// getData
+const getfaultmode = async (code) => {
+  const res = await faultmode_structurecode(code);
+  state.faultmodeTableData = res;
+};
+
+// 批量导入
+const handleSuccess = (response, file, fileList) => {
+  ElMessage.success(response.msg);
+  getfaultmode(desc.value.code);
+};
+const handleProgress = (response, file, fileList) => {};
+const handleError = (response, file, fileList) => {
+  ElMessage.success("导入失败!");
+};
+// 批量导出
+const export2Excel = () => {
+  const tableData = state.faultmodeTableData;
+  // loading.close();
+  ElMessage.success(`导出成功!`);
+  const tableHeader = [
+    "上级结构编码",
+    "名称",
+    "故障编码",
+    "频度",
+    "严酷度",
+    "难检度",
+    "原因",
+    "导致结果",
+    "处理方法",
+  ];
+  const tableKey = [
+    "structurecode",
+    "name",
+    "code",
+    "occurence",
+    "severity",
+    "detection",
+    "cause",
+    "effects",
+    "measure",
+  ];
+  outExportExcel(tableHeader, tableKey, tableData, "故障模式导出excel");
+};
+</script>
+<style lang="less" scoped>
+.buttons {
+  background-color: rgba(5, 187, 76, 0.2);
+  border: 1px solid #3b6c53;
+  color: #b3b3b3;
+  font-size: 14px;
+  &:hover {
+    background-color: rgba(5, 187, 76, 0.5);
+    color: #ffffff;
+  }
+}
+</style>

+ 77 - 0
src/views/IntegratedAlarm/deviceConfig/components/message.vue

@@ -0,0 +1,77 @@
+<template>
+  <div style="width: 50%">
+    <el-form :model="desc" label-width="100px">
+      <el-form-item label="结构编码">
+        <el-input v-model="desc.code"></el-input>
+      </el-form-item>
+      <el-form-item label="上级节点">
+        <el-cascader
+          v-model="desc.parentcode"
+          :options="cascaderdata"
+          :props="{ checkStrictly: true, emitPath: false }"
+          :show-all-levels="false"
+          clearable
+        />
+      </el-form-item>
+      <el-form-item label="设备ID">
+        <el-input v-model="desc.deviceid" disabled></el-input>
+      </el-form-item>
+      <el-form-item label="结构名称">
+        <el-input v-model="desc.name"></el-input>
+      </el-form-item>
+      <el-form-item label="结构英文名称">
+        <el-input v-model="desc.enname"></el-input>
+      </el-form-item>
+      <el-form-item label="英文缩写">
+        <el-input v-model="desc.sortname"></el-input>
+      </el-form-item>
+      <el-form-item label="描述">
+        <el-input
+          v-model="desc.description"
+          :rows="4"
+          clearable
+          type="textarea"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="序号">
+        <el-input v-model="desc.orderno"></el-input>
+      </el-form-item>
+      <el-form-item label="是否有效">
+        <div style="height: 100%; display: flex; align-items: center">
+          <el-switch
+            v-model="desc.enabled"
+            active-color="#13ce66"
+            inactive-color="#ff4949"
+          />
+        </div>
+      </el-form-item>
+    </el-form>
+    <el-button
+      style="float: right"
+      type="primary"
+      @click="savedesc"
+      :disabled="desc.code == ''"
+      >保存</el-button
+    >
+  </div>
+</template>
+<script setup>
+import { ref, onMounted, inject } from "vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import { treeAdd } from "@/api/zhbj/index.js";
+let desc = inject("desc");
+let cascaderdata = inject("cascaderdata");
+const savedesc = async () => {
+  const res = await treeAdd(desc.value);
+  if (res.code === 200) {
+    ElMessage.success(`操作成功!`);
+  } else {
+    ElMessage.success(res.msg);
+  }
+};
+</script>
+<style lang="less" scoped>
+.el-switch {
+  display: block;
+}
+</style>

+ 472 - 0
src/views/IntegratedAlarm/deviceConfig/components/point.vue

@@ -0,0 +1,472 @@
+<template>
+  <div class="devicemenu">
+    <el-space wrap :size="10">
+      <el-button
+        type="primary"
+        @click="handleEdit(state.addFormData)"
+        :disabled="desc.code == ''"
+        >新增</el-button
+      >
+      <el-input
+        v-model="state.SearchVal"
+        placeholder="筛选"
+        style="width: 180px"
+        size="small"
+      />
+      <el-select
+        v-model="state.selectModel"
+        class="mr10"
+        style="width: 180px"
+        placeholder="全部"
+      >
+        <el-option
+          v-for="item in state.modelList"
+          :key="item"
+          :value="item"
+          :label="item"
+        ></el-option>
+      </el-select>
+      <el-select
+        v-model="state.selectPoint"
+        class="mr10"
+        style="width: 100px"
+        placeholder="全部"
+      >
+        <el-option key="1" label="全部" value=""></el-option>
+        <el-option key="2" label="遥测" value="AI"></el-option>
+        <el-option key="3" label="遥调" value="MI"></el-option>
+        <el-option key="4" label="计算" value="CI"></el-option>
+      </el-select>
+      <el-button type="primary" @click="search">查询</el-button>
+      <el-upload
+        class="upload-demo"
+        :disabled="desc.code == ''"
+        action="/sharding/device/input"
+        :show-file-list="false"
+        :on-success="handleSuccess"
+        :on-progress="handleProgress"
+        :on-error="handleError"
+      >
+        <el-button :disabled="desc.code == ''" type="primary">导入</el-button>
+      </el-upload>
+      <el-button
+        type="primary"
+        @click="export2Excel"
+        :disabled="desc.code == ''"
+        >导出</el-button
+      >
+    </el-space>
+  </div>
+  <el-table
+    :data="state.pointTableData"
+    stripe
+    style="width: 100%"
+    height="65vh"
+  >
+    <el-table-column type="index" width="50" />
+    <el-table-column prop="metriccode" label="测点编码"></el-table-column>
+    <el-table-column label="名称">
+      <template #default="scope">
+        <el-popover placement="right" :width="260" trigger="click">
+          <template #reference>
+            <el-button type="text" size="small">{{ scope.row.name }}</el-button>
+          </template>
+          <el-table :data="scope.row.deviceModelMetrics" max-height="400px">
+            <el-table-column
+              property="devicemodel"
+              label="机型"
+              align="center"
+            ></el-table-column>
+            <el-table-column
+              property="uniformcode"
+              label="统一编码"
+              align="center"
+            ></el-table-column>
+            <el-table-column
+              property="multiplier"
+              label="倍率"
+              align="center"
+            ></el-table-column>
+          </el-table>
+        </el-popover>
+      </template>
+    </el-table-column>
+
+    <el-table-column prop="unitname" label="单位"></el-table-column>
+    <el-table-column prop="categorydata" label="测点类型"></el-table-column>
+    <el-table-column prop="categorysci" label="物理类型"></el-table-column>
+    <el-table-column prop="categorysci" label="数据类型"></el-table-column>
+    <el-table-column prop="description" label="描述"></el-table-column>
+    <el-table-column label="操作" width="180" align="center">
+      <template #default="scope">
+        <el-button
+          type="text"
+          icon="el-icon-edit"
+          @click="handleEdit(scope.row)"
+          >编辑</el-button
+        >
+        <el-button
+          type="text"
+          icon="el-icon-delete"
+          style="color: red"
+          @click="handleDelete(scope.row)"
+          >删除</el-button
+        >
+      </template>
+    </el-table-column>
+  </el-table>
+  <div class="pagination">
+    <el-pagination
+      background
+      layout="total, prev, pager, next"
+      hide-on-single-page
+      :current-page="query.page"
+      :page-size="query.limit"
+      :total="pageTotal"
+      @current-change="handlePageChange"
+    ></el-pagination>
+  </div>
+  <!-- 传感点编辑弹出框 -->
+  <el-dialog v-model="editVisible" width="40%">
+    <el-form :model="editFormData" label-width="80px">
+      <el-form-item label="编码">
+        <el-input v-model="editFormData.metriccode"></el-input>
+      </el-form-item>
+      <el-row :gutter="24">
+        <el-col :span="12">
+          <el-form-item label="名称">
+            <el-input v-model="editFormData.name"></el-input>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="12">
+          <el-form-item label="英文名称">
+            <el-input v-model="editFormData.enname"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="24">
+        <el-col :span="12">
+          <el-form-item label="标准单位">
+            <el-input v-model="editFormData.unitname"></el-input>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="12">
+          <el-form-item label="单位名称">
+            <el-input v-model="editFormData.unitnamecn"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-form-item label="描述">
+        <el-input
+          v-model="editFormData.description"
+          :rows="3"
+          type="textarea"
+          clearable
+        ></el-input>
+      </el-form-item>
+      <el-row :gutter="24">
+        <el-col :span="12">
+          <el-form-item label="数据类型">
+            <el-select v-model="editFormData.categorydata" placeholder="Select">
+              <el-option
+                v-for="item in state.categorydataoptions"
+                :key="item"
+                :label="item"
+                :value="item"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="结构">
+            <el-cascader
+              v-model="editFormData.structurecode"
+              :options="cascaderdata"
+              :props="{ checkStrictly: true, emitPath: false }"
+              clearable
+            />
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="24">
+        <el-col :span="12">
+          <el-form-item label="物理类型">
+            <el-input v-model="editFormData.categorysci"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="系统分类">
+            <el-input v-model="editFormData.categorysys"></el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <el-form-item label="适配机型" class="deviceModelClass">
+        <el-select
+          v-model="state.deviceModelSel"
+          style="margin-right: 20px"
+          placeholder="新增机型"
+          size="mini"
+        >
+          <el-option
+            v-for="item in state.deviceModel"
+            :key="item.code"
+            :label="item.code"
+            :value="item.code"
+          >
+          </el-option>
+        </el-select>
+        <el-button
+          v-show="state.deviceModelSel != ''"
+          size="mini"
+          type="primary"
+          @click="deviceModelAdd()"
+          >新增机型
+        </el-button>
+        <el-table
+          :data="editFormData.deviceModelMetrics"
+          style="width: 100%; margin-top: 10px"
+          max-height="200px"
+        >
+          <el-table-column prop="devicemodel" label="机型" />
+          <el-table-column label="倍率">
+            <template #default="scope">
+              <el-input v-model="scope.row.multiplier" size="mini" />
+            </template>
+          </el-table-column>
+          <el-table-column label="统一编码">
+            <template #default="scope">
+              <el-input v-model="scope.row.uniformcode" size="mini" />
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="editVisible = false">取 消</el-button>
+        <el-button type="primary" @click="saveEdit">确 定</el-button>
+      </span>
+    </template>
+  </el-dialog>
+</template>
+<script setup>
+import { ref, onMounted, inject, reactive, watch } from "vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import {
+  point,
+  metrics,
+  delmetrics,
+  device_list,
+  getStationinfo,
+} from "@/api/zhbj/index.js";
+import { outExportExcel } from "@/tools/excel/exportExcel.js"; //引入文件
+onMounted(() => {
+  getPoint(desc.value);
+  getDeviceModel();
+  getequipmentmodel_list();
+});
+let editFormData = ref({});
+let editVisible = ref(false); //传感点
+let desc = inject("desc");
+let treeId = inject("treeId");
+let cascaderdata = inject("cascaderdata");
+watch(
+  () => treeId,
+  (newV, old) => {
+    state.addFormData.structurecode = desc.value.code;
+    getPoint(desc.value);
+  },
+  {
+    deep: true,
+  }
+);
+let state = reactive({
+  pointTableData: "",
+  SearchVal: "",
+  selectPoint: "",
+  selectModel: "",
+  modelList: [],
+  categorydataoptions: ["AI", "DI", "CI"],
+  addFormData: {
+    categorydata: "AI",
+    categoryres1: null,
+    categoryres2: null,
+    categoryres3: null,
+    categoryres4: null,
+    categoryres5: null,
+    categorysci: null,
+    categorysys: null,
+    description: null,
+    deviceid: "windturbine",
+    enname: null,
+    id: null,
+    metriccode: "",
+    name: "",
+    structurecode: "101010205",
+    unitname: null,
+    unitnamecn: null,
+    deviceModelMetrics: [],
+  },
+});
+const query = reactive({
+  page: 1,
+  limit: 10,
+});
+let pageTotal = ref(0);
+const search = async () => {
+  getPoint(desc.value);
+};
+// getPoint
+const getPoint = async (node) => {
+  const res = await point(
+    node.code,
+    query.page,
+    query.limit,
+    state.selectPoint,
+    state.SearchVal,
+    "windturbine",
+    state.selectModel
+  );
+  console.warn(res);
+  pageTotal.value = res.total;
+  state.pointTableData = res.records?.sort((a, b) => {
+    return a.id - b.id;
+  });
+};
+// 机型
+const getequipmentmodel_list = async () => {
+  const { data } = await getStationinfo("");
+  let arr = [];
+  data.forEach((e) => {
+    arr.push(...e.modelList);
+  });
+  state.modelList = [...new Set(arr)];
+};
+// 测点 编辑
+const handleEdit = (row) => {
+  console.warn(row);
+  if (!row.deviceModelMetrics) {
+    row.deviceModelMetrics = [];
+  }
+  editFormData.value = row;
+  editVisible.value = true;
+};
+//测点 add
+const postmetrics = async () => {
+  console.warn(editFormData.value);
+  const res = await metrics(editFormData.value);
+  console.warn(res);
+  if (res.status == 20000) {
+    ElMessage.success(`操作成功!`);
+    editVisible.value = false;
+  } else {
+    ElMessage.success(res.msg);
+  }
+  getPoint(desc.value);
+};
+// 保存编辑
+const saveEdit = async () => {
+  postmetrics();
+};
+// 测点 删除
+const handleDelete = (row) => {
+  // 二次确认删除
+  ElMessageBox.confirm("确定要删除吗?", "提示", {
+    type: "warning",
+  })
+    .then(async () => {
+      console.warn(row);
+      const res = await delmetrics(row.id);
+      console.warn(res);
+      if (res == 1) {
+        ElMessage.success(`删除成功!`);
+      } else {
+        ElMessage.success("删除失败");
+      }
+      getPoint(desc.value);
+    })
+    .catch(() => {});
+};
+
+//deviceModelAdd 新增机型
+const deviceModelAdd = async () => {
+  if (state.deviceModelSel == "") return;
+  console.warn();
+  let obj = {
+    deviceid: editFormData.value.deviceid,
+    devicemodel: state.deviceModelSel,
+    id: null,
+    metriccode: editFormData.value.metriccode,
+    multiplier: 0,
+    uniformcode: "",
+  };
+  editFormData.value.deviceModelMetrics.push(obj);
+};
+//getDeviceModel
+const getDeviceModel = async () => {
+  const res = await device_list();
+  state.deviceModel = res;
+  console.warn(res);
+};
+
+// 分页导航
+const handlePageChange = (val) => {
+  query.page = val;
+  getPoint(desc.value);
+};
+
+// 批量导入
+const handleSuccess = (response, file, fileList) => {
+  console.warn(response, file, fileList);
+  ElMessage.success("导入成功!");
+  getPoint(desc.value);
+};
+const handleProgress = (response, file, fileList) => {};
+const handleError = (response, file, fileList) => {
+  ElMessage.success("导入失败!");
+};
+
+// 批量导出
+const export2Excel = async () => {
+  const tableData = await point(
+    desc.value.code,
+    1,
+    99999999,
+    state.selectPoint,
+    state.SearchVal,
+    "windturbine",
+    state.selectModel
+  );
+  ElMessage.success(`导出成功!`);
+  const tableHeader = [
+    "上级结构编码",
+    "测点编码",
+    "名称",
+    "英文名称",
+    "单位",
+    "测点类型",
+    "物理类型",
+    "描述",
+  ];
+  const tableKey = [
+    "structurecode",
+    "metriccode",
+    "name",
+    "enname",
+    "unitname",
+    "categorydata",
+    "categorysci",
+    "description",
+  ];
+  outExportExcel(tableHeader, tableKey, tableData.records, "测点导出excel");
+};
+</script>
+<style lang="scss" scoped>
+.devicemenu {
+  margin-bottom: 10px;
+}
+</style>

+ 390 - 0
src/views/IntegratedAlarm/deviceConfig/components/windturbine.vue

@@ -0,0 +1,390 @@
+<template>
+  <div style="width: 100%; height: 100%">
+    <el-row type="flex" justify="space-between">
+      <div class="handle-box" style="margin-bottom: 10px">
+        <el-button size="mini" round class="buttons" @click="handleInsert">
+          新增记录
+        </el-button>
+        <el-button size="mini" round class="buttons" @click="export2Excel">
+          批量导出</el-button
+        >
+        <el-button size="mini" round class="buttons" @click="outExe">
+          模板下载</el-button
+        >
+        <el-upload
+          style="display: inline; margin-left: 10px"
+          action="/sharding/warning2/import"
+          :headers="token"
+          :show-file-list="false"
+          :on-success="handleSuccess"
+          :on-progress="handleProgress"
+          :on-error="handleError"
+        >
+          <el-button
+            size="mini"
+            round
+            class="buttons"
+            @click="exportShow = true"
+          >
+            批量导入</el-button
+          >
+        </el-upload>
+      </div>
+      <div style="display: flex; flex-direction: row; margin-bottom: 10px">
+        <el-select
+          v-if="!isStation"
+          v-model="query.stationId"
+          clearable
+          size="mini"
+          style="width: 150px"
+          placeholder="全部场站"
+          popper-class="select"
+          @change="changeStation()"
+        >
+          <el-option
+            v-for="item in stationList"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          ></el-option>
+        </el-select>
+        <el-select
+          v-model="query.modelId"
+          clearable
+          size="mini"
+          style="width: 150px"
+          placeholder="全部机型"
+          popper-class="select"
+        >
+          <el-option
+            v-for="item in state.modelList"
+            :key="item"
+            :value="item"
+            :label="item"
+          ></el-option>
+        </el-select>
+
+        <el-input
+          placeholder="请输入名称"
+          v-model="query.name"
+          style="width: 150px; margin-right: 10px"
+          size="mini"
+          clearable
+        ></el-input>
+        <el-button
+          icon="el-icon-search"
+          size="mini"
+          round
+          class="buttons"
+          @click="getData"
+          >搜索</el-button
+        >
+      </div>
+    </el-row>
+    <div class="wind-table">
+      <el-table
+        :data="state.tableData"
+        size="mini"
+        style="width: 100%"
+        stripe
+        height="calc(100% - 43px)"
+      >
+        <el-table-column label="序列号" align="center" prop="id" />
+        <el-table-column label="统一编码" align="center" prop="uniformCode">
+          <template #default="scope">{{
+            // ednaValueConvert(scope.row.ednaValue)
+            scope.row.uniformCode
+          }}</template>
+        </el-table-column>
+        <el-table-column
+          label="描述"
+          align="left"
+          prop="description"
+          width="180"
+        />
+        <el-table-column
+          label="停机类型"
+          align="center"
+          prop="characteristic"
+        />
+        <el-table-column label="风机型号" align="center" prop="modelId" />
+        <el-table-column label="报警类型" align="center" prop="alarmTypeName" />
+        <el-table-column label="故障编码" align="center" prop="nemCode" />
+        <el-table-column label="报警级别" align="center">
+          <template #default="scope">{{
+            levelIdConvert(scope.row.rank)
+          }}</template>
+        </el-table-column>
+        <el-table-column label="报警分类" align="center" min-width="50">
+          <template #default="scope">{{
+            warningClassIfyIdConvert(scope.row.deviceType)
+          }}</template>
+        </el-table-column>
+        <el-table-column label="是否可以复位" align="center" min-width="50">
+          <template #default="scope">{{
+            scope.row.resetTable ? "是" : "否"
+          }}</template>
+        </el-table-column>
+        <el-table-column label="是否启用" align="center" min-width="50">
+          <template #default="scope">{{
+            scope.row.enabled == 1 ? "是" : "否"
+          }}</template>
+        </el-table-column>
+        <el-table-column
+          label="关联部件"
+          align="center"
+          min-width="50"
+          prop="componentsName"
+        />
+
+        <el-table-column label="操作" align="center" width="100">
+          <template #default="scope">
+            <el-button
+              type="text"
+              style="color: #05bb4c"
+              icon="el-icon-lx-edit"
+              @click="handleEditClick(scope.row)"
+            >
+              编辑</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <div class="pagination">
+        <el-pagination
+          layout="total, sizes, prev, pager, next"
+          :page-sizes="[19, 50, 100, 200, 500]"
+          @size-change="
+            (value) => {
+              query.pageSize = value;
+              query.pageNum = 1;
+              getData();
+            }
+          "
+          :current-page="query.pageNum"
+          :page-size="query.pageSize"
+          :total="total"
+          @current-change="handlePageChange"
+        ></el-pagination>
+      </div>
+    </div>
+    <windturbinecomponents
+      @close="dialogclose"
+      :isVisible="state.visible"
+      :form="state.form"
+    />
+  </div>
+</template>
+<script setup>
+import {
+  windturbinebj_fetchTableData,
+  getWtModel,
+  getWpList,
+} from "@/api/zhbj/index.js";
+import { outExportExcel } from "@/tools/excel/exportExcel.js"; //引入文件
+import { ref, onMounted, provide, computed, reactive, watch } from "vue";
+import { useStore } from "vuex";
+import { ElMessageBox, ElMessage } from "element-plus";
+import windturbinecomponents from "./windturbine_components.vue";
+const token = { token: sessionStorage.getItem("token") };
+const store = useStore();
+const stationList = ref([]);
+
+const getStationList = async () => {
+  const { data } = await getWpList("windturbine");
+  stationList.value = data || [];
+};
+const isStation = computed(() => stationList.value.length);
+const state = reactive({
+  tableData: [],
+  modelList: [],
+  visible: false,
+  form: {},
+});
+const query = reactive({
+  pageNum: 1,
+  pageSize: 19,
+  stationId: "",
+  modelId: "",
+  name: "",
+});
+let total = ref(0);
+onMounted(() => {
+  getStationList();
+  getData();
+  getequipmentmodel_list();
+});
+const dialogclose = () => {
+  state.visible = false;
+  getData();
+};
+const getData = async () => {
+  const { data } = await windturbinebj_fetchTableData(query);
+  data.records.forEach((ele) => {
+    ele.alarmTypeName = warningClassIfyIdConvert(ele.alarmType);
+  });
+  state.tableData = data.records;
+  total.value = data.total;
+};
+const handleInsert = () => {
+  state.visible = true;
+};
+const handleEditClick = (row) => {
+  console.warn(row);
+  let obj = Object.assign({}, row);
+  state.form = obj;
+  state.visible = true;
+};
+//changeStation
+const changeStation = async () => {
+  query.modelId = "";
+  await getequipmentmodel_list();
+};
+// 机型
+const getequipmentmodel_list = async () => {
+  const { data } = await getWtModel(query.stationId);
+  state.modelList = data || [];
+};
+// 分页导航
+const handlePageChange = (val) => {
+  query.pagenum = val;
+  getData();
+};
+
+const tableHeader = [
+  "id",
+  "报警级别(ZC_BJ:运转正常;YJ_BJ:运转状态超出标准范围;GZ_BJ:非正常停止运转;WH_BJ:停机维护;XD_BJ:限电/计划停机)",
+  "制造商(HFYG_CS:合肥阳光电源有限公司;AMS_CS:艾默生;NRJD_CS:国电南瑞吉电新能源;MGSK_CS:美国赛康;LHDL_CS:联合动力;SYHC_CS:沈阳华创)",
+  "名称",
+  "上一级节点",
+  "是否有子节点",
+  "序列号",
+  "类别 :正常停机,正常启动,快速停机,紧急停机",
+  "风机型号",
+  "全部默认为1",
+  "统一编码",
+  "是否展示(0:是;1:否)",
+  "报警分类(bj:变桨;bpq:变频器;clx:齿轮箱;fdj:发电机;hh:滑环;jcjr:机舱加热;lq:冷却;ph:偏航;rh:润滑;yy:液压;zz:主轴;other:其它;kz:控制;yl:叶轮;jc:机舱;xb:箱变;dw:电网;td:塔底;fsy:风速仪)",
+  "消缺规定时间",
+  "是否可以复位(0:是;1:否)",
+  "报警类型编号",
+  "故障编码",
+  "关联部件",
+];
+
+const tableKey = [
+  "id",
+  "levelId",
+  "manufacturerCode",
+  "chineseText",
+  "parentId",
+  "isleaf",
+  "sequenceNumber",
+  "characteristic",
+  "modelId",
+  "codeName",
+  "ednaValue",
+  "display",
+  "warningClassIfyId",
+  "standardTime",
+  "isreset",
+  "warningTypeId",
+  "faultCode",
+  "relatedParts",
+];
+// 批量导出
+const export2Excel = async () => {
+  let { name, stationId, modelId } = query;
+  const res = await windturbinebj_fetchTableData({
+    pageNum: 1,
+    pageSize: 999999,
+    name,
+    stationId,
+    modelId,
+  });
+
+  ElMessage.success(`导出成功!`);
+  outExportExcel(tableHeader, tableKey, res.records, "风机报警配置导出excel");
+};
+// 模板下载
+const outExe = () => {
+  const data = [];
+  ElMessage.success(`导出成功!`);
+  outExportExcel(tableHeader, tableKey, data, "风机报警模板");
+};
+// 批量导入
+const handleSuccess = (response, file, fileList) => {
+  ElMessage.success("导入成功!");
+  getData();
+};
+const handleProgress = (response, file, fileList) => {};
+const handleError = (response, file, fileList) => {
+  ElMessage.success("导入失败!");
+};
+// 报警级别
+const levelIdConvert = (val) => {
+  switch (val) {
+    case 1:
+      return "低级";
+    case 2:
+      return "低中级";
+    case 3:
+      return "中级";
+    case 4:
+      return "中高级";
+    case 5:
+      return "限电/高级";
+    default:
+      return "";
+  }
+};
+// 报警分类
+const warningClassIfyIdConvert = (val) => {
+  switch (val) {
+    case "station":
+      return "场站";
+    case "windturbine":
+      return "风机";
+    case "booststation":
+      return "升压站";
+    default:
+      return "";
+  }
+};
+
+// 统一编码
+const ednaValueConvert = (val) => {
+  if (val === 0) {
+    return "";
+  } else if (val < 100 && val > 0) {
+    return "DI0" + val;
+  } else if (val >= 100) {
+    return "DI" + val;
+  }
+};
+</script>
+<style scoped lang="less">
+.wind-table {
+  height: calc(100% - 40px);
+}
+.buttons {
+  background-color: rgba(5, 187, 76, 0.2);
+  border: 1px solid #3b6c53;
+  color: #b3b3b3;
+  font-size: 14px;
+  &:hover {
+    background-color: rgba(5, 187, 76, 0.5);
+    color: #ffffff;
+  }
+}
+.el-select ::v-deep {
+  margin-right: 10px;
+}
+
+.el-button + .el-button {
+  margin-left: 10px;
+}
+.pagination {
+  padding-top: 10px;
+}
+</style>

+ 456 - 0
src/views/IntegratedAlarm/deviceConfig/components/windturbine_components.vue

@@ -0,0 +1,456 @@
+<template>
+  <el-dialog
+    v-model="isShow"
+    width="800px"
+    :before-close="dialogClose"
+    @closed="resetOptions"
+  >
+    <el-form
+      :model="dialogOptions"
+      :rules="rules"
+      label-width="120px"
+      ref="formRef"
+      inline
+    >
+      <el-form-item label="报警类别" prop="deviceType">
+        <el-select
+          v-model="dialogOptions.deviceType"
+          filterable
+          placeholder="请选择"
+          @change="
+            (res) => {
+              dialogOptions.stationId = '';
+              checkRules();
+              getWpList();
+            }
+          "
+        >
+          <el-option
+            v-for="item in categoryArray"
+            :key="item.id"
+            :label="item.label"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="序列号">
+        <el-input
+          v-model="dialogOptions.id"
+          placeholder="自动生成"
+          clearable
+          readonly
+        />
+      </el-form-item>
+      <el-form-item label="场站" prop="stationId">
+        <el-select
+          v-model="dialogOptions.stationId"
+          filterable
+          placeholder="请选择"
+          :disabled="!wpArray?.length"
+          @change="
+            (res) => {
+              dialogOptions.modelId = '';
+              getWtModel();
+            }
+          "
+        >
+          <el-option
+            v-for="item in wpArray"
+            :key="item.id"
+            :label="item.aname"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="设备型号"
+        prop="modelId"
+        v-if="dialogOptions.deviceType !== 'booststation'"
+      >
+        <el-select
+          v-model="dialogOptions.modelId"
+          filterable
+          placeholder="请选择"
+          :disabled="!modelArray?.length"
+        >
+          <el-option
+            v-for="item in modelArray"
+            :key="item"
+            :label="item"
+            :value="item"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="统一编码" prop="uniformCode">
+        <el-input v-model="dialogOptions.uniformCode" clearable />
+      </el-form-item>
+      <el-form-item label="特性" prop="characteristic">
+        <el-select
+          v-model="dialogOptions.characteristic"
+          filterable
+          placeholder="请选择"
+        >
+          <el-option
+            v-for="item in characteristicArray"
+            :key="item"
+            :label="item"
+            :value="item"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="故障编码">
+        <el-input v-model="dialogOptions.nemCode" clearable />
+      </el-form-item>
+      <el-form-item label="描述" prop="description">
+        <el-input
+          v-model="dialogOptions.description"
+          placeholder="请输入"
+          clearable
+        />
+      </el-form-item>
+      <el-form-item label="报警级别">
+        <el-select v-model="dialogOptions.rank" filterable placeholder="请选择">
+          <el-option
+            v-for="item in levelArray"
+            :key="item.id"
+            :label="item.label"
+            :value="item.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="测点"
+        prop="tagId"
+        v-if="dialogOptions.deviceType === 'booststation'"
+      >
+        <el-select
+          v-model="dialogOptions.tagId"
+          filterable
+          placeholder="请选择"
+        >
+          <el-option
+            v-for="item in pointArray"
+            :key="item.nemCode"
+            :label="item.name"
+            :value="item.nemCode"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item
+        label="关键部件"
+        prop="components"
+        v-if="dialogOptions.deviceType !== 'booststation'"
+      >
+        <el-select v-model="dialogOptions.components" filterable>
+          <el-option-group
+            v-for="group in associatedComponentsArray"
+            :key="group.label"
+            :label="group.label"
+          >
+            <el-option
+              v-for="item in group.options"
+              :key="item.nemCode"
+              :label="item.name"
+              :value="item.nemCode"
+            />
+          </el-option-group>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="是否启用">
+        <el-radio-group size="mini" v-model="dialogOptions.enable">
+          <el-radio-button :label="true">是</el-radio-button>
+          <el-radio-button :label="false">否</el-radio-button>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="是否可复位">
+        <el-radio-group size="mini" v-model="dialogOptions.resetTable">
+          <el-radio-button :label="true">是</el-radio-button>
+          <el-radio-button :label="false">否</el-radio-button>
+        </el-radio-group>
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <span class="footerButton">
+        <el-button size="mini" round @click="cancle">取 消</el-button>
+        <el-button size="mini" round @click="checkData">确 定</el-button>
+      </span>
+    </template>
+  </el-dialog>
+</template>
+<script>
+import {
+  getWpList,
+  getBpList,
+  getWtModel,
+  getPointList,
+  fetchRelatePartAndAlarmType,
+  saveAlarmconfiguration,
+} from "@/api/zhbj/index.js";
+export default {
+  props: {
+    isVisible: {
+      type: Boolean,
+      default: () => false,
+    },
+    form: {
+      type: Object,
+      default: () => {
+        return {};
+      },
+    },
+  },
+
+  data() {
+    return {
+      isShow: false,
+      dialogOptions: {
+        deviceType: "",
+        id: "",
+        stationId: "",
+        modelId: "",
+        uniformCode: "",
+        nemCode: "",
+        characteristic: "正常停机",
+        description: "",
+        rank: 1,
+        tagId: "",
+        components: "",
+        enable: false,
+        resetTable: false,
+      },
+      rules: {
+        deviceType: [
+          {
+            required: true,
+            message: "报警类型不可为空",
+            trigger: "change",
+          },
+        ],
+        stationId: [
+          {
+            required: true,
+            message: "场站不可为空",
+            trigger: "change",
+          },
+        ],
+        modelId: [
+          {
+            required: true,
+            message: "设备型号不可为空",
+            trigger: "change",
+          },
+        ],
+        uniformCode: [
+          {
+            required: true,
+            message: "统一编码不可为空",
+            trigger: "change",
+          },
+        ],
+        characteristic: [
+          {
+            required: true,
+            message: "统一编码不可为空",
+            trigger: "change",
+          },
+        ],
+        tagId: [
+          {
+            required: true,
+            message: "测点不可为空",
+            trigger: "change",
+          },
+        ],
+        description: [
+          {
+            required: true,
+            message: "描述不可为空",
+            trigger: "change",
+          },
+        ],
+        components: [
+          {
+            required: true,
+            message: "部件不可为空",
+            trigger: "change",
+          },
+        ],
+      },
+      categoryArray: [
+        { id: "windturbine", label: "风机报警" },
+        { id: "booststation", label: "升压站报警" },
+        { id: "inverter", label: "光伏报警" },
+      ],
+      wpArray: [],
+      modelArray: [],
+      characteristicArray: ["正常停机", "正常启动", "快速停机", "紧急停机"],
+      levelArray: [
+        { id: 1, label: "低级" },
+        { id: 2, label: "低中级" },
+        { id: 3, label: "中级" },
+        { id: 4, label: "中高级" },
+        { id: 5, label: "高级" },
+      ],
+      pointArray: [],
+      associatedComponentsArray: [],
+    };
+  },
+
+  created() {
+    this.isShow = this.isVisible;
+    this.dialogOptions = Object.assign(this.dialogOptions, this.form);
+    this.checkRules();
+    this.getWpList();
+    this.getfetchRelatePart();
+  },
+
+  methods: {
+    dialogClose(done) {
+      this.$confirm("确认关闭?")
+        .then(() => {
+          done();
+        })
+        .catch(() => {});
+    },
+
+    cancle() {
+      this.$confirm("确认关闭?")
+        .then(() => {
+          this.isShow = false;
+        })
+        .catch(() => {});
+    },
+
+    checkRules() {
+      const isBp = this.dialogOptions.deviceType === "booststation";
+      const isWt = this.dialogOptions.deviceType === "windturbine";
+      const isInv = this.dialogOptions.deviceType === "inverter";
+      this.rules.tagId.forEach((ele) => {
+        ele.required = isBp;
+      });
+
+      this.rules.modelId.forEach((ele) => {
+        ele.required = !isBp;
+      });
+
+      this.rules.components.forEach((ele) => {
+        ele.required = isWt || isInv;
+      });
+    },
+
+    getWpList() {
+      if (
+        this.dialogOptions.deviceType === "windturbine" ||
+        this.dialogOptions.deviceType === "inverter"
+      ) {
+        getWpList(this.dialogOptions.deviceType).then((res) => {
+          this.dialogOptions.stationId = res?.data?.[0]?.id || "";
+          this.wpArray = res.data;
+          this.getWtModel();
+        });
+      } else {
+        getBpList().then((res) => {
+          this.dialogOptions.stationId = res?.data?.[0]?.id || "";
+          this.wpArray = res.data;
+          this.getWtModel();
+        });
+      }
+    },
+
+    getWtModel() {
+      getWtModel(this.dialogOptions.stationId).then((res) => {
+        this.dialogOptions.modelId = res?.data?.[0] || "";
+        this.modelArray = res.data;
+        if (this.dialogOptions.deviceType === "booststation") {
+          this.getPointList();
+        }
+      });
+    },
+
+    getPointList() {
+      getPointList({
+        subId: this.dialogOptions.stationId,
+      }).then((res) => {
+        this.pointArray = res.data.total;
+      });
+    },
+
+    getfetchRelatePart() {
+      fetchRelatePartAndAlarmType().then((res) => {
+        const keyMap = {
+          fjbj: "风机部件",
+          gfbj: "光伏部件",
+        };
+
+        let associatedComponentsArray = [];
+
+        for (let key in keyMap) {
+          associatedComponentsArray.push({
+            id: key,
+            label: keyMap[key],
+            options: res.data[key] || [],
+          });
+        }
+        this.dialogOptions.components =
+          associatedComponentsArray?.[0]?.options?.[0]?.nemCode || "";
+        this.associatedComponentsArray = associatedComponentsArray;
+      });
+    },
+
+    checkData() {
+      this.$refs.formRef.validate((valid, fields) => {
+        if (valid) {
+          saveAlarmconfiguration(
+            Object.assign(this.dialogOptions, {
+              alarmType:
+                this.dialogOptions.alarmType || this.dialogOptions.deviceType,
+            })
+          ).then((res) => {
+            if (res.code === 200) {
+              this.BASE.showMsg({
+                type: "success",
+                msg: "提交成功",
+              });
+              this.isShow = false;
+            }
+          });
+        }
+      });
+    },
+
+    resetOptions() {
+      this.dialogOptions = {
+        deviceType: "",
+        id: "",
+        stationId: "",
+        modelId: "",
+        uniformCode: "",
+        characteristic: "正常停机",
+        nemCode: "",
+        description: "",
+        rank: 1,
+        tagId: "",
+        components: "",
+        enable: false,
+        resetTable: false,
+      };
+      this.resetForm();
+    },
+
+    resetForm() {
+      this.$refs.formRef.resetFields();
+    },
+  },
+
+  watch: {
+    isVisible(value) {
+      this.isShow = value;
+    },
+    form(value) {
+      this.dialogOptions = value;
+      this.checkRules();
+      this.getWpList();
+    },
+  },
+};
+</script>

+ 0 - 0
src/views/IntegratedAlarm/deviceConfig/components/ycpoint.vue


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů