{"remainingRequest":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\cssc-fvue\\src\\views\\SysIndex.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\cssc-fvue\\src\\views\\SysIndex.vue","mtime":1681441192473},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\cssc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\r\nimport req from '@/api/biz/healthData.js'\r\nimport health from '@/api/biz/statePrediction.js'\r\nimport { Chart } from '@antv/g2'\r\nimport { Liquid } from '@antv/g2plot'\r\nimport utils from '@/hotent-ui-util'\r\nimport DvBorderBox5 from '@/components/border/DvBorderBox5'\r\nimport AlarmCodeExplain from '@/views/AlarmCodeExplain.vue'\r\nexport default {\r\n components: {\r\n DvBorderBox5,\r\n AlarmCodeExplain\r\n },\r\n data() {\r\n return {\r\n healthScoreTitle: '健康评分机组排行',\r\n warnDataTitle: '预警数量机组排行',\r\n partWarnDataStat: '预警数量部件排行',\r\n modelWarnDataStat: '预警数量模型排行',\r\n healthScoreList: [], //健康评分机组排行列表\r\n warnDataList: [], //预警数量机组排行列表\r\n partWarnDataStatList: [], //预警数量部件排行列表\r\n modelWarnDataStatList: [], //预警数量模型排行列表\r\n bodyStyle2: {\r\n width: '100%',\r\n boxSizing: 'border-box',\r\n padding: '10px',\r\n height: '100%',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n },\r\n bodyStyle: {\r\n padding: '16px 10px',\r\n height: 'calc(100% - 60px)',\r\n },\r\n sectionData: {\r\n emsFactoryWinspdAvg: {\r\n bgType: 'blue',\r\n icon: 'icon-fengsu1',\r\n val: 0,\r\n unit: 'm/s',\r\n name: '风场平均风速',\r\n },\r\n factoryPowAct: {\r\n bgType: 'blue',\r\n icon: 'icon-yougonggongshuai',\r\n val: 0,\r\n unit: 'kW',\r\n name: '风场总有功',\r\n },\r\n factoryDayEnergy: {\r\n bgType: 'blue',\r\n icon: 'icon-rifadianliang',\r\n val: 0,\r\n unit: 'MW',\r\n name: '全场当日发电量',\r\n },\r\n totalEnergy: {\r\n bgType: 'blue',\r\n icon: 'icon-lajifadian',\r\n val: 0,\r\n unit: 'MW',\r\n name: '全场累计发电量',\r\n },\r\n setsNo: {\r\n bgType: 'blue',\r\n icon: 'icon-fengdianchang',\r\n val: 0,\r\n unit: '台',\r\n name: '装机台数',\r\n },\r\n capacity: {\r\n bgType: 'blue',\r\n icon: 'icon-rongliangguanli',\r\n val: 0,\r\n unit: 'MW',\r\n name: '装机容量',\r\n },\r\n normal: {\r\n bgType: 'green',\r\n icon: 'icon-fengdian',\r\n val: 0,\r\n unit: '台',\r\n name: '正常发电台数',\r\n },\r\n emsFaultCount: {\r\n bgType: 'red',\r\n icon: 'icon-fengdian1',\r\n val: 0,\r\n unit: '台',\r\n name: '故障台数',\r\n },\r\n healthScore: {\r\n bgType: 'blue',\r\n icon: 'icon-jiankangxian',\r\n val: 0,\r\n unit: '分',\r\n name: '健康评分',\r\n },\r\n unplannedDowntime: {\r\n bgType: 'gray',\r\n icon: 'icon-fengdian1',\r\n val: 0,\r\n unit: '小时',\r\n name: '减少非计划停机',\r\n },\r\n },\r\n chart1: null, // 风场总有功 (MW)/风场平均风速 (m/s)\r\n chart2: null, // 全场月发电量\r\n chart3: null, // 年累计发电量/年计划发电量 (MW)\r\n chart4: null, // 机组故障次数\r\n monthDataReady: false,\r\n monthEnergyData: [\r\n {\r\n month: '1月',\r\n energy: null,\r\n },\r\n {\r\n month: '2月',\r\n energy: null,\r\n },\r\n {\r\n month: '3月',\r\n energy: null,\r\n },\r\n {\r\n month: '4月',\r\n energy: null,\r\n },\r\n {\r\n month: '5月',\r\n energy: null,\r\n },\r\n {\r\n month: '6月',\r\n energy: null,\r\n },\r\n {\r\n month: '7月',\r\n energy: null,\r\n },\r\n {\r\n month: '8月',\r\n energy: null,\r\n },\r\n {\r\n month: '9月',\r\n energy: null,\r\n },\r\n {\r\n month: '10月',\r\n energy: null,\r\n },\r\n {\r\n month: '11月',\r\n energy: null,\r\n },\r\n {\r\n month: '12月',\r\n energy: null,\r\n },\r\n ], //全场月发电量\r\n breakData: [], // 机组故障次数\r\n chartData: [], // 风场总有功 (MW)/风场平均风速 (m/s)\r\n tableData: [\r\n // 年累计发电量/年计划发电量 (MW)\r\n // {month: '2021-01-01', cumulative: 0},\r\n // {month: new Date().getTime(), cumulative: null},\r\n // {month: '2021-12-31', cumulative: null},\r\n { type: '年计划发电量', cumulative: null },\r\n { type: '年累计发电量', cumulative: null },\r\n ],\r\n speedData1: [],\r\n speedData2: [],\r\n currentMsg: 'scada',\r\n tableHeight: 300,\r\n scadaData: [],\r\n cmsData: [],\r\n healthData: [],\r\n headerData: [\r\n {\r\n name: 'SCADA报警',\r\n key: 'scada',\r\n type: 'getFaultData',\r\n },\r\n {\r\n name: '全息报警',\r\n key: 'cms',\r\n type: 'getFaultData',\r\n },\r\n {\r\n name: '健康预警',\r\n key: 'health',\r\n type: 'health',\r\n },\r\n {\r\n name: '运维排程',\r\n key: 'devops',\r\n type: 'devops',\r\n },\r\n ],\r\n scadaColumns: [\r\n {\r\n label: '机组',\r\n prop: 'msgFanName',\r\n minWidth: 50,\r\n align: 'center',\r\n },\r\n {\r\n label: '故障发生时间',\r\n prop: 'msgStartTime',\r\n minWidth: 76,\r\n align: 'center',\r\n },\r\n {\r\n label: '故障代码',\r\n prop: 'msgCode',\r\n minWidth: 80,\r\n align: 'center',\r\n renderColumn: true,\r\n },\r\n {\r\n label: '故障名称',\r\n prop: 'msgContent',\r\n minWidth: 140,\r\n align: 'left',\r\n },\r\n ],\r\n cmsColumns: [\r\n {\r\n label: '机组',\r\n prop: 'msgFanName',\r\n minWidth: 56,\r\n },\r\n {\r\n label: '报警时间',\r\n prop: 'msgStartTime',\r\n minWidth: 76,\r\n },\r\n {\r\n label: '设备名称',\r\n prop: 'msgContent',\r\n },\r\n {\r\n label: '预警状态',\r\n prop: 'msgEqu',\r\n },\r\n ],\r\n healthColumns: [\r\n {\r\n label: '机组',\r\n prop: 'fanName',\r\n minWidth: 56,\r\n align: 'center',\r\n },\r\n {\r\n label: '预警时间',\r\n prop: 'dataTime',\r\n minWidth: 100,\r\n align: 'center',\r\n },\r\n {\r\n label: '关联部位',\r\n prop: 'partName',\r\n minWidth: 50,\r\n align: 'center',\r\n },\r\n {\r\n label: '预警信息',\r\n prop: 'alarmInfo',\r\n minWidth: 120,\r\n align: 'left',\r\n },\r\n {\r\n label: '预警等级',\r\n prop: 'resultStatus',\r\n minWidth: 50,\r\n align: 'center',\r\n },\r\n ],\r\n devopsColumns: [\r\n {\r\n label: '机组',\r\n prop: 'fan_no',\r\n minWidth: 56,\r\n align: 'center',\r\n },\r\n {\r\n label: '任务时间',\r\n prop: 'task_time',\r\n minWidth: 76,\r\n align: 'center',\r\n },\r\n {\r\n label: '任务内容',\r\n prop: 'task_content',\r\n minWidth: 76,\r\n align: 'center',\r\n },\r\n {\r\n label: '计划状态',\r\n prop: 'planStatus',\r\n align: 'center',\r\n },\r\n ],\r\n healthScore: '', //健康评分\r\n unplannedDowntime: '', // 减少非计划停机\r\n devopsData: [],\r\n entryBodyStyle: {\r\n padding: '0',\r\n height: '100%',\r\n },\r\n sysList: [],\r\n yearPlanElectric: null,\r\n fanBreakData: null,\r\n accecptData: false,\r\n monthLength: 0,\r\n schedulingDateTime: ''\r\n }\r\n },\r\n created() { },\r\n mounted() {\r\n this.getViewDateTime()\r\n // 获取需要绑定的table\r\n this.dom = this.$refs.table.bodyWrapper\r\n this.dom.addEventListener('scroll', () => {\r\n // 监听表格滚动距离\r\n let scrollTop = this.dom.scrollTop\r\n // console.log(scrollTop);\r\n })\r\n\r\n this.getHealthOverview() //获取健康监测总览\r\n this.accecptData = true\r\n document.addEventListener('visibilitychange', this.windowVisiable)\r\n this.initWindFactory()\r\n this.initMonthEnergy()\r\n // this.initCrewList(this.initChart4)\r\n this.getYearPlanElectric(this.initChart3) //年累计发电量/年计划发电量 (MW)\r\n this.initChart1() // 风场总有功 (MW)/风场平均风速 (m/s)\r\n // this.initChart2() // 全场月发电量\r\n // this.initChart4() // 机组故障次数\r\n this.getSysList()\r\n this.calcTableHeight()\r\n this.getFaultData('scada')\r\n // this.getRealWarn('health')\r\n this.$bus.$on('SCADAMsg', (data) => {\r\n if (this.accecptData) {\r\n this.changeData(data)\r\n }\r\n })\r\n this.$bus.$on('SCADAAlram', (data) => {\r\n if (this.accecptData) {\r\n this.getFaultData('scada')\r\n }\r\n })\r\n },\r\n beforeDestroy() {\r\n // 切换页面 不再接收数据\r\n this.accecptData = false\r\n this.monthDataReady = false\r\n document.removeEventListener('visibilitychange', this.windowVisiable)\r\n },\r\n methods: {\r\n handleMsgCode(errorCode) {\r\n this.$refs.AlarmCodeExplain.open(errorCode)\r\n },\r\n // 获取健康监测总览\r\n getHealthOverview() {\r\n this.heallthStatusList = []\r\n this.healthStatusCount = {}\r\n req.getHealthOverview().then((res) => {\r\n // console.log(res, '健康监测总览')\r\n if (res.state && res.value) {\r\n this.healthScoreList =\r\n res.value.fanHealthStatusScoreList.sort((a, b) => {\r\n return a.statValue - b.statValue\r\n })\r\n this.warnDataList = res.value.fanWarnDataStatList.sort(\r\n (a, b) => {\r\n return b.fanWarnNum - a.fanWarnNum\r\n }\r\n )\r\n this.modelWarnDataStatList =\r\n res.value.modelWarnDataStatList.sort((a, b) => {\r\n return b.modelWarnNum - a.modelWarnNum\r\n })\r\n this.partWarnDataStatList =\r\n res.value.partWarnDataStatList.sort((a, b) => {\r\n return b.partWarnNum - a.partWarnNum\r\n })\r\n this.sectionData.healthScore.val = res.value.healthScore\r\n this.sectionData.unplannedDowntime.val =\r\n res.value.unplannedDowntime\r\n }\r\n })\r\n },\r\n changeItem(type) {\r\n this[`${type}Key`] = this[`${type}Key`] == 1 ? 2 : 1\r\n this[`${type}Title`] = this[`${type}Title${this[`${type}Key`]}`]\r\n this[`${type}List`] = this[`${type}List${this[`${type}Key`]}`]\r\n },\r\n renderHeader(h, { column }) {\r\n if (column.label.length && column.label.length >= 6) {\r\n column.minWidth = 140\r\n }\r\n return h(\r\n 'div',\r\n {\r\n class: 'table-header',\r\n },\r\n [column.label]\r\n )\r\n },\r\n windowVisiable(e) {\r\n if (e.target.visibilityState == 'visible') {\r\n // console.log('回到当前tab标签')\r\n this.reloadChart()\r\n } else {\r\n // console.log('离开当前tab标签')\r\n }\r\n },\r\n reloadChart() {\r\n this.chartData = []\r\n this.chart1.changeData(this.chartData)\r\n },\r\n changeData(data) {\r\n // console.log(data,'data')\r\n // 平均风速\r\n this.sectionData.emsFactoryWinspdAvg.val = data.wind\r\n .emsFactoryWinspdAvg\r\n ? data.wind.emsFactoryWinspdAvg.val\r\n : null\r\n // 风场总有功\r\n this.sectionData.factoryPowAct.val = data.wind.factoryPowAct\r\n ? data.wind.factoryPowAct.val\r\n : null\r\n // 全场当日发电量\r\n this.sectionData.factoryDayEnergy.val = data.wind.factoryDayEnergy\r\n ? data.wind.factoryDayEnergy.val\r\n : null\r\n // 故障台数\r\n this.sectionData.emsFaultCount.val = data.wind.emsFaultCount\r\n ? data.wind.emsFaultCount.val\r\n : null\r\n\r\n let totalEnergy = 0 // 大指标中的累计发电量\r\n let totalEnergyYear = 0 // chart中的累计发电量\r\n let totalEnergyMonth = 0 // 当月发电量\r\n let normal = 0\r\n let changeFaultData = null\r\n for (let crew in data.fan) {\r\n totalEnergy += data.fan[crew].totalEnergy\r\n ? data.fan[crew].totalEnergy.val\r\n : 0\r\n totalEnergyYear += data.fan[crew].totalEnergy_year\r\n ? data.fan[crew].totalEnergy_year.val\r\n : 0\r\n totalEnergyMonth += data.fan[crew].totalEnergy_month\r\n ? data.fan[crew].totalEnergy_month.val\r\n : 0\r\n if (\r\n data.fan[crew].workModeSrc &&\r\n data.fan[crew].workModeSrc.val === 32\r\n ) {\r\n normal++\r\n }\r\n }\r\n if (this.monthDataReady && totalEnergyMonth) {\r\n this.monthEnergyData[this.monthLength] = {\r\n month: this.monthLength + 1 + '月',\r\n energy: Math.round(totalEnergyMonth * 100) / 100, // 保留小数点后两位\r\n }\r\n if (this.chart2) {\r\n this.chart2.changeData(this.monthEnergyData)\r\n }\r\n }\r\n\r\n this.sectionData.totalEnergy.val =\r\n Math.round(totalEnergy * 100) / 100 // 保留小数点后两位 // 累计发电量\r\n this.sectionData.normal.val = normal // 正常台数\r\n this.tableData[1].cumulative =\r\n Math.round(totalEnergyYear * 100) / 100 // 保留小数点后两位\r\n if (this.chart3 && this.tableData[1].cumulative) {\r\n let percent\r\n if (\r\n !this.tableData[1].cumulative &&\r\n !this.tableData[1].cumulative\r\n ) {\r\n percent = 0\r\n } else if (!this.tableData[0].cumulative) {\r\n percent =\r\n this.tableData[1].cumulative /\r\n this.tableData[1].cumulative\r\n } else {\r\n percent =\r\n this.tableData[1].cumulative /\r\n this.tableData[0].cumulative\r\n }\r\n this.chart3.changeData(percent)\r\n }\r\n\r\n // 总有功/风速chart\r\n let newData = {\r\n date: parseInt(data.time),\r\n powAct: data.wind.factoryPowAct\r\n ? data.wind.factoryPowAct.val\r\n : null,\r\n winSpd: data.wind.emsFactoryWinspdAvg\r\n ? data.wind.emsFactoryWinspdAvg.val\r\n : null,\r\n }\r\n // 任意一个有就更新,两个都没有就不更新\r\n if (data.wind.factoryPowAct || data.wind.emsFactoryWinspdAvg) {\r\n this.formatData(newData)\r\n }\r\n },\r\n initMonthEnergy() {\r\n let data = this.qs.stringify({\r\n year: '',\r\n })\r\n let param = {\r\n url: '${cssc}/biz/scada/electricMonth/v1/queryByYear',\r\n data,\r\n method: 'post',\r\n headers: { 'Content-type': 'application/x-www-form-urlencoded' },\r\n }\r\n this.$http.request(param).then((res) => {\r\n if (res && res.data && res.status == 200) {\r\n let resData = res.data\r\n if (resData && resData.length) {\r\n let date = new Date().getDate()\r\n if (date !== 1) {\r\n resData.pop()\r\n }\r\n this.monthLength = resData.length\r\n if (resData.length) {\r\n resData.forEach((item) => {\r\n this.monthEnergyData[item.month - 1].month =\r\n item.month + '月'\r\n this.monthEnergyData[item.month - 1].energy =\r\n item.electric\r\n })\r\n }\r\n this.monthDataReady = true\r\n if (this.chart2) {\r\n this.chart2.changeData(this.monthEnergyData)\r\n }\r\n }\r\n }\r\n })\r\n },\r\n getYearPlanElectric(cb) {\r\n let data = this.qs.stringify({\r\n year: '',\r\n })\r\n let param = {\r\n url: '${cssc}/biz/scada/planElectric/v1/queryByYear',\r\n data,\r\n method: 'post',\r\n headers: { 'Content-type': 'application/x-www-form-urlencoded' },\r\n }\r\n this.$http.request(param).then((res) => {\r\n if (res && res.data && res.status == 200) {\r\n for (let key in res.data) {\r\n this.yearPlanElectric = res.data[key]\r\n this.tableData[0].cumulative = this.yearPlanElectric\r\n }\r\n this.$nextTick(() => {\r\n cb()\r\n })\r\n }\r\n })\r\n },\r\n // 查询消息\r\n getFaultData(sys) {\r\n let data = null\r\n if (sys) {\r\n data = {\r\n pageBean: {\r\n page: 1,\r\n pageSize: 300,\r\n showTotal: true,\r\n },\r\n querys: [\r\n {\r\n group: 'filter',\r\n operation: 'EQUAL',\r\n property: 'msgSys',\r\n relation: 'AND',\r\n value: sys,\r\n },\r\n {\r\n group: 'filter',\r\n operation: 'EQUAL',\r\n property: 'msgType',\r\n relation: 'AND',\r\n value: 'alarm',\r\n },\r\n ],\r\n sorter: [\r\n {\r\n direction: 'DESC',\r\n property: 'msgStartTime',\r\n },\r\n ],\r\n }\r\n } else {\r\n data = {\r\n pageBean: {\r\n page: 1,\r\n pageSize: 300,\r\n showTotal: true,\r\n },\r\n querys: [\r\n {\r\n group: 'filter',\r\n operation: 'EQUAL',\r\n property: 'msgSys',\r\n relation: 'AND',\r\n value: \"cms\",\r\n },\r\n ],\r\n }\r\n }\r\n this.$http\r\n .post('${cssc}/biz/base/faultMessage/v1/queryPage', data)\r\n .then((res) => {\r\n if (res && res.data && res.data.rows) {\r\n this.scadaData = res.data.rows\r\n this.dom.scrollTop = 0 // 表格切换滚动回到顶部\r\n }\r\n })\r\n },\r\n calcTableHeight() {\r\n this.$nextTick(() => {\r\n this.tableHeight = this.$refs.tableCon.clientHeight\r\n })\r\n },\r\n changeMsg(key, type) {\r\n if (this.currentMsg !== key) {\r\n this.currentMsg = key\r\n if (type == 'getFaultData') {\r\n this.getFaultData(key)\r\n } else if (type == 'health') {\r\n this.getRealWarn()\r\n } else if (type == 'devops') {\r\n this.getViewData()\r\n }\r\n }\r\n },\r\n getViewDateTime() {\r\n let query = {\r\n url: `/scheduling-manager/api/optimization/latest-date`,\r\n method: 'get',\r\n }\r\n this.$http.request(query).then((res) => {\r\n if (res && res.status == 200 && res.data) {\r\n this.schedulingDateTime = res.data.data\r\n }\r\n })\r\n },\r\n // 运维排程\r\n getViewData() {\r\n let query = {\r\n url: `/scheduling-manager/api/optimization/viewdata?date=${this.schedulingDateTime}`,\r\n method: 'get',\r\n }\r\n this.$http.request(query).then((res) => {\r\n // console.log(res, 'res')\r\n if (res && res.status == 200 && res.data) {\r\n let tempData = res.data.data.schedulingTask\r\n if (tempData.length) {\r\n this.devopsData = tempData.map(item => {\r\n item.task_time = this.schedulingDateTime\r\n item.planStatus = item.task_status == 1 ? '已排程' : '未排程'\r\n return item\r\n })\r\n } else {\r\n this.devopsData = []\r\n }\r\n }\r\n })\r\n },\r\n // 获取健康预警详情\r\n getRealWarn() {\r\n let data = {\r\n pageBean: {\r\n page: 1,\r\n pageSize: 300,\r\n showTotal: true,\r\n },\r\n sorter: [\r\n {\r\n direction: 'DESC',\r\n property: 'collTime',\r\n },\r\n ],\r\n }\r\n health.getRealWarn(data).then((res) => {\r\n // console.log(res, '健康预警详情')\r\n if (res && res.rows) {\r\n this.healthData = res.rows\r\n this.dom.scrollTop = 0 //表格切换滚动回到顶部\r\n }\r\n })\r\n },\r\n getSysList() {\r\n let parmas = {}\r\n parmas.querys = [\r\n {\r\n group: 'main',\r\n operation: 'EQUAL',\r\n parentGroup: '',\r\n property: 'isShow',\r\n relation: 'AND',\r\n value: 1,\r\n },\r\n ]\r\n parmas.sorter = [\r\n {\r\n direction: 'ASC',\r\n property: 'sn',\r\n },\r\n ]\r\n this.$http\r\n .post('${cssc}/biz/base/systemInfo/v1/list', parmas)\r\n .then((response) => {\r\n if (response && response.data) {\r\n this.sysList = response.data\r\n }\r\n })\r\n },\r\n initWindFactory() {\r\n this.$http.post('${cssc}/biz/base/windFactory/v1/getOne').then(\r\n (resp) => {\r\n if (resp && resp.data) {\r\n this.sectionData.capacity.val = resp.data.capacity\r\n this.sectionData.setsNo.val = resp.data.setsNo\r\n }\r\n },\r\n (error) => {\r\n reject(error)\r\n }\r\n )\r\n },\r\n initCrewList(cb) {\r\n let query = {\r\n sorter: [{ direction: 'ASC', property: 'sn' }],\r\n }\r\n this.$http.post('${cssc}/biz/base/fanInfo/v1/list', query).then(\r\n (resp) => {\r\n if (resp && resp.data) {\r\n this.breakData = []\r\n resp.data.forEach((item, index) => {\r\n this.breakData.push({\r\n fan: item.fanCode,\r\n value: null,\r\n })\r\n })\r\n // 画图\r\n this.$nextTick(() => {\r\n cb()\r\n })\r\n }\r\n },\r\n (error) => {\r\n reject(error)\r\n }\r\n )\r\n },\r\n formatData(newData) {\r\n this.chartData.push(newData)\r\n if (this.chartData.length > 300) {\r\n this.chartData.splice(0, 1)\r\n }\r\n this.chart1.changeData(this.chartData)\r\n },\r\n initChart1() {\r\n this.chart1 = new Chart({\r\n container: 'container1',\r\n autoFit: true,\r\n height: 300,\r\n })\r\n this.chart1.data(this.chartData)\r\n this.chart1.scale({\r\n date: {\r\n alias: '时间',\r\n type: 'time',\r\n formatter: (value) => {\r\n return utils.formatDate(value, 'time')\r\n },\r\n },\r\n powAct: {\r\n alias: '总有功 (kW)',\r\n sync: true, // 将 pv 字段数值同 time 字段数值进行同步\r\n nice: true,\r\n min: 0,\r\n },\r\n winSpd: {\r\n alias: '平均风速(m/s)',\r\n sync: true, // 将 pv 字段数值同 time 字段数值进行同步\r\n nice: true,\r\n min: 0,\r\n max: 20,\r\n },\r\n })\r\n this.chart1.axis('date', {\r\n grid: null,\r\n label: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n },\r\n },\r\n })\r\n this.chart1.axis('powAct', {\r\n grid: {\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n lineWidth: 1,\r\n lineDash: [3, 3],\r\n },\r\n },\r\n },\r\n title: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n label: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n },\r\n },\r\n })\r\n this.chart1.axis('winSpd', {\r\n grid: null,\r\n title: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n label: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n },\r\n },\r\n })\r\n\r\n this.chart1.legend({\r\n position: 'top',\r\n custom: true,\r\n itemName: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n items: [\r\n {\r\n name: '总有功',\r\n id: 'powAct',\r\n value: 'powAct',\r\n marker: {\r\n symbol: 'circle',\r\n style: { fill: '#4FAAEB' },\r\n },\r\n },\r\n {\r\n name: '平均风速',\r\n id: 'winSpd',\r\n value: 'winSpd',\r\n\r\n marker: {\r\n symbol: 'circle',\r\n style: { fill: '#eb4f4f' },\r\n },\r\n },\r\n ],\r\n })\r\n this.chart1.tooltip({\r\n shared: true,\r\n showCrosshairs: true,\r\n domStyles: {\r\n 'g2-tooltip': {\r\n background: 'rgba(0,0,0, 0.8)',\r\n color: '#d6e0ec',\r\n },\r\n },\r\n })\r\n this.chart1.line().position('date*powAct').color('#4FAAEB')\r\n this.chart1.line().position('date*winSpd').color('#eb4f4f')\r\n this.chart1.interaction('active-region')\r\n this.chart1.render()\r\n },\r\n initChart2() {\r\n this.chart2 = new Chart({\r\n container: 'container2',\r\n autoFit: true,\r\n height: 300,\r\n padding: [20, 20, 20, 40],\r\n })\r\n\r\n // this.chart3.data(dv.rows)\r\n this.chart2.data(this.monthEnergyData)\r\n this.chart2.scale({\r\n month: {\r\n sync: true,\r\n nice: true,\r\n },\r\n energy: {\r\n alias: '月发电量(MW)',\r\n sync: true,\r\n nice: true,\r\n },\r\n })\r\n\r\n this.chart2.axis('month', {\r\n label: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n },\r\n },\r\n })\r\n this.chart2.axis('energy', {\r\n label: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n },\r\n },\r\n grid: {\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n lineWidth: 1,\r\n lineDash: [3, 3],\r\n },\r\n },\r\n alignTick: true,\r\n },\r\n })\r\n this.chart2.legend(false)\r\n this.chart2.tooltip({\r\n shared: false,\r\n showCrosshairs: false,\r\n domStyles: {\r\n 'g2-tooltip': {\r\n background: 'rgba(0,0,0, 0.8)',\r\n color: '#d6e0ec',\r\n },\r\n },\r\n })\r\n\r\n this.chart2.interval().position('month*energy').color('month')\r\n // .label('energy', (energy) => {\r\n // return {\r\n // position: 'top',\r\n // offset: 2,\r\n // content: (originData) => {\r\n // return energy\r\n // },\r\n // style: {\r\n // fill: '#fff',\r\n // },\r\n // }\r\n // }) //#1486bb\r\n // .style({fill: 'l(90) 0:#22C3FE 0.5:#199FD7 1:#044879'})\r\n this.chart2.interaction('element-active')\r\n this.chart2.render()\r\n },\r\n initChart3() {\r\n document.getElementById('container3').style.background = '#0b2a46'\r\n let percent\r\n if (\r\n !this.tableData[0].cumulative &&\r\n !this.tableData[1].cumulative\r\n ) {\r\n percent = 0\r\n } else if (!this.tableData[0].cumulative) {\r\n percent =\r\n this.tableData[1].cumulative / this.tableData[1].cumulative\r\n } else {\r\n percent =\r\n this.tableData[1].cumulative / this.tableData[0].cumulative\r\n }\r\n this.chart3 = new Liquid('liquid', {\r\n percent: percent,\r\n outline: {\r\n border: 4,\r\n distance: 0,\r\n },\r\n wave: {\r\n count: 3,\r\n length: 60,\r\n },\r\n pattern: { type: 'line' },\r\n statistic: {\r\n content: {\r\n style: {\r\n fill: '#fff',\r\n },\r\n },\r\n },\r\n theme: {\r\n styleSheet: {\r\n brandColor: '#10c4b5',\r\n },\r\n },\r\n })\r\n this.chart3.render()\r\n },\r\n // initChart3() {\r\n // this.chart3 = new Chart({\r\n // container: 'container3',\r\n // autoFit: true,\r\n // height: 300,\r\n // })\r\n\r\n // // this.chart3.data(dv.rows)\r\n // this.chart3.data(this.tableData)\r\n // this.chart3.scale({\r\n // type: {\r\n // sync: true,\r\n // nice: true,\r\n // },\r\n // cumulative: {\r\n // alias: '发电量(MW)',\r\n // sync: true,\r\n // nice: true,\r\n // // maxLimit: parseInt(this.yearPlanElectric * 1.2),\r\n // },\r\n // })\r\n\r\n // this.chart3.axis('type', {\r\n // label: {\r\n // style: {\r\n // fill: '#979ba4',\r\n // },\r\n // },\r\n // line: {\r\n // style: {\r\n // stroke: '#414959',\r\n // },\r\n // },\r\n // })\r\n // this.chart3.axis('cumulative', {\r\n // label: {\r\n // style: {\r\n // fill: '#979ba4',\r\n // },\r\n // },\r\n // line: {\r\n // style: {\r\n // stroke: '#414959',\r\n // },\r\n // },\r\n // grid: {\r\n // line: {\r\n // style: {\r\n // stroke: '#414959',\r\n // lineWidth: 1,\r\n // lineDash: [3, 3],\r\n // },\r\n // },\r\n // alignTick: true,\r\n // },\r\n // })\r\n // this.chart3.tooltip({\r\n // shared: false,\r\n // showCrosshairs: false,\r\n // domStyles: {\r\n // 'g2-tooltip': {\r\n // background: 'rgba(0,0,0, 0.8)',\r\n // color: '#d6e0ec',\r\n // },\r\n // },\r\n // })\r\n // this.chart3.legend(false)\r\n\r\n // this.chart3\r\n // .interval()\r\n // .position('type*cumulative')\r\n // .color('type')\r\n // .label('cumulative', {\r\n // offset: 10,\r\n // style: {\r\n // fill: '#979ba4',\r\n // fontSize: 12,\r\n // },\r\n // })\r\n // this.chart3.interaction('element-highlight')\r\n // this.chart3.render()\r\n // },\r\n // initChart3() {\r\n // this.chart3 = new Chart({\r\n // container: 'container3',\r\n // autoFit: true,\r\n // height: 300,\r\n // })\r\n\r\n // // this.chart3.data(dv.rows)\r\n // this.chart3.data(this.tableData)\r\n // this.chart3.scale({\r\n // month: {\r\n // sync: true,\r\n // nice: true,\r\n // },\r\n // cumulative: {\r\n // alias: '累计发电量(MW)',\r\n // sync: true,\r\n // nice: true,\r\n // maxLimit: parseInt(this.yearPlanElectric * 1.2),\r\n // },\r\n // })\r\n\r\n // this.chart3.axis('month', {\r\n // label: {\r\n // style: {\r\n // fill: '#979ba4',\r\n // },\r\n // },\r\n // line: {\r\n // style: {\r\n // stroke: '#414959',\r\n // },\r\n // },\r\n // })\r\n // this.chart3.axis('cumulative', {\r\n // label: {\r\n // style: {\r\n // fill: '#979ba4',\r\n // },\r\n // },\r\n // line: {\r\n // style: {\r\n // stroke: '#414959',\r\n // },\r\n // },\r\n // grid: {\r\n // line: {\r\n // style: {\r\n // stroke: '#414959',\r\n // lineWidth: 1,\r\n // lineDash: [3, 3],\r\n // },\r\n // },\r\n // alignTick: true,\r\n // },\r\n // })\r\n // this.chart3.legend({\r\n // position: 'right',\r\n // })\r\n // this.chart3.tooltip({\r\n // shared: false,\r\n // showCrosshairs: true,\r\n // domStyles: {\r\n // 'g2-tooltip': {\r\n // background: 'rgba(0,0,0, 0.8)',\r\n // color: '#d6e0ec',\r\n // },\r\n // },\r\n // })\r\n // this.chart3.annotation().line({\r\n // top: true,\r\n // start: ['min', this.yearPlanElectric],\r\n // end: ['max', this.yearPlanElectric],\r\n // style: {\r\n // stroke: '#ff9c00',\r\n // lineWidth: 1,\r\n // lineDash: [5, 5],\r\n // },\r\n // text: {\r\n // position: 'start',\r\n // style: {\r\n // fill: '#d6e0ec',\r\n // fontSize: 12,\r\n // fontWeight: 'normal',\r\n // },\r\n // content: `年计划发电量 ${this.yearPlanElectric} MW`,\r\n // offsetY: -4,\r\n // },\r\n // })\r\n\r\n // this.chart3.line().position('month*cumulative').color('#25b4be')\r\n // this.chart3.area().position('month*cumulative').color('#0195ff')\r\n // this.chart3.render()\r\n // },\r\n initChart4() {\r\n this.chart4 = new Chart({\r\n container: 'container4',\r\n autoFit: true,\r\n height: 300,\r\n })\r\n this.chart4.data(this.breakData)\r\n this.chart4.scale({\r\n fan: {\r\n sync: true,\r\n nice: true,\r\n },\r\n value: {\r\n alias: '故障次数',\r\n sync: true,\r\n nice: true,\r\n },\r\n })\r\n\r\n this.chart4.axis('fan', {\r\n label: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n },\r\n },\r\n })\r\n this.chart4.axis('value', {\r\n label: {\r\n style: {\r\n fill: '#979ba4',\r\n },\r\n },\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n },\r\n },\r\n grid: {\r\n line: {\r\n style: {\r\n stroke: '#414959',\r\n lineWidth: 1,\r\n lineDash: [3, 3],\r\n },\r\n },\r\n alignTick: true,\r\n },\r\n })\r\n this.chart4.legend(false)\r\n this.chart4.tooltip({\r\n shared: false,\r\n showCrosshairs: true,\r\n domStyles: {\r\n 'g2-tooltip': {\r\n background: 'rgba(0,0,0, 0.8)',\r\n color: '#d6e0ec',\r\n },\r\n },\r\n })\r\n\r\n this.chart4\r\n .interval()\r\n .position('fan*value')\r\n .color('#22C3FE')\r\n .style({ fill: 'l(90) 0:#22C3FE 0.5:#199FD7 1:#25b4be' })\r\n this.chart4.interaction('element-active')\r\n this.chart4.render()\r\n },\r\n handleOpenSys(url) {\r\n if (url) {\r\n window.open(url, '_blank')\r\n } else {\r\n this.$message.warning('未配置系统链接')\r\n }\r\n // url\r\n // window.open(url, '_blank')\r\n // window.open('http://www.baidu.com', '_blank')\r\n },\r\n },\r\n}\r\n",null]}