line-wv.html 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>折线图</title>
  8. <link rel="stylesheet" href="css/chartpage.css">
  9. </head>
  10. <body>
  11. <div>
  12. <!-- 时间类型 -->
  13. <div id="moreTime" class="moreTime">
  14. </div>
  15. <!-- 时间间隔 -->
  16. <div id="childTime" class="childTime">
  17. <div style="" data-type=0>
  18. <div class="box" onclick="childTimeOnClick(this,900000)">15分</div>
  19. <div class="" onclick="childTimeOnClick(this,1800000)">30分</div>
  20. <div class="" onclick="childTimeOnClick(this,2700000)">45分</div>
  21. </div>
  22. <div style="display: none;" data-type=1>
  23. <div class="" onclick="childTimeOnClick(this,3600000)">1小时</div>
  24. <div class="" onclick="childTimeOnClick(this,21600000)">6小时</div>
  25. <div class="" onclick="childTimeOnClick(this,43200000)">12小时</div>
  26. <div class="" onclick="childTimeOnClick(this,64800000)">18小时</div>
  27. </div>
  28. <div style="display: none;" data-type=2>
  29. <div class="" onclick="childTimeOnClick(this,86400000)">1日</div>
  30. <div class="" onclick="childTimeOnClick(this,259200000)">3日</div>
  31. <div class="" onclick="childTimeOnClick(this,432000000)">5日</div>
  32. </div>
  33. <div style="display: none;" data-type=3>
  34. <div class="" onclick="childTimeOnClick(this,604800000)">1周</div>
  35. <div class="" onclick="childTimeOnClick(this,1209600000)">2周</div>
  36. <div class="" onclick="childTimeOnClick(this,1814400000)">3周</div>
  37. <div class="" onclick="childTimeOnClick(this,2419200000)">4周</div>
  38. </div>
  39. </div>
  40. </div>
  41. <div id="main" style="width:100%;height:85%;margin:auto"></div>
  42. <script src="./echarts.min.js"></script>
  43. <script src="./cqcyCode.js"></script>
  44. <script type="text/javascript" src="../luckysheet/dist/plugins/js/uni-webview-js0.0.3_index.js"></script>
  45. <script src="../jquery.min.js"></script>
  46. <script src="../date.js"></script>
  47. <script>
  48. var option = {
  49. title: {
  50. text: '',
  51. textStyle: {
  52. color: '#666666',
  53. fontWeight: 'normal',
  54. fontSize: '14'
  55. }
  56. },
  57. xAxis: {
  58. type: 'category',
  59. data: [],
  60. axisLabel: {
  61. formatter: function(value) {
  62. return value.substring(11, 19) + "\n" + value.substring(0, 10).split('-').join('')
  63. }
  64. }
  65. },
  66. yAxis: {
  67. type: 'value'
  68. },
  69. legend: {
  70. type: 'scroll',
  71. top: 30
  72. },
  73. tooltip: {
  74. trigger: 'axis',
  75. axisPointer: {
  76. type: 'cross',
  77. lineStyle: {
  78. type: 'dashed'
  79. },
  80. label: {
  81. show: false
  82. },
  83. },
  84. textStyle:{
  85. color:'#ffffff'
  86. },
  87. confine: true,
  88. extraCssText: 'white-space: normal; word-break: break-all;',
  89. backgroundColor: 'rgba(108,106,120,0.9)', //通过设置rgba调节背景颜色与透明度
  90. position: 'inside',
  91. formatter: function(params) {
  92. let result = ''
  93. for (let i in params) {
  94. let value = '--'
  95. if (params[i].data !== null) {
  96. value = params[i].data
  97. }
  98. result += '<br>' + params[i].seriesName + ':' +
  99. value
  100. }
  101. return result
  102. }
  103. },
  104. dataZoom: [{
  105. type: 'inside',
  106. start: 90,
  107. end: 100
  108. },
  109. {
  110. type: 'slider',
  111. show: true,
  112. start: 90,
  113. end: 100,
  114. bottom: 10
  115. }
  116. ],
  117. series: []
  118. };
  119. </script>
  120. <script>
  121. var selTimeValue = 900000;
  122. //初始化时间选择区域
  123. function initHeader(){
  124. var range = ["分", "时", "日", "周"];
  125. let html_moreTime = "";
  126. for(var i=0;i<range.length;i++){
  127. if(i==0){
  128. html_moreTime = html_moreTime + "<div class='bod' onclick=moreTimeOnClick(this,"+i+");>" + range[i] + "</div>"
  129. }else{
  130. html_moreTime = html_moreTime + "<div class='' onclick=moreTimeOnClick(this,"+i+");>" + range[i] + "</div>";
  131. }
  132. };
  133. $("#moreTime").html(html_moreTime);
  134. }
  135. initHeader();
  136. function moreTimeOnClick(e,index){
  137. $("#childTime [data-type][data-type!="+index+"]").hide();
  138. $("#childTime [data-type][data-type="+index+"]").show();
  139. $(e).parent().children().removeClass("bod");
  140. $(e).addClass("bod");
  141. }
  142. function childTimeOnClick(e,timeValue){
  143. $("#childTime").children().children().removeClass("box");
  144. $(e).addClass("box");
  145. //获得选择的时间间隔
  146. initData(timeValue)
  147. }
  148. function GetQueryString(name) {
  149. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  150. var r = window.location.search.substr(1).match(reg); //获取url中"?"符后的字符串并正则匹配
  151. var context = "";
  152. if (r != null)
  153. context = decodeURIComponent(r[2]);
  154. reg = null;
  155. r = null;
  156. return context == null || context == "" || context == "undefined" ? "" : context;
  157. }
  158. function initData(timeValue){
  159. const id = GetQueryString('id')
  160. const startTime = timeToDate(new Date().getTime()-timeValue);//GetQueryString('startTime')
  161. const endTime = nowDate()
  162. const token = GetQueryString('token')//window.localStorage.getItem('C_TOKEN')
  163. var echartsData
  164. let chartParams = {
  165. id: id
  166. }
  167. $.ajax({
  168. url: "",
  169. type: 'GET',
  170. beforeSend: function(xhr) {
  171. this.url = baseUrl +
  172. `/chart/getChartById?id=${id}&startTime=${startTime}&endTime=${endTime}`
  173. xhr.setRequestHeader("Authorization", "Bearer " +
  174. token);
  175. xhr.setRequestHeader("token", token);
  176. },
  177. success: function(res) {
  178. if (res.code === 200) {
  179. option.title.text = res.data.chartName
  180. echartsData = res.data.chartItemList
  181. //console.log(echartsData)
  182. getServerData(echartsData)
  183. getEmit(res,token)
  184. }
  185. }
  186. })
  187. }
  188. function initEcharts() {
  189. var chart = echarts.init(document.getElementById('main'));
  190. chart.setOption(option)
  191. }
  192. function getServerData(echartsData) {
  193. const chartData = echartsData
  194. const timeData = chartData[0].valueTimeList
  195. const series = chartData.map(item => {
  196. return {
  197. // name: item.describe ? item.describe : item.itemName,
  198. name: item.describe ? item.describe : item.itemReadName,
  199. data: item.valueList,
  200. type: 'line'
  201. }
  202. })
  203. var chart = echarts.init(document.getElementById('main'));
  204. var lastOption = chart.getOption();
  205. if (lastOption != undefined) {
  206. option.dataZoom[0].start = lastOption.dataZoom[0].start
  207. option.dataZoom[0].end = lastOption.dataZoom[0].end
  208. option.dataZoom[1].start = lastOption.dataZoom[1].start
  209. option.dataZoom[1].end = lastOption.dataZoom[1].end
  210. }
  211. option.xAxis.data = timeData
  212. option.series = series
  213. initEcharts()
  214. }
  215. function getEmit(res,token) {
  216. const {
  217. bucketType,
  218. bucketValue,
  219. id,
  220. } = res.data
  221. //echartsData = res.data.
  222. echartsData = res.data.chartItemList
  223. var time = null
  224. switch (bucketType) {
  225. case 1:
  226. time = 86400000 * bucketValue
  227. break;
  228. case 2:
  229. time = 3600000 * bucketValue
  230. break;
  231. case 3:
  232. time = 60000 * bucketValue
  233. break;
  234. case 4:
  235. time = 1000 * bucketValue
  236. break;
  237. }
  238. var lineTime = setInterval(() => {
  239. const currentTime = nowDate();
  240. var lastTime = localStorage.getItem(id + 'sTime');
  241. //const token = window.localStorage.getItem('C_TOKEN')
  242. localStorage.setItem(res.id + 'sTime', currentTime)
  243. $.ajax({
  244. url: "",
  245. type: 'GET',
  246. beforeSend: function(xhr) {
  247. this.url = baseUrl + `/chart/getChartById?id=${id}&startTime=${lastTime}&endTime=${currentTime}`
  248. // this.url=window.location.origin+"/chart/getChartById?id="+id+"&startTime="+lastTime+"&endTime="+currentTime
  249. xhr.setRequestHeader("Authorization", "Bearer " +
  250. token);
  251. xhr.setRequestHeader("token", token);
  252. },
  253. success: function(res) {
  254. if (res.code === 200) {
  255. let chartItemList = res.data.chartItemList;
  256. chartItemList.forEach((item, index) => {
  257. if (item.itemId === echartsData[
  258. index].itemId) {
  259. if (item.valueList.length !== 0) {
  260. //执行将新数据添加进去,旧数据去除一个
  261. echartsData[index].valueList =
  262. echartsData[index].valueList
  263. .concat(item.valueList)
  264. echartsData[
  265. index]
  266. .valueList.splice(0, item
  267. .valueList.length)
  268. echartsData[index]
  269. .valueTimeList = echartsData[
  270. index]
  271. .valueTimeList.concat(item
  272. .valueTimeList)
  273. echartsData[
  274. index]
  275. .valueTimeList.splice(0,
  276. item
  277. .valueTimeList.length)
  278. }
  279. }
  280. })
  281. getServerData(echartsData)
  282. }
  283. }
  284. })
  285. }, time)
  286. }
  287. document.addEventListener('UniAppJSBridgeReady', function() {
  288. uni.getEnv(function(res) {
  289. initData(selTimeValue);
  290. })
  291. })
  292. </script>
  293. </body>
  294. </html>