index.vue 28 KB

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