index.vue 28 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181
  1. <template>
  2. <div class="parcel-box">
  3. <div class="title">
  4. <el-select
  5. size="mini"
  6. :disabled="displayDetail"
  7. v-model="tabIndex"
  8. placeholder="请选择"
  9. @change="tabClick"
  10. >
  11. <el-option
  12. v-for="item in tabOptions"
  13. :key="item.id"
  14. :label="item.name"
  15. :value="item.id"
  16. >
  17. </el-option>
  18. </el-select>
  19. <el-select
  20. size="mini"
  21. :disabled="displayDetail"
  22. v-model="company"
  23. placeholder="请选择"
  24. @change="handleCompanyChange(company)"
  25. >
  26. <el-option
  27. v-for="item in companyOptions"
  28. :key="item.id"
  29. :label="item.aname"
  30. :value="item.id"
  31. >
  32. </el-option>
  33. </el-select>
  34. <el-select
  35. size="mini"
  36. :disabled="displayDetail"
  37. v-model="stationObj"
  38. multiple
  39. collapse-tags
  40. placeholder="请选择"
  41. @change="handleStationChange(stationObj)"
  42. clearable
  43. >
  44. <el-option
  45. v-for="item in stationList"
  46. :key="item.id"
  47. :label="item.aname"
  48. :value="item.id"
  49. >
  50. </el-option>
  51. </el-select>
  52. <el-select
  53. size="mini"
  54. v-model="projectObj"
  55. placeholder="请选择"
  56. multiple
  57. collapse-tags
  58. @change="handleProjectChange(projectObj)"
  59. clearable
  60. >
  61. <el-option
  62. v-for="item in projectList"
  63. :key="item.id"
  64. :label="item.aname"
  65. :value="item.id"
  66. >
  67. </el-option>
  68. </el-select>
  69. <div class="station">
  70. 开始日期
  71. <div class="search-input">
  72. <el-date-picker
  73. v-model="starTime"
  74. :disabled="displayDetail"
  75. type="date"
  76. value-format="YYYY-MM-DD"
  77. placeholder="选择日期"
  78. popper-class="date-select"
  79. >
  80. </el-date-picker>
  81. </div>
  82. </div>
  83. <div class="station">
  84. 结束日期
  85. <div class="search-input">
  86. <el-date-picker
  87. v-model="endTime"
  88. :disabled="displayDetail"
  89. type="date"
  90. value-format="YYYY-MM-DD"
  91. placeholder="选择日期"
  92. popper-class="date-select"
  93. >
  94. </el-date-picker>
  95. </div>
  96. </div>
  97. <div class="but">
  98. <el-button
  99. round
  100. size="mini"
  101. class="buttons"
  102. :disabled="displayDetail"
  103. @click="getCmdb"
  104. >搜索</el-button
  105. >
  106. <el-button
  107. round
  108. size="mini"
  109. class="buttons"
  110. @click="dbfx"
  111. :disabled="
  112. chooseList.length <= 5 && chooseList.length > 1 ? false : true
  113. "
  114. >对标分析</el-button
  115. >
  116. <el-button
  117. round
  118. size="mini"
  119. class="buttons"
  120. @click="goBack"
  121. v-if="displayDetail"
  122. >返回</el-button
  123. >
  124. <!-- <el-button round size="mini" class="buttons">导出</el-button> -->
  125. </div>
  126. </div>
  127. <div class="bodys" v-if="!displayDetail">
  128. <div class="line">
  129. <div class="leftContent"><span>项目对标</span></div>
  130. <div class="rightContent"></div>
  131. </div>
  132. <div class="economicTable" :style="{ height: echartsHeight }">
  133. <el-table
  134. :data="tableData"
  135. ref="multipleTable"
  136. size="mini"
  137. :height="echartsHeight"
  138. :cell-style="{ padding: '4px' }"
  139. :row-style="{ height: '0' }"
  140. stripe
  141. @selection-change="handleCurrentChange"
  142. >
  143. <el-table-column type="selection" width="55" align="center">
  144. </el-table-column>
  145. <el-table-column
  146. align="center"
  147. prop="name"
  148. label="名称"
  149. width="150"
  150. sortable
  151. >
  152. </el-table-column>
  153. <el-table-column
  154. align="center"
  155. prop="zhpm"
  156. label="综合排名"
  157. width="80"
  158. sortable
  159. >
  160. </el-table-column>
  161. <el-table-column
  162. align="center"
  163. prop="fdlpm"
  164. label="发电量排名"
  165. sortable
  166. width="63"
  167. >
  168. </el-table-column>
  169. <el-table-column
  170. align="center"
  171. prop="fdl"
  172. label="发电量"
  173. sortable
  174. width="63"
  175. >
  176. </el-table-column>
  177. <el-table-column
  178. align="center"
  179. prop="gzssdlpm"
  180. label="故障损失排名"
  181. sortable
  182. width="63"
  183. >
  184. </el-table-column>
  185. <el-table-column
  186. align="center"
  187. prop="gzssdl"
  188. label="故障损失"
  189. sortable
  190. width="63"
  191. >
  192. </el-table-column>
  193. <el-table-column
  194. align="center"
  195. prop="jxssdlpm"
  196. label="检修损失排名"
  197. sortable
  198. width="63"
  199. >
  200. </el-table-column>
  201. <el-table-column
  202. align="center"
  203. prop="jxssdl"
  204. label="检修损失"
  205. sortable
  206. width="63"
  207. >
  208. </el-table-column>
  209. <el-table-column
  210. align="center"
  211. prop="xnssdlpm"
  212. label="性能损失排名"
  213. sortable
  214. width="63"
  215. >
  216. </el-table-column>
  217. <el-table-column
  218. align="center"
  219. prop="xnssdl"
  220. label="性能损失"
  221. sortable
  222. width="63"
  223. >
  224. </el-table-column>
  225. <el-table-column
  226. align="center"
  227. prop="xdssdlpm"
  228. label="限电损失排名"
  229. sortable
  230. width="63"
  231. >
  232. </el-table-column>
  233. <el-table-column
  234. align="center"
  235. prop="xdssdl"
  236. label="限电损失"
  237. sortable
  238. width="63"
  239. >
  240. </el-table-column>
  241. <el-table-column
  242. align="center"
  243. prop="slssdlpm"
  244. label="受累损失排名"
  245. sortable
  246. width="63"
  247. >
  248. </el-table-column>
  249. <el-table-column
  250. align="center"
  251. prop="slssdl"
  252. label="受累损失"
  253. sortable
  254. width="63"
  255. >
  256. </el-table-column>
  257. <el-table-column
  258. align="center"
  259. prop="fnlylpm"
  260. :label="(tabIndex === -1 ? '风能' : '光能') + '利用率排名'"
  261. sortable
  262. width="63"
  263. >
  264. </el-table-column>
  265. <el-table-column
  266. align="center"
  267. prop="fnlyl"
  268. :label="(tabIndex === -1 ? '风能' : '光能') + '利用率(%)'"
  269. sortable
  270. width="63"
  271. >
  272. </el-table-column>
  273. <el-table-column
  274. align="center"
  275. prop="gzsslpm"
  276. label="故障损失率排名"
  277. sortable
  278. width="63"
  279. >
  280. </el-table-column>
  281. <el-table-column
  282. align="center"
  283. prop="gzssl"
  284. label="故障损失率(%)"
  285. sortable
  286. width="63"
  287. >
  288. </el-table-column>
  289. <el-table-column
  290. align="center"
  291. prop="jxsslpm"
  292. label="检修损失率排名"
  293. sortable
  294. width="63"
  295. >
  296. </el-table-column>
  297. <el-table-column
  298. align="center"
  299. prop="jxssl"
  300. label="检修损失率(%)"
  301. sortable
  302. width="63"
  303. >
  304. </el-table-column>
  305. <el-table-column
  306. align="center"
  307. prop="qflpm"
  308. :label="'弃' + (tabIndex === -1 ? '风' : '光') + '率排名'"
  309. sortable
  310. width="63"
  311. >
  312. </el-table-column>
  313. <el-table-column
  314. align="center"
  315. prop="qfl"
  316. :label="'弃' + (tabIndex === -1 ? '风' : '光') + '率(%)'"
  317. sortable
  318. width="63"
  319. >
  320. </el-table-column>
  321. <el-table-column
  322. align="center"
  323. prop="xnsslpm"
  324. label="性能损失率排名"
  325. sortable
  326. width="63"
  327. >
  328. </el-table-column>
  329. <el-table-column
  330. align="center"
  331. prop="xnssl"
  332. label="性能损失率(%)"
  333. sortable
  334. width="63"
  335. >
  336. </el-table-column>
  337. <el-table-column
  338. align="center"
  339. prop="slsslpm"
  340. label="受累损失率排名"
  341. sortable
  342. width="63"
  343. >
  344. </el-table-column>
  345. <el-table-column
  346. align="center"
  347. prop="slssl"
  348. label="受累损失率(%)"
  349. sortable
  350. width="63"
  351. >
  352. </el-table-column>
  353. <el-table-column align="center" prop="" label="操作">
  354. <template v-slot="scope">
  355. <span
  356. @click="goDetail(scope.row)"
  357. style="cursor: pointer; color: #1c99ff"
  358. >详情</span
  359. >
  360. </template>
  361. </el-table-column>
  362. </el-table>
  363. </div>
  364. </div>
  365. <div class="echarts" v-if="!displayDetail">
  366. <div class="pie-echarts">
  367. <div class="chart-name">
  368. <div class="point left bottom"></div>
  369. <div class="point right bottom"></div>
  370. 损失电量分析
  371. </div>
  372. <PieChart
  373. :lossPower="lossPower"
  374. width="100%"
  375. height="20vh"
  376. :showLable="false"
  377. ></PieChart>
  378. </div>
  379. <div class="bar-echarts">
  380. <div class="chart-name">
  381. <div class="point left bottom"></div>
  382. <div class="point right bottom"></div>
  383. 五项损失
  384. </div>
  385. <BarCharts
  386. :list="barList"
  387. width="100%"
  388. height="30vh"
  389. :showLegend="true"
  390. :xdate="false"
  391. :colorIndex="true"
  392. ></BarCharts>
  393. </div>
  394. </div>
  395. <div v-if="displayDetail">
  396. <el-table
  397. :data="detailTable"
  398. ref="multipleTable"
  399. size="mini"
  400. height="88vh"
  401. :cell-style="{ padding: '0px' }"
  402. :row-style="{ height: '0' }"
  403. stripe
  404. @selection-change="handleCurrentChange"
  405. >
  406. <el-table-column type="selection" width="55" align="center">
  407. </el-table-column>
  408. <el-table-column
  409. align="center"
  410. prop="name"
  411. :label="tabIndex == -2 ? '逆变器名称' : '风机名称'"
  412. width="150"
  413. sortable
  414. >
  415. </el-table-column>
  416. <el-table-column align="center" prop="zhpm" label="综合排名" sortable>
  417. </el-table-column>
  418. <el-table-column align="center" prop="gzssdl" label="故障损失" sortable>
  419. </el-table-column>
  420. <el-table-column
  421. align="center"
  422. prop="jxssdlpm"
  423. label="检修损失排名"
  424. sortable
  425. >
  426. </el-table-column>
  427. <el-table-column align="center" prop="jxssdl" label="检修损失" sortable>
  428. </el-table-column>
  429. <el-table-column
  430. align="center"
  431. prop="xnssdlpm"
  432. label="性能损失排名"
  433. sortable
  434. >
  435. </el-table-column>
  436. <el-table-column align="center" prop="xnssdl" label="性能损失" sortable>
  437. </el-table-column>
  438. <el-table-column
  439. align="center"
  440. prop="xdssdlpm"
  441. label="限电损失排名"
  442. sortable
  443. >
  444. </el-table-column>
  445. <el-table-column align="center" prop="xdssdl" label="限电损失" sortable>
  446. </el-table-column>
  447. <el-table-column
  448. align="center"
  449. prop="slssdlpm"
  450. label="受累损失排名"
  451. sortable
  452. >
  453. </el-table-column>
  454. <el-table-column align="center" prop="slssdl" label="受累损失" sortable>
  455. </el-table-column>
  456. <el-table-column
  457. align="center"
  458. prop="gzsslpm"
  459. label="故障损失率排名"
  460. sortable
  461. >
  462. </el-table-column>
  463. <el-table-column
  464. align="center"
  465. prop="gzssl"
  466. label="故障损失率(%)"
  467. sortable
  468. >
  469. </el-table-column>
  470. <el-table-column
  471. align="center"
  472. prop="jxsslpm"
  473. label="检修损失率排名"
  474. sortable
  475. >
  476. </el-table-column>
  477. <el-table-column
  478. align="center"
  479. prop="jxssl"
  480. label="检修损失率(%)"
  481. sortable
  482. >
  483. </el-table-column>
  484. <el-table-column
  485. align="center"
  486. prop="qflpm"
  487. :label="'弃' + (tabIndex === -1 ? '风' : '光') + '率排名'"
  488. sortable
  489. >
  490. </el-table-column>
  491. <el-table-column
  492. align="center"
  493. prop="qfl"
  494. :label="'弃' + (tabIndex === -1 ? '风' : '光') + '率(%)'"
  495. sortable
  496. >
  497. </el-table-column>
  498. <el-table-column
  499. align="center"
  500. prop="xnsslpm"
  501. label="性能损失率排名"
  502. sortable
  503. >
  504. </el-table-column>
  505. <el-table-column
  506. align="center"
  507. prop="xnssl"
  508. label="性能损失率(%)"
  509. sortable
  510. >
  511. </el-table-column>
  512. <el-table-column
  513. align="center"
  514. prop="slsslpm"
  515. label="受累损失率排名"
  516. sortable
  517. >
  518. </el-table-column>
  519. <el-table-column
  520. align="center"
  521. prop="slssl"
  522. label="受累损失率(%)"
  523. sortable
  524. >
  525. </el-table-column>
  526. </el-table>
  527. </div>
  528. <el-dialog
  529. class="dialogs"
  530. width="90%"
  531. top="40px"
  532. v-model="dialogVisible"
  533. :show-close="true"
  534. >
  535. <template #title>
  536. <div class="dialog-title">
  537. <img
  538. class="dialog-title-img"
  539. src="@assets/img/images/dialog-title.png"
  540. />
  541. <div class="title">对标排名分析</div>
  542. </div>
  543. </template>
  544. <div class="dialog-body">
  545. <img class="dialog-img" src="@assets/img/images/dialog.png" />
  546. <dayinfo
  547. :radarValue="radarValue"
  548. :title="[windNum, windNum2, windNum3, windNum4, windNum5]"
  549. :windNum="windNum"
  550. :windNum2="windNum2"
  551. :windNum3="windNum3"
  552. :windNum4="windNum4"
  553. :windNum5="windNum5"
  554. :tabs="tabs"
  555. :analyisDialog="analyisDialog"
  556. />
  557. </div>
  558. </el-dialog>
  559. </div>
  560. </template>
  561. <script>
  562. import dayjs from "dayjs";
  563. import { companys } from "@/api/curveAnalyse";
  564. import {
  565. GetOrganization,
  566. GetStationByCompany,
  567. GetProjectList,
  568. GetLineList,
  569. GetSquareList,
  570. } from "@/api/headerNav.js";
  571. import { getStation, getProject, xmdb, details } from "@/api/performance";
  572. import PieChart from "../../homePage/components/pieChart.vue";
  573. import BarCharts from "../../homePage/components/barCharts.vue";
  574. import dayinfo from "../compontent/dayinfo.vue";
  575. export default {
  576. name: "intervalBenchmarking", //场际对标
  577. components: {
  578. PieChart,
  579. BarCharts,
  580. dayinfo,
  581. },
  582. data() {
  583. return {
  584. company: "",
  585. companyOptions: [],
  586. stationObj: [],
  587. stationList: [],
  588. projectObj: [],
  589. projectList: [],
  590. starTime: "",
  591. endTime: "",
  592. tabIndex: -2,
  593. tabOptions: [
  594. { id: -1, name: "风电" },
  595. { id: -2, name: "光伏" },
  596. ],
  597. tableData: [],
  598. detailTable: [],
  599. chooseList: [],
  600. lossPower: [],
  601. barList: [],
  602. displayDetail: false,
  603. dialogVisible: false,
  604. radarValue: [],
  605. windNum: "",
  606. windNum2: "",
  607. windNum3: "",
  608. windNum4: "",
  609. windNum5: "",
  610. tabs: [],
  611. analyisDialog: [],
  612. screenHeight: window.innerHeight,
  613. echartsHeight: "55vh",
  614. };
  615. },
  616. created() {
  617. let date = new Date();
  618. date.setDate(1);
  619. let month = parseInt(date.getMonth() + 1);
  620. let day = date.getDate();
  621. if (month < 10) {
  622. month = "0" + month;
  623. }
  624. if (day < 10) {
  625. day = "0" + day;
  626. }
  627. this.starTime = date.getFullYear() + "-" + month + "-" + day;
  628. this.endTime = dayjs(new Date().getTime()).format("YYYY-MM-DD");
  629. this.initialization();
  630. },
  631. mounted() {
  632. if (this.screenHeight > 1100) {
  633. this.echartsHeight = "58vh";
  634. } else {
  635. this.echartsHeight = "55vh";
  636. }
  637. window.onresize = () => {
  638. return (() => {
  639. window.screenHeight = window.innerHeight;
  640. this.screenHeight = window.screenHeight;
  641. })();
  642. };
  643. },
  644. methods: {
  645. tabClick(val) {
  646. this.tabIndex = val;
  647. this.stationList = [];
  648. this.stationObj = [];
  649. this.projectObj = [];
  650. this.initialization();
  651. },
  652. initialization() {
  653. GetOrganization({ type: this.tabIndex }).then((res) => {
  654. if (res.data) {
  655. this.company = res.data[0].id;
  656. this.companyOptions = res.data;
  657. this.getStation(res.data[0].id);
  658. }
  659. });
  660. },
  661. getStation(companyids) {
  662. GetStationByCompany({
  663. companyids: companyids,
  664. type: this.tabIndex,
  665. }).then((res) => {
  666. if (res.data.length) {
  667. this.stationObj = [res.data[0].id];
  668. this.stationList = res.data;
  669. this.getCmdb();
  670. this.getProject(this.stationObj);
  671. } else {
  672. this.stationList = [];
  673. }
  674. });
  675. },
  676. getProject(stationids) {
  677. GetProjectList(stationids.join(",")).then((res) => {
  678. if (res.data.length) {
  679. this.projectList = res.data;
  680. } else {
  681. this.projectList = [];
  682. }
  683. this.getCmdb();
  684. });
  685. },
  686. getCmdb() {
  687. xmdb({
  688. companys: this.company,
  689. type: this.tabIndex,
  690. beginDate: this.starTime,
  691. endDate: this.endTime,
  692. wpids: this.stationObj.join(","),
  693. projectids: this.projectObj.join(","),
  694. target: "",
  695. sort: "",
  696. }).then((res) => {
  697. if (res.data) {
  698. let barList = [
  699. {
  700. name: "故障损失电量",
  701. children: [],
  702. date: [],
  703. },
  704. {
  705. name: "检修损失电量",
  706. children: [],
  707. },
  708. {
  709. name: "性能损失电量",
  710. children: [],
  711. },
  712. {
  713. name: "限电损失电量",
  714. children: [],
  715. },
  716. {
  717. name: "受累损失电量",
  718. children: [],
  719. },
  720. ];
  721. this.tableData = res.data;
  722. let lossPower = [];
  723. res.data.forEach((item) => {
  724. let obj = {
  725. name: item.name,
  726. value: item.zssdl,
  727. };
  728. lossPower.push(obj);
  729. barList[0].date.push(item.name);
  730. barList[0].children.push(item.gzssdl);
  731. barList[1].children.push(item.jxssdl);
  732. barList[2].children.push(item.xnssdl);
  733. barList[3].children.push(item.xdssdl);
  734. barList[4].children.push(item.slssdl);
  735. });
  736. this.lossPower = lossPower;
  737. this.barList = barList;
  738. }
  739. });
  740. },
  741. handleStationChange(val) {
  742. // this.projectObj = [];
  743. this.getProject(val);
  744. },
  745. handleCompanyChange(val) {
  746. this.company = val;
  747. // this.projectObj = [];
  748. this.getStation(val);
  749. this.getCmdb();
  750. },
  751. handleProjectChange() {
  752. this.getCmdb();
  753. },
  754. handleCurrentChange(val) {
  755. if (val.length > 5) {
  756. let del_row = val.shift();
  757. this.$refs.multipleTable.toggleRowSelection(del_row, false);
  758. }
  759. let arr = [];
  760. val.forEach((item, index) => {
  761. if (index < 5) {
  762. arr.push(item);
  763. }
  764. });
  765. this.chooseList = arr;
  766. },
  767. goDetail(row) {
  768. this.displayDetail = true;
  769. details({
  770. id: row.id,
  771. beginDate: this.starTime,
  772. endDate: this.endTime,
  773. target: "",
  774. sort: "",
  775. }).then((res) => {
  776. if (res.data) {
  777. this.detailTable = res.data;
  778. }
  779. });
  780. },
  781. goBack() {
  782. this.displayDetail = false;
  783. },
  784. dbfx() {
  785. if (this.chooseList.length <= 5) {
  786. this.dialogVisible = true;
  787. this.AjaxDbfx();
  788. }
  789. },
  790. AjaxDbfx() {
  791. var data = this.chooseList;
  792. this.windNum = data[0]?.date || data[0]?.name;
  793. this.windNum2 = data[1]?.date || data[1]?.name;
  794. this.windNum3 = data[2]?.date || data[2]?.name;
  795. this.windNum4 = data[3]?.date || data[3]?.name;
  796. this.windNum5 = data[4]?.date || data[4]?.name;
  797. let tabs = [
  798. {
  799. name: "发电量",
  800. code: "fdl",
  801. },
  802. {
  803. name: "故障损失电量",
  804. code: "gzssdl",
  805. },
  806. {
  807. name: "检修损失电量",
  808. code: "jxssdl",
  809. },
  810. {
  811. name: "性能未达标损失电量",
  812. code: "xnssdl",
  813. },
  814. {
  815. name: "受累损失电量",
  816. code: "slssdl",
  817. },
  818. {
  819. name: "风能利用率",
  820. code: "fnlyl",
  821. },
  822. {
  823. name: "故障损失率",
  824. code: "gzssl",
  825. },
  826. {
  827. name: "检修损失率",
  828. code: "jxssl",
  829. },
  830. {
  831. name: "弃风率",
  832. code: "qfl",
  833. },
  834. {
  835. name: "性能损失率",
  836. code: "xnssl",
  837. },
  838. {
  839. name: "受累损失率",
  840. code: "slssl",
  841. },
  842. ];
  843. tabs = tabs.map((item) => {
  844. if (item.code == "fnlyl") {
  845. if (this.tabIndex == -1) {
  846. item.name = "风能利用率";
  847. } else {
  848. item.name = "光能利用率";
  849. }
  850. }
  851. if (item.code == "qfl") {
  852. if (this.tabIndex == -1) {
  853. item.name = "弃风率";
  854. } else {
  855. item.name = "弃光率";
  856. }
  857. }
  858. return item;
  859. });
  860. tabs.forEach((val) => {
  861. data.forEach((item, index) => {
  862. val["windData" + (index + 1)] = item[val.code];
  863. });
  864. });
  865. this.tabs = tabs;
  866. let radarValue = [];
  867. data.forEach((item, index) => {
  868. let data = {
  869. indicator: [
  870. "风能利用率排名",
  871. "故障损失率排名",
  872. "检修损失率排名",
  873. "弃风率排名",
  874. "性能损失率排名",
  875. "受累损失率排名",
  876. ],
  877. data: [
  878. {
  879. value: [
  880. item.fnlylpm,
  881. item.gzsslpm,
  882. item.jxsslpm,
  883. item.qflpm,
  884. item.xnsslpm,
  885. item.slsslpm,
  886. ],
  887. name: item.name,
  888. },
  889. ],
  890. };
  891. radarValue.push(data);
  892. });
  893. this.radarValue = radarValue;
  894. var analyis = [],
  895. gzssdl = [],
  896. jxssdl = [],
  897. xnssdl = [],
  898. xdssdl = [],
  899. slssdl = [];
  900. data.forEach((item, index) => {
  901. gzssdl.push({
  902. text: item.name,
  903. value: item.gzssdl,
  904. });
  905. jxssdl.push({
  906. text: item.name,
  907. value: item.jxssdl,
  908. });
  909. xnssdl.push({
  910. text: item.name,
  911. value: item.xnssdl,
  912. });
  913. xdssdl.push({
  914. text: item.name,
  915. value: item.xdssdl,
  916. });
  917. slssdl.push({
  918. text: item.name,
  919. value: item.slssdl,
  920. });
  921. });
  922. analyis.push(
  923. {
  924. title: "故障损失电量",
  925. yAxisIndex: 0,
  926. value: gzssdl,
  927. },
  928. {
  929. title: "检修损失电量",
  930. yAxisIndex: 0,
  931. value: jxssdl,
  932. },
  933. {
  934. title: "性能损失电量",
  935. yAxisIndex: 0,
  936. value: xnssdl,
  937. },
  938. {
  939. title: "限电损失电量",
  940. yAxisIndex: 0,
  941. value: xdssdl,
  942. },
  943. {
  944. title: "受累损失电量",
  945. yAxisIndex: 0,
  946. value: slssdl,
  947. }
  948. );
  949. this.analyisDialog = analyis;
  950. },
  951. },
  952. watch: {
  953. screenHeight(val) {
  954. console.log(val);
  955. this.screenHeight = val;
  956. if (val > 1100) {
  957. this.echartsHeight = "58vh";
  958. } else {
  959. this.echartsHeight = "55vh";
  960. }
  961. },
  962. },
  963. };
  964. </script>
  965. <style lang="less" scoped>
  966. .parcel-box {
  967. padding: 0 15px;
  968. }
  969. .title {
  970. display: flex;
  971. flex-direction: row;
  972. align-items: center;
  973. margin-top: 10px;
  974. margin-bottom: 10px;
  975. .tabCut {
  976. display: inline-block;
  977. margin: 0 10px;
  978. div {
  979. display: inline-block;
  980. width: 60px;
  981. height: 27px;
  982. border: 1px solid #354460;
  983. text-align: center;
  984. line-height: 25px;
  985. cursor: pointer;
  986. }
  987. div:nth-child(1) {
  988. border-radius: 13px 0px 0px 13px;
  989. }
  990. div:nth-child(2) {
  991. border-radius: 0px 13px 13px 0px;
  992. }
  993. .active {
  994. background-color: #0c3378;
  995. color: #fff;
  996. }
  997. .disabled {
  998. pointer-events: none;
  999. }
  1000. }
  1001. .tabCut1 {
  1002. display: inline-block;
  1003. margin: 0 10px;
  1004. div {
  1005. display: inline-block;
  1006. width: 60px;
  1007. height: 27px;
  1008. border: 1px solid #354460;
  1009. text-align: center;
  1010. line-height: 25px;
  1011. cursor: pointer;
  1012. }
  1013. div:nth-child(1) {
  1014. border-radius: 13px 0px 0px 13px;
  1015. }
  1016. div:nth-child(3) {
  1017. border-radius: 0px 13px 13px 0px;
  1018. }
  1019. .active {
  1020. background-color: #0c3378;
  1021. color: #fff;
  1022. }
  1023. }
  1024. .station {
  1025. display: flex;
  1026. flex-direction: row;
  1027. align-items: center;
  1028. font-size: 14px;
  1029. font-family: Microsoft YaHei;
  1030. font-weight: 400;
  1031. color: #b3b3b3;
  1032. margin-right: 10px;
  1033. }
  1034. .search-input {
  1035. margin-left: 10px;
  1036. }
  1037. .but {
  1038. display: flex;
  1039. flex-direction: row;
  1040. align-content: center;
  1041. margin-left: 20px;
  1042. }
  1043. .buttons {
  1044. background-color: rgba(0, 70, 199, 0.2);
  1045. border: 1px solid #3b4c6c;
  1046. color: #b3b3b3;
  1047. font-size: 14px;
  1048. &:hover {
  1049. background-color: rgba(0, 70, 199, 0.5);
  1050. color: #ffffff;
  1051. }
  1052. }
  1053. }
  1054. .bodys {
  1055. width: 100%;
  1056. background-color: rgba(0, 0, 0, 0.45);
  1057. padding: 5px;
  1058. margin-bottom: 19px;
  1059. border-radius: 5px;
  1060. }
  1061. .line {
  1062. display: flex;
  1063. flex-direction: row;
  1064. align-items: center;
  1065. justify-content: space-between;
  1066. width: 100%;
  1067. padding-bottom: 5px;
  1068. .leftContent {
  1069. width: 242px;
  1070. height: 41px;
  1071. display: flex;
  1072. align-items: center;
  1073. background: url("../../../../../assets/imgs/title_left_bg.png");
  1074. span {
  1075. font-size: 16px;
  1076. font-family: Microsoft YaHei;
  1077. font-weight: 400;
  1078. color: #ffffff;
  1079. margin-left: 25px;
  1080. }
  1081. }
  1082. .rightContent {
  1083. width: 212px;
  1084. height: 28px;
  1085. margin-top: 13px;
  1086. background: url("../../../../../assets/imgs/title_right_bg.png");
  1087. }
  1088. }
  1089. .economicTable {
  1090. width: 100%;
  1091. }
  1092. .echarts {
  1093. width: 100%;
  1094. height: 26vh;
  1095. display: flex;
  1096. flex-direction: row;
  1097. align-items: center;
  1098. .chart-name {
  1099. display: flex;
  1100. align-items: center;
  1101. padding-left: 20px;
  1102. position: relative;
  1103. height: 39px;
  1104. width: 98%;
  1105. margin-left: 1%;
  1106. border-bottom: 1px solid rgba(153, 153, 153, 0.5);
  1107. font-size: 16px;
  1108. font-family: Microsoft YaHei;
  1109. font-weight: 400;
  1110. color: #ffffff;
  1111. }
  1112. .pie-echarts {
  1113. width: 30%;
  1114. height: 100%;
  1115. background: rgba(0, 0, 0, 0.45);
  1116. border-radius: 5px;
  1117. }
  1118. .bar-echarts {
  1119. width: 69%;
  1120. margin-left: 1%;
  1121. height: 100%;
  1122. background: rgba(0, 0, 0, 0.45);
  1123. border-radius: 5px;
  1124. }
  1125. }
  1126. .point {
  1127. width: 6px;
  1128. height: 1px;
  1129. background-color: #ffffff;
  1130. position: absolute;
  1131. &.left {
  1132. left: 0;
  1133. }
  1134. &.right {
  1135. right: 0;
  1136. }
  1137. &.top {
  1138. top: -1px;
  1139. }
  1140. &.bottom {
  1141. bottom: -1px;
  1142. }
  1143. }
  1144. /*去除表头全选框*/
  1145. ::v-deep .el-table__header-wrapper .el-checkbox {
  1146. display: none;
  1147. }
  1148. </style>