historyfile.vue 8.5 KB

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