Decision1.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537
  1. <template>
  2. <div class="decision-page-1">
  3. <!-- 查询样式统一处理 样式在 assets/styles/form.less 文件中 -->
  4. <div class="query mg-b-8">
  5. <div class="query-items">
  6. <div class="query-item">
  7. <div class="lable">场站:</div>
  8. <div class="search-input">
  9. <el-select
  10. v-model="value1"
  11. @change="ChangZhanChange(value1)"
  12. clearable
  13. placeholder="请选择"
  14. popper-class="select"
  15. >
  16. <el-option
  17. v-for="item in ChangZhan"
  18. :key="item.id"
  19. :value="item.id"
  20. :label="item.name"
  21. >
  22. </el-option>
  23. </el-select>
  24. </div>
  25. </div>
  26. <div class="query-item">
  27. <div class="lable">项目:</div>
  28. <div class="search-input">
  29. <el-select
  30. v-model="value2"
  31. @change="XiangMuChange(value2)"
  32. multiple
  33. placeholder="请选择"
  34. popper-class="select"
  35. >
  36. <el-option
  37. v-for="item in XiangMu"
  38. :key="item.id"
  39. :value="item.id"
  40. :label="item.name"
  41. >
  42. </el-option>
  43. </el-select>
  44. </div>
  45. </div>
  46. <div class="query-item">
  47. <div class="lable">线路:</div>
  48. <div class="search-input">
  49. <el-select
  50. v-model="value3"
  51. @change="XianLuChange(value3)"
  52. multiple
  53. placeholder="请选择"
  54. popper-class="select"
  55. >
  56. <el-option
  57. v-for="item in XianLu"
  58. :key="item.id"
  59. :label="item.name"
  60. :value="item.id"
  61. >
  62. </el-option>
  63. </el-select>
  64. </div>
  65. </div>
  66. <div class="query-item">
  67. <div class="lable">开始日期:</div>
  68. <div class="search-input">
  69. <el-date-picker
  70. v-model="value4"
  71. @change="BeginChange(value4)"
  72. type="date"
  73. value-format="YYYY-MM-DD"
  74. placeholder="选择日期"
  75. popper-class="date-select"
  76. >
  77. </el-date-picker>
  78. </div>
  79. </div>
  80. <div class="query-item">
  81. <div class="lable">结束日期:</div>
  82. <div class="search-input">
  83. <el-date-picker
  84. v-model="value5"
  85. @change="EndChange(value5)"
  86. type="date"
  87. value-format="YYYY-MM-DD"
  88. placeholder="选择日期"
  89. popper-class="date-select"
  90. >
  91. </el-date-picker>
  92. <div class="unit svg-icon svg-icon-gray">
  93. <svg-icon :svgid="''" />
  94. </div>
  95. </div>
  96. </div>
  97. </div>
  98. <div class="query-actions">
  99. <button class="btn green">搜索</button>
  100. <button class="btn" @click="mxClick()">明细信息</button>
  101. <button class="btn" @click="exportExcel()">导出</button>
  102. </div>
  103. </div>
  104. <div class="actions mg-b-8">
  105. <button
  106. class="btn"
  107. :class="TypeClass == 1 ? 'green' : ''"
  108. @click="TypeClick(1)"
  109. >
  110. 风场
  111. </button>
  112. <button
  113. class="btn"
  114. :class="TypeClass == 2 ? 'green' : ''"
  115. @click="TypeClick(2)"
  116. >
  117. 项目
  118. </button>
  119. <button
  120. class="btn"
  121. :class="TypeClass == 3 ? 'green' : ''"
  122. @click="TypeClick(3)"
  123. >
  124. 集电线路
  125. </button>
  126. </div>
  127. <el-row :type="'flex'" class="content">
  128. <el-col :span="12" class="pd-r-8">
  129. <toolbar-panel title="风机绩效榜" :showLine="false">
  130. <bar-line-chart
  131. :height="'calc(100vh - 200px)'"
  132. :bardata="bardata"
  133. :lineData="lineData"
  134. :color="barColor"
  135. lineName="理论发电量"
  136. />
  137. </toolbar-panel>
  138. </el-col>
  139. <el-col :span="12" class="pd-l-8">
  140. <panel :title="'项目列表'" :showLine="false">
  141. <div class="project-table">
  142. <!-- 分页Table -->
  143. <Table
  144. :data="tableData"
  145. :pageSize="20"
  146. @onPagging="onChangePage"
  147. :height="'calc(100vh - 32vh)'"
  148. ></Table>
  149. <!-- <Table :data="tableData"></Table> -->
  150. </div>
  151. </panel>
  152. </el-col>
  153. </el-row>
  154. </div>
  155. </template>
  156. <script>
  157. import BarLineChart from "../../components/chart/combination/bar-line-chart.vue";
  158. import Panel from "../../components/coms/panel/panel.vue";
  159. import SvgIcon from "../../components/coms/icon/svg-icon.vue";
  160. import ToolbarPanel from "../../components/coms/panel/toolbar-panel.vue";
  161. import Table from "../../components/coms/table/table.vue";
  162. import partten from "@/helper/partten.js";
  163. export default {
  164. components: {
  165. ToolbarPanel,
  166. BarLineChart,
  167. Panel,
  168. Table,
  169. partten,
  170. SvgIcon,
  171. },
  172. data() {
  173. return {
  174. tableData: {
  175. column: [
  176. {
  177. name: "",
  178. field: "index",
  179. is_num: false,
  180. is_light: false,
  181. width: "50px",
  182. },
  183. {
  184. name: "名称",
  185. field: "name",
  186. is_num: false,
  187. is_light: false,
  188. },
  189. {
  190. name: "理论发电量",
  191. field: "llfdl",
  192. is_num: false,
  193. is_light: false,
  194. sortable: true,
  195. },
  196. {
  197. name: "SCADA发电量",
  198. field: "sjfdl",
  199. is_num: false,
  200. is_light: false,
  201. sortable: true,
  202. },
  203. {
  204. name: "风速",
  205. field: "speed",
  206. is_num: false,
  207. is_light: false,
  208. sortable: true,
  209. },
  210. {
  211. name: "非计划检修",
  212. field: "fjhjx",
  213. is_num: false,
  214. is_light: false,
  215. sortable: true,
  216. },
  217. {
  218. name: "计划检修",
  219. field: "jhjx",
  220. is_num: false,
  221. is_light: false,
  222. sortable: true,
  223. },
  224. {
  225. name: "受累",
  226. field: "sl",
  227. is_num: false,
  228. is_light: false,
  229. sortable: true,
  230. },
  231. {
  232. name: "限电",
  233. field: "xd",
  234. is_num: false,
  235. is_light: false,
  236. sortable: true,
  237. },
  238. {
  239. name: "性能",
  240. field: "xn",
  241. is_num: false,
  242. is_light: false,
  243. sortable: true,
  244. },
  245. {
  246. name: "风能利用率%",
  247. field: "fnlly",
  248. is_num: false,
  249. is_light: false,
  250. sortable: true,
  251. },
  252. ],
  253. data: [],
  254. },
  255. ChangZhan: [], //场站
  256. XiangMu: [], //项目
  257. XianLu: [], //线路
  258. value1: [],
  259. value2: [],
  260. value3: [],
  261. value4: "",
  262. value5: "",
  263. barColor: [
  264. partten.getColor("purple"),
  265. partten.getColor("orange"),
  266. partten.getColor("red"),
  267. partten.getColor("pink"),
  268. partten.getColor("grayl"),
  269. partten.getColor("green"),
  270. ],
  271. TypeClass: 1, //风场,项目,集电线路 的按钮颜色,默认第一个
  272. bardata: [],
  273. lineData: [],
  274. };
  275. },
  276. created() {
  277. this.ChangZhanVal();
  278. this.value4 = this.getTime(1);
  279. this.value5 = this.getTime(2);
  280. this.AjaxCommon();
  281. },
  282. methods: {
  283. ChangZhanVal() {
  284. var that = this;
  285. that.API.requestData({
  286. method: "GET",
  287. baseURL: "http://10.155.32.4:9001/",
  288. subUrl: "benchmarking/wplist",
  289. success(res) {
  290. that.ChangZhan = res.data;
  291. },
  292. });
  293. },
  294. ChangZhanChange(val) {
  295. this.TypeClass = "";
  296. this.value1 = val;
  297. this.value2 = [];
  298. this.value3 = [];
  299. this.AjaxCommon();
  300. this.XiangMuVal(val);
  301. },
  302. XiangMuVal(val) {
  303. var that = this;
  304. that.API.requestData({
  305. method: "GET",
  306. baseURL: "http://10.155.32.4:9001/",
  307. subUrl: "benchmarking/projectList",
  308. data: {
  309. wpids: val,
  310. },
  311. success(res) {
  312. that.XiangMu = res.data;
  313. },
  314. });
  315. },
  316. XiangMuChange(val) {
  317. this.TypeClass = "";
  318. this.value2 = val;
  319. this.value3 = [];
  320. this.AjaxCommon();
  321. this.XianLuVal(val);
  322. },
  323. XianLuVal(val) {
  324. var that = this;
  325. that.API.requestData({
  326. method: "GET",
  327. baseURL: "http://10.155.32.4:9001/",
  328. subUrl: "benchmarking/lineList",
  329. data: {
  330. projects: val,
  331. },
  332. success(res) {
  333. that.XianLu = res.data;
  334. },
  335. });
  336. },
  337. XianLuChange(val) {
  338. this.TypeClass = "";
  339. this.value3 = val;
  340. this.AjaxCommon();
  341. },
  342. BeginChange(val) {
  343. this.value4 = val;
  344. this.AjaxCommon();
  345. },
  346. EndChange(val) {
  347. this.value5 = val;
  348. this.AjaxCommon();
  349. },
  350. TypeClick(val) {
  351. this.TypeClass = val;
  352. // 重置状态start
  353. this.value1 = [];
  354. this.value2 = [];
  355. this.value3 = [];
  356. this.value4 = this.getTime(1);
  357. this.value5 = this.getTime(2);
  358. this.AjaxCommon();
  359. // 重置状态end
  360. },
  361. getTime(val) {
  362. //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
  363. var date = new Date();
  364. var year = date.getFullYear(),
  365. month = date.getMonth() + 1,
  366. day = date.getDate();
  367. month >= 1 && month <= 9 ? (month = "0" + month) : "";
  368. day >= 0 && day <= 9 ? (day = "0" + day) : "";
  369. var begin = year + "-" + month + "-01";
  370. var end = year + "-" + month + "-" + day;
  371. if (val == 1) {
  372. return begin;
  373. } else if (val == 2) {
  374. return end;
  375. }
  376. },
  377. AjaxCommon() {
  378. var that = this;
  379. that.API.requestData({
  380. method: "GET",
  381. baseURL: "http://10.155.32.4:9001/",
  382. subUrl: "benchmarking/fjjxb",
  383. data: {
  384. wpids: that.value1,
  385. projectids: that.value2,
  386. lineids: that.value3,
  387. beginDate: that.value4,
  388. endDate: that.value5,
  389. type: that.TypeClass,
  390. target: "",
  391. sort: "",
  392. },
  393. success(res) {
  394. var name = [],
  395. data = [],
  396. llfdl = [],
  397. legend = [
  398. "实际电量",
  399. "计划检修损失",
  400. "非计划检修损失",
  401. "限电损失",
  402. "受累损失",
  403. "性能损失",
  404. ],
  405. data2 = []; //项目列表
  406. res.data.forEach((item, index) => {
  407. name.push(item.name);
  408. data.push([
  409. item.sjfdl,
  410. item.jhjx,
  411. item.fjhjx,
  412. item.xd,
  413. item.sl,
  414. item.xn,
  415. ]);
  416. llfdl.push(item.llfdl);
  417. data2.push({
  418. index: index + 1,
  419. name: item.name,
  420. llfdl: item.llfdl,
  421. sjfdl: item.sjfdl,
  422. speed: item.speed,
  423. fjhjx: item.fjhjx,
  424. jhjx: item.jhjx,
  425. sl: item.sl,
  426. xd: item.xd,
  427. xn: item.xn,
  428. fnlly: item.fnlly,
  429. is_light: false,
  430. });
  431. });
  432. name.pop();
  433. data.pop();
  434. llfdl.pop();
  435. if (data.length > 0) {
  436. let arr1 = [];
  437. const length = data[0].length;
  438. for (var i = 0; i < length; i++) {
  439. let arr2 = [];
  440. data.forEach((ele) => {
  441. arr2.push(ele[i]);
  442. });
  443. arr1.push(arr2);
  444. }
  445. that.lineData = llfdl;
  446. that.bardata = {
  447. area: name,
  448. legend: legend,
  449. data: arr1,
  450. };
  451. }
  452. that.tableData.data = data2;
  453. },
  454. });
  455. },
  456. mxClick() {
  457. this.$router.push("/decision/decision1Mx");
  458. },
  459. formatJson(filterVal, jsonData) {
  460. return jsonData.map((v) => filterVal.map((j) => v[j]));
  461. },
  462. exportExcel() {
  463. let that = this;
  464. const { export_json_to_excel } = require("@tools/excel/Export2Excel.js"); // 注意这个Export2Excel路径
  465. let tHeader = []; // 上面设置Excel的表格第一行的标题
  466. let filterVal = []; // 上面的index、nickName、name是tableData里对象的属性key值
  467. that.tableData.column.forEach((ele) => {
  468. tHeader.push(ele.name);
  469. filterVal.push(ele.field);
  470. });
  471. var list = that.tableData.data
  472. const data = that.formatJson(filterVal, list);
  473. export_json_to_excel(tHeader, data, "导出的Excel"); // 最后一个是表名字
  474. },
  475. },
  476. };
  477. </script>
  478. <style lang="less">
  479. .decision-page-1 {
  480. .com-panel .panel-title {
  481. line-height: 3.4259vh;
  482. }
  483. .tools {
  484. display: flex;
  485. line-height: 3.4259vh;
  486. .tool-block {
  487. display: flex;
  488. align-items: center;
  489. margin-left: 0.741vh;
  490. .legend {
  491. flex: auto;
  492. width: 0.741vh;
  493. height: 0.741vh;
  494. margin-right: 0.741vh;
  495. &.long {
  496. width: 2.963vh;
  497. height: 0.37vh;
  498. }
  499. }
  500. .legend-text {
  501. color: @gray-l;
  502. font-size: @fontsize-s;
  503. }
  504. }
  505. }
  506. .project-table {
  507. overflow: auto;
  508. tbody {
  509. height: calc(100vh - 24.5vh);
  510. }
  511. td {
  512. color: #b2bdc0;
  513. }
  514. }
  515. .contentMx {
  516. width: 100%;
  517. overflow-x: auto;
  518. }
  519. .activeMx {
  520. width: 150%;
  521. }
  522. }
  523. </style>