dayDetailInfo.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. <template>
  2. <div class="Evaluationinfo" v-if="!noData">
  3. <div class="chart-name">
  4. <div class="point left"></div>
  5. <div class="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 left"></div>
  29. <div class="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 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
  53. class="white colorSty"
  54. :class="index >= 6 ? 'nowrap' : ''"
  55. v-for="(row, index) of gridDatas"
  56. :key="row"
  57. >
  58. {{ row[item.rank] }}
  59. </td>
  60. <td class="white colorSty" v-for="row of gridDatas" :key="row">
  61. {{ row[item.score] }}
  62. </td>
  63. </tr>
  64. </table>
  65. </div>
  66. </div>
  67. </div>
  68. <div v-else style="text-align: center">
  69. <span style="color: #fff">暂无数据</span>
  70. </div>
  71. </template>
  72. <script>
  73. import NormalRadarChart from "../../homePage/components/normal-radar-chart.vue";
  74. import { getApiequipmentinfoDayCompareList } from "@/api/monthlyPerformanceAnalysis";
  75. export default {
  76. components: { NormalRadarChart },
  77. props: {
  78. chooseList: {
  79. type: Array,
  80. default: () => [],
  81. },
  82. tabEvent: {
  83. type: Number,
  84. default: -1,
  85. },
  86. },
  87. data() {
  88. return {
  89. tabIndex: 0,
  90. gridDatas: [],
  91. chartDatas: [],
  92. oidObj: {
  93. name: "",
  94. id: "",
  95. charts: [],
  96. },
  97. tidObj: {
  98. name: "",
  99. id: "",
  100. charts: [],
  101. },
  102. columnGf: [
  103. {
  104. name: "发电量",
  105. field: "dayfdl",
  106. rank: "monthfdl",
  107. score: "yearfdl",
  108. },
  109. {
  110. name: "理论发电量",
  111. field: "dayllfdl",
  112. rank: "monthllfdl",
  113. score: "yearllfdl",
  114. },
  115. {
  116. name: "平均功率",
  117. field: "daygl",
  118. rank: "monthgl",
  119. score: "yeargl",
  120. },
  121. {
  122. name: "故障损失电量",
  123. field: "daygzssdl",
  124. rank: "monthgzssdl",
  125. score: "yeargzssdl",
  126. },
  127. {
  128. name: "限电损失电量",
  129. field: "dayxdssdl",
  130. rank: "monthxdssdl",
  131. score: "yearxdssdl",
  132. },
  133. {
  134. name: "维护损失电量",
  135. field: "daywhssdl",
  136. rank: "monthwhssdl",
  137. score: "yearwhssdl",
  138. },
  139. {
  140. name: "故障时间",
  141. field: "daygzsj",
  142. rank: "monthgzsj",
  143. score: "yeargzsj",
  144. },
  145. {
  146. name: "维护时间",
  147. field: "daywhsj",
  148. rank: "monthwhsj",
  149. score: "yearwhsj",
  150. },
  151. {
  152. name: "运行时间",
  153. field: "dayyxsj",
  154. rank: "monthyxsj",
  155. score: "yearyxsj",
  156. },
  157. {
  158. name: "停机时间",
  159. field: "daytjsj",
  160. rank: "monthtjsj",
  161. score: "yeartjsj",
  162. },
  163. {
  164. name: "平均切入辐照",
  165. field: "dayxfqr",
  166. type: "性能",
  167. rank: "monthxfqr",
  168. score: "yearxfqr",
  169. },
  170. {
  171. name: "性能损失电量",
  172. field: "dayxnssdl",
  173. type: "性能",
  174. rank: "monthxnssdl",
  175. score: "yearxnssdl",
  176. },
  177. {
  178. name: "拟合优度",
  179. field: "daynhyd",
  180. type: "性能",
  181. rank: "monthnhyd",
  182. score: "yearnhyd",
  183. },
  184. {
  185. name: "功率一致性系数",
  186. field: "dayglyzxxs",
  187. type: "性能",
  188. rank: "monthglyzxxs",
  189. score: "yearglyzxxs",
  190. },
  191. {
  192. name: "利用小时",
  193. field: "daylyxs",
  194. type: "可靠性管理",
  195. rank: "monthlyxs",
  196. score: "yearlyxs",
  197. },
  198. {
  199. name: "设备可利用率",
  200. field: "daysbklyl",
  201. type: "可靠性管理",
  202. rank: "monthsbklyl",
  203. score: "yearsbklyl",
  204. },
  205. {
  206. name: "等效可利用率",
  207. field: "daydxkyxs",
  208. type: "可靠性管理",
  209. rank: "monthdxkyxs",
  210. score: "yeardxkyxs",
  211. },
  212. {
  213. name: "有效光时数",
  214. field: "dayyxfss",
  215. type: "可靠性管理",
  216. rank: "monthyxfss",
  217. score: "yearyxfss",
  218. },
  219. {
  220. name: "平均辐照",
  221. field: "dayfs",
  222. type: "资源",
  223. rank: "monthfs",
  224. score: "yearfs",
  225. },
  226. // {
  227. // name: "静风频率",
  228. // field: "dayjfpl",
  229. // type: "资源",
  230. // rank: "monthjfpl",
  231. // score: "yearjfpl",
  232. // },
  233. ],
  234. noData: false,
  235. };
  236. },
  237. methods: {
  238. init() {
  239. this.oidObj.name = this.chooseList[0].nemCode;
  240. this.oidObj.id = this.chooseList[0].id;
  241. this.oidObj.charts = [];
  242. this.tidObj.name = this.chooseList[1].nemCode;
  243. this.tidObj.id = this.chooseList[1].id;
  244. this.tidObj.charts = [];
  245. this.getDetailInfo();
  246. },
  247. showName(val) {
  248. let str = "";
  249. str = val.substring(val.indexOf("_F") + 3, val.length);
  250. return str;
  251. },
  252. // 获取对比详情数据
  253. async getDetailInfo() {
  254. this.noData = false;
  255. let params = {
  256. oid: this.oidObj.id,
  257. tid: this.tidObj.id,
  258. types: this.tabIndex,
  259. };
  260. const datas = await getApiequipmentinfoDayCompareList(params);
  261. if (datas && datas.data) {
  262. if (datas.data.charts) {
  263. if (
  264. datas.data.charts[this.oidObj.name] &&
  265. datas.data.charts[this.oidObj.name].length > 0
  266. ) {
  267. datas.data.charts[this.oidObj.name].forEach((it, index) => {
  268. this.oidObj.charts.push(it);
  269. });
  270. }
  271. if (
  272. datas.data.charts[this.tidObj.name] &&
  273. datas.data.charts[this.tidObj.name].length > 0
  274. ) {
  275. datas.data.charts[this.tidObj.name].forEach((it, index) => {
  276. this.tidObj.charts.push(it);
  277. });
  278. }
  279. this.changeChartsData();
  280. } else {
  281. this.noData = true;
  282. }
  283. if (datas.data.data.length > 0) {
  284. this.gridDatas = datas.data.data;
  285. // this.oidObj.datas = datas.data.data[0]
  286. // this.tidObj.datas = datas.data.data[1]
  287. } else {
  288. this.noData = true;
  289. }
  290. }
  291. },
  292. //整理charts数据
  293. changeChartsData() {
  294. let valArr = [
  295. "平均切入辐照",
  296. "性能损失电量",
  297. "拟合优度",
  298. "功率一致性系数",
  299. "利用小时",
  300. "设备可利用率",
  301. "等效可利用系数",
  302. "有效光时数",
  303. "平均辐照",
  304. ];
  305. const service1 = {
  306. name: this.oidObj.name,
  307. value: [],
  308. };
  309. const service2 = {
  310. name: this.tidObj.name,
  311. value: [],
  312. };
  313. for (let i = 0; i < valArr.length; i++) {
  314. let it = valArr[i];
  315. for (let j = 0; j < this.oidObj.charts.length; j++) {
  316. let ic = this.oidObj.charts[j];
  317. if (it === ic.target) {
  318. service1.value.push(ic.data);
  319. }
  320. }
  321. for (let k = 0; k < this.tidObj.charts.length; k++) {
  322. let iv = this.tidObj.charts[k];
  323. if (it === iv.target) {
  324. service2.value.push(iv.data);
  325. }
  326. }
  327. }
  328. const chartData = [
  329. {
  330. indicator: valArr,
  331. data: [service1],
  332. },
  333. {
  334. indicator: valArr,
  335. data: [service2],
  336. },
  337. ];
  338. this.chartDatas = chartData;
  339. },
  340. },
  341. };
  342. </script>
  343. <style lang="less" scoped>
  344. .Evaluationinfo ::v-deep{
  345. height: 100%;
  346. .header {
  347. display: flex;
  348. width: 100%;
  349. height: 40px;
  350. line-height: 40px;
  351. background: rgba(83, 89, 104, 0.3);
  352. font-family: MicrosoftYaHei;
  353. .herder-info {
  354. flex: 1 0 25%;
  355. color: #a5a3a3;
  356. font-family: MicrosoftYaHei;
  357. text-align: center;
  358. font-size: 14px;
  359. font-weight: 400;
  360. &:last-child {
  361. flex: 1 0 50%;
  362. }
  363. }
  364. }
  365. .Evaluationinfo_main {
  366. display: flex;
  367. height: calc(100% - 40px - 11px);
  368. .mainleft {
  369. flex: 0 0 50%;
  370. display: flex;
  371. flex-direction: column;
  372. height: 100%;
  373. overflow: auto;
  374. .table-form {
  375. width: 100%;
  376. border-collapse: collapse;
  377. tr {
  378. background: transparent;
  379. &:nth-child(2n) {
  380. background: rgba(83, 89, 104, 0.1);
  381. }
  382. td {
  383. padding: 0.741vh;
  384. border: 0px;
  385. font-size: 12px;
  386. text-align: center;
  387. &.text {
  388. min-width: 13vh;
  389. }
  390. &.value {
  391. min-width: 6vh;
  392. }
  393. &.unit {
  394. min-width: 40px;
  395. }
  396. }
  397. }
  398. .white {
  399. color: #b3b3b3;
  400. font-size: 14px;
  401. font-family: MicrosoftYaHei;
  402. }
  403. .colorSty {
  404. color: #1c99ff;
  405. font-size: 14px;
  406. // white-space: nowrap;
  407. font-family: MicrosoftYaHei;
  408. &.nowrap {
  409. white-space: nowrap;
  410. }
  411. }
  412. }
  413. .chart-namess {
  414. height: 1px;
  415. margin-top: 10px;
  416. border-bottom: 1px solid rgba(153, 153, 153, 1);
  417. .point {
  418. width: 6px;
  419. height: 1px;
  420. background-color: #ffffff;
  421. position: absolute;
  422. &.left {
  423. left: 0;
  424. }
  425. &.right {
  426. right: 50%;
  427. }
  428. &.top {
  429. top: -1px;
  430. }
  431. &.bottom {
  432. bottom: 0px;
  433. }
  434. }
  435. }
  436. .chart-body {
  437. flex-grow: 1;
  438. display: flex;
  439. align-items: center;
  440. }
  441. }
  442. .right {
  443. flex: 0 0 50%;
  444. }
  445. }
  446. .chart-name {
  447. height: 1px;
  448. margin-bottom: 10px;
  449. border-bottom: 1px solid rgba(153, 153, 153, 0.5);
  450. .point {
  451. width: 6px;
  452. height: 1px;
  453. background-color: #ffffff;
  454. position: absolute;
  455. &.left {
  456. left: 0;
  457. }
  458. &.right {
  459. right: 1px;
  460. }
  461. &.top {
  462. top: -1px;
  463. }
  464. &.bottom {
  465. bottom: 0px;
  466. }
  467. }
  468. }
  469. }
  470. </style>