index.vue 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049
  1. <template>
  2. <div class="parcel-box">
  3. <div class="form-wrapper">
  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" v-if="$store.state.showGf">
  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" v-if="!displayDetail">
  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" v-if="!displayDetail">
  96. 日期
  97. <div class="search-input">
  98. <el-date-picker
  99. v-model="dateTime"
  100. size="mini"
  101. type="daterange"
  102. range-separator="-"
  103. format="YYYY-MM-DD"
  104. value-format="YYYY-MM-DD"
  105. start-placeholder="开始"
  106. end-placeholder="结束"
  107. popper-class="date-select"
  108. >
  109. </el-date-picker>
  110. </div>
  111. </div>
  112. <div class="but">
  113. <el-button
  114. round
  115. size="mini"
  116. v-if="!displayDetail"
  117. class="buttons"
  118. @click="gerXldb"
  119. >搜 索</el-button
  120. >
  121. <el-button
  122. round
  123. size="mini"
  124. class="buttons"
  125. @click="dbfx"
  126. :disabled="
  127. chooseList.length <= 5 && chooseList.length > 1 ? false : true
  128. "
  129. >对标分析</el-button
  130. >
  131. <el-button
  132. round
  133. size="mini"
  134. class="buttons"
  135. @click="goBack"
  136. v-if="displayDetail"
  137. >返回</el-button
  138. >
  139. <!-- <el-button round size="mini" class="buttons">导出</el-button> -->
  140. </div>
  141. </div>
  142. <div class="bodys" v-if="!displayDetail">
  143. <div class="line">
  144. <div class="leftContent"><span>线路对标</span></div>
  145. </div>
  146. <div class="economicTable">
  147. <el-table
  148. :data="tableData"
  149. ref="multipleTable"
  150. size="mini"
  151. height="calc(100% - 40px)"
  152. :cell-style="{ padding: '4px' }"
  153. :row-style="{ height: '0' }"
  154. stripe
  155. @selection-change="handleCurrentChange"
  156. >
  157. <el-table-column type="selection" width="56" align="center">
  158. </el-table-column>
  159. <el-table-column
  160. show-overflow-tooltip
  161. align="center"
  162. prop="name"
  163. label="名称"
  164. width="140"
  165. sortable
  166. >
  167. <template v-slot="scope">
  168. <span
  169. @click="goDetail(scope.row)"
  170. style="cursor: pointer; color: #67b9ff"
  171. >{{ scope.row.name }}</span
  172. >
  173. </template>
  174. </el-table-column>
  175. <el-table-column
  176. header-align="center"
  177. align="center"
  178. v-for="item in tabIndex == -1 ? tableHeader : tableHeaderG"
  179. :key="item.code"
  180. :prop="item.code"
  181. :label="item.name"
  182. width="90"
  183. show-overflow-tooltip
  184. sortable
  185. >
  186. <template #header="scope">
  187. <div v-if="scope.column.label.indexOf('(') > 0">
  188. <div style="font-size: 14px">
  189. {{
  190. scope.column.label.slice(0, scope.column.label.indexOf("("))
  191. }}
  192. </div>
  193. <div style="font-size: 12px">
  194. {{
  195. scope.column.label.slice(scope.column.label.indexOf("("))
  196. }}
  197. </div>
  198. </div>
  199. <div v-else>{{ scope.column.label }}</div>
  200. </template>
  201. </el-table-column>
  202. </el-table>
  203. <div class="pagination-class">
  204. <el-pagination
  205. @current-change="handlePageChange"
  206. :current-page="page.currentPage"
  207. :page-size="page.pagesize"
  208. layout="total, prev, pager, next, jumper"
  209. :total="page.total"
  210. >
  211. </el-pagination>
  212. </div>
  213. </div>
  214. </div>
  215. <div class="echarts" v-if="!displayDetail">
  216. <div class="pie-echarts">
  217. <div class="chart-name">
  218. <div class="point point-left bottom"></div>
  219. <div class="point point-right bottom"></div>
  220. 损失电量分析
  221. </div>
  222. <PieChart
  223. :lossPower="lossPower"
  224. width="100%"
  225. height="calc(100% - 39px)"
  226. :showLable="false"
  227. ></PieChart>
  228. </div>
  229. <div class="bar-echarts">
  230. <div class="chart-name">
  231. <div class="point point-left bottom"></div>
  232. <div class="point point-right bottom"></div>
  233. 五项损失
  234. </div>
  235. <BarCharts
  236. :list="barList"
  237. width="100%"
  238. height="calc(100% - 39px)"
  239. :showLegend="true"
  240. :xdate="false"
  241. :colorIndex="true"
  242. ></BarCharts>
  243. </div>
  244. </div>
  245. <div
  246. v-if="displayDetail"
  247. style="height: calc(100% - 43px - 35px); padding-bottom: 10px"
  248. >
  249. <el-table
  250. :data="detailTable"
  251. ref="multipleTable"
  252. size="mini"
  253. height="100%"
  254. :cell-style="{ padding: '0px' }"
  255. :row-style="{ height: '0' }"
  256. stripe
  257. @selection-change="handleCurrentChange"
  258. >
  259. <el-table-column type="selection" width="60" align="center">
  260. </el-table-column>
  261. <el-table-column
  262. show-overflow-tooltip
  263. align="center"
  264. prop="name"
  265. label="风机名称"
  266. sortable
  267. >
  268. </el-table-column>
  269. <el-table-column
  270. v-for="item in tabIndex == -1
  271. ? tableHeaderDetail
  272. : tableHeaderGDetail"
  273. :key="item.code"
  274. :prop="item.code"
  275. :label="item.name"
  276. width="90"
  277. show-overflow-tooltip
  278. header-align="center"
  279. align="center"
  280. sortable
  281. />
  282. </el-table>
  283. <div class="pagination-class">
  284. <el-pagination
  285. @current-change="handlePageDChange"
  286. :current-page="pageD.currentPage"
  287. :page-size="pageD.pagesize"
  288. @size-change="handleSizeDChange"
  289. :page-sizes="[20, 50, 100, 200, 500]"
  290. layout="total, sizes, prev, pager, next, jumper"
  291. :total="pageD.total"
  292. >
  293. </el-pagination>
  294. </div>
  295. </div>
  296. <el-dialog
  297. class="dialogs"
  298. width="90%"
  299. top="40px"
  300. v-model="dialogVisible"
  301. :show-close="true"
  302. >
  303. <template #title>
  304. <div class="dialog-title">
  305. <div class="title">对标排名分析</div>
  306. </div>
  307. </template>
  308. <div class="dialog-body">
  309. <!-- <img class="dialog-img" src="@assets/imgs/dialog.png" /> -->
  310. <dayinfo
  311. :radarValue="radarValue"
  312. :title="[windNum, windNum2, windNum3, windNum4, windNum5]"
  313. :windNum="windNum"
  314. :windNum2="windNum2"
  315. :windNum3="windNum3"
  316. :windNum4="windNum4"
  317. :windNum5="windNum5"
  318. :tabs="tabs"
  319. :analyisDialog="analyisDialog"
  320. />
  321. </div>
  322. </el-dialog>
  323. </div>
  324. </template>
  325. <script>
  326. import dayjs from "dayjs";
  327. import {
  328. tableHeader,
  329. tableHeaderG,
  330. tableHeaderDetail,
  331. tableHeaderGDetail,
  332. } from "@/utills//constant.js";
  333. import { companys } from "@/api/curveAnalyse";
  334. import {
  335. getStation,
  336. getProject,
  337. getLine,
  338. xldb,
  339. details,
  340. } from "@/api/performance";
  341. import PieChart from "../../homePage/components/pieChart.vue";
  342. import BarCharts from "../../homePage/components/barCharts.vue";
  343. import dayinfo from "../compontent/dayinfo.vue";
  344. import dataJson from "./dataJson.json";
  345. import { nxfStyle } from "@/utils/nxfCodeStyle";
  346. export default {
  347. name: "wiringBenchmarking", //线路对标
  348. components: {
  349. PieChart,
  350. BarCharts,
  351. dayinfo,
  352. },
  353. data() {
  354. return {
  355. tableHeader,
  356. tableHeaderG,
  357. tableHeaderDetail,
  358. tableHeaderGDetail,
  359. page: {
  360. pagesize: 11,
  361. currentPage: 1,
  362. total: 0,
  363. },
  364. pageD: {
  365. pagesize: 20,
  366. currentPage: 1,
  367. total: 0,
  368. },
  369. company: "",
  370. companyOptions: [],
  371. stationObj: ["NX_FGS_HA_FDC_STA"],
  372. stationList: [],
  373. projectObj: [],
  374. projectList: [],
  375. lineObj: [],
  376. lineList: [],
  377. dateTime: [],
  378. tabIndex: -1,
  379. tabOptions: [
  380. { id: -1, name: "风电" },
  381. { id: -2, name: "光伏" },
  382. ],
  383. tableData: [],
  384. detailTable: [],
  385. chooseList: [],
  386. lossPower: [],
  387. barList: [],
  388. displayDetail: false,
  389. dialogVisible: false,
  390. radarValue: [],
  391. windNum: "",
  392. windNum2: "",
  393. windNum3: "",
  394. windNum4: "",
  395. windNum5: "",
  396. tabs: [],
  397. analyisDialog: [],
  398. screenHeight: window.innerHeight,
  399. echartsHeight: "53vh",
  400. detailRow: {},
  401. };
  402. },
  403. created() {
  404. this.dateTime = [
  405. dayjs().date() !== 1 ?
  406. `${dayjs().format("YYYY-MM")}-01` :
  407. dayjs().startOf("month").subtract(1, "day").format("YYYY-MM-DD"),
  408. dayjs().format("YYYY-MM-DD"),
  409. ];
  410. this.initialization();
  411. },
  412. mounted() {
  413. if (this.screenHeight > 1100) {
  414. this.echartsHeight = "58vh";
  415. } else {
  416. this.echartsHeight = "53vh";
  417. }
  418. window.onresize = () => {
  419. return (() => {
  420. window.screenHeight = window.innerHeight;
  421. this.screenHeight = window.screenHeight;
  422. })();
  423. };
  424. },
  425. methods: {
  426. handlePageChange(val) {
  427. this.page.currentPage = val;
  428. this.gerXldb();
  429. },
  430. handlePageDChange(val) {
  431. this.pageD.currentPage = val;
  432. this.goDetail();
  433. },
  434. handleSizeDChange(val) {
  435. this.pageD.currentPage = 1;
  436. this.pageD.pagesize = val;
  437. this.goDetail();
  438. },
  439. tabClick(val) {
  440. this.tabIndex = val;
  441. this.stationList = [];
  442. this.stationObj = [];
  443. this.projectObj = [];
  444. this.lineObj = [];
  445. if (val == -2) {
  446. this.company = "SXJ_KGDL_GFFD_ZGS";
  447. } else {
  448. this.company = this.companyOptions[0].id;
  449. }
  450. this.getStation(this.company);
  451. this.gerXldb();
  452. },
  453. initialization() {
  454. // this.dataChange(dataJson.data)
  455. companys().then(({ data: res }) => {
  456. if (res.data) {
  457. this.company = res.data[0].id;
  458. this.companyOptions = res.data;
  459. this.getStation(res.data[0].id);
  460. }
  461. });
  462. },
  463. getStation(companyids) {
  464. getStation({
  465. companyids: companyids,
  466. type: this.tabIndex,
  467. }).then(({ data: res }) => {
  468. if (res.data.length) {
  469. this.stationList = res.data;
  470. this.gerXldb();
  471. this.getProject(this.stationObj.join(","));
  472. }
  473. });
  474. },
  475. getProject(wpids) {
  476. getProject({
  477. wpids: wpids,
  478. }).then(({ data: res }) => {
  479. if (res.data.length) {
  480. this.projectList = res.data;
  481. this.getLine();
  482. }
  483. });
  484. },
  485. getLine(pjids) {
  486. getLine({
  487. pjids: pjids ? pjids : "",
  488. }).then(({ data: res }) => {
  489. if (res.data.length) {
  490. this.lineList = res.data;
  491. this.gerXldb();
  492. }
  493. });
  494. },
  495. gerXldb() {
  496. xldb({
  497. companys: this.company,
  498. type: this.tabIndex,
  499. beginDate: this.dateTime[0],
  500. endDate: this.dateTime[1],
  501. wpids: this.stationObj.join(","),
  502. projectids: this.projectObj.join(","),
  503. lineids: this.lineObj.join(","),
  504. pageSize: this.page.pagesize,
  505. pageNum: this.page.currentPage,
  506. target: "",
  507. sort: "",
  508. }).then(({ data: res }) => {
  509. this.dataChange(res);
  510. });
  511. },
  512. dataChange(res) {
  513. if (res.data) {
  514. let barList = [
  515. {
  516. name: "故障损失电量",
  517. itemStyle: { color: nxfStyle("故障损失电量") },
  518. children: [],
  519. date: [],
  520. },
  521. {
  522. name: "检修损失电量",
  523. itemStyle: { color: nxfStyle("检修损失电量") },
  524. children: [],
  525. },
  526. {
  527. name: "性能损失电量",
  528. itemStyle: { color: nxfStyle("性能损失电量") },
  529. children: [],
  530. },
  531. {
  532. name: "限电损失电量",
  533. itemStyle: { color: nxfStyle("限电损失电量") },
  534. children: [],
  535. },
  536. {
  537. name: "受累损失电量",
  538. itemStyle: { color: nxfStyle("受累损失电量") },
  539. children: [],
  540. },
  541. ];
  542. this.tableData = res.data.resultList;
  543. this.page.total = res.data.total;
  544. let lossPower = [];
  545. res.data.resultList.forEach((item) => {
  546. let obj = {
  547. name: item.name,
  548. value: item.zssdl,
  549. };
  550. lossPower.push(obj);
  551. barList[0].date.push(item.name);
  552. barList[0].children.push(item.gzssdl);
  553. barList[1].children.push(item.jxssdl);
  554. barList[2].children.push(item.xnssdl);
  555. barList[3].children.push(item.xdssdl);
  556. barList[4].children.push(item.slssdl);
  557. });
  558. this.lossPower = lossPower;
  559. this.barList = barList;
  560. }
  561. },
  562. handleCompanyChange(val) {
  563. this.company = val;
  564. // this.lineObj = [];
  565. this.getStation(val);
  566. this.gerXldb();
  567. },
  568. handleStationChange(val) {
  569. this.gerXldb();
  570. // this.lineObj = [];
  571. this.getProject(val);
  572. },
  573. handleProjectChange(val) {
  574. this.gerXldb();
  575. // this.lineObj = [];
  576. this.getLine(val);
  577. },
  578. handleCurrentChange(val) {
  579. if (val.length > 5) {
  580. let del_row = val.shift();
  581. this.$refs.multipleTable.toggleRowSelection(del_row, false);
  582. }
  583. let arr = [];
  584. val.forEach((item, index) => {
  585. if (index < 5) {
  586. arr.push(item);
  587. }
  588. });
  589. this.chooseList = arr;
  590. },
  591. goDetail(row) {
  592. if (!this.displayDetail) {
  593. this.displayDetail = true;
  594. this.detailRow = row;
  595. }
  596. details({
  597. id: this.detailRow.id,
  598. beginDate: this.dateTime[0],
  599. endDate: this.dateTime[1],
  600. pageSize: this.pageD.pagesize,
  601. pageNum: this.pageD.currentPage,
  602. target: "",
  603. sort: "",
  604. }).then(({ data: res }) => {
  605. if (res.data) {
  606. this.detailTable = res.data.resultList;
  607. this.pageD.total = res.data.total;
  608. }
  609. });
  610. },
  611. goBack() {
  612. this.displayDetail = false;
  613. },
  614. dbfx() {
  615. if (this.chooseList.length <= 5) {
  616. this.dialogVisible = true;
  617. this.AjaxDbfx();
  618. }
  619. },
  620. AjaxDbfx() {
  621. var data = this.chooseList;
  622. this.windNum = data[0]?.date || data[0]?.name;
  623. this.windNum2 = data[1]?.date || data[1]?.name;
  624. this.windNum3 = data[2]?.date || data[2]?.name;
  625. this.windNum4 = data[3]?.date || data[3]?.name;
  626. this.windNum5 = data[4]?.date || data[4]?.name;
  627. let tabs = [
  628. {
  629. name: "发电量(万kWh)",
  630. code: "fdl",
  631. },
  632. {
  633. name: "故障损失电量(万kWh)",
  634. code: "gzssdl",
  635. },
  636. {
  637. name: "检修损失电量(万kWh)",
  638. code: "jxssdl",
  639. },
  640. {
  641. name: "性能未达标损失电量(万kWh)",
  642. code: "xnssdl",
  643. },
  644. {
  645. name: "受累损失电量(万kWh)",
  646. code: "slssdl",
  647. },
  648. {
  649. name: "风能利用率(%)",
  650. code: "fnlyl",
  651. },
  652. {
  653. name: "故障损失率(%)",
  654. code: "gzssl",
  655. },
  656. {
  657. name: "检修损失率(%)",
  658. code: "jxssl",
  659. },
  660. {
  661. name: "弃风率(%)",
  662. code: "qfl",
  663. },
  664. {
  665. name: "性能损失率(%)",
  666. code: "xnssl",
  667. },
  668. {
  669. name: "受累损失率(%)",
  670. code: "slssl",
  671. },
  672. ];
  673. tabs = tabs.map((item) => {
  674. if (item.code == "fnlyl") {
  675. if (this.tabIndex == -1) {
  676. item.name = "风能利用率(%)";
  677. } else {
  678. item.name = "光能利用率(%)";
  679. }
  680. }
  681. if (item.code == "qfl") {
  682. if (this.tabIndex == -1) {
  683. item.name = "弃风率(%)";
  684. } else {
  685. item.name = "弃光率(%)";
  686. }
  687. }
  688. return item;
  689. });
  690. tabs.forEach((val) => {
  691. data.forEach((item, index) => {
  692. val["windData" + (index + 1)] = item[val.code];
  693. });
  694. });
  695. this.tabs = tabs;
  696. let radarValue = [];
  697. data.forEach((item, index) => {
  698. let data = {
  699. indicator: [
  700. "风能利用率排名",
  701. "故障损失率排名",
  702. "检修损失率排名",
  703. "弃风率排名",
  704. "性能损失率排名",
  705. "受累损失率排名",
  706. ],
  707. data: [
  708. {
  709. value: [
  710. item.fnlylpm,
  711. item.gzsslpm,
  712. item.jxsslpm,
  713. item.qflpm,
  714. item.xnsslpm,
  715. item.slsslpm,
  716. ],
  717. name: item.name,
  718. },
  719. ],
  720. };
  721. if (this.tabIndex == -1) {
  722. data.indicator = [
  723. "风能利用率排名",
  724. "故障损失率排名",
  725. "检修损失率排名",
  726. "弃风率排名",
  727. "性能损失率排名",
  728. "受累损失率排名",
  729. ];
  730. } else {
  731. data.indicator = [
  732. "光能利用率排名",
  733. "故障损失率排名",
  734. "检修损失率排名",
  735. "弃光率排名",
  736. "性能损失率排名",
  737. "受累损失率排名",
  738. ];
  739. }
  740. radarValue.push(data);
  741. });
  742. this.radarValue = radarValue;
  743. var analyis = [],
  744. gzssdl = [],
  745. jxssdl = [],
  746. xnssdl = [],
  747. xdssdl = [],
  748. slssdl = [];
  749. data.forEach((item, index) => {
  750. gzssdl.push({
  751. text: item.name,
  752. value: item.gzssdl,
  753. });
  754. jxssdl.push({
  755. text: item.name,
  756. value: item.jxssdl,
  757. });
  758. xnssdl.push({
  759. text: item.name,
  760. value: item.xnssdl,
  761. });
  762. xdssdl.push({
  763. text: item.name,
  764. value: item.xdssdl,
  765. });
  766. slssdl.push({
  767. text: item.name,
  768. value: item.slssdl,
  769. });
  770. });
  771. analyis.push(
  772. {
  773. title: "故障损失电量(万kWh)",
  774. yAxisIndex: 0,
  775. value: gzssdl,
  776. itemStyle: { color: nxfStyle("故障损失电量") },
  777. },
  778. {
  779. title: "检修损失电量(万kWh)",
  780. yAxisIndex: 0,
  781. value: jxssdl,
  782. itemStyle: { color: nxfStyle("检修损失电量") },
  783. },
  784. {
  785. title: "性能损失电量(万kWh)",
  786. yAxisIndex: 0,
  787. value: xnssdl,
  788. itemStyle: { color: nxfStyle("性能损失电量") },
  789. },
  790. {
  791. title: "限电损失电量(万kWh)",
  792. yAxisIndex: 0,
  793. value: xdssdl,
  794. itemStyle: { color: nxfStyle("限电损失电量") },
  795. },
  796. {
  797. title: "受累损失电量(万kWh)",
  798. yAxisIndex: 0,
  799. value: slssdl,
  800. itemStyle: { color: nxfStyle("受累损失电量") },
  801. }
  802. );
  803. this.analyisDialog = analyis;
  804. },
  805. },
  806. watch: {
  807. screenHeight(val) {
  808. this.screenHeight = val;
  809. if (val > 1100) {
  810. this.echartsHeight = "58vh";
  811. } else {
  812. this.echartsHeight = "53vh";
  813. }
  814. },
  815. },
  816. };
  817. </script>
  818. <style lang="less" scoped>
  819. .pagination-class {
  820. text-align: right;
  821. margin-top: 5px;
  822. }
  823. .parcel-box {
  824. height: 100%;
  825. width: 100%;
  826. padding: 0 10px;
  827. padding-bottom: 10px;
  828. }
  829. .form-wrapper {
  830. display: flex;
  831. flex-direction: row;
  832. align-items: center;
  833. margin-top: 10px;
  834. margin-bottom: 10px;
  835. .tabCut {
  836. display: inline-block;
  837. margin: 0 10px;
  838. white-space: nowrap;
  839. div {
  840. display: inline-block;
  841. width: 60px;
  842. height: 27px;
  843. border: 1px solid #274934;
  844. text-align: center;
  845. line-height: 25px;
  846. cursor: pointer;
  847. }
  848. div:nth-child(1) {
  849. border-radius: 13px 0px 0px 13px;
  850. border-right-width: 0;
  851. }
  852. div:nth-child(2) {
  853. border-radius: 0px 13px 13px 0px;
  854. }
  855. .active {
  856. background-color: rgba(5, 187, 76, 0.9);
  857. color: #fff;
  858. }
  859. .disabled {
  860. pointer-events: none;
  861. }
  862. }
  863. .tabCut1 {
  864. display: inline-block;
  865. margin: 0 10px;
  866. div {
  867. display: inline-block;
  868. width: 60px;
  869. height: 27px;
  870. border: 1px solid #274934;
  871. text-align: center;
  872. line-height: 25px;
  873. cursor: pointer;
  874. }
  875. div:nth-child(1) {
  876. border-radius: 13px 0px 0px 13px;
  877. }
  878. div:nth-child(3) {
  879. border-radius: 0px 13px 13px 0px;
  880. }
  881. .active {
  882. background-color: rgba(5, 187, 76, 0.9);
  883. color: #fff;
  884. }
  885. }
  886. .station {
  887. display: flex;
  888. flex-direction: row;
  889. align-items: center;
  890. white-space: nowrap;
  891. font-size: 14px;
  892. font-family: Microsoft YaHei;
  893. font-weight: 400;
  894. color: #b3b3b3;
  895. margin-right: 10px;
  896. }
  897. .search-input {
  898. margin-left: 10px;
  899. }
  900. .but {
  901. display: flex;
  902. flex-direction: row;
  903. align-content: center;
  904. margin-left: 20px;
  905. }
  906. .buttons {
  907. background-color: rgba(5, 187, 76, 0.2);
  908. border: 1px solid #3b6c53;
  909. color: #b3b3b3;
  910. font-size: 14px;
  911. &:hover {
  912. background-color: rgba(5, 187, 76, 0.5);
  913. color: #ffffff;
  914. }
  915. }
  916. }
  917. .bodys {
  918. width: 100%;
  919. height: calc(100% - 350px - 43px - 20px);
  920. background-color: rgba(0, 0, 0, 0.45);
  921. border-radius: 5px;
  922. }
  923. .economicTable {
  924. width: 100%;
  925. height: calc(100% - 36px);
  926. }
  927. .line {
  928. display: flex;
  929. flex-direction: row;
  930. align-items: center;
  931. justify-content: space-between;
  932. width: 100%;
  933. .leftContent {
  934. width: 242px;
  935. height: 41px;
  936. display: flex;
  937. align-items: center;
  938. background: url("~@/assets/imgs/title_left_bg.png") no-repeat;
  939. span {
  940. font-size: 16px;
  941. font-family: Microsoft YaHei;
  942. font-weight: 400;
  943. color: #05bb4c;
  944. margin-left: 25px;
  945. }
  946. }
  947. .rightContent {
  948. width: 212px;
  949. height: 28px;
  950. margin-top: 13px;
  951. background: url("~@/assets/imgs/title_right_bg.png");
  952. }
  953. }
  954. .echarts {
  955. width: 100%;
  956. height: 350px;
  957. display: flex;
  958. flex-direction: row;
  959. align-items: center;
  960. .chart-name {
  961. display: flex;
  962. align-items: center;
  963. padding-left: 20px;
  964. position: relative;
  965. height: 39px;
  966. width: 98%;
  967. margin-left: 1%;
  968. border-bottom: 1px solid rgba(153, 153, 153, 0.5);
  969. font-size: 16px;
  970. font-family: Microsoft YaHei;
  971. font-weight: 400;
  972. color: #ffffff;
  973. }
  974. .pie-echarts {
  975. width: 30%;
  976. height: 100%;
  977. background: rgba(0, 0, 0, 0.45);
  978. border-radius: 5px;
  979. }
  980. .bar-echarts {
  981. width: 69%;
  982. margin-left: 1%;
  983. height: 100%;
  984. background: rgba(0, 0, 0, 0.45);
  985. border-radius: 5px;
  986. }
  987. }
  988. .point {
  989. width: 6px;
  990. height: 1px;
  991. background-color: #ffffff;
  992. position: absolute;
  993. &.point-left {
  994. left: 0;
  995. }
  996. &.point-right {
  997. right: 0;
  998. }
  999. &.top {
  1000. top: -1px;
  1001. }
  1002. &.bottom {
  1003. bottom: -1px;
  1004. }
  1005. }
  1006. /*去除表头全选框*/
  1007. ::v-deep .el-table__header-wrapper .el-checkbox {
  1008. display: none;
  1009. }
  1010. ::v-deep .el-table__body-wrapper .el-checkbox {
  1011. .el-checkbox__input {
  1012. display: block;
  1013. }
  1014. }
  1015. </style>