index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <template>
  2. <div>
  3. <div class="title-list">
  4. <div class="search">
  5. <div class="date">风场:</div>
  6. <el-select class="inputs" v-model="selectValue" placeholder="请选择">
  7. <el-option v-for="item in stationList" :key="item.name" :label="item.name" :value="item.id">
  8. </el-option>
  9. </el-select>
  10. </div>
  11. <div class="query-item">
  12. <div class="lable">开始日期:</div>
  13. <div class="search-input">
  14. <el-date-picker v-model="timeValue" type="daterange" range-separator="至" start-placeholder="开始日期"
  15. end-placeholder="结束日期">
  16. </el-date-picker>
  17. </div>
  18. </div>
  19. <div class="query-actions">
  20. <button class="button" @click="getTableData">查询</button>
  21. <button class="button" @click="exportExcel">导出</button>
  22. </div>
  23. </div>
  24. <div>
  25. <el-table height="90vh" ref="multipleTable" empty-text="暂无数据" :data="tableList" stripe
  26. style="width: 100%; margin-bottom: 10px">
  27. <el-table-column prop="windturbinename" label="风机" align="center" width="220" sortable></el-table-column>
  28. <el-table-column label="发电量" align="center" prop="generatingcapacity" sortable>
  29. </el-table-column>
  30. <el-table-column label="理论发电量" prop="theoreticalcapacity" align="center" sortable>
  31. </el-table-column>
  32. <el-table-column label="故障损失电量" prop="daynhgzssdl" align="center" sortable>
  33. </el-table-column>
  34. <el-table-column label="维护损失电量" prop="daynhwhssdl" align="center" sortable>
  35. </el-table-column>
  36. <el-table-column label="限电损失电量" prop="daynhxdssdl" align="center" sortable>
  37. </el-table-column>
  38. <el-table-column label="性能损失电量" prop="daynhqfdl" align="center" sortable>
  39. </el-table-column>
  40. <el-table-column label="受累损失电量" prop="daynhcfdl" align="center" sortable>
  41. </el-table-column>
  42. <el-table-column label="设备可利用率" prop="availability" align="center" sortable>
  43. </el-table-column>
  44. <el-table-column label="并网时间" prop="runtime" align="center" sortable>
  45. </el-table-column>
  46. <el-table-column label="维护时间" prop="maintime" align="center" sortable>
  47. </el-table-column>
  48. <el-table-column label="故障时间" prop="faulttime" align="center" sortable>
  49. </el-table-column>
  50. <el-table-column label="停机时间" prop="stoptime" align="center" sortable>
  51. </el-table-column>
  52. <el-table-column label="风暴时间" prop="stormtime" align="center" sortable>
  53. </el-table-column>
  54. <el-table-column label="离线时间" prop="offtime" align="center" sortable>
  55. </el-table-column>
  56. </el-table>
  57. </div>
  58. </div>
  59. </template>
  60. <script>
  61. import api from "api/index";
  62. import dayjs from "dayjs";
  63. import XLSX from "xlsx";
  64. export default {
  65. data() {
  66. return {
  67. timeValue: [],
  68. selectValue: "WNS_FDC",
  69. tableList: [
  70. {
  71. "id": null,
  72. "windturbineid": "GL01_005",
  73. "windturbinename": "广灵第005台风机",
  74. "windpowerstationid": null,
  75. "generatingcapacity": 9472,
  76. "theoreticalcapacity": 13079.75,
  77. "daynhgzssdl": 0,
  78. "daynhwhssdl": 0,
  79. "daynhxdssdl": 0,
  80. "daynhqfdl": 3607.75,
  81. "daynhcfdl": 0,
  82. "availability": 100,
  83. "powerfactor": null,
  84. "runtime": 14.47,
  85. "maintime": 0,
  86. "faulttime": 0,
  87. "stoptime": 9.53,
  88. "stormtime": 0,
  89. "offtime": 0,
  90. "recorddate": null
  91. },
  92. {
  93. "id": null,
  94. "windturbineid": "GL01_013",
  95. "windturbinename": "广灵第013台风机",
  96. "windpowerstationid": null,
  97. "generatingcapacity": 2600,
  98. "theoreticalcapacity": 9691.89,
  99. "daynhgzssdl": 0,
  100. "daynhwhssdl": 0,
  101. "daynhxdssdl": 0,
  102. "daynhqfdl": 7091.89,
  103. "daynhcfdl": 0,
  104. "availability": 100,
  105. "powerfactor": null,
  106. "runtime": 11.67,
  107. "maintime": 0,
  108. "faulttime": 0,
  109. "stoptime": 12.33,
  110. "stormtime": 0,
  111. "offtime": 0,
  112. "recorddate": null
  113. },
  114. {
  115. "id": null,
  116. "windturbineid": "GL01_015",
  117. "windturbinename": "广灵第015台风机",
  118. "windpowerstationid": null,
  119. "generatingcapacity": 6268,
  120. "theoreticalcapacity": 10649.49,
  121. "daynhgzssdl": 0,
  122. "daynhwhssdl": 0,
  123. "daynhxdssdl": 0,
  124. "daynhqfdl": 4381.49,
  125. "daynhcfdl": 0,
  126. "availability": 100,
  127. "powerfactor": null,
  128. "runtime": 13.83,
  129. "maintime": 0,
  130. "faulttime": 0,
  131. "stoptime": 10.17,
  132. "stormtime": 0,
  133. "offtime": 0,
  134. "recorddate": null
  135. },
  136. ],
  137. stationList: [
  138. {
  139. "id": "WNS_FDC",
  140. "code": "WNS_FDC",
  141. "name": "太旗卧牛山风电场",
  142. "address": "太旗卧牛山风电场",
  143. "telephone": null,
  144. "capacity": 148.5,
  145. "capacityunit": "MW",
  146. "quantity": 99,
  147. "aname": "卧牛山风电场",
  148. "longitude": 1000,
  149. "latitude": 1000,
  150. "photo": null,
  151. "companyid": "1",
  152. "systemmanufact": null,
  153. "headfarm": null,
  154. "headfarmphone": null,
  155. "model": "UP77-1500/UP77-1500-1/UP77-1500-2",
  156. "ordernum": 1,
  157. "altitude": 1000,
  158. "height": null
  159. },
  160. {
  161. "id": "YY_FDC",
  162. "code": "YY_FDC",
  163. "name": "右玉高家堡风电场 ",
  164. "address": "右玉高家堡风电场 ",
  165. "telephone": null,
  166. "capacity": 198,
  167. "capacityunit": "MW",
  168. "quantity": 132,
  169. "aname": "高家堡风电场 ",
  170. "longitude": 1000,
  171. "latitude": 1000,
  172. "photo": null,
  173. "companyid": "1",
  174. "systemmanufact": null,
  175. "headfarm": null,
  176. "headfarmphone": null,
  177. "model": "UP82-1500/UP82-1500-1/UP86-1500/UP86-1500-1/UP86-1500-2/UP86-1500-3/UP86-1500-4/MY-1.5se",
  178. "ordernum": 2,
  179. "altitude": 1000,
  180. "height": null
  181. },
  182. {
  183. "id": "PL_FDC",
  184. "code": "PL_FDC",
  185. "name": "平鲁虎头山风电场 ",
  186. "address": "平鲁虎头山风电场 ",
  187. "telephone": null,
  188. "capacity": 223.5,
  189. "capacityunit": "MW",
  190. "quantity": 110,
  191. "aname": "虎头山风电场 ",
  192. "longitude": 1000,
  193. "latitude": 1000,
  194. "photo": null,
  195. "companyid": "1",
  196. "systemmanufact": null,
  197. "headfarm": null,
  198. "headfarmphone": null,
  199. "model": "GW77-1500/GW82-1500/UP3000-120/GW109-2500",
  200. "ordernum": 3,
  201. "altitude": 1000,
  202. "height": null
  203. },
  204. {
  205. "id": "GL_FDC",
  206. "code": "GL_FDC",
  207. "name": "广灵劲风风电场 ",
  208. "address": "广灵劲风风电场 ",
  209. "telephone": null,
  210. "capacity": 48,
  211. "capacityunit": "MW",
  212. "quantity": 24,
  213. "aname": "劲风风电场 ",
  214. "longitude": 1000,
  215. "latitude": 1000,
  216. "photo": null,
  217. "companyid": "1",
  218. "systemmanufact": null,
  219. "headfarm": null,
  220. "headfarmphone": null,
  221. "model": "UP2000-105s",
  222. "ordernum": 4,
  223. "altitude": 1000,
  224. "height": null
  225. },
  226. {
  227. "id": "HY_FDC",
  228. "code": "HY_FDC",
  229. "name": "浑源峰岳风电场 ",
  230. "address": "浑源峰岳风电场 ",
  231. "telephone": null,
  232. "capacity": 149.5,
  233. "capacityunit": "MW",
  234. "quantity": 80,
  235. "aname": "峰岳风电场 ",
  236. "longitude": 1000,
  237. "latitude": 1000,
  238. "photo": null,
  239. "companyid": "1",
  240. "systemmanufact": null,
  241. "headfarm": null,
  242. "headfarmphone": null,
  243. "model": "UP82-1500-2/UP86-1500-2/UP2000-96/UP2000-105s",
  244. "ordernum": 5,
  245. "altitude": 1000,
  246. "height": null
  247. },
  248. {
  249. "id": "FS_FDC",
  250. "code": "FS_FDC",
  251. "name": "方山宝塔山风电场 ",
  252. "address": "方山宝塔山风电场 ",
  253. "telephone": null,
  254. "capacity": 96,
  255. "capacityunit": "MW",
  256. "quantity": 48,
  257. "aname": "宝塔山风电场 ",
  258. "longitude": 1000,
  259. "latitude": 1000,
  260. "photo": null,
  261. "companyid": "1",
  262. "systemmanufact": null,
  263. "headfarm": null,
  264. "headfarmphone": null,
  265. "model": "UP2000-105s/UP2000-96",
  266. "ordernum": 6,
  267. "altitude": 1000,
  268. "height": null
  269. },
  270. {
  271. "id": "YG_FDC",
  272. "code": "YG_FDC",
  273. "name": "阳高采凉山风电场",
  274. "address": "阳高采凉山风电场",
  275. "telephone": null,
  276. "capacity": 90,
  277. "capacityunit": "MW",
  278. "quantity": 45,
  279. "aname": "采凉山风电场",
  280. "longitude": 1000,
  281. "latitude": 1000,
  282. "photo": null,
  283. "companyid": "1",
  284. "systemmanufact": null,
  285. "headfarm": null,
  286. "headfarmphone": null,
  287. "model": "UP2000-115s",
  288. "ordernum": 7,
  289. "altitude": 1000,
  290. "height": null
  291. }
  292. ],
  293. };
  294. },
  295. created() {
  296. let date = new Date();
  297. this.timeValue[0] = date.getTime() - 86400000;
  298. this.timeValue[1] = date.getTime() - 86400000;
  299. this.getStation()
  300. },
  301. methods: {
  302. getStation() {
  303. api.getStation().then(res => {
  304. if (res.data) {
  305. this.stationList = res.data.data
  306. this.getTableData()
  307. }
  308. })
  309. },
  310. getTableData() {
  311. api.getTableData({
  312. wpid: this.selectValue,
  313. beginDate: dayjs(this.timeValue[0]).format("YYYY-MM-DD"),
  314. endDate: dayjs(this.timeValue[1]).format("YYYY-MM-DD"),
  315. }).then(res => {
  316. if (res.data) {
  317. this.tableList = res.data.data
  318. }
  319. })
  320. },
  321. exportExcel() {
  322. // 数据源
  323. let data = [];
  324. this.tableList.forEach((item) => {
  325. let values = {
  326. 风机: item.windturbinename,
  327. 发电量: item.generatingcapacity,
  328. 理论发电量: item.theoreticalcapacity,
  329. 故障损失电量: item.daynhgzssdl,
  330. 维护损失电量: item.daynhwhssdl,
  331. 限电损失电量: item.daynhxdssdl,
  332. 性能损失电量: item.daynhqfdl,
  333. 受累损失电量: item.daynhcfdl,
  334. 设备可利用率: item.availability,
  335. 并网时间: item.runtime,
  336. 维护时间: item.maintime,
  337. 故障时间: item.faulttime,
  338. 停机时间: item.stoptime,
  339. 风暴时间: item.stormtime,
  340. 离线时间: item.offtime,
  341. };
  342. data.push(values);
  343. });
  344. // 下载的路径
  345. let fileName = `风机运行分析.xlsx`;
  346. let filePath = fileName;
  347. // 新建workbook
  348. const wb = XLSX.utils.book_new();
  349. // 新建worksheet,并载入数据
  350. const ws = XLSX.utils.json_to_sheet(data);
  351. // 设置每列的列宽,10代表10个字符,注意中文占2个字符
  352. ws["!cols"] = [{ wch: 20 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }, { wch: 10 }];
  353. // 生成xlsx文件(workbook,worksheet数据,sheet命名)
  354. XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  355. // 写文件(workbook,xlsx文件路径+文件名)
  356. XLSX.writeFile(wb, filePath);
  357. },
  358. },
  359. }
  360. </script>
  361. <style lang="less" scoped>
  362. .title-list {
  363. display: flex;
  364. flex-direction: row;
  365. align-items: center;
  366. margin-top: 10px;
  367. .search {
  368. display: flex;
  369. flex-direction: row;
  370. align-items: center;
  371. margin-left: 30px;
  372. .date {
  373. margin-right: 20px;
  374. font-size: 18px;
  375. }
  376. }
  377. .query-item {
  378. display: flex;
  379. flex-direction: row;
  380. align-items: center;
  381. margin-left: 30px;
  382. .lable {
  383. margin-right: 20px;
  384. font-size: 18px;
  385. }
  386. }
  387. .button {
  388. width: 80px;
  389. height: 40px;
  390. margin-left: 30px;
  391. }
  392. }
  393. </style>