historyfile.vue 8.5 KB

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