index.vue 33 KB

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