scd_detail_echart.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>ECahrt 示例</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
  7. <meta name="apple-mobile-web-app-capable" content="yes">
  8. <meta name="apple-mobile-web-app-status-bar-style" content="black">
  9. <link href="https://cdn.bootcss.com/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet">
  10. <link rel="stylesheet" href="../css/mui.min.css">
  11. <link rel="stylesheet" href="../css/mobiscroll.custom-3.0.0-beta6.min.css">
  12. <link rel="stylesheet" href="../css/common.css">
  13. <style>
  14. /*body,
  15. .mui-content {
  16. background-color: #ffffff;
  17. }
  18. */
  19. .chart {
  20. height: 250px;
  21. margin: 0px;
  22. padding: 0px;
  23. }
  24. h5 {
  25. margin-top: 30px;
  26. font-weight: bold;
  27. }
  28. h5:first-child {
  29. margin-top: 0;
  30. font-weight: 100;
  31. }
  32. /*tab*/
  33. .mui-segmented-control {
  34. border: none;
  35. display: inherit;
  36. overflow: visible;
  37. margin: 20px 0;
  38. background-color: #fff;
  39. }
  40. .mui-segmented-control .mui-control-item {
  41. border-left: none;
  42. color: #333;
  43. overflow: visible;
  44. }
  45. .mui-segmented-control .mui-control-item.mui-active {
  46. color: #333;
  47. background: transparent;
  48. border-bottom: none;
  49. position: relative;
  50. }
  51. .mui-control-item.mui-active:before {
  52. content: '';
  53. position: absolute;
  54. left: 50%;
  55. bottom: -3px;
  56. width: 70px;
  57. background: #007aff;
  58. height: 3px;
  59. margin-left: -35px;
  60. }
  61. .mui-control-item.mui-active:after {
  62. content: '';
  63. position: absolute;
  64. left: 50%;
  65. border: 26px solid #007aff;
  66. bottom: -18px;
  67. margin-left: -5px;
  68. border-top: #007aff 5px solid;
  69. border-left: transparent 5px solid;
  70. border-bottom: transparent 10px solid;
  71. border-right: transparent 5px solid;
  72. }
  73. .mui-segmented-control .mui-control-item {
  74. line-height: 30px;
  75. }
  76. #segmentedControl a {
  77. text-align: center;
  78. position: relative;
  79. }
  80. .mui-control-item.mui-active {
  81. color: #333;
  82. border-bottom: 3px solid #007AFF;
  83. }
  84. </style>
  85. <script src="../js/mui.min.js"></script>
  86. </head>
  87. <body>
  88. <header class="mui-bar mui-bar-nav">
  89. <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
  90. <h1 class="mui-title">详情</h1>
  91. <a class="mui-icon mui-icon-search mui-pull-right" id="date"></a>
  92. </header>
  93. <div class="mui-content">
  94. <div class="mui-card">
  95. <!--页眉,放置标题-->
  96. <div class="mui-card-header">
  97. <h5>温度(°C)电压(V)</h5>
  98. </div>
  99. <!--内容区-->
  100. <div class="mui-card-content">
  101. <div class="chart" id="lineChart"></div>
  102. </div>
  103. </div>
  104. <!--<h5>击虫次数</h5>-->
  105. <div class="">
  106. <div id="segmentedControl" class="mui-segmented-control">
  107. <a class="mui-control-item mui-active" data-id='2'>按次</a>
  108. <a class="mui-control-item" data-id="3">按日</a>
  109. <a class="mui-control-item" data-id="4">按月</a>
  110. </div>
  111. </div>
  112. <div class="mui-card">
  113. <!--页眉,放置标题-->
  114. <div class="mui-card-header">
  115. <h5>击虫次数(只)</h5>
  116. </div>
  117. <!--内容区-->
  118. <div class="mui-card-content">
  119. <div class="chart" id="pieChart"></div>
  120. </div>
  121. </div>
  122. <!--筛选日历-->
  123. <!--<div class="searchHintBox">-->
  124. <div class="calendarBox" style="display:none">
  125. <p>开始时间:<input id="start" placeholder="Please Select ..." readonly /></p>
  126. <p>结束时间:<input id="end" placeholder="Please Select ..." readonly /></p>
  127. </div>
  128. <!--</div>-->
  129. </div>
  130. <script src="../js/jquery-2.1.0.js" type="text/javascript" charset="utf-8"></script>
  131. <script src="../js/mobiscroll.custom-3.0.0-beta6.min.js" type="text/javascript" charset="utf-8"></script>
  132. <script src="../js/echarts.js"></script>
  133. <script>
  134. var equipId;
  135. // 1基于准备好的dom,初始化echarts实例
  136. var lineChart = echarts.init(document.getElementById('lineChart'));
  137. // 指定图表的配置项和数据
  138. var lineOption = {
  139. tooltip: {
  140. trigger: 'axis',
  141. formatter: function(params) {
  142. if(params.length > 1) {
  143. var returnData = '';
  144. var time = '';
  145. for(var g in params) {
  146. time = params[g].axisValue;
  147. if(params[g].seriesIndex == 0 || params[g].seriesIndex == 1) {
  148. if (params[g].seriesName == '环境温度') {
  149. returnData += params[g].seriesName + ':' + params[g].value + '°C<br/>';
  150. } else if (params[g].seriesName == '环境湿度') {
  151. returnData += params[g].seriesName + ':' + params[g].value + 'RH<br/>';
  152. }
  153. }
  154. if(params[g].seriesIndex == 1) {
  155. returnData += params[g].seriesName + ':' + params[g].value + '%<br/>';
  156. }
  157. if(params[g].seriesIndex == 2 || params[g].seriesIndex == 3) {
  158. returnData += params[g].seriesName + ':' + params[g].value + 'V<br/>';
  159. }
  160. }
  161. return time + '<br/>' + returnData;
  162. }
  163. }
  164. },
  165. legend: {
  166. y:15,
  167. itemWidth: 15,
  168. itemHeight: 10,
  169. itemGap: 8,
  170. data: ['环境温度', '环境湿度', '充电电压', '电池电压'],
  171. textStyle: {
  172. fontSize: 12,
  173. }
  174. },
  175. grid: {
  176. left: '3%',
  177. right: '4%',
  178. bottom: '3%',
  179. containLabel: true
  180. },
  181. toolbox: {
  182. feature: {
  183. // saveAsImage: {}
  184. }
  185. },
  186. xAxis: {
  187. type: 'category',
  188. boundaryGap: false,
  189. data: [1, 2, 3, 4, 5, 6, 7]
  190. },
  191. yAxis: {
  192. type: 'value',
  193. data: [20, 30, 52, 20, 64, 56, 80]
  194. },
  195. dataZoom : {
  196. type:'inside',
  197. },
  198. series: [{
  199. name: '环境温度',
  200. type: 'line',
  201. data: [20, 30, 52, 20, 64, 56, 80],
  202. itemStyle: {
  203. normal: {
  204. color: '#6ecdfe'
  205. }
  206. }
  207. },
  208. {
  209. name: '环境湿度',
  210. type: 'line',
  211. data: [],
  212. itemStyle: {
  213. normal: {
  214. color: '#5689f2'
  215. }
  216. }
  217. },
  218. {
  219. name: '充电电压',
  220. type: 'line',
  221. data: [],
  222. itemStyle: {
  223. normal: {
  224. color: '#4ee75f'
  225. }
  226. }
  227. },
  228. {
  229. name: '电池电压',
  230. type: 'line',
  231. data: [],
  232. itemStyle: {
  233. normal: {
  234. color: '#ff753f'
  235. }
  236. }
  237. }
  238. ]
  239. };
  240. // 2基于准备好的dom,初始化echarts实例
  241. var barChart = echarts.init(document.getElementById('pieChart'));
  242. // 指定图表的配置项和数据
  243. var barOption = {
  244. tooltip: {
  245. trigger: 'axis',
  246. formatter: function(params) {
  247. var returnData = '';
  248. var time = '';
  249. for(var g in params) {
  250. time = params[g].axisValue;
  251. returnData += params[g].seriesName + ':' + params[g].value + '只';
  252. }
  253. return time + '<br/>' + returnData;
  254. }
  255. },
  256. legend: {
  257. // x: 'right', // 'center' | 'left' | {number},
  258. y:15,
  259. data: ['击虫次数'],
  260. itemWidth: 15,
  261. itemHeight: 10,
  262. itemGap: 8,
  263. textStyle: {
  264. fontSize: 12,
  265. }
  266. },
  267. grid: {
  268. left: '3%',
  269. right: '4%',
  270. bottom: '3%',
  271. containLabel: true
  272. },
  273. toolbox: {
  274. feature: {
  275. // saveAsImage: {}
  276. }
  277. },
  278. xAxis: {
  279. type: 'category',
  280. boundaryGap: false,
  281. data: []
  282. },
  283. yAxis: {
  284. type: 'value',
  285. data: []
  286. },
  287. dataZoom: [{
  288. type: 'inside',
  289. backgroundColor: "rgba(47,69,84,0)",
  290. }],
  291. series: [{
  292. name: '击虫次数',
  293. type: 'line',
  294. data: [],
  295. itemStyle: {
  296. normal: {
  297. color: '#6ecdfe'
  298. }
  299. }
  300. }]
  301. };
  302. mui.plusReady(function() {
  303. var self = plus.webview.currentWebview();
  304. equipId = self.equipId;
  305. //请求图表数据:
  306. $.ajax({
  307. url: 'http://192.168.1.11:8000/scd_report_detail_chart',
  308. type: 'post',
  309. data: {
  310. req: 'data',
  311. id: equipId
  312. },
  313. success: function(data) {
  314. sessionStorage.setItem("scdData", data);
  315. var temp = eval('(' + data + ')');
  316. var at = [],
  317. ah = [],
  318. time = [],
  319. cv = [],
  320. bv = [],
  321. ct = [];
  322. for(var i = 0; i < temp.length; i++) {
  323. at.unshift(Number(temp[i].at).toFixed(1));
  324. ah.unshift(Number(temp[i].ah).toFixed(1));
  325. cv.unshift((Number(temp[i].cv) / 1000).toFixed(1));
  326. bv.unshift((Number(temp[i].bv) / 1000).toFixed(1));
  327. ct.unshift(Number(temp[i].ct));
  328. time.unshift(temp[i].tim);
  329. }
  330. lineOption.series[0].data = at;
  331. lineOption.series[1].data = ah;
  332. lineOption.series[2].data = cv;
  333. lineOption.series[3].data = bv;
  334. lineOption.xAxis.data = time;
  335. barOption.series[0].data = ct;
  336. barOption.xAxis.data = time;
  337. if(!temp.length) {
  338. lineOption.series[0].data = [];
  339. lineOption.series[1].data = [];
  340. lineOption.series[2].data = [];
  341. lineOption.series[3].data = [];
  342. lineOption.xAxis.data = ['暂无数据'];
  343. barOption.series[0].data = [];
  344. barOption.xAxis.data = ['暂无数据'];
  345. }
  346. // 使用刚指定的配置项和数据显示图表。
  347. setTimeout(function() {
  348. lineChart.setOption(lineOption);
  349. barChart.setOption(barOption);
  350. })
  351. }
  352. })
  353. //日历
  354. mobiscroll.settings = {
  355. theme: 'ios'
  356. ,lang: 'zh',
  357. };
  358. $('#date').mobiscroll().range({
  359. startInput: '#start',
  360. endInput: '#end',
  361. onSet: function (event, inst) {
  362. var start = getYMDHMS(inst.getVal()[0]);
  363. var end = getYMDHMS(inst.getVal()[1]);
  364. //请求图表数据:
  365. $.ajax({
  366. url: 'http://192.168.1.11:8000/scd_report_detail_chart',
  367. type: 'post',
  368. data: {
  369. req: 'filter',
  370. id: equipId,
  371. begin: start,
  372. end: end
  373. },
  374. success: function(data) {
  375. sessionStorage.setItem("scdData", data);
  376. var temp = eval('(' + data + ')');
  377. var at = [],
  378. ah = [],
  379. time = [],
  380. cv = [],
  381. bv = [],
  382. ct = [];
  383. for(var i = 0; i < temp.length; i++) {
  384. at.unshift(Number(temp[i].at).toFixed(1));
  385. ah.unshift(Number(temp[i].ah).toFixed(1));
  386. cv.unshift((Number(temp[i].cv) / 1000).toFixed(1));
  387. bv.unshift((Number(temp[i].bv) / 1000).toFixed(1));
  388. ct.unshift(Number(temp[i].ct));
  389. time.unshift(temp[i].tim);
  390. }
  391. lineOption.series[0].data = at;
  392. lineOption.series[1].data = ah;
  393. lineOption.series[2].data = cv;
  394. lineOption.series[3].data = bv;
  395. lineOption.xAxis.data = time;
  396. barOption.series[0].data = ct;
  397. barOption.xAxis.data = time;
  398. if(!temp.length) {
  399. lineOption.series[0].data = [];
  400. lineOption.series[1].data = [];
  401. lineOption.series[2].data = [];
  402. lineOption.series[3].data = [];
  403. lineOption.xAxis.data = ['暂无数据'];
  404. barOption.series[0].data = [];
  405. barOption.xAxis.data = ['暂无数据'];
  406. }
  407. // 使用刚指定的配置项和数据显示图表。
  408. setTimeout(function() {
  409. lineChart.setOption(lineOption);
  410. barChart.setOption(barOption);
  411. })
  412. }
  413. })
  414. },
  415. });
  416. function getYMDHMS(time) {
  417. var time = new Date(time);
  418. var year = time.getFullYear(),
  419. month = time.getMonth() + 1,
  420. date = time.getDate();
  421. if (month < 10) { month = '0' + month; }
  422. if (date < 10) { date = '0' + date; }
  423. return year+'/'+ month+'/'+ date //不想
  424. }
  425. })
  426. mui('#segmentedControl').on('tap', 'a', function() {
  427. console.log(JSON.parse(sessionStorage.getItem("scdData")))
  428. var type = this.getAttribute('data-id');
  429. var timeDat = [],
  430. valueDat = [];
  431. var dat = JSON.parse(sessionStorage.getItem("scdData"));
  432. if(dat.length) {
  433. if(type == 2) {
  434. for(var j = 0; j < dat.length; j++) {
  435. timeDat.unshift(dat[j].tim);
  436. valueDat.unshift(dat[j].ct)
  437. }
  438. } else if(type == 3) {
  439. var prevTime = dat[0].tim.split(' ')[0]; //上一次日期 判断日期是否一样
  440. var currentVal = 0; //默认杀虫数
  441. for(var j = 0; j < dat.length; j++) {
  442. var currentTime = dat[j].tim.split(' ')[0];
  443. if(timeDat.indexOf(currentTime) == -1) {
  444. timeDat.unshift(currentTime);
  445. }
  446. if(prevTime == currentTime && j != dat.length - 1) {
  447. currentVal += dat[j].ct;
  448. } else if(prevTime == currentTime && j == dat.length - 1) {
  449. currentVal += dat[j].ct;
  450. valueDat.unshift(currentVal);
  451. } else if(prevTime != currentTime && j == dat.length - 1) {
  452. currentVal;
  453. valueDat.unshift(currentVal);
  454. valueDat.unshift(dat[j].ct);
  455. } else {
  456. valueDat.unshift(currentVal);
  457. prevTime = currentTime;
  458. currentVal = dat[j].ct;
  459. }
  460. }
  461. } else if(type == 4) {
  462. var prevTime = dat[0].tim.split(' ')[0].substring(0, 7); //上一次日期 判断日期是否一样
  463. var currentVal = 0; //默认杀虫数
  464. for(var j = 0; j < dat.length; j++) {
  465. var currentTime = dat[j].tim.split(' ')[0].substring(0, 7);
  466. if(timeDat.indexOf(currentTime) == -1) {
  467. timeDat.unshift(currentTime);
  468. }
  469. if(prevTime == currentTime && j != dat.length - 1) {
  470. currentVal += dat[j].ct;
  471. } else if(prevTime == currentTime && j == dat.length - 1) {
  472. currentVal += dat[j].ct;
  473. valueDat.unshift(currentVal);
  474. } else if(prevTime != currentTime && j == dat.length - 1) {
  475. currentVal;
  476. valueDat.unshift(currentVal);
  477. valueDat.unshift(dat[j].ct);
  478. } else {
  479. valueDat.unshift(currentVal);
  480. prevTime = currentTime;
  481. currentVal = dat[j].ct;
  482. }
  483. }
  484. }
  485. barOption.series[0].data = valueDat;
  486. barOption.xAxis.data = timeDat;
  487. setTimeout(function() {
  488. barChart.setOption(barOption);
  489. })
  490. }
  491. })
  492. </script>
  493. </body>
  494. </html>