Home.vue 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090
  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. console.log(111111111,res)
  820. let data = [
  821. {
  822. title: "发电量",
  823. yAxisIndex: 0,
  824. value: [],
  825. },
  826. {
  827. title: "预测电量",
  828. yAxisIndex: 0,
  829. value: [],
  830. },
  831. ];
  832. res.data.forEach((ele) => {
  833. data[0].value.push({
  834. text: ele.timestr,
  835. value: ele.value1 || 0,
  836. });
  837. data[1].value.push({
  838. text: ele.timestr,
  839. value: ele.value2 || 0,
  840. });
  841. });
  842. that.CompleteElectricity.data = data;
  843. },
  844. });
  845. },
  846. // 获取月发电量对比
  847. requestMonthPower (showLoading) {
  848. let that = this;
  849. that.API.requestData({
  850. showLoading,
  851. method: "POST",
  852. subUrl: "monitor/findMonthPowerWpBar",
  853. data: {
  854. wpId: that.wpId,
  855. },
  856. success (res) {
  857. let data = [
  858. {
  859. title: "月发电量",
  860. yAxisIndex: 0,
  861. value: [],
  862. },
  863. {
  864. title: "月预测电量",
  865. yAxisIndex: 0,
  866. value: [],
  867. },
  868. ];
  869. res.data.forEach((ele) => {
  870. data[0].value.push({
  871. text: ele.timestr,
  872. value: ele.value1,
  873. });
  874. data[1].value.push({
  875. text: ele.timestr,
  876. value: ele.value2,
  877. });
  878. });
  879. that.MonthCompare.value = data;
  880. },
  881. });
  882. },
  883. },
  884. created () {
  885. let that = this;
  886. that.wpId = that.$route.params.wpId;
  887. that.paramsId = that.$route.params.wpId;
  888. that.resCode = that.$route.params.wpId;
  889. console.log('paramsId:',that.paramsId.indexOf('FDC'))
  890. console.log('resCode:',that.resCode.indexOf('FDC'))
  891. console.log('paramsId:',that.paramsId.indexOf('GDC'))
  892. console.log('resCode:',that.resCode.indexOf('GDC'))
  893. that.$nextTick(() => {
  894. that.getWp();
  895. that.requestData(false);
  896. that.requestLoss(false);
  897. that.requestPower(false);
  898. that.requestMonthPower(false);
  899. that.timmer = setInterval(() => {
  900. that.requestData(false);
  901. }, 60000);
  902. that.timmer2 = setInterval(() => {
  903. that.nowTime = new Date().formatDate("hh:mm:ss");
  904. }, 1000);
  905. });
  906. },
  907. mounted () { },
  908. unmounted () {
  909. clearInterval(this.timmer);
  910. clearInterval(this.timmer2);
  911. this.timmer = null;
  912. this.timmer2 = null;
  913. },
  914. watch: {
  915. $route (res) {
  916. this.wpId = res.params.wpId;
  917. if (res.params.wpId) {
  918. this.requestData(false);
  919. this.renderBtnActiveIndex();
  920. }
  921. },
  922. },
  923. };
  924. </script>
  925. <style lang="less">
  926. .wind-site-home {
  927. .wind-site-weather{width: 29%;}
  928. .first-info {
  929. display: flex;
  930. }
  931. .wind-site-info {
  932. margin-left: 0.7407vh;
  933. // flex: 1 0 auto;
  934. width: 33%;
  935. padding: 8px;
  936. & > .row {
  937. height: 100%;
  938. }
  939. .info-item {
  940. text-align: center;
  941. flex: 1;
  942. .value {
  943. font-size: 14px;
  944. margin-bottom: 8px;
  945. }
  946. .text {
  947. font-size: 12px;
  948. color: @gray;
  949. }
  950. }
  951. }
  952. .wind-running-info {
  953. margin-left: 8px;
  954. padding: 8px;
  955. flex: 1 1 auto;
  956. & > .row {
  957. height: 100%;
  958. }
  959. .fengji {
  960. display: flex;
  961. align-content: center;
  962. flex: 0 0 auto;
  963. .fengji-icon {
  964. padding: 12px;
  965. border-radius: 50%;
  966. box-shadow: inset 1.5px -1px 1px 0px @green;
  967. svg {
  968. width: 32px;
  969. height: 32px;
  970. }
  971. }
  972. .info {
  973. width: 60px;
  974. display: flex;
  975. flex-direction: column;
  976. justify-content: center;
  977. .text {
  978. text-align: center;
  979. font-size: 12px;
  980. margin-bottom: 1.111vh;
  981. }
  982. .value {
  983. text-align: center;
  984. font-size: 24px;
  985. }
  986. }
  987. }
  988. .situation {
  989. flex: 1 1 auto;
  990. margin-left: 1.481vh;
  991. .row + .row {
  992. margin: 0;
  993. }
  994. .status {
  995. flex: 1;
  996. // width: 75px;
  997. display: flex;
  998. // align-items: center;
  999. justify-content: center;
  1000. padding: 4px 0;
  1001. svg {
  1002. width: 18px;
  1003. height: 18px;
  1004. margin-right: 4px;
  1005. }
  1006. .text {
  1007. font-size: 12px;
  1008. flex: auto;
  1009. }
  1010. .value {
  1011. text-align: center;
  1012. font-size: 12px;
  1013. padding-right: 0.741vh;
  1014. }
  1015. }
  1016. .icon-status {
  1017. .text {
  1018. font-size: 12px;
  1019. font-weight: 600;
  1020. }
  1021. }
  1022. }
  1023. }
  1024. .light-matrix-panel {
  1025. width: 673px;
  1026. overflow-y:scroll;
  1027. height: 240px;
  1028. .panel-body {
  1029. height: 100%;
  1030. }
  1031. }
  1032. }
  1033. .btn-group-tabs {
  1034. display: flex;
  1035. flex-direction: row;
  1036. }
  1037. </style>