weather.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  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-date-picker v-model="startDate" type="date" placeholder="开始日期" popper-class="date-select"
  9. value-format="YYYY-MM-DD"></el-date-picker>
  10. </div>
  11. </div>
  12. <div class="query-item">
  13. <div class="lable">结束日期:</div>
  14. <div class="search-input">
  15. <el-date-picker v-model="endDate" type="date" placeholder="结束日期" popper-class="date-select"
  16. value-format="YYYY-MM-DD"></el-date-picker>
  17. </div>
  18. </div>
  19. <div class="query-item">
  20. <div class="lable">场站:</div>
  21. <div class="search-input">
  22. <el-select v-model="stationId" clearable placeholder="请选择" popper-class="select">
  23. <el-option v-for="item in ChangZhan" :key="item.id" :value="item.id" :label="item.name">
  24. </el-option>
  25. </el-select>
  26. </div>
  27. </div>
  28. <div class="query-actions">
  29. <button class="btn green" @click="getTable()">查询</button>
  30. <button class="btn green" @click="exportCsv()">导出</button>
  31. </div>
  32. </div>
  33. </div>
  34. <div class="table-box">
  35. <div class="title">气象数据</div>
  36. <ComTable
  37. ref="curRef"
  38. :data="tableData"
  39. :pageSize="pageSize"
  40. @onPagging="onChangePage"
  41. height="68vh"
  42. v-loading="tableLoading"
  43. element-loading-text="拼命加载中.."
  44. element-loading-background="rgba(0, 0, 0, 0.8)"
  45. ></ComTable>
  46. </div>
  47. </div>
  48. </template>
  49. <script>
  50. import ComTable from "@/components/coms/table/table.vue";
  51. import Papa from 'papaparse';
  52. export default {
  53. name: "boosterAlarm",
  54. components: {
  55. ComTable,
  56. Papa
  57. },
  58. data() {
  59. let that = this;
  60. return {
  61. ChangZhan: [],
  62. stationId: "MHS_FDC",
  63. startDate: "",
  64. endDate: "",
  65. tableLoading: true,
  66. pageIndex: 1,
  67. pageSize: 20,
  68. tableData: {
  69. column: [{
  70. name: "记录日期",
  71. field: "recodedata",
  72. is_num: false,
  73. is_light: false,
  74. }, {
  75. name: "地点",
  76. field: "region",
  77. is_num: false,
  78. is_light: false,
  79. }, {
  80. name: "气象",
  81. field: "weather",
  82. is_num: false,
  83. is_light: false,
  84. }, {
  85. name: "最高温度(℃)",
  86. field: "maximumtem",
  87. is_num: false,
  88. is_light: false,
  89. }, {
  90. name: "最低温度(℃)",
  91. field: "minimumtem",
  92. is_num: false,
  93. is_light: false,
  94. }, {
  95. name: "日出时间",
  96. field: "sunrise",
  97. is_num: false,
  98. is_light: false,
  99. }, {
  100. name: "日落时间",
  101. field: "sunset",
  102. is_num: false,
  103. is_light: false,
  104. }, {
  105. name: "白气象",
  106. field: "weather1",
  107. is_num: false,
  108. is_light: false,
  109. }, {
  110. name: "夜气象",
  111. field: "weather2",
  112. is_num: false,
  113. is_light: false,
  114. }, {
  115. name: "白温度(℃)",
  116. field: "temperature1",
  117. is_num: false,
  118. is_light: false,
  119. }, {
  120. name: "夜温度(℃)",
  121. field: "temperature2",
  122. is_num: false,
  123. is_light: false,
  124. }, {
  125. name: "白体感(℃)",
  126. field: "realfeel1",
  127. is_num: false,
  128. is_light: false,
  129. }, {
  130. name: "夜体感(℃)",
  131. field: "realfeel2",
  132. is_num: false,
  133. is_light: false,
  134. }, {
  135. name: "白降水(ml)",
  136. field: "precipitation1",
  137. is_num: false,
  138. is_light: false,
  139. }, {
  140. name: "夜降水(ml)",
  141. field: "precipitation2",
  142. is_num: false,
  143. is_light: false,
  144. }, {
  145. name: "白风向",
  146. field: "winddirection1",
  147. is_num: false,
  148. is_light: false,
  149. }, {
  150. name: "夜风向",
  151. field: "winddirection2",
  152. is_num: false,
  153. is_light: false,
  154. }, {
  155. name: "白风速(m/s)",
  156. field: "speed1",
  157. is_num: false,
  158. is_light: false,
  159. }, {
  160. name: "夜风速(m/s)",
  161. field: "speed2",
  162. is_num: false,
  163. is_light: false,
  164. }, ],
  165. data: [],
  166. currentPageTotal: 0
  167. }
  168. };
  169. },
  170. created() {
  171. this.ChangZhanVal();
  172. let end = new Date();
  173. let start = new Date(end.getTime() - 1 * 24 * 60 * 60 * 1000);
  174. this.endDate = end.formatDate("yyyy-MM-dd");
  175. this.startDate = start.formatDate("yyyy-MM-dd");
  176. this.getTable();
  177. },
  178. methods: {
  179. exportCsv() {
  180. let data = this.tableData;
  181. let arrName = [];
  182. let dataArr = [];
  183. data.column.forEach(item =>{
  184. arrName.push(item.name)
  185. })
  186. data.data.forEach(ele=>{
  187. let i = 0;
  188. let obj = {};
  189. for(var j in ele){
  190. obj[arrName[i++]] = ele[j]
  191. }
  192. dataArr.push(obj)
  193. })
  194. var csv = Papa.unparse(dataArr);
  195. //定义文件内容,类型必须为Blob 否则createObjectURL会报错
  196. let content = new Blob([csv]);
  197. //生成url对象
  198. let urlObject = window.URL || window.webkitURL || window;
  199. let url = urlObject.createObjectURL(content);
  200. //生成<a></a>DOM元素
  201. let el = document.createElement("a");
  202. //链接赋值
  203. el.href = url;
  204. el.download = "历史天气.csv";
  205. //必须点击否则不会下载
  206. el.click();
  207. //移除链接释放资源
  208. urlObject.revokeObjectURL(url);
  209. },
  210. // 场站
  211. ChangZhanVal() {
  212. var that = this;
  213. that.API.requestData({
  214. method: "GET",
  215. subUrl: "powercompare/windfarmAjax",
  216. success(res) {
  217. that.ChangZhan = res.data;
  218. that.stationId = res.data[0].id;
  219. }
  220. });
  221. },
  222. getTable() {
  223. let that = this;
  224. this.tableLoading = true;
  225. this.API.requestData({
  226. timeout: 30000,
  227. method: "GET",
  228. subUrl: "weather/history/list",
  229. data: {
  230. wpId: that.stationId,
  231. startTs: that.startDate,
  232. endTs: that.endDate,
  233. pageNum: that.pageIndex,
  234. pageSize: that.pageSize,
  235. },
  236. success(res) {
  237. var dataTab = [];
  238. if (res.data) {
  239. res.data.list.forEach(item => {
  240. dataTab.push({ //表格
  241. recodedata: that.formatTime(item.recodedata),
  242. region: item.region,
  243. weather: item.weather,
  244. maximumtem: item.maximumtem,
  245. minimumtem: item.minimumtem,
  246. sunrise: item.sunrise,
  247. sunset: item.sunset,
  248. weather1: item.weather1,
  249. weather2: item.weather2,
  250. temperature1: item.temperature1,
  251. temperature2: item.temperature2,
  252. realfeel1: item.realfeel1,
  253. realfeel2: item.realfeel2,
  254. precipitation1: item.precipitation1,
  255. precipitation2: item.precipitation2,
  256. winddirection1: item.winddirection1,
  257. winddirection2: item.winddirection2,
  258. speed1: item.speed1,
  259. speed2: item.speed2
  260. })
  261. })
  262. that.tableData.data = dataTab;
  263. that.tableData.total = res.data.total;
  264. } else {
  265. that.tableData.data = [];
  266. that.tableData.total = 0;
  267. }
  268. that.tableLoading = false;
  269. }
  270. });
  271. },
  272. formatTime(value) {
  273. if (typeof(value) == 'undefined') {
  274. return ''
  275. } else {
  276. let date = new Date(parseInt(value))
  277. let y = date.getFullYear()
  278. let MM = date.getMonth() + 1
  279. MM = MM < 10 ? ('0' + MM) : MM
  280. let d = date.getDate()
  281. d = d < 10 ? ('0' + d) : d
  282. return y + '-' + MM + '-' + d
  283. }
  284. },
  285. onChangePage(params) {
  286. this.pageIndex = params.pageIndex;
  287. this.pageSize = params.pageSize;
  288. this.getTable();
  289. },
  290. }
  291. };
  292. </script>
  293. <style scoped>
  294. .title {
  295. background: rgba(255, 255, 255, 0.1);
  296. margin-bottom: 8px;
  297. padding: 1vh;
  298. }
  299. </style>