historyfile.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. <template>
  2. <view>
  3. <view class="status_bar"></view>
  4. <view class="" style="position: relative;top: 44px;">
  5. <view style="position: fixed;z-index: 100;">
  6. <uni-nav-bar @clickLeft="clickLeft" left-icon="back" title="历史数据"></uni-nav-bar>
  7. </view>
  8. <view class="shuju_one">
  9. <view class="shuju_one_title">
  10. <view :class="titleidnex==index?'title_text_color':'tltle_text'" v-for="(item,index) in titletext" :key="index"
  11. @click="changeindex(index)">
  12. {{item}}
  13. </view>
  14. </view>
  15. <highcharts :chartOptions="options" :styles="styles" ref="simpleChart"></highcharts>
  16. </view>
  17. <view class="condition">
  18. <scroll-view scroll-top="0" scroll-x="true" class="scroll-X">
  19. <table class="table">
  20. <tr class="tr">
  21. <th class="th" v-for="(item,index) in thdata" :key="'a'+index">{{item}}</th>
  22. </tr>
  23. <tr class="tr" v-for="(items,indexs) in historylistdata" :key="'b'+indexs" v-if="!forbidden">
  24. <td class="td">{{items.d_h_t.at}}</td>
  25. <td class="td">{{items.d_h_t.ah}}</td>
  26. <td class="td">{{items.d_h_t.hrt}}</td>
  27. <td class="td">{{items.d_h_t.rps==0?"正常":"雨控"}}</td>
  28. <td class="td">{{items.d_h_t.tps==0?"正常":"温控"}}</td>
  29. <td class="td">{{items.d_h_t.lamp==0?"灭":"亮"}}</td>
  30. <td class="td">{{items.d_h_t.csq}}</td>
  31. <td class="td">{{items.d_h_t.current}}</td>
  32. <td class="td">{{items.d_h_t.vbat}}</td>
  33. <td class="td">{{items.d_h_t.lat}}</td>
  34. <td class="td">{{items.d_h_t.lng}}</td>
  35. <td class="td">{{items.d_h_t.addtime|timeFormat()}}</td>
  36. </tr>
  37. <tr class="tr" v-if="forbidden">
  38. <td class="td" v-for="item in 13">暂无数据</td>
  39. </tr>
  40. </table>
  41. </scroll-view>
  42. <view class="pagenumber">
  43. <button @click="prev">上一页</button>
  44. <view class="pagenumber_page">
  45. 第{{page}}页
  46. </view>
  47. <button @click="next" :disabled="forbidden">下一页</button>
  48. </view>
  49. </view>
  50. </view>
  51. </view>
  52. </template>
  53. <script>
  54. import highcharts from "@/components/highcharts/highcharts"
  55. var newtime = +new Date()
  56. var strrttime = newtime - 24 * 60 * 60 * 1000
  57. export default {
  58. data() {
  59. return {
  60. styles: {
  61. // width: "650rpx",
  62. height: "400rpx"
  63. },
  64. options: {
  65. lang: {
  66. noData: "暂无数据"
  67. },
  68. chart: {
  69. type: 'spline', //指定图表的类型,默认是折线图(line)
  70. zoomType: 'x',
  71. panning: true,
  72. panKey: 'shift'
  73. },
  74. title: {
  75. text: '' // 标题
  76. },
  77. credits: {
  78. enabled: false
  79. },
  80. xAxis: {
  81. type: 'datetime',
  82. crosshair: true, //十字基准线
  83. dateTimeLabelFormats: {
  84. //根据时间间距X轴自动显示哪种格式
  85. millisecond: "%H:%M:%S.%L",
  86. second: "%H:%M:%S",
  87. minute: "%H:%M",
  88. hour: "%H:%M",
  89. day: "%m-%d",
  90. week: "%m-%d",
  91. month: "%Y-%m",
  92. year: "%Y",
  93. },
  94. },
  95. yAxis: {
  96. title: false,
  97. },
  98. legend: {
  99. // layout: 'vertical',
  100. align: "center",
  101. verticalAlign: "top",
  102. },
  103. tooltip: {
  104. // crosshairs: true,
  105. shared: true, //折线共享
  106. headerFormat: "<b>{point.x:%Y-%m-%e %H:%M:%S}</b><br>",
  107. },
  108. plotOptions: {
  109. spline: {
  110. marker: {
  111. enabled: false
  112. },
  113. }
  114. },
  115. series: [{
  116. name: "温度(°C)",
  117. data: [],
  118. color: "#00E29D"
  119. },
  120. {
  121. name: "湿度(%)",
  122. data: [],
  123. color: "#6CBBFF"
  124. },
  125. {
  126. name: "加热仓温度(°C)",
  127. data: [],
  128. color: "#f00000"
  129. }
  130. ],
  131. },
  132. d_id: '',
  133. start_time: strrttime,
  134. end_time: newtime,
  135. historydatas: [],
  136. titletext: ["24小时", "近一个月", "近半年", "近一年"],
  137. titleidnex: 0,
  138. device_id: '',
  139. page: 1,
  140. historylistdata: [],
  141. thdata: ["环境温度(°C)", "环境湿度(%)", "加热仓温度(°C)", "雨控状态", "温控状态", "灯管状态", "信号强度", "电流(mA)", "电压(V)", "经度", "纬度", "上报时间"],
  142. forbidden: false
  143. }
  144. },
  145. methods: {
  146. //forecast.worm_lamp.device_polyline_data 历史数据折线图
  147. // device_type_id 必传(string) 设备类型 3虫情测报灯 7孢子仪 4智能性诱 2杀虫灯 9糖醋测报灯 10测报灯rtu
  148. // d_id 必传 设备id
  149. // start_time 非必传(string 时间戳) 开始时间 (用于时间搜索)
  150. // end_time
  151. async history() { //获取图片列表
  152. const res = await this.$myRequest({
  153. url: '/api/api_gateway?method=forecast.worm_lamp.device_polyline_data',
  154. data: {
  155. device_type_id: 3,
  156. d_id: this.d_id,
  157. start_time: parseInt(this.start_time / 1000),
  158. end_time: parseInt(this.end_time / 1000)
  159. }
  160. })
  161. this.historydatas = res
  162. console.log(this.historydatas)
  163. this.options.series[0].data = []
  164. this.options.series[1].data = []
  165. this.options.series[2].data = []
  166. for (var i = 0; i < res.length; i++) {
  167. var arr1 = []
  168. arr1.push(res[i].addtime * 1000 + 8 * 3600000, Number(res[i].temperature))
  169. this.options.series[0].data.push(arr1)
  170. var arr2 = []
  171. arr2.push(res[i].addtime * 1000 + 8 * 3600000, Number(res[i].humidity))
  172. this.options.series[1].data.push(arr2)
  173. var arr3 = []
  174. arr3.push(res[i].addtime * 1000 + 8 * 3600000, Number(res[i].others))
  175. this.options.series[2].data.push(arr3)
  176. }
  177. <<<<<<< HEAD
  178. console.log(this.options.series)
  179. },
  180. //forecast.worm_lamp.device_history_data历史数据列表
  181. async historylist() { //获取图片列表
  182. const res = await this.$myRequest({
  183. url: '/api/api_gateway?method=forecast.worm_lamp.device_history_data',
  184. data: {
  185. =======
  186. },
  187. //forecast.worm_lamp.device_history_data历史数据列表
  188. async historylist() { //获取图片列表
  189. const res = await this.$myRequest({
  190. url: '/api/api_gateway?method=forecast.worm_lamp.device_history_data',
  191. data: {
  192. >>>>>>> 1c31f0ba3e58f06f275858f2857f9f7f3e3fafc8
  193. device_type_id: 3,
  194. device_id: this.device_id,
  195. start_time: parseInt(this.start_time / 1000),
  196. end_time: parseInt(this.end_time / 1000),
  197. page: this.page
  198. }
  199. })
  200. this.historylistdata = res.data
  201. if (res.data.length == 0) {
  202. this.forbidden = true
  203. console.log(res.data.length)
  204. } else {
  205. this.forbidden = false
  206. console.log(res.data.length)
  207. }
  208. console.log(this.historylistdata)
  209. },
  210. changeindex(index) {
  211. this.titleidnex = index
  212. var now = new Date()
  213. this.$forceUpdate()
  214. if (index == 0) {
  215. this.start_time = strrttime
  216. this.history()
  217. this.historylist()
  218. } else if (index == 1) {
  219. var oldtime = now.setMonth(now.getMonth() - 1)
  220. this.start_time = parseInt(oldtime)
  221. this.history()
  222. this.historylist()
  223. } else if (index == 2) {
  224. var oldtime = now.setMonth(now.getMonth() - 6)
  225. this.start_time = parseInt(oldtime)
  226. this.history()
  227. this.historylist()
  228. } else if (index == 3) {
  229. var oldtime = now.setFullYear(now.getFullYear() - 1)
  230. this.start_time = parseInt(oldtime)
  231. this.history()
  232. this.historylist()
  233. }
  234. },
  235. prev() { //上一页
  236. if (this.page > 1) {
  237. this.page--
  238. this.historylist()
  239. }
  240. },
  241. next() { //下一页
  242. this.page++
  243. this.historylist()
  244. },
  245. clickLeft() {
  246. uni.navigateBack({
  247. delta: 1
  248. })
  249. }
  250. },
  251. onLoad(option) {
  252. this.d_id = option.d_id
  253. this.device_id = option.device_id
  254. this.history()
  255. this.historylist()
  256. }
  257. }
  258. </script>
  259. <style lang="scss">
  260. .shuju_one,
  261. .shuju_two {
  262. position: absolute;
  263. top: 54px;
  264. width: 90%;
  265. left: 5%;
  266. box-shadow: 0 0 10rpx #bcb9ca;
  267. padding-top: 20rpx;
  268. .shuju_one_title {
  269. width: 70%;
  270. margin: 0 auto;
  271. display: flex;
  272. .tltle_text {
  273. width: 25%;
  274. border: 2rpx solid #B2B2B2;
  275. color: #B2B2B2;
  276. text-align: center;
  277. font-size: 24rpx;
  278. height: 50rpx;
  279. line-height: 50rpx;
  280. }
  281. .title_text_color {
  282. width: 25%;
  283. border: 2rpx solid #28AE4F;
  284. color: #28AE4F;
  285. text-align: center;
  286. font-size: 24rpx;
  287. height: 50rpx;
  288. line-height: 50rpx;
  289. }
  290. }
  291. }
  292. .condition {
  293. position: absolute;
  294. top: 600rpx;
  295. display: flex;
  296. flex-wrap: wrap;
  297. width: 90%;
  298. left: 5%;
  299. box-shadow: 0 0 10rpx #bcb9ca;
  300. margin-bottom: 30rpx;
  301. .scroll-X {
  302. width: 95%;
  303. margin: 20rpx auto;
  304. .tr {
  305. display: flex;
  306. overflow: hidden;
  307. .th,
  308. .td {
  309. display: inline-block;
  310. padding: 5rpx;
  311. width: 240rpx;
  312. text-align: center;
  313. height: 52rpx;
  314. line-height: 52rpx;
  315. border: 2rpx solid #F1F1F1;
  316. }
  317. }
  318. }
  319. .pagenumber {
  320. display: flex;
  321. margin: 20rpx auto;
  322. button {
  323. width: 150rpx;
  324. height: 50rpx;
  325. line-height: 50rpx;
  326. font-size: 26rpx;
  327. text-align: center;
  328. background-color: #17BB89;
  329. color: #FFFFFF;
  330. }
  331. .pagenumber_page {
  332. width: 150rpx;
  333. height: 50rpx;
  334. line-height: 50rpx;
  335. font-size: 26rpx;
  336. text-align: center;
  337. }
  338. }
  339. }
  340. </style>