index.vue 39 KB

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