index.vue 33 KB

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