Home.vue 34 KB

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