Decision4.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. <template>
  2. <div class="decision-page-4">
  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-date-picker
  9. v-model="value4"
  10. @change="BeginChange(value4)"
  11. type="date"
  12. value-format="YYYY-MM-DD"
  13. placeholder="选择日期"
  14. popper-class="date-select"
  15. >
  16. </el-date-picker>
  17. </div>
  18. </div>
  19. <div class="query-item">
  20. <div class="lable">结束日期:</div>
  21. <div class="search-input">
  22. <el-date-picker
  23. v-model="value5"
  24. @change="EndChange(value5)"
  25. type="date"
  26. value-format="YYYY-MM-DD"
  27. placeholder="选择日期"
  28. popper-class="date-select"
  29. >
  30. </el-date-picker>
  31. <div class="unit svg-icon svg-icon-gray">
  32. <svg-icon :svgid="''" />
  33. </div>
  34. </div>
  35. </div>
  36. <div class="query-actions">
  37. <button class="btn" @click="dbfx">对标分析</button>
  38. </div>
  39. </div>
  40. </div>
  41. <toolbar-panel title="值际对标" :showLine="false"></toolbar-panel>
  42. <div class="mg-b-16">
  43. <div class="project-table">
  44. <Table :data="tableData" ref="curRef"></Table>
  45. </div>
  46. </div>
  47. <el-dialog
  48. title="对标排名分析"
  49. v-model="dialogVisible"
  50. width="70%"
  51. top="10vh"
  52. custom-class="modal"
  53. :close-on-click-modal="false"
  54. >
  55. <dayinfo
  56. :radarValue="radarValue"
  57. :windNum="windNum"
  58. :windNum2="windNum2"
  59. :tabs="tabs"
  60. :analyisDialog="analyisDialog"
  61. />
  62. </el-dialog>
  63. </div>
  64. </template>
  65. <script>
  66. import MultipleBarChart from "../../components/chart/bar/multiple-bar-chart.vue";
  67. import SvgIcon from "../../components/coms/icon/svg-icon.vue";
  68. import Panel from "../../components/coms/panel/panel.vue";
  69. import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
  70. import Table from "./table.vue";
  71. import Dayinfo from "./dayinfo.vue";
  72. export default {
  73. components: {
  74. Panel,
  75. Table,
  76. SvgIcon,
  77. MultipleBarChart,
  78. ToolbarPanel,
  79. Dayinfo,
  80. },
  81. data() {
  82. const that = this;
  83. return {
  84. tableIdArr: [], //放checkbox的id数组
  85. tableId: [],
  86. dbData: [],
  87. dialogVisible: false,
  88. analyisDialog: [],
  89. radarValue: [],
  90. windNum: "dd",
  91. windNum2: "dd",
  92. checkLength: 0,
  93. tabs: [],
  94. tableData: {
  95. column: [
  96. {
  97. name: "",
  98. field: "index",
  99. is_num: false,
  100. is_light: false,
  101. },
  102. {
  103. name: "",
  104. field: "check",
  105. is_num: false,
  106. is_light: false,
  107. template() {
  108. return "<input class='check curCheckBox checkItem' type='CheckBox'/>";
  109. },
  110. click(event, data) {
  111. var dataId = that.tableIdArr[data.index - 1];
  112. if (event.target.checked == false && that.checkLength <= 2) {
  113. that.tableId.forEach((item, i) => {
  114. if (item == dataId) {
  115. that.tableId.splice(i, 1);
  116. that.dbData.splice(i, 1);
  117. }
  118. });
  119. that.checkLength--;
  120. } else if (event.target.checked && that.checkLength < 2) {
  121. that.tableId.push(dataId);
  122. that.dbData.push(data);
  123. that.checkLength++;
  124. } else if (that.checkLength == 2) {
  125. event.target.checked = false;
  126. }
  127. },
  128. },
  129. {
  130. name: "值际",
  131. width: "200px",
  132. field: "dutyname",
  133. is_num: false,
  134. is_light: false,
  135. },
  136. {
  137. name: "理论发电量",
  138. field: "theoreticalgeneratity",
  139. is_num: false,
  140. is_light: false,
  141. },
  142. {
  143. name: "实际发电量",
  144. field: "generatity",
  145. is_num: false,
  146. is_light: false,
  147. },
  148. {
  149. name: "故障损失",
  150. field: "faultloss",
  151. is_num: false,
  152. is_light: false,
  153. },
  154. {
  155. name: "维护损失",
  156. field: "mainloss",
  157. is_num: false,
  158. is_light: false,
  159. },
  160. {
  161. name: "性能损失",
  162. field: "performanceloss",
  163. is_num: false,
  164. is_light: false,
  165. },
  166. {
  167. name: "限电损失",
  168. field: "rationingloss",
  169. is_num: false,
  170. is_light: false,
  171. },
  172. {
  173. name: "受累损失",
  174. field: "involvesloss",
  175. is_num: false,
  176. is_light: false,
  177. },
  178. ],
  179. data: [],
  180. },
  181. value4: "",
  182. value5: "",
  183. };
  184. },
  185. created() {
  186. this.value4 = this.getTime(1);
  187. this.value5 = this.getTime(2);
  188. this.AjaxCommon();
  189. },
  190. methods: {
  191. BeginChange(val) {
  192. this.value4 = val;
  193. this.AjaxCommon();
  194. },
  195. EndChange(val) {
  196. this.value5 = val;
  197. this.AjaxCommon();
  198. },
  199. getTime(val) {
  200. //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
  201. var date = new Date();
  202. var year = date.getFullYear(),
  203. month = date.getMonth() + 1,
  204. day = date.getDate();
  205. month >= 1 && month <= 9 ? (month = "0" + month) : "";
  206. day >= 0 && day <= 9 ? (day = "0" + day) : "";
  207. var begin = year + "-" + month + "-01";
  208. var end = year + "-" + month + "-" + day;
  209. if (val == 1) {
  210. return begin;
  211. } else if (val == 2) {
  212. return end;
  213. }
  214. },
  215. AjaxCommon() {
  216. var that = this;
  217. that.API.requestData({
  218. method: "GET",
  219. baseURL: "http://10.155.32.4:9001/",
  220. subUrl: "benchmarking/zjwxssl",
  221. data: {
  222. beginDate: that.value4,
  223. endDate: that.value5,
  224. },
  225. success(res) {
  226. var data = [];
  227. res.data.forEach((item, index) => {
  228. that.tableIdArr.push(index);
  229. data.push({
  230. index: index + 1,
  231. dutyname: item.dutyname,
  232. theoreticalgeneratity: item.theoreticalgeneratity,
  233. generatity: item.generatity,
  234. faultloss: item.faultloss,
  235. mainloss: item.mainloss,
  236. performanceloss: item.performanceloss,
  237. rationingloss: item.rationingloss,
  238. involvesloss: item.involvesloss,
  239. is_light: false,
  240. });
  241. });
  242. that.tableData.data = data;
  243. },
  244. });
  245. },
  246. dbfx() {
  247. var that = this;
  248. if (that.tableId.length == 2) {
  249. that.dialogVisible = true;
  250. this.AjaxDbfx();
  251. this.clearDb();
  252. }
  253. },
  254. clearDb() {
  255. //清空对标状态
  256. this.$refs.curRef.clearCheckBox();
  257. this.tableId = [];
  258. this.dbData = [];
  259. this.checkLength = 0;
  260. },
  261. AjaxDbfx() {
  262. var that = this;
  263. var data = that.dbData;
  264. that.windNum = data[0].name;
  265. that.windNum2 = data[1].name;
  266. that.tabs = [
  267. {
  268. name: "理论发电量",
  269. windData1: data[0].theoreticalgeneratity,
  270. windData2: data[1].theoreticalgeneratity,
  271. },
  272. {
  273. name: "实际发电量",
  274. windData1: data[0].generatity,
  275. windData2: data[1].generatity,
  276. },
  277. {
  278. name: "故障损失",
  279. windData1: data[0].faultloss,
  280. windData2: data[1].faultloss,
  281. },
  282. {
  283. name: "维护损失",
  284. windData1: data[0].mainloss,
  285. windData2: data[1].mainloss,
  286. },
  287. {
  288. name: "性能损失",
  289. windData1: data[0].performanceloss,
  290. windData2: data[1].performanceloss,
  291. },
  292. {
  293. name: "限电损失",
  294. windData1: data[0].rationingloss,
  295. windData2: data[1].rationingloss,
  296. },
  297. {
  298. name: "受累损失",
  299. windData1: data[0].involvesloss,
  300. windData2: data[1].involvesloss,
  301. },
  302. ];
  303. that.radarValue = [
  304. {
  305. indicator: [
  306. "理论发电量",
  307. "实际发电量",
  308. "故障损失",
  309. "维护损失",
  310. "性能损失",
  311. "限电损失",
  312. "受累损失",
  313. ],
  314. data: [
  315. {
  316. value: [
  317. data[0].theoreticalgeneratity,
  318. data[0].generatity,
  319. data[0].faultloss,
  320. data[0].mainloss,
  321. data[0].performanceloss,
  322. data[0].rationingloss,
  323. data[0].involvesloss,
  324. ],
  325. },
  326. {
  327. value: [
  328. data[1].theoreticalgeneratity,
  329. data[1].generatity,
  330. data[1].faultloss,
  331. data[1].mainloss,
  332. data[1].performanceloss,
  333. data[1].rationingloss,
  334. data[1].involvesloss,
  335. ],
  336. },
  337. ],
  338. },
  339. ];
  340. let analyis = [];
  341. let theoreticalgeneratity = [];
  342. let generatity = [];
  343. let faultloss = [];
  344. let mainloss = [];
  345. let performanceloss = [];
  346. let rationingloss = [];
  347. let involvesloss = [];
  348. data.forEach((item, index) => {
  349. theoreticalgeneratity.push({
  350. text: item.dutyname,
  351. value: item.theoreticalgeneratity,
  352. });
  353. generatity.push({
  354. text: item.dutyname,
  355. value: item.generatity,
  356. });
  357. faultloss.push({
  358. text: item.dutyname,
  359. value: item.faultloss,
  360. });
  361. mainloss.push({
  362. text: item.dutyname,
  363. value: item.mainloss,
  364. });
  365. performanceloss.push({
  366. text: item.dutyname,
  367. value: item.performanceloss,
  368. });
  369. rationingloss.push({
  370. text: item.dutyname,
  371. value: item.rationingloss,
  372. });
  373. involvesloss.push({
  374. text: item.dutyname,
  375. value: item.involvesloss,
  376. });
  377. });
  378. analyis.push(
  379. {
  380. title: "理论发电量",
  381. yAxisIndex: 0,
  382. value: theoreticalgeneratity,
  383. },
  384. {
  385. title: "实际发电量",
  386. yAxisIndex: 0,
  387. value: generatity,
  388. },
  389. {
  390. title: "故障损失",
  391. yAxisIndex: 0,
  392. value: faultloss,
  393. },
  394. {
  395. title: "维护损失",
  396. yAxisIndex: 0,
  397. value: mainloss,
  398. },
  399. {
  400. title: "性能损失",
  401. yAxisIndex: 0,
  402. value: performanceloss,
  403. },
  404. {
  405. title: "限电损失",
  406. yAxisIndex: 0,
  407. value: rationingloss,
  408. },
  409. {
  410. title: "受累损失",
  411. yAxisIndex: 0,
  412. value: involvesloss,
  413. }
  414. );
  415. that.analyisDialog = analyis;
  416. },
  417. },
  418. };
  419. </script>
  420. <style lang="less">
  421. .decision-page-4 {
  422. .com-panel {
  423. .panel-title {
  424. color: @gray-l;
  425. }
  426. .tools {
  427. display: flex;
  428. .tool-block {
  429. display: flex;
  430. align-items: center;
  431. margin-left: 0.741vh;
  432. .legend {
  433. flex: auto;
  434. width: 0.741vh;
  435. height: 0.741vh;
  436. margin-right: 0.741vh;
  437. &.long {
  438. width: 2.963vh;
  439. height: 0.37vh;
  440. }
  441. }
  442. .legend-text {
  443. color: @gray-l;
  444. font-size: @fontsize-s;
  445. }
  446. }
  447. }
  448. }
  449. .project-table {
  450. overflow: auto;
  451. height: 90vh;
  452. tbody {
  453. // height: 100vh;
  454. }
  455. th,
  456. td {
  457. color: #b2bdc0;
  458. &:nth-child(1) {
  459. width: 50px;
  460. }
  461. &:nth-child(2) {
  462. width: 50px;
  463. }
  464. }
  465. }
  466. }
  467. </style>