HealthDay.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. <template>
  2. <div class="decision-page-2">
  3. <div class="query mg-b-8">
  4. <div class="query-items">
  5. <div class="query-item">
  6. <div class="lable">模块:</div>
  7. <div class="search-input">
  8. <el-select
  9. v-model="value2"
  10. @change="MoKuaiChange(value2)"
  11. multiple
  12. placeholder="请选择"
  13. popper-class="select"
  14. >
  15. <el-option
  16. v-for="item in MoKuai"
  17. :key="item.id"
  18. :value="item.id"
  19. :label="item.name"
  20. >
  21. </el-option>
  22. </el-select>
  23. </div>
  24. </div>
  25. <div class="query-item">
  26. <div class="lable">风场:</div>
  27. <div class="search-input">
  28. <el-select
  29. v-model="value1"
  30. @change="ChangZhanChange(value1)"
  31. multiple
  32. placeholder="请选择"
  33. popper-class="select"
  34. >
  35. <el-option
  36. v-for="item in ChangZhan"
  37. :key="item.id"
  38. :value="item.id"
  39. :label="item.name"
  40. >
  41. </el-option>
  42. </el-select>
  43. </div>
  44. </div>
  45. <div class="query-item">
  46. <div class="lable">日期:</div>
  47. <div class="search-input">
  48. <el-date-picker
  49. v-model="value4"
  50. @change="BeginChange(value4)"
  51. type="date"
  52. value-format="YYYY-MM-DD"
  53. placeholder="选择日期"
  54. popper-class="date-select"
  55. >
  56. </el-date-picker>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="query-actions">
  61. <button class="btn" @click="dbfx">对比</button>
  62. </div>
  63. </div>
  64. <div class="mg-b-16">
  65. <div class="project-table">
  66. <Table :data="tableData" :canScroll="false" ref="curRef"></Table>
  67. </div>
  68. </div>
  69. <el-dialog
  70. title="对标排名分析"
  71. v-model="dialogVisible"
  72. width="70%"
  73. top="10vh"
  74. custom-class="modal"
  75. :close-on-click-modal="false"
  76. >
  77. <dayinfo
  78. :radarValue="radarValue"
  79. :windNum="windNum"
  80. :windNum2="windNum2"
  81. :tabs="tabs"
  82. :analyisDialog="analyisDialog"
  83. />
  84. </el-dialog>
  85. </div>
  86. </template>
  87. <script>
  88. import SvgIcon from "../../components/coms/icon/svg-icon.vue";
  89. import Panel from "../../components/coms/panel/panel.vue";
  90. import Table from "../../components/coms/table/table.vue";
  91. import Dayinfo from "./dayinfo.vue";
  92. export default {
  93. components: {
  94. Panel,
  95. Table,
  96. SvgIcon,
  97. Dayinfo,
  98. },
  99. data() {
  100. let that = this;
  101. return {
  102. tableIdArr: [], //放checkbox的id数组
  103. tableId: [],
  104. checkLength: 0, //对标分析只能选择2个
  105. tableData: {
  106. column: [
  107. {
  108. name: "",
  109. field: "index",
  110. is_num: false,
  111. is_light: false,
  112. },
  113. {
  114. name: "",
  115. field: "check",
  116. is_num: false,
  117. is_light: false,
  118. template: () => {
  119. return "<input class='check curCheckBox' type='CheckBox' />";
  120. },
  121. click: function (event, data) {
  122. var dataId = that.tableIdArr[data.index - 1];
  123. if (event.target.checked == false && that.checkLength <= 2) {
  124. that.tableId.forEach((item, i) => {
  125. if (item == dataId) {
  126. that.tableId.splice(i, 1);
  127. }
  128. });
  129. that.checkLength--;
  130. } else if (event.target.checked && that.checkLength < 2) {
  131. that.tableId.push(dataId);
  132. that.checkLength++;
  133. } else if (that.checkLength == 2) {
  134. event.target.checked = false;
  135. }
  136. },
  137. },
  138. {
  139. name: "风机编号",
  140. field: "name",
  141. is_num: false,
  142. is_light: false,
  143. },
  144. {
  145. name: "等级",
  146. field: "dj",
  147. is_num: false,
  148. is_light: false,
  149. sortable: true,
  150. },
  151. {
  152. name: "综合排名",
  153. field: "zhpm",
  154. is_num: false,
  155. is_light: false,
  156. sortable: true,
  157. },
  158. {
  159. name: "发电量",
  160. field: "fdl",
  161. is_num: false,
  162. is_light: false,
  163. sortable: true,
  164. },
  165. {
  166. name: "理论发电量",
  167. field: "llfdl",
  168. is_num: false,
  169. is_light: false,
  170. sortable: true,
  171. },
  172. {
  173. name: "平均风速",
  174. field: "pjfs",
  175. is_num: false,
  176. is_light: false,
  177. sortable: true,
  178. },
  179. {
  180. name: "平均功率",
  181. field: "pjgl",
  182. is_num: false,
  183. is_light: false,
  184. sortable: true,
  185. },
  186. {
  187. name: "故障损失电量",
  188. field: "gzssdl",
  189. is_num: false,
  190. is_light: false,
  191. sortable: true,
  192. },
  193. {
  194. name: "限电损失电量",
  195. field: "xdssdl",
  196. is_num: false,
  197. is_light: true,
  198. sortable: true,
  199. },
  200. {
  201. name: "检修损失电量",
  202. field: "whssdl",
  203. is_num: false,
  204. is_light: false,
  205. sortable: true,
  206. },
  207. {
  208. name: "性能损失电量",
  209. field: "xnssdl",
  210. is_num: false,
  211. is_light: false,
  212. sortable: true,
  213. },
  214. {
  215. name: "利用小时数",
  216. field: "lyxss",
  217. is_num: false,
  218. is_light: false,
  219. sortable: true,
  220. },
  221. {
  222. name: "拟合优度",
  223. field: "nhyd",
  224. is_num: false,
  225. is_light: false,
  226. sortable: true,
  227. },
  228. {
  229. name: "设备可利用率",
  230. field: "sbklyl",
  231. is_num: false,
  232. is_light: false,
  233. sortable: true,
  234. },
  235. {
  236. name: "等效可用系数",
  237. field: "dxkyxs",
  238. is_num: false,
  239. is_light: false,
  240. sortable: true,
  241. },
  242. {
  243. name: "有效风时数",
  244. field: "yxfss",
  245. is_num: false,
  246. is_light: false,
  247. sortable: true,
  248. },
  249. {
  250. name: "平均切入风速",
  251. field: "pjqrfs",
  252. is_num: false,
  253. is_light: false,
  254. sortable: true,
  255. },
  256. {
  257. name: "静风频率",
  258. field: "jfpl",
  259. is_num: false,
  260. is_light: false,
  261. sortable: true,
  262. },
  263. {
  264. name: "功率一致性系数",
  265. field: "glyzxxs",
  266. is_num: false,
  267. is_light: false,
  268. sortable: true,
  269. },
  270. ],
  271. data: [],
  272. },
  273. ChangZhan: [], //场站
  274. MoKuai: [], //项目
  275. value1: [],
  276. value2: [],
  277. value3: "",
  278. dialogVisible: false,
  279. radarValue: [],
  280. windNum: "dd",
  281. windNum2: "dd",
  282. tabs: [],
  283. analyisDialog: [],
  284. ajaxData: [],
  285. };
  286. },
  287. created() {
  288. this.ChangZhanVal();
  289. this.value3 = this.getTime(1);
  290. this.AjaxCommon();
  291. this.MoKuaiVal();
  292. },
  293. methods: {
  294. MoKuaiVal(val) {
  295. var that = this;
  296. that.API.requestData({
  297. method: "GET",
  298. baseURL: "10.155.32.4:8034",
  299. subUrl: "evaluation/modelMainList",
  300. success(res) {
  301. that.MoKuai = res.data;
  302. },
  303. });
  304. },
  305. MoKuaiChange(val) {
  306. this.value2 = val;
  307. this.value3 = [];
  308. this.AjaxCommon();
  309. this.XianLuVal(val);
  310. this.clearDb();
  311. },
  312. ChangZhanVal() {
  313. var that = this;
  314. that.API.requestData({
  315. method: "GET",
  316. baseURL: "10.155.32.4:8034",
  317. subUrl: "evaluation/wplist",
  318. success(res) {
  319. that.ChangZhan = res.data;
  320. },
  321. });
  322. },
  323. ChangZhanChange(val) {
  324. this.value1 = val;
  325. this.value2 = [];
  326. this.value3 = [];
  327. this.AjaxCommon();
  328. this.MoKuaiVal(val);
  329. this.clearDb();
  330. },
  331. BeginChange(val) {
  332. this.value4 = val;
  333. this.AjaxCommon();
  334. this.clearDb();
  335. },
  336. getTime(val) {
  337. //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
  338. var date = new Date();
  339. var year = date.getFullYear(),
  340. month = date.getMonth() + 1,
  341. day = date.getDate();
  342. month >= 1 && month <= 9 ? (month = "0" + month) : "";
  343. day >= 0 && day <= 9 ? (day = "0" + day) : "";
  344. var begin = year + "-" + month + "-01";
  345. var end = year + "-" + month + "-" + day;
  346. if (val == 1) {
  347. return begin;
  348. } else if (val == 2) {
  349. return end;
  350. }
  351. },
  352. AjaxCommon() {
  353. var that = this;
  354. that.API.requestData({
  355. //五项损失率
  356. method: "GET",
  357. baseURL: "10.155.32.4:8034",
  358. subUrl: "evaluation/wxssl",
  359. data: {
  360. wpids: that.value1,
  361. projectids: that.value2,
  362. lineids: that.value3,
  363. beginDate: that.value4,
  364. endDate: that.value5,
  365. target: "",
  366. sort: "",
  367. },
  368. success(res) {
  369. that.ajaxData = res.data;
  370. var dataTab = []; //表格
  371. res.data.forEach((item, index) => {
  372. that.tableIdArr.push(item.id);
  373. dataTab.push({
  374. //表格
  375. index: index + 1,
  376. name: item.name,
  377. dj: item.dj,
  378. zhpm: item.zhpm,
  379. fdl: item.fdl,
  380. llfdl: item.llfdl,
  381. pjfs: item.gzssdl,
  382. pjgl: item.pjgl,
  383. gzssdl: item.gzssdl,
  384. lyxss: item.lyxss,
  385. whssdl: item.whssdl,
  386. xnssdl: item.xnssdl,
  387. lyxss: item.lyxss,
  388. nhyd: item.nhyd,
  389. sbklyl: item.sbklyl,
  390. dxkyxs: item.dxkyxs,
  391. yxfss: item.yxfss,
  392. pjqrfs: item.pjqrfs,
  393. jfpl: item.jfpl,
  394. glyzxxs: item.glyzxxs,
  395. jxssl: item.jxssl,
  396. qflpm: item.qflpm,
  397. qfl: item.qfl,
  398. xnsslpm: item.xnsslpm,
  399. xnssl: item.xnssl,
  400. slsslpm: item.slsslpm,
  401. slssl: item.slssl,
  402. is_light: false,
  403. });
  404. });
  405. that.tableData.data = dataTab;
  406. },
  407. });
  408. },
  409. AjaxDbfx() {
  410. var that = this;
  411. var data = that.ajaxData;
  412. that.windNum = data[0].name;
  413. that.windNum2 = data[1].name;
  414. that.tabs = [
  415. {
  416. name: "发电量",
  417. windData1: data[0].fdl,
  418. windData2: data[1].fdl,
  419. },
  420. {
  421. name: "故障损失电量",
  422. windData1: data[0].gzssdl,
  423. windData2: data[1].gzssdl,
  424. },
  425. {
  426. name: "检修损失电量",
  427. windData1: data[0].jxssdl,
  428. windData2: data[1].jxssdl,
  429. },
  430. {
  431. name: "性能未达标损失电量",
  432. windData1: data[0].xnssdl,
  433. windData2: data[1].xnssdl,
  434. },
  435. {
  436. name: "受累损失电量",
  437. windData1: data[0].slssdl,
  438. windData2: data[1].slssdl,
  439. },
  440. {
  441. name: "风能利用率",
  442. windData1: data[0].fnlyl,
  443. windData2: data[1].fnlyl,
  444. },
  445. {
  446. name: "故障损失率",
  447. windData1: data[0].gzssl,
  448. windData2: data[1].gzssl,
  449. },
  450. {
  451. name: "检修损失率",
  452. windData1: data[0].jxssl,
  453. windData2: data[1].jxssl,
  454. },
  455. {
  456. name: "弃风率",
  457. windData1: data[0].qfl,
  458. windData2: data[1].qfl,
  459. },
  460. {
  461. name: "性能损失率",
  462. windData1: data[0].xnssl,
  463. windData2: data[1].xnssl,
  464. },
  465. {
  466. name: "受累损失率",
  467. windData1: data[0].slssl,
  468. windData2: data[1].slssl,
  469. },
  470. ];
  471. that.radarValue = [
  472. {
  473. indicator: [
  474. "风能利用率",
  475. "故障损失率",
  476. "检修损失率",
  477. "弃风率",
  478. "性能损失率",
  479. "受累损失率",
  480. ],
  481. data: [
  482. {
  483. value: [
  484. data[0].fnlylpm,
  485. data[0].gzsslpm,
  486. data[0].jxsslpm,
  487. data[0].qflpm,
  488. data[0].xnsslpm,
  489. data[0].slsslpm,
  490. ],
  491. },
  492. {
  493. value: [
  494. data[1].fnlylpm,
  495. data[1].gzsslpm,
  496. data[1].jxsslpm,
  497. data[1].qflpm,
  498. data[1].xnsslpm,
  499. data[1].slsslpm,
  500. ],
  501. },
  502. ],
  503. },
  504. ];
  505. var analyis = [],
  506. gzssdl = [],
  507. jxssdl = [],
  508. xnssdl = [],
  509. xdssdl = [],
  510. slssdl = [];
  511. data.forEach((item, index) => {
  512. gzssdl.push({
  513. text: item.name,
  514. value: item.gzssdl,
  515. });
  516. jxssdl.push({
  517. text: item.name,
  518. value: item.jxssdl,
  519. });
  520. xnssdl.push({
  521. text: item.name,
  522. value: item.xnssdl,
  523. });
  524. xdssdl.push({
  525. text: item.name,
  526. value: item.xdssdl,
  527. });
  528. slssdl.push({
  529. text: item.name,
  530. value: item.slssdl,
  531. });
  532. });
  533. analyis.push(
  534. {
  535. title: "故障损失电量",
  536. yAxisIndex: 0,
  537. value: gzssdl,
  538. },
  539. {
  540. title: "检修损失电量",
  541. yAxisIndex: 0,
  542. value: jxssdl,
  543. },
  544. {
  545. title: "性能损失电量",
  546. yAxisIndex: 0,
  547. value: xnssdl,
  548. },
  549. {
  550. title: "限电损失电量",
  551. yAxisIndex: 0,
  552. value: xdssdl,
  553. },
  554. {
  555. title: "受累损失电量",
  556. yAxisIndex: 0,
  557. value: slssdl,
  558. }
  559. );
  560. that.analyisDialog = analyis;
  561. },
  562. tooltip(param, callback) {
  563. var color = ["#05bb4c", "#4b55ae", "#fa8c16", "#f8de5b"];
  564. var result = param[0].axisValue;
  565. param.forEach((value, index) => {
  566. result +=
  567. "<br />" +
  568. `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${color[index]};"></span>` +
  569. value.seriesName +
  570. ":" +
  571. value.value;
  572. });
  573. callback(result);
  574. return true;
  575. },
  576. dbfx() {
  577. var that = this;
  578. if (that.tableId.length == 2) {
  579. that.dialogVisible = true;
  580. this.AjaxDbfx();
  581. this.clearDb();
  582. }
  583. },
  584. clearDb() {
  585. //清空对标状态
  586. this.$refs.curRef.clearCheckBox();
  587. this.tableId = [];
  588. this.checkLength = 0;
  589. },
  590. },
  591. };
  592. </script>
  593. <style lang="less">
  594. .decision-page-2 {
  595. .content .project-table {
  596. tbody {
  597. height: calc(100vh - 24.5vh);
  598. }
  599. }
  600. .project-table {
  601. overflow: auto;
  602. tbody {
  603. height: 279px;
  604. }
  605. th,
  606. td {
  607. color: #b2bdc0;
  608. &:nth-child(1) {
  609. width: 50px;
  610. }
  611. &:nth-child(2) {
  612. width: 50px;
  613. }
  614. }
  615. }
  616. .action {
  617. text-decoration: underline;
  618. color: @green;
  619. cursor: pointer;
  620. }
  621. }
  622. </style>