gfgj.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <template>
  2. <div>
  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 ChangZhan" :key="item.id" :value="item.id" :label="item.name"></el-option>
  10. </el-select>
  11. </div>
  12. </div>
  13. <div class="query-item">
  14. <div class="lable">描述:</div>
  15. <div class="search-input">
  16. <el-input v-model="alarmDesc" placeholder="报警描述"></el-input>
  17. </div>
  18. </div>
  19. <div class="query-item">
  20. <div class="lable">开始日期:</div>
  21. <div class="search-input">
  22. <el-date-picker v-model="startDate" type="datetime" placeholder="开始日期"
  23. popper-class="date-select" value-format="YYYY-MM-DD HH:mm:ss"></el-date-picker>
  24. </div>
  25. </div>
  26. <div class="query-item">
  27. <div class="lable">结束日期:</div>
  28. <div class="search-input">
  29. <el-date-picker v-model="endDate" type="datetime" placeholder="开始日期" popper-class="date-select"
  30. value-format="YYYY-MM-DD HH:mm:ss"></el-date-picker>
  31. </div>
  32. </div>
  33. <div class="query-actions">
  34. <button class="btn green" @click="getTable()">查询</button>
  35. <button class="btn green" @click="exportExcel()">导出</button>
  36. <button class="btn green" @click="fx">分析</button>
  37. </div>
  38. </div>
  39. </div>
  40. <div class="table-box">
  41. <div class="title">光伏告警</div>
  42. <ComTable ref="curRef" :data="tableData" :pageSize="20" @onPagging="onChangePage" @sizeChange="sizeChange"
  43. @pageClick="pageClick" height="68vh" v-loading="tableLoading" element-loading-text="拼命加载中.."
  44. element-loading-background="rgba(0, 0, 0, 0.8)"></ComTable>
  45. </div>
  46. <el-dialog title="报警等级占比图" v-model="dialogVisible" width="750px" top="10vh" custom-class="modal" :close-on-click-modal="false" :destroy-on-close='true'>
  47. <el-row type="flex" justify="end">
  48. <div class="query">
  49. <div class="query-items">
  50. <div class="query-actions">
  51. <button class="btn green" @click="exportPDF">导出为PDF</button>
  52. </div>
  53. </div>
  54. </div>
  55. </el-row>
  56. <el-row>
  57. <div class="pdfDom">
  58. <dual-pie-chart height="40vh" width='700px' :innerData="innerAnalyis" :outerData="outerAnalyis" />
  59. </div>
  60. </el-row>
  61. </el-dialog>
  62. </div>
  63. </template>
  64. <script>
  65. import ComTable from "@/components/coms/table/table.vue";
  66. import DualPieChart from "@/components/chart/pie/dual-pie-chart.vue";
  67. import Get_PDF from "@tools/htmlToPdf";
  68. export default {
  69. components: {
  70. ComTable,
  71. DualPieChart,
  72. Get_PDF
  73. },
  74. data() {
  75. let that = this;
  76. return {
  77. innerAnalyis: [],
  78. outerAnalyis: [],
  79. dialogVisible: false,
  80. waitAjax:true,//等待执行完了再加载table
  81. ChangZhan: [],
  82. wpId: "",
  83. alarmDesc: "",
  84. startDate: "",
  85. endDate: "",
  86. tableLoading: true,
  87. pageIndex: 1,
  88. pageSize: 20,
  89. tableData: {
  90. column: [{
  91. name: "场站",
  92. field: "stationName",
  93. is_num: false,
  94. is_light: false,
  95. },
  96. {
  97. name: "报警时间",
  98. field: "alertTime",
  99. is_num: false,
  100. is_light: false,
  101. },
  102. {
  103. name: "报警描述",
  104. field: "alertText",
  105. is_num: false,
  106. is_light: false,
  107. },
  108. {
  109. name: "报警类别",
  110. field: "category1",
  111. is_num: false,
  112. is_light: false,
  113. },
  114. {
  115. name: "报警等级",
  116. field: "rank",
  117. is_num: false,
  118. is_light: false,
  119. sortable: true,
  120. },
  121. ],
  122. data: [],
  123. currentPageTotal: 0,
  124. },
  125. };
  126. },
  127. created() {
  128. let end = new Date();
  129. let start = new Date(end.getTime() - 1 * 24 * 60 * 60 * 1000);
  130. this.endDate = end.formatDate("yyyy-MM-dd hh:mm:ss");
  131. this.startDate = start.formatDate("yyyy-MM-dd hh:mm:ss");
  132. this.ChangZhanVal();
  133. },
  134. methods: {
  135. // 场站
  136. ChangZhanVal() {
  137. var that = this;
  138. that.API.requestData({
  139. method: "GET",
  140. baseURL: "http://10.155.32.4:9001/benchmarking/wpgflist",
  141. success(res) {
  142. that.ChangZhan = res.data;
  143. that.wpId = res.data[0].id;
  144. if(that.waitAjax){
  145. that.getTable();
  146. that.waitAjax=false;
  147. }
  148. },
  149. });
  150. },
  151. getTable() {
  152. let that = this;
  153. this.tableLoading = true;
  154. this.API.requestData({
  155. timeout: 30000,
  156. method: "GET",
  157. baseURL: "http://192.168.1.18:8075/",
  158. subUrl: "alarm/history/page2",
  159. data: {
  160. category1: "GF",
  161. stationid: this.wpId,
  162. starttime: this.startDate,
  163. endtime: this.endDate,
  164. keyword: this.alarmDesc,
  165. pagenum: this.pageIndex,
  166. pagesize: this.pageSize,
  167. },
  168. success(res) {
  169. if (res.data) {
  170. let rank = ['低','中低','中','中高','高'];
  171. let data = res.data.records;
  172. data.forEach(ele=>{
  173. ele.rank = rank[parseInt(ele.rank) - 1];
  174. ele.category1 == 'GF' ? ele.category1 = '光伏': ele.category1 = '升压站';
  175. })
  176. that.tableData.data = data;
  177. that.tableData.total = res.data.total;
  178. } else {
  179. that.tableData.data = [];
  180. that.tableData.total = 0;
  181. }
  182. that.tableLoading = false;
  183. },
  184. });
  185. },
  186. onChangePage(params) {
  187. this.pageIndex = params.pageIndex;
  188. this.pageSize = params.pageSize;
  189. this.getTable();
  190. },
  191. exportExcel() {
  192. let excelData = this.BASE.deepCopy(this.tableData);
  193. this.BASE.exportExcel(excelData, "光伏告警");
  194. },
  195. fx(){
  196. var that = this;
  197. that.API.requestData({
  198. method: "GET",
  199. timeout: 30000,
  200. showLoading:true,
  201. subUrl: "photovoltaic/query",
  202. data: {
  203. category1: "GF",
  204. stationid: this.wpId,
  205. starttime: this.startDate,
  206. endtime: this.endDate,
  207. keyword: this.alarmDesc,
  208. pagenum: this.pageIndex,
  209. pagesize: this.pageSize,
  210. },
  211. success(res) {
  212. var analyis = [];
  213. let data = res.data[1],
  214. rank = ['低','中低','中','中高','高'],
  215. val = Object.values(data);
  216. val.pop();
  217. val.forEach((ele,index) =>{
  218. analyis.push({
  219. name: rank[index],
  220. value: ele
  221. })
  222. })
  223. that.innerAnalyis = analyis;
  224. that.outerAnalyis = analyis;
  225. that.dialogVisible= true;
  226. },
  227. });
  228. },
  229. exportPDF(name) {
  230. this.BASE.showMsg({
  231. type: "success",
  232. msg: "正在导出...请稍后...",
  233. });
  234. Get_PDF.downloadPDF(
  235. document.querySelector(".pdfDom"),
  236. "报警等级占比图"
  237. );
  238. },
  239. },
  240. };
  241. </script>
  242. <style lang="less">
  243. .title {
  244. background: rgba(255, 255, 255, 0.1);
  245. margin-bottom: 8px;
  246. padding: 1vh;
  247. }
  248. .pdfDom{
  249. padding-top: 5vh;
  250. background-color: #111C1B;
  251. height: 50vh;
  252. }
  253. </style>