Home.vue 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087
  1. <template>
  2. <div>
  3. <div class="btn-group-tabs">
  4. <BtnGroup2 :btnGroups="btnGroupsss" :rowIndex="rowIndex" :index="selectIndex" @select="select"></BtnGroup2>
  5. </div>
  6. <div class="wind-site-home">
  7. <div class="mg-b-16">
  8. <btn-group-double :btnGroups="btnGroups" :rowIndex="0" :index="1" @select="select" />
  9. </div>
  10. <!-- <row v-if="paramsId.includes('FDC')">
  11. <wind-site-weather :time="nowTime" :data="tqmap" :paramsId="resCode" />
  12. <panel-3 class="wind-site-info">
  13. <row align="middle">
  14. <div class="info-item">
  15. <div class="value">{{ jczbmap.zjrl }}</div>
  16. <div class="text">装机容量</div>
  17. </div>
  18. <div class="info-item">
  19. <div class="value">{{ jczbmap.rfdl }}</div>
  20. <div class="text">日发电量</div>
  21. </div>
  22. <div class="info-item">
  23. <div class="value">{{ jczbmap.yfdl }}</div>
  24. <div class="text">月发电量</div>
  25. </div>
  26. <div class="info-item">
  27. <div class="value">{{ jczbmap.nfdl }}</div>
  28. <div class="text">年发电量</div>
  29. </div>
  30. <div class="info-item">
  31. <div class="value">{{ jczbmap.ylyxs }}</div>
  32. <div class="text">月利用小时</div>
  33. </div>
  34. <div class="info-item">
  35. <div class="value">{{ jczbmap.nlyxs }}</div>
  36. <div class="text">年利用小时</div>
  37. </div>
  38. <div class="info-item">
  39. <div class="value">{{ jczbmap.ssfs }}</div>
  40. <div class="text">实时风速</div>
  41. </div>
  42. <div class="info-item">
  43. <div class="value">{{ jczbmap.sjgl }}</div>
  44. <div class="text">实时功率</div>
  45. </div>
  46. </row>
  47. </panel-3>
  48. <panel-3 class="wind-running-info">
  49. <row align="middle">
  50. <div class="fengji">
  51. <div class="fengji-icon svg-icon svg-icon-white">
  52. <svg-icon class="" svgid="svg-风机" />
  53. </div>
  54. <div class="info">
  55. <div class="text green">接入风机</div>
  56. <div class="value">{{ jczbmap.jrts }}</div>
  57. </div>
  58. </div>
  59. <div class="situation">
  60. <row class="icon-status">
  61. <div class="status">
  62. <span class="svg-icon svg-icon-green">
  63. <svg-icon svgid="svg-standby" />
  64. </span>
  65. <span class="text green">
  66. 待机
  67. </span>
  68. </div>
  69. <div class="status">
  70. <span class="svg-icon svg-icon-purple">
  71. <svg-icon svgid="svg-normal-power" />
  72. </span>
  73. <span class="text purple">
  74. 运行
  75. </span>
  76. </div>
  77. <div class="status ">
  78. <span class="svg-icon svg-icon-pink">
  79. <svg-icon svgid="svg-limit-power" style="margin:3px 0.3704vh -3px 0;" />
  80. </span>
  81. <span class="text pink">
  82. 限电
  83. </span>
  84. </div>
  85. <div class="status">
  86. <span class="svg-icon svg-icon-red">
  87. <svg-icon svgid="svg-gz-downtime" />
  88. </span>
  89. <span class="text red">
  90. 故障
  91. </span>
  92. </div>
  93. <div class="status">
  94. <span class="svg-icon svg-icon-orange">
  95. <svg-icon svgid="svg-jx-downtime" />
  96. </span>
  97. <span class="text orange">
  98. 检修
  99. </span>
  100. </div>
  101. <div class="status">
  102. <span class="svg-icon svg-icon-gray">
  103. <svg-icon svgid="svg-offline" />
  104. </span>
  105. <span class="text gray">
  106. 离线
  107. </span>
  108. </div>
  109. <div class="status">
  110. <span class="svg-icon svg-icon-white">
  111. <svg-icon svgid="svg-intranet-involvement" />
  112. </span>
  113. <span class="text white">
  114. 受累
  115. </span>
  116. </div>
  117. </row>
  118. <row>
  119. <div class="status">
  120. <span class="value">
  121. {{ jczbmap.djnum }}
  122. </span>
  123. </div>
  124. <div class="status">
  125. <span class="value">
  126. {{ jczbmap.zcfdnum }}
  127. </span>
  128. </div>
  129. <div class="status">
  130. <span class="value">
  131. {{ jczbmap.xdjclnum }}
  132. </span>
  133. </div>
  134. <div class="status">
  135. <span class="value">
  136. {{ jczbmap.gztjnum }}
  137. </span>
  138. </div>
  139. <div class="status">
  140. <span class="value">
  141. {{ jczbmap.jxtjnum }}
  142. </span>
  143. </div>
  144. <div class="status">
  145. <span class="value">
  146. {{ jczbmap.dwslnum }}
  147. </span>
  148. </div>
  149. <div class="status">
  150. <span class="value">
  151. {{ jczbmap.lxnum }}
  152. </span>
  153. </div>
  154. </row>
  155. </div>
  156. </row>
  157. </panel-3>
  158. </row> -->
  159. <row >
  160. <wind-site-weather :time="nowTime" :data="tqmap" :paramsId="resCode" />
  161. <panel-3 class="wind-site-info">
  162. <row align="middle">
  163. <div class="info-item">
  164. <div class="value">{{ jczbmap.zjrl }}</div>
  165. <div class="text">装机容量</div>
  166. </div>
  167. <div class="info-item">
  168. <div class="value">{{ jczbmap.rfdl }}</div>
  169. <div class="text">日发电量</div>
  170. </div>
  171. <div class="info-item">
  172. <div class="value">{{ jczbmap.yfdl }}</div>
  173. <div class="text">月发电量</div>
  174. </div>
  175. <div class="info-item">
  176. <div class="value">{{ jczbmap.nfdl }}</div>
  177. <div class="text">年发电量</div>
  178. </div>
  179. <div class="info-item">
  180. <div class="value">{{ jczbmap.ylyxs }}</div>
  181. <div class="text">月利用小时</div>
  182. </div>
  183. <div class="info-item">
  184. <div class="value">{{ jczbmap.nlyxs }}</div>
  185. <div class="text">年利用小时</div>
  186. </div>
  187. <div class="info-item">
  188. <div class="value">{{ jczbmap.ssfs }}</div>
  189. <!-- <div class="text">实时风速</div> -->
  190. <div class="text">{{resCode.includes('FDC')?'实时风速':'平均功率'}} </div>
  191. </div>
  192. <div class="info-item">
  193. <div class="value">{{ jczbmap.sjgl }}</div>
  194. <div class="text">实时功率</div>
  195. </div>
  196. </row>
  197. </panel-3>
  198. <panel-3 class="wind-running-info">
  199. <row align="middle">
  200. <div class="fengji" v-if=" resCode.indexOf('GDC') == -1 ">
  201. <div class="fengji-icon svg-icon svg-icon-white">
  202. <svg-icon class="" svgid="svg-风机" />
  203. </div>
  204. <div class="info">
  205. <div class="text green" >接入风机 </div>
  206. <!-- <div class="text green" v-if="resCode.includes('FDC') && resCode != ''">接入风机 </div>
  207. <div class="text green" v-else-if="resCode.includes('GDC') && resCode != ''">接入光伏 </div> -->
  208. <div class="value">{{ jczbmap.jrts }}</div>
  209. </div>
  210. </div>
  211. <div class="fengji" v-else-if=" resCode.indexOf('FDC') == -1 ">
  212. <div class="fengji-icon svg-icon svg-icon-white">
  213. <svg-icon class="" svgid="svg-gf-matrix" />
  214. </div>
  215. <div class="info">
  216. <div class="text green">接入光伏</div>
  217. <!-- <div class="text green" v-if="resCode.includes('FDC') && resCode != ''">接入风机 </div>
  218. <div class="text green" v-else-if="resCode.includes('GDC') && resCode != ''">接入光伏 </div> -->
  219. <div class="value">{{ jczbmap.jrts }}</div>
  220. </div>
  221. </div>
  222. <div class="situation">
  223. <row class="icon-status">
  224. <div class="status">
  225. <span class="svg-icon svg-icon-green">
  226. <svg-icon svgid="svg-standby" />
  227. </span>
  228. <span class="text green">
  229. 待机
  230. </span>
  231. </div>
  232. <div class="status">
  233. <span class="svg-icon svg-icon-purple">
  234. <svg-icon svgid="svg-normal-power" />
  235. </span>
  236. <span class="text purple">
  237. 运行
  238. </span>
  239. </div>
  240. <div class="status ">
  241. <span class="svg-icon svg-icon-pink">
  242. <svg-icon svgid="svg-limit-power" style="margin:3px 0.3704vh -3px 0;" />
  243. </span>
  244. <span class="text pink">
  245. 限电
  246. </span>
  247. </div>
  248. <div class="status">
  249. <span class="svg-icon svg-icon-red">
  250. <svg-icon svgid="svg-gz-downtime" />
  251. </span>
  252. <span class="text red">
  253. 故障
  254. </span>
  255. </div>
  256. <div class="status">
  257. <span class="svg-icon svg-icon-orange">
  258. <svg-icon svgid="svg-jx-downtime" />
  259. </span>
  260. <span class="text orange">
  261. 检修
  262. </span>
  263. </div>
  264. <div class="status">
  265. <span class="svg-icon svg-icon-gray">
  266. <svg-icon svgid="svg-offline" />
  267. </span>
  268. <span class="text gray">
  269. 离线
  270. </span>
  271. </div>
  272. <div class="status">
  273. <span class="svg-icon svg-icon-white">
  274. <svg-icon svgid="svg-intranet-involvement" />
  275. </span>
  276. <span class="text white">
  277. 受累
  278. </span>
  279. </div>
  280. </row>
  281. <row>
  282. <div class="status">
  283. <span class="value">
  284. {{ jczbmap.djnum }}
  285. </span>
  286. </div>
  287. <div class="status">
  288. <span class="value">
  289. {{ jczbmap.zcfdnum }}
  290. </span>
  291. </div>
  292. <div class="status">
  293. <span class="value">
  294. {{ jczbmap.xdjclnum }}
  295. </span>
  296. </div>
  297. <div class="status">
  298. <span class="value">
  299. {{ jczbmap.gztjnum }}
  300. </span>
  301. </div>
  302. <div class="status">
  303. <span class="value">
  304. {{ jczbmap.jxtjnum }}
  305. </span>
  306. </div>
  307. <div class="status">
  308. <span class="value">
  309. {{ jczbmap.dwslnum }}
  310. </span>
  311. </div>
  312. <div class="status">
  313. <span class="value">
  314. {{ jczbmap.lxnum }}
  315. </span>
  316. </div>
  317. </row>
  318. </div>
  319. </row>
  320. </panel-3>
  321. </row>
  322. <div class="first-info mg-t-16 mg-b-16">
  323. <div style="flex:0 1 450px;">
  324. <panel title="场站">
  325. <station height="18.519vh" />
  326. </panel>
  327. </div>
  328. <div class="mg-l-16" style="flex:1 1 auto;" ref="lineChart">
  329. <panel title="4小时功率曲线图" v-if="resCode.includes('FDC')">
  330. <multiple-line-chart height="18.519vh" v-if="Powertrend" :list="Powertrend.value" :units="Powertrend.units"
  331. :showLegend="true" />
  332. </panel>
  333. <panel title="4小时功率曲线图" v-if="resCode.includes('GDC')">
  334. <multiple-line-chart height="18.519vh" v-if="Powertrend1" :list="Powertrend1.value" :units="Powertrend1.units"
  335. :showLegend="true" />
  336. </panel>
  337. </div>
  338. <div class="mg-l-16" style="flex:0 0 400px;">
  339. <panel class="light-matrix-panel">
  340. <light-matrix :list="fjmap" />
  341. </panel>
  342. </div>
  343. </div>
  344. <row>
  345. <Col :span="8">
  346. <panel title="日度损失电量分析">
  347. <dual-pie-chart :innerData="pieChartData.dayData" :outerData="pieChartData.dayData" height="21.296vh" />
  348. </panel>
  349. </Col>
  350. <Col :span="8">
  351. <panel title="月度损失电量分析">
  352. <dual-pie-chart :innerData="pieChartData.monthData" :outerData="pieChartData.monthData" height="21.296vh" />
  353. </panel>
  354. </Col>
  355. <Col :span="8">
  356. <panel title="年度损失电量分析">
  357. <dual-pie-chart :innerData="pieChartData.yearData" :outerData="pieChartData.yearData" height="21.296vh" />
  358. </panel>
  359. </Col>
  360. </row>
  361. <row>
  362. <Col :span="8">
  363. <panel title="日度损失电量分析">
  364. <hover-bar-chart :list="dayLost" height="21.296vh" />
  365. </panel>
  366. </Col>
  367. <Col :span="8">
  368. <panel title="日发电量对比">
  369. <multiple-bar-chart height="21.296vh" :list="CompleteElectricity.data" :units="CompleteElectricity.units"
  370. :showLegend="true" />
  371. </panel>
  372. </Col>
  373. <Col :span="8">
  374. <panel title="月发电量对比">
  375. <normal-line-chart height="21.296vh" :list="MonthCompare.value" :units="MonthCompare.units" />
  376. </panel>
  377. </Col>
  378. </row>
  379. </div>
  380. </div>
  381. </template>
  382. <script>
  383. import HoverBarChart from "../../../../components/chart/bar/hover-bar-chart.vue";
  384. import MultipleBarChart from "../../../../components/chart/bar/multiple-bar-chart.vue";
  385. import MultipleLineChart from "../../../../components/chart/line/double-line-chart.vue";
  386. import NormalLineChart from "../../../../components/chart/line/normal-line-chart.vue";
  387. import DualPieChart from "../../../../components/chart/pie/dual-pie-chart.vue";
  388. import BtnGroupDouble from "../../../../components/coms/btn/btn-group-double.vue";
  389. import Col from "../../../../components/coms/grid/col.vue";
  390. import Row from "../../../../components/coms/grid/row.vue";
  391. import SvgIcon from "../../../../components/coms/icon/svg-icon.vue";
  392. import Panel from "../../../../components/coms/panel/panel.vue";
  393. import Panel3 from "../../../../components/coms/panel/panel3.vue";
  394. import LightMatrix from "./light-matrix.vue";
  395. import Station from "./Station.vue";
  396. import WindSiteWeather from "./wind-site-weather.vue";
  397. import BtnGroup2 from "@com/coms/btn/btn-group-double.vue";
  398. export default {
  399. // 名称
  400. name: "WindSiteHome",
  401. // 使用组件
  402. components: { BtnGroup2, WindSiteWeather, Row, Col, Panel, DualPieChart, MultipleLineChart, Panel3, SvgIcon, HoverBarChart, MultipleBarChart, NormalLineChart, LightMatrix, BtnGroupDouble, Station },
  403. // 数据
  404. data () {
  405. return {
  406. timmer: null, // 计时器
  407. timmer2: null,
  408. paramsId:"",
  409. resCode:"",
  410. nowTime: "", // 时间
  411. fjmap: [], // 分机矩阵
  412. tqmap: {}, // 天气数据
  413. glvos: {}, // 72小时功率曲线图
  414. wxssmap: {}, // 五项损失饼图数据
  415. jczbmap: {}, // 顶部基础数据
  416. dayLost: [], // 日度损失电量分析柱状图
  417. donePower: [], // 完成电量柱状图
  418. // 饼图数据
  419. pieChartData: {
  420. // 日度
  421. dayData: [
  422. {
  423. title: "",
  424. value: [],
  425. },
  426. ],
  427. // 月度
  428. monthData: [
  429. {
  430. title: "",
  431. value: [],
  432. },
  433. ],
  434. // 年度
  435. yearData: [
  436. {
  437. title: "",
  438. value: [],
  439. },
  440. ],
  441. },
  442. // 完成电量
  443. CompleteElectricity: {
  444. data: [
  445. {
  446. title: "发电量",
  447. yAxisIndex: 0,
  448. value: [],
  449. },
  450. {
  451. title: "预测电量",
  452. yAxisIndex: 0,
  453. value: [],
  454. },
  455. ],
  456. units: ["", ""],
  457. },
  458. // 4小时功率曲线图(风电场)
  459. Powertrend: {
  460. value: [
  461. {
  462. title: "",
  463. value: [],
  464. },
  465. ],
  466. },
  467. // 4小时功率曲线图(光电场)
  468. Powertrend1: {
  469. value: [
  470. {
  471. title: "",
  472. value: [],
  473. },
  474. ],
  475. },
  476. // 月发电量对比
  477. MonthCompare: {
  478. units: ["(MK)"],
  479. value: [
  480. {
  481. title: "月发电量",
  482. yAxisIndex: 0,
  483. value: [],
  484. },
  485. {
  486. title: "月预测电量",
  487. yAxisIndex: 0,
  488. value: [],
  489. },
  490. ],
  491. },
  492. selectIndex: 0,
  493. rowIndex: 0,
  494. btnGroupsss: [
  495. {
  496. icon: "svg-wind-site",
  497. btns: [],
  498. },
  499. {
  500. icon: "svg-photovoltaic",
  501. btns: [],
  502. },
  503. ],
  504. };
  505. },
  506. // 函数
  507. methods: {
  508. getWp () {
  509. let that = this;
  510. that.API.requestData({
  511. method: "GET",
  512. subUrl: "powercompare/windfarmAllAjax",
  513. success (res) {
  514. let btnGroups = [
  515. {
  516. icon: "svg-wind-site",
  517. btns: [],
  518. },
  519. {
  520. icon: "svg-photovoltaic",
  521. btns: [],
  522. },
  523. ];
  524. res.data.forEach((ele, index) => {
  525. if (ele.id.indexOf("FDC") !== -1) {
  526. btnGroups[0].btns.push({
  527. text: ele.name,
  528. code: ele.id,
  529. });
  530. } else {
  531. btnGroups[1].btns.push({
  532. text: ele.name,
  533. code: ele.id,
  534. });
  535. }
  536. });
  537. that.btnGroupsss = btnGroups;
  538. that.renderBtnActiveIndex();
  539. },
  540. });
  541. },
  542. renderBtnActiveIndex () {
  543. this.btnGroupsss.forEach((pEle, pIndex) => {
  544. pEle.btns.forEach((cEle, cIndex) => {
  545. if (cEle.code === this.wpId) {
  546. this.rowIndex = pIndex;
  547. this.selectIndex = cIndex;
  548. }
  549. });
  550. });
  551. },
  552. select (res) {
  553. let that = this;
  554. this.$router.replace({
  555. path: `/monitor/windsite/home/${res.code}`,
  556. });
  557. that.resCode = res.code;
  558. // console.log('resCode:',that.resCode)
  559. // console.log('ParamsId:',that.paramsId)
  560. console.log('paramsId:',that.paramsId.indexOf('FDC'))
  561. console.log('resCode:',that.resCode.indexOf('FDC'))
  562. console.log('paramsId:',that.paramsId.indexOf('GDC'))
  563. console.log('resCode:',that.resCode.indexOf('GDC'))
  564. },
  565. // 根据风机状态码返回对应 class
  566. getColor (fjzt) {
  567. switch (fjzt) {
  568. case 0:
  569. return "green";
  570. case 1:
  571. return "purple";
  572. case 2:
  573. return "red";
  574. case 3:
  575. return "gray";
  576. case 4:
  577. return "orange";
  578. case 5:
  579. return "purple";
  580. case 6:
  581. return "write";
  582. }
  583. },
  584. // 请求服务
  585. requestData (showLoading) {
  586. this.requestWpInfo(showLoading);
  587. },
  588. // 获取场站监视数据
  589. requestWpInfo (showLoading) {
  590. let that = this;
  591. that.API.requestData({
  592. showLoading,
  593. method: "POST",
  594. subUrl: "monitor/findWpInfoBywpId",
  595. data: {
  596. wpId: that.wpId,
  597. },
  598. success (res) {
  599. if (res.data) {
  600. // console.log('resWpinfo:',res.data)
  601. that.tqmap = res.data.tqmap;
  602. that.tqmap.name = res.data.jczbmap.name
  603. that.tqmap.resCode = that.resCode
  604. let fjmap = [];
  605. let keys = ["value1", "value2", "value3", "value4", "value5", "value6", "value7", "value9"];
  606. let Powertrend = {
  607. // 图表所用单位
  608. units: ["(万KWh)", "(风速)"],
  609. value: [
  610. {
  611. title: "应发功率",
  612. smooth: true, // 使用单位
  613. value: [],
  614. },
  615. {
  616. title: "实发功率",
  617. smooth: true, // 使用单位
  618. value: [],
  619. },
  620. {
  621. title: "理论功率",
  622. smooth: true, // 使用单位
  623. value: [],
  624. },
  625. {
  626. title: "预测功率",
  627. smooth: true, // 使用单位
  628. value: [],
  629. },
  630. {
  631. title: "保证功率",
  632. smooth: true, // 使用单位
  633. value: [],
  634. },
  635. {
  636. title: "平均风速",
  637. smooth: true, // 使用单位
  638. value: [],
  639. },
  640. {
  641. title: "小时预测功率",
  642. smooth: true, // 使用单位
  643. value: [],
  644. },
  645. {
  646. title: "最有功率律",
  647. smooth: true, // 使用单位
  648. value: [],
  649. },
  650. ],
  651. };
  652. let Powertrend1 = {
  653. // 图表所用单位
  654. units: ["(万KWh)", "(风速)"],
  655. value: [
  656. {
  657. title: "应发功率",
  658. smooth: true, // 使用单位
  659. value: [],
  660. },
  661. {
  662. title: "实发功率",
  663. smooth: true, // 使用单位
  664. value: [],
  665. },
  666. {
  667. title: "理论功率",
  668. smooth: true, // 使用单位
  669. value: [],
  670. },
  671. {
  672. title: "预测功率",
  673. smooth: true, // 使用单位
  674. value: [],
  675. },
  676. {
  677. title: "保证功率",
  678. smooth: true, // 使用单位
  679. value: [],
  680. },
  681. {
  682. title: "平均功率",
  683. smooth: true, // 使用单位
  684. value: [],
  685. },
  686. {
  687. title: "小时预测功率",
  688. smooth: true, // 使用单位
  689. value: [],
  690. },
  691. {
  692. title: "最有功率律",
  693. smooth: true, // 使用单位
  694. value: [],
  695. },
  696. ],
  697. };
  698. let dayPieChartKey = [
  699. {
  700. key: "gzssdl",
  701. name: "故障损失电量",
  702. },
  703. {
  704. key: "jxssdl",
  705. name: "检修损失电量",
  706. },
  707. {
  708. key: "qfssdl",
  709. name: "性能损失电量",
  710. },
  711. {
  712. key: "slssdl",
  713. name: "受累损失电量",
  714. },
  715. {
  716. key: "xdssdl",
  717. name: "限电损失电量",
  718. },
  719. ];
  720. // 饼图 1 数据
  721. let dayData = [];
  722. // 饼图 2 数据
  723. let monthData = [];
  724. // 饼图 2 数据
  725. let yearData = [];
  726. res.data.fjjzmap.fjmap[0].forEach((ele) => {
  727. fjmap.push({
  728. tag: ele.wtnum,
  729. wtId: ele.wtId,
  730. wpId: ele.wpId,
  731. color: that.getColor(ele.fjzt),
  732. });
  733. });
  734. keys.forEach((key, keyIndex) => {
  735. res.data.glvos.forEach((ele) => {
  736. Powertrend.value[keyIndex].value.push({
  737. text: new Date(ele.time).formatDate("hh:mm"),
  738. value: ele[key],
  739. });
  740. Powertrend1.value[keyIndex].value.push({
  741. text: new Date(ele.time).formatDate("hh:mm"),
  742. value: ele[key],
  743. });
  744. });
  745. });
  746. dayPieChartKey.forEach((ele) => {
  747. dayData.push({
  748. value: res.data.wxssmap["r" + ele.key],
  749. unit: "万kwh",
  750. name: ele.name,
  751. });
  752. monthData.push({
  753. value: res.data.wxssmap["y" + ele.key] || 0,
  754. unit: "万kwh",
  755. name: ele.name,
  756. });
  757. yearData.push({
  758. value: res.data.wxssmap["n" + ele.key] || 0,
  759. unit: "万kwh",
  760. name: ele.name,
  761. });
  762. });
  763. that.fjmap = fjmap;
  764. that.Powertrend = Powertrend;
  765. that.Powertrend1 = Powertrend1;
  766. that.jczbmap = res.data.jczbmap;
  767. that.pieChartData = {
  768. dayData,
  769. monthData,
  770. yearData,
  771. };
  772. } else {
  773. that.fjmap = [];
  774. that.Powertrend = {};
  775. that.Powertrend1 = {};
  776. that.jczbmap = {};
  777. that.pieChartData = {
  778. dayData: [],
  779. monthData: [],
  780. yearData: [],
  781. };
  782. }
  783. },
  784. });
  785. },
  786. // 获取日度损失电量分析
  787. requestLoss (showLoading) {
  788. let that = this;
  789. that.API.requestData({
  790. showLoading,
  791. method: "POST",
  792. subUrl: "monitor/findLossWpBar",
  793. data: {
  794. wpId: that.wpId,
  795. },
  796. success (res) {
  797. let dayLost = [];
  798. res.data.forEach((ele) => {
  799. dayLost.push({
  800. text: ele.timestr,
  801. value: ele.value1,
  802. });
  803. });
  804. that.dayLost = dayLost;
  805. },
  806. });
  807. },
  808. // 获取完成电量
  809. requestPower (showLoading) {
  810. let that = this;
  811. that.API.requestData({
  812. showLoading,
  813. method: "POST",
  814. subUrl: "monitor/findPowerWpBar",
  815. data: {
  816. wpId: that.wpId,
  817. },
  818. success (res) {
  819. let data = [
  820. {
  821. title: "发电量",
  822. yAxisIndex: 0,
  823. value: [],
  824. },
  825. {
  826. title: "预测电量",
  827. yAxisIndex: 0,
  828. value: [],
  829. },
  830. ];
  831. res.data.forEach((ele) => {
  832. data[0].value.push({
  833. text: ele.timestr,
  834. value: ele.value1 || 0,
  835. });
  836. data[1].value.push({
  837. text: ele.timestr,
  838. value: ele.value2 || 0,
  839. });
  840. });
  841. that.CompleteElectricity.data = data;
  842. },
  843. });
  844. },
  845. // 获取月发电量对比
  846. requestMonthPower (showLoading) {
  847. let that = this;
  848. that.API.requestData({
  849. showLoading,
  850. method: "POST",
  851. subUrl: "monitor/findMonthPowerWpBar",
  852. data: {
  853. wpId: that.wpId,
  854. },
  855. success (res) {
  856. let data = [
  857. {
  858. title: "月发电量",
  859. yAxisIndex: 0,
  860. value: [],
  861. },
  862. {
  863. title: "月预测电量",
  864. yAxisIndex: 0,
  865. value: [],
  866. },
  867. ];
  868. res.data.forEach((ele) => {
  869. data[0].value.push({
  870. text: ele.timestr,
  871. value: ele.value1,
  872. });
  873. data[1].value.push({
  874. text: ele.timestr,
  875. value: ele.value2,
  876. });
  877. });
  878. that.MonthCompare.value = data;
  879. },
  880. });
  881. },
  882. },
  883. created () {
  884. let that = this;
  885. that.wpId = that.$route.params.wpId;
  886. that.paramsId = that.$route.params.wpId;
  887. that.resCode = that.$route.params.wpId;
  888. console.log('paramsId:',that.paramsId.indexOf('FDC'))
  889. console.log('resCode:',that.resCode.indexOf('FDC'))
  890. console.log('paramsId:',that.paramsId.indexOf('GDC'))
  891. console.log('resCode:',that.resCode.indexOf('GDC'))
  892. that.$nextTick(() => {
  893. that.getWp();
  894. that.requestData(false);
  895. that.requestLoss(false);
  896. that.requestPower(false);
  897. that.requestMonthPower(false);
  898. that.timmer = setInterval(() => {
  899. that.requestData(false);
  900. }, 60000);
  901. that.timmer2 = setInterval(() => {
  902. that.nowTime = new Date().formatDate("hh:mm:ss");
  903. }, 1000);
  904. });
  905. },
  906. mounted () { },
  907. unmounted () {
  908. clearInterval(this.timmer);
  909. clearInterval(this.timmer2);
  910. this.timmer = null;
  911. this.timmer2 = null;
  912. },
  913. watch: {
  914. $route (res) {
  915. this.wpId = res.params.wpId;
  916. if (res.params.wpId) {
  917. this.requestData(false);
  918. this.renderBtnActiveIndex();
  919. }
  920. },
  921. },
  922. };
  923. </script>
  924. <style lang="less">
  925. .wind-site-home {
  926. .first-info {
  927. display: flex;
  928. }
  929. .wind-site-info {
  930. margin-left: 0.7407vh;
  931. flex: 1 0 auto;
  932. padding: 8px;
  933. & > .row {
  934. height: 100%;
  935. }
  936. .info-item {
  937. text-align: center;
  938. flex: 1;
  939. .value {
  940. font-size: 14px;
  941. margin-bottom: 8px;
  942. }
  943. .text {
  944. font-size: 12px;
  945. color: @gray;
  946. }
  947. }
  948. }
  949. .wind-running-info {
  950. margin-left: 8px;
  951. padding: 8px;
  952. flex: 1 1 auto;
  953. & > .row {
  954. height: 100%;
  955. }
  956. .fengji {
  957. display: flex;
  958. align-content: center;
  959. flex: 0 0 auto;
  960. .fengji-icon {
  961. padding: 12px;
  962. border-radius: 50%;
  963. box-shadow: inset 1.5px -1px 1px 0px @green;
  964. svg {
  965. width: 32px;
  966. height: 32px;
  967. }
  968. }
  969. .info {
  970. width: 60px;
  971. display: flex;
  972. flex-direction: column;
  973. justify-content: center;
  974. .text {
  975. text-align: center;
  976. font-size: 12px;
  977. margin-bottom: 1.111vh;
  978. }
  979. .value {
  980. text-align: center;
  981. font-size: 24px;
  982. }
  983. }
  984. }
  985. .situation {
  986. flex: 1 1 auto;
  987. margin-left: 1.481vh;
  988. .row + .row {
  989. margin: 0;
  990. }
  991. .status {
  992. flex: 1;
  993. // width: 75px;
  994. display: flex;
  995. // align-items: center;
  996. justify-content: center;
  997. padding: 4px 0;
  998. svg {
  999. width: 18px;
  1000. height: 18px;
  1001. margin-right: 4px;
  1002. }
  1003. .text {
  1004. font-size: 12px;
  1005. flex: auto;
  1006. }
  1007. .value {
  1008. text-align: center;
  1009. font-size: 12px;
  1010. padding-right: 0.741vh;
  1011. }
  1012. }
  1013. .icon-status {
  1014. .text {
  1015. font-size: 12px;
  1016. font-weight: 600;
  1017. }
  1018. }
  1019. }
  1020. }
  1021. .light-matrix-panel {
  1022. width: 673px;
  1023. overflow-y:scroll;
  1024. height: 240px;
  1025. .panel-body {
  1026. height: 100%;
  1027. }
  1028. }
  1029. }
  1030. .btn-group-tabs {
  1031. display: flex;
  1032. flex-direction: row;
  1033. }
  1034. </style>