xdgl.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. <template>
  2. <div class="knowledge-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 v-model="wpId" clearable placeholder="请选择" popper-class="select">
  9. <el-option v-for="item in wpArray" :key="item.id" :value="item.id" :label="item.name" />
  10. </el-select>
  11. </div>
  12. </div>
  13. <div class="query-item">
  14. <div class="query-item">
  15. <div class="lable">开始日期:</div>
  16. <div class="search-input">
  17. <el-date-picker v-model="value1" @change="BeginChange(value1)" type="date"
  18. value-format="YYYY-MM-DD" placeholder="选择日期" popper-class="date-select">
  19. </el-date-picker>
  20. </div>
  21. </div>
  22. <div class="query-item">
  23. <div class="lable">结束日期:</div>
  24. <div class="search-input">
  25. <el-date-picker v-model="value2" @change="EndChange(value2)" type="date"
  26. value-format="YYYY-MM-DD" placeholder="选择日期" popper-class="date-select">
  27. </el-date-picker>
  28. <div class="unit svg-icon svg-icon-gray">
  29. <svg-icon :svgid="''" />
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. </div>
  35. <div class="query-actions" style="margin-right: 1500px">
  36. <button class="btn green" @click="onClickSearch">查询</button>
  37. <button class="btn green" @click="exportCsv">导出</button>
  38. </div>
  39. </div>
  40. <div>
  41. <ComTable :data="tableData" height="85vh"></ComTable>
  42. </div>
  43. <el-dialog title="限电事件" v-model="dialogVisible" width="70%" top="10vh" custom-class="modal"
  44. :close-on-click-modal="false">
  45. <table class="com-table tabLog">
  46. <tr>
  47. <td class="light"> 限电原因:</td>
  48. <td>{{main.description}}</td>
  49. <td class="light"> 限电类型:</td>
  50. <td>{{main.stopTypeId}}</td>
  51. </tr>
  52. <tr>
  53. <td class="light"> 限电指令:</td>
  54. <td>{{main.brownoutsdirective}}</td>
  55. <td class="light"> 当时风速(m/s):</td>
  56. <td>{{main.windspeed}}</td>
  57. </tr>
  58. <tr>
  59. <td class="light"> 限电负荷(MW):</td>
  60. <td>{{main.limitload}}</td>
  61. <td class="light"> 当时负荷(MW):</td>
  62. <td>{{main.thisload}}</td>
  63. </tr>
  64. <tr>
  65. <td class="light"> 限电时刻:</td>
  66. <td>{{new Date(main.stoptime).formatDate("yyyy-MM-dd hh:mm:ss")}}</td>
  67. <td class="light"> 恢复时刻:</td>
  68. <td>{{new Date(main.starttime).formatDate("yyyy-MM-dd hh:mm:ss")}}</td>
  69. </tr>
  70. <tr>
  71. <td class="light"> 限电损失电量(KWh):</td>
  72. <td colspan="3">{{main.losspower}}</td>
  73. </tr>
  74. </table>
  75. <div class="header">
  76. <span class="herder-info">
  77. 限电事件记录
  78. </span>
  79. </div>
  80. <ComTable :data="tableList" height="40vh"></ComTable>
  81. </el-dialog>
  82. </div>
  83. </template>
  84. <script>
  85. import ComTable from "@com/coms/table/table.vue";
  86. import Papa from 'papaparse';
  87. export default {
  88. components: {
  89. ComTable,Papa
  90. },
  91. data() {
  92. const that = this;
  93. return {
  94. value1: "",
  95. value2: "",
  96. wpId: "",
  97. wpArray: [],
  98. dialogVisible: false,
  99. main:[],
  100. tableList:{
  101. column: [{
  102. name: "编号",
  103. field: "index",
  104. width: "50px",
  105. is_num: true,
  106. is_light: false,
  107. },
  108. {
  109. name: "风机",
  110. field: "windturbineid",
  111. is_num: false,
  112. is_light: false,
  113. },
  114. {
  115. name: "限电时刻",
  116. field: "stopTime",
  117. is_num: false,
  118. is_light: false,
  119. },
  120. {
  121. name: "恢复时刻",
  122. field: "startTime",
  123. width: "150px",
  124. is_num: false,
  125. is_light: false,
  126. },
  127. {
  128. name: "停机小时数",
  129. field: "stophours",
  130. width: "150px",
  131. is_num: false,
  132. is_light: false,
  133. },
  134. {
  135. name: "损失电量(KWh)",
  136. field: "losspower",
  137. width: "150px",
  138. is_num: false,
  139. is_light: false,
  140. },
  141. ],
  142. data: [],
  143. },
  144. tableData: {
  145. column: [{
  146. name: "编号",
  147. field: "index",
  148. width: "50px",
  149. is_num: true,
  150. is_light: false,
  151. },
  152. {
  153. name: "限电时刻",
  154. field: "stopTime",
  155. width: "150px",
  156. is_num: false,
  157. is_light: false,
  158. },
  159. {
  160. name: "恢复时刻",
  161. field: "startTime",
  162. width: "150px",
  163. is_num: false,
  164. is_light: false,
  165. },
  166. {
  167. name: "停机类型",
  168. field: "stopTypeId",
  169. width: "150px",
  170. is_num: false,
  171. is_light: false,
  172. },
  173. {
  174. name: "限电时间",
  175. field: "stopHours",
  176. width: "150px",
  177. is_num: false,
  178. is_light: false,
  179. },
  180. {
  181. name: "损失电量(kWh)",
  182. field: "lossPower",
  183. width: "150px",
  184. is_num: false,
  185. is_light: false,
  186. },
  187. {
  188. name: "限电原因",
  189. field: "description",
  190. width: "200px",
  191. is_num: false,
  192. is_light: false,
  193. },
  194. {
  195. name: "关联风机",
  196. field: "wts",
  197. is_num: false,
  198. is_light: false,
  199. },
  200. {
  201. name: "操作",
  202. field: "cz",
  203. width: "50px",
  204. is_num: false,
  205. is_light: false,
  206. template: function() {
  207. return "<a class='action'>详情</a>";
  208. },
  209. click: function(event, data) {
  210. that.API.requestData({
  211. method: "POST",
  212. subUrl: "/brownouts/getBrownouts",
  213. data: {
  214. mainId: data.id
  215. },
  216. success(res) {
  217. if (res.code == 200) {
  218. that.main = res.data.main;
  219. that.tableList.data = [];
  220. if (res.data.list.length) {
  221. let data = res.data.list;
  222. for (var i = 0; i < data.length; i++) {
  223. let obj = {
  224. index: i + 1,
  225. windturbineid:data[i].windturbineid,
  226. stopTime: new Date(data[i].stoptime).formatDate("yyyy-MM-dd hh:mm:ss"),
  227. startTime: new Date(data[i].starttime).formatDate("yyyy-MM-dd hh:mm:ss"),
  228. stophours: data[i].stophours,
  229. losspower: data[i].losspower
  230. };
  231. that.tableList.data.push(obj);
  232. that.dialogVisible = true;
  233. }
  234. }
  235. }
  236. },
  237. });
  238. }
  239. }
  240. ],
  241. data: [],
  242. },
  243. };
  244. },
  245. created() {
  246. // this.requestSafeList();
  247. this.value1 = new Date((new Date().getTime() - 3600 * 1000 * 24)).formatDate("yyyy-MM-dd");
  248. this.value2 = this.getTime(2);
  249. this.getWp();
  250. this.requestSafeList();
  251. },
  252. methods: {
  253. exportCsv() {
  254. var csv = Papa.unparse(this.tableData);
  255. //定义文件内容,类型必须为Blob 否则createObjectURL会报错
  256. let content = new Blob([csv]);
  257. //生成url对象
  258. let urlObject = window.URL || window.webkitURL || window;
  259. let url = urlObject.createObjectURL(content);
  260. //生成<a></a>DOM元素
  261. let el = document.createElement("a");
  262. //链接赋值
  263. el.href = url;
  264. el.download = "限电事件.cvs";
  265. //必须点击否则不会下载
  266. el.click();
  267. //移除链接释放资源
  268. urlObject.revokeObjectURL(url);
  269. },
  270. getTime(val) { //时间戳处理,val=1是默认开始时间(当前月第一天),val=2是默认结束时间(今天)
  271. var date = new Date();
  272. var year = date.getFullYear(),
  273. month = date.getMonth() + 1,
  274. day = date.getDate();
  275. month >= 1 && month <= 9 ? (month = '0' + month) : '';
  276. day >= 0 && day <= 9 ? (day = '0' + day) : '';
  277. var begin = year + '-' + month + '-01';
  278. var end = year + '-' + month + '-' + day;
  279. if (val == 1) {
  280. return begin;
  281. } else if (val == 2) {
  282. return end;
  283. }
  284. },
  285. // 获取风场
  286. getWp(reGetWp) {
  287. let that = this;
  288. that.API.requestData({
  289. baseURL: "http://10.155.32.4:9001",
  290. subUrl: "benchmarking/wplist",
  291. success(res) {
  292. that.wpArray = res.data;
  293. that.wpId = res.data[0].id;
  294. that.wpName = res.data[0].wpId;
  295. // that.getWt(that.wpId, reGetWp);
  296. }
  297. });
  298. },
  299. BeginChange(vl) {
  300. this.value1 = vl;
  301. },
  302. EndChange(vl) {
  303. this.value2 = vl;
  304. },
  305. typeChange(vl) {
  306. this.type = vl;
  307. },
  308. // 搜索按钮
  309. onClickSearch() {
  310. this.requestSafeList();
  311. },
  312. // 获取限电事间
  313. requestSafeList() {
  314. let that = this;
  315. let data = {
  316. tablepar: {
  317. pageNum: 1,
  318. pageSize: 1000,
  319. },
  320. beginDate: that.value1,
  321. endDate: that.value2,
  322. wpId: that.wpId,
  323. };
  324. this.API.requestData({
  325. method: "POST",
  326. subUrl: "/brownouts/getBrownoutsList",
  327. data,
  328. success(res) {
  329. if (res.code == 200) {
  330. that.tableData.data = [];
  331. if (res.data.list.length) {
  332. let data = res.data.list;
  333. for (var i = 0; i < data.length; i++) {
  334. let obj = {
  335. index: i + 1,
  336. id: data[i].id,
  337. stopTime: new Date(data[i].stopTime).formatDate("yyyy-MM-dd hh:mm:ss"),
  338. startTime: new Date(data[i].startTime).formatDate("yyyy-MM-dd hh:mm:ss"),
  339. stopTypeId: data[i].stopTypeId,
  340. stopHours: data[i].stopHours,
  341. lossPower: data[i].lossPower,
  342. description: data[i].description,
  343. wts: data[i].wts,
  344. };
  345. that.tableData.data.push(obj);
  346. }
  347. }
  348. }
  349. },
  350. });
  351. },
  352. },
  353. };
  354. </script>
  355. <style lang="less" scope>
  356. @titleGray: #9ca5a8;
  357. @rowGray: #606769;
  358. @darkBack: #536268;
  359. .knowledge-2 {
  360. .el-select {
  361. width: 200px;
  362. }
  363. .el-input {
  364. width: 200px;
  365. }
  366. .action {
  367. text-decoration: underline;
  368. color: @green;
  369. cursor: pointer;
  370. }
  371. .com-table.tabLog {
  372. tr {
  373. height: 40px;
  374. }
  375. .light {
  376. width: 10.5rem;
  377. color: #05bb4c;
  378. }
  379. }
  380. .header {
  381. display: flex;
  382. width: 100%;
  383. height: 40px;
  384. line-height: 40px;
  385. background: fade(@gray, 60);
  386. color: @white;
  387. .herder-info {
  388. flex: 1 0 25%;
  389. font-size: @fontsize-s;
  390. padding-left: 1rem;
  391. &:last-child {
  392. flex: 1 0 50%;
  393. }
  394. }
  395. }
  396. }
  397. </style>