dayDetailInfo.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. <template>
  2. <div class="Evaluationinfo" v-if="!noData">
  3. <div class="chart-name">
  4. <div class="point point-left"></div>
  5. <div class="point point-right"></div>
  6. </div>
  7. <div class="header">
  8. <span class="herder-info" v-for="item of gridDatas" :key="item"
  9. >风机编号:{{ item.nemCode }}</span
  10. >
  11. <span class="herder-info">基础指标</span>
  12. </div>
  13. <div class="Evaluationinfo_main">
  14. <div class="mainleft">
  15. <table class="table-form">
  16. <tr>
  17. <td class="white" v-for="item of gridDatas" :key="item">
  18. 量化评级:{{ item.dayLevel }}
  19. </td>
  20. </tr>
  21. <tr>
  22. <td class="white" v-for="item of gridDatas" :key="item">
  23. 综合排名:{{ item.dayRank }}
  24. </td>
  25. </tr>
  26. </table>
  27. <div class="chart-namess">
  28. <div class="point point-left"></div>
  29. <div class="point point-right"></div>
  30. </div>
  31. <div class="chart-body">
  32. <normal-radar-chart :height="'500px'" :value="chartDatas" />
  33. </div>
  34. </div>
  35. <div class="mainleft">
  36. <table class="table-form">
  37. <tr>
  38. <td class="white">类型</td>
  39. <td class="white">指标</td>
  40. <td class="white" v-for="item of gridDatas" :key="item">
  41. {{ item.nemCode }}
  42. </td>
  43. <td class="white" :colspan="gridDatas.length">排名</td>
  44. <td class="white" colspan="2">评分</td>
  45. </tr>
  46. <tr v-for="item of tabEvent === -1 ? column : columnGf" :key="item">
  47. <td class="white">{{ item.type }}</td>
  48. <td class="white">{{ item.name }}</td>
  49. <td class="white colorSty" v-for="row of gridDatas" :key="row">
  50. {{ row[item.field] }}
  51. </td>
  52. <td class="white colorSty" v-for="row of gridDatas" :key="row">
  53. {{ row[item.rank] }}
  54. </td>
  55. <td class="white colorSty" v-for="row of gridDatas" :key="row">
  56. {{ row[item.score] }}
  57. </td>
  58. </tr>
  59. </table>
  60. </div>
  61. </div>
  62. </div>
  63. <div v-else style="text-align: center">
  64. <span style="color: #fff">暂无数据</span>
  65. </div>
  66. </template>
  67. <script>
  68. import NormalRadarChart from "../../homePage/components/normal-radar-chart.vue";
  69. import { getApiequipmentinfoDayCompareList } from "@/api/monthlyPerformanceAnalysis";
  70. export default {
  71. components: { NormalRadarChart },
  72. props: {
  73. chooseList: {
  74. type: Array,
  75. default: () => [],
  76. },
  77. tabEvent: {
  78. type: Number,
  79. default: -1,
  80. },
  81. },
  82. data() {
  83. return {
  84. tabIndex: 0,
  85. gridDatas: [],
  86. chartDatas: [],
  87. oidObj: {
  88. name: "",
  89. id: "",
  90. charts: [],
  91. },
  92. tidObj: {
  93. name: "",
  94. id: "",
  95. charts: [],
  96. },
  97. column: [
  98. {
  99. name: "发电量",
  100. field: "dayfdl",
  101. rank: "monthfdl",
  102. score: "yearfdl",
  103. },
  104. {
  105. name: "理论发电量",
  106. field: "dayllfdl",
  107. rank: "monthllfdl",
  108. score: "yearllfdl",
  109. },
  110. {
  111. name: "平均功率",
  112. field: "daygl",
  113. rank: "monthgl",
  114. score: "yeargl",
  115. },
  116. {
  117. name: "故障损失电量",
  118. field: "daygzssdl",
  119. rank: "monthgzssdl",
  120. score: "yeargzssdl",
  121. },
  122. {
  123. name: "限电损失电量",
  124. field: "dayxdssdl",
  125. rank: "monthxdssdl",
  126. score: "yearxdssdl",
  127. },
  128. {
  129. name: "检修损失电量",
  130. field: "daywhssdl",
  131. rank: "monthwhssdl",
  132. score: "yearwhssdl",
  133. },
  134. {
  135. name: "故障时间",
  136. field: "daygzsj",
  137. rank: "monthgzsj",
  138. score: "yeargzsj",
  139. },
  140. {
  141. name: "维护时间",
  142. field: "daywhsj",
  143. rank: "monthwhsj",
  144. score: "yearwhsj",
  145. },
  146. {
  147. name: "运行时间",
  148. field: "dayyxsj",
  149. rank: "monthyxsj",
  150. score: "yearyxsj",
  151. },
  152. {
  153. name: "停机时间",
  154. field: "daytjsj",
  155. rank: "monthtjsj",
  156. score: "yeartjsj",
  157. },
  158. {
  159. name: "平均切入风速",
  160. field: "dayxfqr",
  161. type: "性能",
  162. rank: "monthxfqr",
  163. score: "yearxfqr",
  164. },
  165. {
  166. name: "性能损失电量",
  167. field: "dayxnssdl",
  168. type: "性能",
  169. rank: "monthxnssdl",
  170. score: "yearxnssdl",
  171. },
  172. {
  173. name: "拟合优度",
  174. field: "daynhyd",
  175. type: "性能",
  176. rank: "monthnhyd",
  177. score: "yearnhyd",
  178. },
  179. {
  180. name: "功率一致性系数",
  181. field: "dayglyzxxs",
  182. type: "性能",
  183. rank: "monthglyzxxs",
  184. score: "yearglyzxxs",
  185. },
  186. {
  187. name: "利用小时",
  188. field: "daylyxs",
  189. type: "可靠性管理",
  190. rank: "monthlyxs",
  191. score: "yearlyxs",
  192. },
  193. {
  194. name: "设备可利用率",
  195. field: "daysbklyl",
  196. type: "可靠性管理",
  197. rank: "monthsbklyl",
  198. score: "yearsbklyl",
  199. },
  200. {
  201. name: "等效可利用率",
  202. field: "daydxkyxs",
  203. type: "可靠性管理",
  204. rank: "monthdxkyxs",
  205. score: "yeardxkyxs",
  206. },
  207. {
  208. name: "有效风时数",
  209. field: "dayyxfss",
  210. type: "可靠性管理",
  211. rank: "monthyxfss",
  212. score: "yearyxfss",
  213. },
  214. {
  215. name: "平均风速",
  216. field: "dayfs",
  217. type: "资源",
  218. rank: "monthfs",
  219. score: "yearfs",
  220. },
  221. {
  222. name: "静风频率",
  223. field: "dayjfpl",
  224. type: "资源",
  225. rank: "monthjfpl",
  226. score: "yearjfpl",
  227. },
  228. ],
  229. columnGf: [
  230. {
  231. name: "发电量",
  232. field: "dayfdl",
  233. rank: "monthfdl",
  234. score: "yearfdl",
  235. },
  236. {
  237. name: "理论发电量",
  238. field: "dayllfdl",
  239. rank: "monthllfdl",
  240. score: "yearllfdl",
  241. },
  242. {
  243. name: "平均功率",
  244. field: "daygl",
  245. rank: "monthgl",
  246. score: "yeargl",
  247. },
  248. {
  249. name: "故障损失电量",
  250. field: "daygzssdl",
  251. rank: "monthgzssdl",
  252. score: "yeargzssdl",
  253. },
  254. {
  255. name: "限电损失电量",
  256. field: "dayxdssdl",
  257. rank: "monthxdssdl",
  258. score: "yearxdssdl",
  259. },
  260. {
  261. name: "检修损失电量",
  262. field: "daywhssdl",
  263. rank: "monthwhssdl",
  264. score: "yearwhssdl",
  265. },
  266. {
  267. name: "故障时间",
  268. field: "daygzsj",
  269. rank: "monthgzsj",
  270. score: "yeargzsj",
  271. },
  272. {
  273. name: "维护时间",
  274. field: "daywhsj",
  275. rank: "monthwhsj",
  276. score: "yearwhsj",
  277. },
  278. {
  279. name: "运行时间",
  280. field: "dayyxsj",
  281. rank: "monthyxsj",
  282. score: "yearyxsj",
  283. },
  284. {
  285. name: "停机时间",
  286. field: "daytjsj",
  287. rank: "monthtjsj",
  288. score: "yeartjsj",
  289. },
  290. {
  291. name: "平均切入光照",
  292. field: "dayxfqr",
  293. type: "性能",
  294. rank: "monthxfqr",
  295. score: "yearxfqr",
  296. },
  297. {
  298. name: "性能损失电量",
  299. field: "dayxnssdl",
  300. type: "性能",
  301. rank: "monthxnssdl",
  302. score: "yearxnssdl",
  303. },
  304. {
  305. name: "拟合优度",
  306. field: "daynhyd",
  307. type: "性能",
  308. rank: "monthnhyd",
  309. score: "yearnhyd",
  310. },
  311. {
  312. name: "功率一致性系数",
  313. field: "dayglyzxxs",
  314. type: "性能",
  315. rank: "monthglyzxxs",
  316. score: "yearglyzxxs",
  317. },
  318. {
  319. name: "利用小时",
  320. field: "daylyxs",
  321. type: "可靠性管理",
  322. rank: "monthlyxs",
  323. score: "yearlyxs",
  324. },
  325. {
  326. name: "设备可利用率",
  327. field: "daysbklyl",
  328. type: "可靠性管理",
  329. rank: "monthsbklyl",
  330. score: "yearsbklyl",
  331. },
  332. {
  333. name: "等效可利用率",
  334. field: "daydxkyxs",
  335. type: "可靠性管理",
  336. rank: "monthdxkyxs",
  337. score: "yeardxkyxs",
  338. },
  339. {
  340. name: "有效光时数",
  341. field: "dayyxfss",
  342. type: "可靠性管理",
  343. rank: "monthyxfss",
  344. score: "yearyxfss",
  345. },
  346. {
  347. name: "平均光照",
  348. field: "dayfs",
  349. type: "资源",
  350. rank: "monthfs",
  351. score: "yearfs",
  352. },
  353. // {
  354. // name: "静风频率",
  355. // field: "dayjfpl",
  356. // type: "资源",
  357. // rank: "monthjfpl",
  358. // score: "yearjfpl",
  359. // },
  360. ],
  361. noData: false,
  362. };
  363. },
  364. methods: {
  365. init() {
  366. this.oidObj.name = this.chooseList[0].nemCode;
  367. this.oidObj.id = this.chooseList[0].id;
  368. this.oidObj.charts = [];
  369. this.tidObj.name = this.chooseList[1].nemCode;
  370. this.tidObj.id = this.chooseList[1].id;
  371. this.tidObj.charts = [];
  372. this.getDetailInfo();
  373. },
  374. showName(val) {
  375. let str = "";
  376. str = val.substring(val.indexOf("_F") + 3, val.length);
  377. return str;
  378. },
  379. // 获取对比详情数据
  380. async getDetailInfo() {
  381. this.noData = false;
  382. let params = {
  383. oid: this.oidObj.id,
  384. tid: this.tidObj.id,
  385. types: this.tabIndex,
  386. };
  387. const { data: datas } = await getApiequipmentinfoDayCompareList(params);
  388. if (datas && datas.data) {
  389. if (datas.data.charts) {
  390. if (
  391. datas.data.charts[this.oidObj.name] &&
  392. datas.data.charts[this.oidObj.name].length > 0
  393. ) {
  394. datas.data.charts[this.oidObj.name].forEach((it, index) => {
  395. this.oidObj.charts.push(it);
  396. });
  397. }
  398. if (
  399. datas.data.charts[this.tidObj.name] &&
  400. datas.data.charts[this.tidObj.name].length > 0
  401. ) {
  402. datas.data.charts[this.tidObj.name].forEach((it, index) => {
  403. this.tidObj.charts.push(it);
  404. });
  405. }
  406. this.changeChartsData();
  407. } else {
  408. this.noData = true;
  409. }
  410. if (datas.data.data.length > 0) {
  411. this.gridDatas = datas.data.data;
  412. // this.oidObj.datas = datas.data.data[0]
  413. // this.tidObj.datas = datas.data.data[1]
  414. } else {
  415. this.noData = true;
  416. }
  417. }
  418. },
  419. //整理charts数据
  420. changeChartsData() {
  421. let valArr = [];
  422. if (this.tabEvent == -1) {
  423. valArr = [
  424. "平均切入风速",
  425. "性能损失电量",
  426. "拟合优度",
  427. "功率一致性系数",
  428. "利用小时",
  429. "设备可利用率",
  430. "等效可利用系数",
  431. "有效风时数",
  432. "平均风速",
  433. "静风频率",
  434. ];
  435. } else {
  436. valArr = [
  437. "平均切入光照",
  438. "性能损失电量",
  439. "拟合优度",
  440. "功率一致性系数",
  441. "利用小时",
  442. "设备可利用率",
  443. "等效可利用系数",
  444. "有效光时数",
  445. "平均光照",
  446. ];
  447. }
  448. const service1 = {
  449. name: this.oidObj.name,
  450. value: [],
  451. };
  452. const service2 = {
  453. name: this.tidObj.name,
  454. value: [],
  455. };
  456. for (let i = 0; i < valArr.length; i++) {
  457. let it = valArr[i];
  458. for (let j = 0; j < this.oidObj.charts.length; j++) {
  459. let ic = this.oidObj.charts[j];
  460. if (it === ic.target) {
  461. service1.value.push(ic.data);
  462. }
  463. }
  464. for (let k = 0; k < this.tidObj.charts.length; k++) {
  465. let iv = this.tidObj.charts[k];
  466. if (it === iv.target) {
  467. service2.value.push(iv.data);
  468. }
  469. }
  470. }
  471. const chartData = [
  472. {
  473. indicator: valArr,
  474. data: [service1],
  475. },
  476. {
  477. indicator: valArr,
  478. data: [service2],
  479. },
  480. ];
  481. this.chartDatas = chartData;
  482. },
  483. },
  484. };
  485. </script>
  486. <style lang="less">
  487. .Evaluationinfo {
  488. .header {
  489. display: flex;
  490. width: 100%;
  491. height: 40px;
  492. line-height: 40px;
  493. background: rgba(83, 89, 104, 0.3);
  494. font-family: MicrosoftYaHei;
  495. .herder-info {
  496. flex: 1 0 25%;
  497. color: #a5a3a3;
  498. font-family: MicrosoftYaHei;
  499. text-align: center;
  500. font-size: 14px;
  501. font-weight: 400;
  502. &:last-child {
  503. flex: 1 0 50%;
  504. }
  505. }
  506. }
  507. .Evaluationinfo_main {
  508. display: flex;
  509. .mainleft {
  510. flex: 0 0 50%;
  511. display: flex;
  512. flex-direction: column;
  513. .table-form {
  514. width: 100%;
  515. border-collapse: collapse;
  516. tr {
  517. background: transparent;
  518. &:nth-child(2n) {
  519. background: rgba(83, 89, 104, 0.1);
  520. }
  521. td {
  522. padding: 10px;
  523. border: 0px;
  524. font-size: 12px;
  525. text-align: center;
  526. &.text {
  527. min-width: 13vh;
  528. }
  529. &.value {
  530. min-width: 6vh;
  531. }
  532. &.unit {
  533. min-width: 40px;
  534. }
  535. }
  536. }
  537. .white {
  538. color: #b3b3b3;
  539. font-size: 14px;
  540. font-family: MicrosoftYaHei;
  541. }
  542. .colorSty {
  543. text-align: right;
  544. color: #05bb4c;
  545. font-size: 14px;
  546. font-family: MicrosoftYaHei;
  547. }
  548. }
  549. .chart-namess {
  550. height: 1px;
  551. margin-top: 10px;
  552. border-bottom: 1px solid rgba(153, 153, 153, 1);
  553. .point {
  554. width: 6px;
  555. height: 1px;
  556. background-color: #ffffff;
  557. position: absolute;
  558. &.point-left {
  559. left: 0;
  560. }
  561. &.point-right {
  562. right: 50%;
  563. }
  564. &.top {
  565. top: -1px;
  566. }
  567. &.bottom {
  568. bottom: 0px;
  569. }
  570. }
  571. }
  572. .chart-body {
  573. flex-grow: 1;
  574. display: flex;
  575. align-items: center;
  576. }
  577. }
  578. .right {
  579. flex: 0 0 50%;
  580. }
  581. }
  582. .chart-name {
  583. height: 1px;
  584. margin-bottom: 10px;
  585. border-bottom: 1px solid rgba(153, 153, 153, 0.5);
  586. .point {
  587. width: 6px;
  588. height: 1px;
  589. background-color: #ffffff;
  590. position: absolute;
  591. &.point-left {
  592. left: 0;
  593. }
  594. &.point-right {
  595. right: 1px;
  596. }
  597. &.top {
  598. top: -1px;
  599. }
  600. &.bottom {
  601. bottom: 0px;
  602. }
  603. }
  604. }
  605. }
  606. </style>