index.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <link rel="stylesheet" href="css/index.css">
  8. <title>设备监测平台大数据</title>
  9. <script src="js/jquery-2.2.1.min.js"></script>
  10. <script src="js/rem.js"></script>
  11. <script src="js/echarts.min.js"></script>
  12. <script src="js/guangxi.js"></script>
  13. <script src="js/index.js"></script>
  14. </head>
  15. <body>
  16. <div class="t_container">
  17. <header class="t_header">
  18. <span>设备监测平台</span>
  19. </header>
  20. <main class="t_main">
  21. <div class="t_left_box">
  22. </div>
  23. <div class="t_center_box">
  24. <div class="t_top_box">
  25. </div>
  26. <div class="t_bottom_box">
  27. <img class="t_l_line" src="img/left_line.png" alt="">
  28. <div id="chart_3" class="echart" style="width: 100%; height: 3.6rem;"><img class="t_r_line" src="img/img.jpeg" alt="" style="margin-right: 5%;margin-bottom: 1%;"></div>
  29. <img class="t_r_line" src="img/right_line.png" alt="">
  30. </div>
  31. </div>
  32. <div class="t_right_box">
  33. </div>
  34. <div class="b_left_box">
  35. <img class="t_l_line" src="img/left_line.png" alt="">
  36. <div id="chart_2" class="echart" style="width: 100%; height: 3.6rem;"></div>
  37. <img class="t_r_line" src="img/right_line.png" alt="">
  38. </div>
  39. <div class="b_center_box">
  40. <img class="t_l_line" src="img/left_line.png" alt="">
  41. <div id="chart_1" class="echart" style="width: 100%; height: 3.6rem;"></div>
  42. <img class="t_r_line" src="img/right_line.png" alt="">
  43. </div>
  44. <div class="b_right_box">
  45. <img class="t_l_line" src="img/left_line.png" alt="">
  46. <h1 class="t_title">设备实时数据</h1>
  47. <table class="t_table">
  48. <thead>
  49. <tr>
  50. <th>主轴进给率</th>
  51. <th>主轴倍率</th>
  52. <th>主轴转速</th>
  53. <th>开机时长</th>
  54. </tr>
  55. </thead>
  56. <tbody class="b_right_box_tbody">
  57. </tbody>
  58. </table>
  59. <img class="t_r_line" src="img/right_line.png" alt="">
  60. </div>
  61. </main>
  62. </div>
  63. </body>
  64. <script type="text/javascript">
  65. var currentURL = window.location.href;
  66. // 解析 URL 获取参数
  67. var paramStartIndex = currentURL.indexOf('=') + 1; // 获取 "=" 后的位置
  68. var id = currentURL.substring(paramStartIndex);
  69. var requestData = {
  70. "id": id
  71. };
  72. const leftBox = document.querySelector('.t_left_box');
  73. const topBox = document.querySelector('.t_top_box');
  74. const rightBox = document.querySelector('.t_right_box');
  75. const rightBoxtbody = document.querySelector('.b_right_box_tbody');
  76. var echart4date;
  77. var echart4titlename;
  78. var avgDeviceRate;
  79. var difAvgDeviceRate;
  80. var yearMonthList;
  81. var avgYearMonth;
  82. function init(){
  83. callAPI();
  84. // 首次调用函数开始刷新
  85. refreshPage();
  86. }
  87. function refreshPage() {
  88. setTimeout(function() {
  89. location.reload(true); // 重新加载页面,参数为 true 表示强制从服务器重新加载
  90. callAPI();
  91. }, 10000); // 设置10秒钟的定时器
  92. }
  93. function callAPI(){
  94. $.ajax({
  95. url: "/bigScreen/detail",
  96. type: "POST", // 指定请求类型为 POST
  97. contentType: "application/json", // 设置请求的内容类型为 JSON
  98. dataType: "JSON",
  99. data: JSON.stringify(requestData), // 将请求数据转换为 JSON 字符串
  100. success: function (resp) {
  101. var data=resp.data;
  102. leftBox.innerHTML=`<img class="t_l_line" src="img/left_line.png" alt="">
  103. <div class="t_mbox t_rbox">
  104. <i></i>
  105. <span>主程序号</span>
  106. <h2>${data.mainProg}</h2>
  107. </div>
  108. <div class="t_mbox t_gbox">
  109. <i></i>
  110. <span>设备系统</span>
  111. <h2>${data.deviceSystem}</h2>
  112. </div>
  113. <div class="t_mbox t_ybox">
  114. <i></i>
  115. <span>设备型号</span>
  116. <h2>${data.deviceModel}</h2>
  117. </div>
  118. <img class="t_r_line" src="img/right_line.png" alt="">
  119. `;
  120. topBox.innerHTML=`
  121. <img class="t_l_line" src="img/left_line.png" alt="">
  122. <ul class="t_nav">
  123. <li>
  124. <span>设备类型</span>
  125. <h1>${data.deviceType}</h1>
  126. <i></i>
  127. </li>
  128. <li>
  129. <span>当日开机时长(分钟)</span>
  130. <h1>${data.todayPowerOnTime}</h1>
  131. <i></i>
  132. </li>
  133. <li>
  134. <span>主轴利用率</span>
  135. <h1>${data.deviceRate}%</h1>
  136. </li>
  137. </ul>
  138. <img class="t_r_line" src="img/right_line.png" alt="">
  139. `;
  140. rightBox.innerHTML=`
  141. <img class="t_l_line" src="img/left_line.png" alt="">
  142. <div id="chart_4" class="echart" style="width: 50%; height: 4.6rem; position: absolute;"></div>
  143. <header class="t_b_h">
  144. <span>设备状态</span>
  145. <img src="img/end.png"></img>
  146. <h3>${data.deviceState}</h3>
  147. </header>
  148. <main class="t_b_m">
  149. <img src="img/map.png" alt="">
  150. <div class="t_b_box">
  151. <span>主轴进给率</span>
  152. <i></i>
  153. <h2>${data.actFeed}</h2>
  154. </div>
  155. <div class="t_b_box1">
  156. <span>主轴倍率</span>
  157. <i></i>
  158. <h2>${data.spindleMagnification}</h2>
  159. </div>
  160. <div class="t_b_box2">
  161. <span>主轴转速</span>
  162. <i></i>
  163. <h2>${data.actSpindle}</h2>
  164. </div>
  165. <div class="t_b_box3">
  166. <span>当日开机时长</span>
  167. <i></i>
  168. <h2>${data.todayPowerOnTime}</h2>
  169. </div>
  170. </main>
  171. <img class="t_r_line" src="img/right_line.png" alt="">
  172. `;
  173. var bodyText=``;
  174. data.detailInfo.forEach(item => {
  175. bodyText+=`
  176. <tr>
  177. <td>${item.actFeed}</td>
  178. <td>${item.spindleMagnification}</td>
  179. <td>${item.actSpindle}</td>
  180. <td>${item.powerOnTime}</td>
  181. </tr>
  182. `;
  183. });
  184. rightBoxtbody.innerHTML=bodyText;
  185. echart4date=data.deviceRates;
  186. echart4titlename=data.dateList;
  187. avgDeviceRate=data.avgDeviceRate;
  188. difAvgDeviceRate=data.difAvgDeviceRate;
  189. yearMonthList=data.yearMonthList;
  190. avgYearMonth=data.avgYearMonth;
  191. echart_1();
  192. echart_2();
  193. echart_4();
  194. }
  195. });
  196. }
  197. init();
  198. function echart_1() {
  199. // 基于准备好的dom,初始化echarts实例
  200. var myChart = echarts.init(document.getElementById('chart_1'));
  201. option = {
  202. title: {
  203. text: '本月设备主轴利用率统计',
  204. top: 35,
  205. left: 20,
  206. textStyle: {
  207. fontSize: 18,
  208. color: '#fff'
  209. }
  210. },
  211. tooltip: {
  212. trigger: 'item',
  213. formatter: "{a} <br/>{b}: {c} ({d}%)",
  214. },
  215. legend: {
  216. right: 20,
  217. top: 35,
  218. data: ['未使用', '主轴利用率'],
  219. textStyle: {
  220. color: '#fff'
  221. }
  222. },
  223. series: [{
  224. name: '设备状态',
  225. type: 'pie',
  226. radius: ['0', '60%'],
  227. center: ['50%', '60%'],
  228. color: ['#e72325', '#98e002', '#2ca3fd'],
  229. label: {
  230. normal: {
  231. formatter: '{b}\n{d}%'
  232. },
  233. },
  234. data: [{
  235. value: difAvgDeviceRate,
  236. name: '未使用'
  237. },
  238. {
  239. value: avgDeviceRate,
  240. name: '主轴利用率',
  241. selected: true
  242. }
  243. ]
  244. }]
  245. };
  246. // 使用刚指定的配置项和数据显示图表。
  247. myChart.setOption(option);
  248. window.addEventListener("resize", function () {
  249. myChart.resize();
  250. });
  251. }
  252. function echart_2() {
  253. // 基于准备好的dom,初始化echarts实例
  254. var myChart = echarts.init(document.getElementById('chart_2'));
  255. var data = {
  256. id: 'multipleBarsLines',
  257. title: '近一年主轴利用率占比',
  258. legendBar: ['正面占比', '中立占比', '负面占比'],
  259. symbol: '', //数值是否带百分号 --默认为空 ''
  260. legendLine: ['同期对比'],
  261. xAxis: yearMonthList,
  262. yAxis: [
  263. avgYearMonth
  264. ],
  265. barColor: ['#3FA7DC', '#7091C4', '#5170A2'], //柱子颜色 必填参数
  266. lineColor: ['#D9523F'], // 折线颜色
  267. };
  268. /////////////end/////////
  269. var myData = (function test() {
  270. var yAxis = data.yAxis || [];
  271. var lines = data.lines || [];
  272. var legendBar = data.legendBar || [];
  273. var legendLine = data.legendLine || [];
  274. var symbol = data.symbol || ' ';
  275. var seriesArr = [];
  276. var legendArr = [];
  277. yAxis && yAxis.forEach((item, index) => {
  278. legendArr.push({
  279. name: legendBar && legendBar.length > 0 && legendBar[index]
  280. });
  281. seriesArr.push({
  282. name: legendBar && legendBar.length > 0 && legendBar[index],
  283. type: 'bar',
  284. barGap: '0.5px',
  285. data: item,
  286. barWidth: data.barWidth || 12,
  287. label: {
  288. normal: {
  289. show: true,
  290. formatter: '{c}' + symbol,
  291. position: 'top',
  292. textStyle: {
  293. color: '#fff',
  294. fontStyle: 'normal',
  295. fontFamily: '微软雅黑',
  296. textAlign: 'left',
  297. fontSize: 11,
  298. },
  299. },
  300. },
  301. itemStyle: { //图形样式
  302. normal: {
  303. barBorderRadius: 4,
  304. color: data.barColor[index]
  305. },
  306. }
  307. });
  308. });
  309. lines && lines.forEach((item, index) => {
  310. legendArr.push({
  311. name: legendLine && legendLine.length > 0 && legendLine[index]
  312. })
  313. seriesArr.push({
  314. name: legendLine && legendLine.length > 0 && legendLine[index],
  315. type: 'line',
  316. data: item,
  317. itemStyle: {
  318. normal: {
  319. color: data.lineColor[index],
  320. lineStyle: {
  321. width: 3,
  322. type: 'solid',
  323. }
  324. }
  325. },
  326. label: {
  327. normal: {
  328. show: false, //折线上方label控制显示隐藏
  329. position: 'top',
  330. }
  331. },
  332. symbol: 'circle',
  333. symbolSize: 10
  334. });
  335. });
  336. return {
  337. seriesArr,
  338. legendArr
  339. };
  340. })();
  341. option = {
  342. title: {
  343. show: true,
  344. top: '10%',
  345. left: '3%',
  346. text: data.title,
  347. textStyle: {
  348. fontSize: 18,
  349. color: '#fff'
  350. },
  351. subtext: data.subTitle,
  352. link: ''
  353. },
  354. tooltip: {
  355. trigger: 'axis',
  356. formatter: function (params) {
  357. var time = '';
  358. var str = '';
  359. for (var i of params) {
  360. time = i.name.replace(/\n/g, '') + '<br/>';
  361. if (i.data == 'null' || i.data == null) {
  362. str += i.seriesName + ':无数据' + '<br/>'
  363. } else {
  364. str += i.seriesName + ':' + i.data + symbol + '%<br/>'
  365. }
  366. }
  367. return time + str;
  368. },
  369. axisPointer: {
  370. type: 'none'
  371. },
  372. },
  373. legend: {
  374. right: data.legendRight || '30%',
  375. top: '12%',
  376. right: '5%',
  377. itemGap: 16,
  378. itemWidth: 10,
  379. itemHeight: 10,
  380. data: myData.legendArr,
  381. textStyle: {
  382. color: '#fff',
  383. fontStyle: 'normal',
  384. fontFamily: '微软雅黑',
  385. fontSize: 12,
  386. }
  387. },
  388. grid: {
  389. x: 30,
  390. y: 80,
  391. x2: 30,
  392. y2: 60,
  393. },
  394. xAxis: {
  395. type: 'category',
  396. data: data.xAxis,
  397. axisTick: {
  398. show: false,
  399. },
  400. axisLine: {
  401. show: true,
  402. lineStyle: {
  403. color: '#1AA1FD',
  404. },
  405. symbol: ['none', 'arrow']
  406. },
  407. axisLabel: {
  408. show: true,
  409. interval: '0',
  410. textStyle: {
  411. lineHeight: 16,
  412. padding: [2, 2, 0, 2],
  413. height: 50,
  414. fontSize: 12,
  415. },
  416. rich: {
  417. Sunny: {
  418. height: 50,
  419. // width: 60,
  420. padding: [0, 5, 0, 5],
  421. align: 'center',
  422. },
  423. },
  424. formatter: function (params, index) {
  425. var newParamsName = "";
  426. var splitNumber = 5;
  427. var paramsNameNumber = params && params.length;
  428. if (paramsNameNumber && paramsNameNumber <= 4) {
  429. splitNumber = 4;
  430. } else if (paramsNameNumber >= 5 && paramsNameNumber <= 7) {
  431. splitNumber = 4;
  432. } else if (paramsNameNumber >= 8 && paramsNameNumber <= 9) {
  433. splitNumber = 5;
  434. } else if (paramsNameNumber >= 10 && paramsNameNumber <= 14) {
  435. splitNumber = 5;
  436. } else {
  437. params = params && params.slice(0, 15);
  438. }
  439. var provideNumber = splitNumber; //一行显示几个字
  440. var rowNumber = Math.ceil(paramsNameNumber / provideNumber) || 0;
  441. if (paramsNameNumber > provideNumber) {
  442. for (var p = 0; p < rowNumber; p++) {
  443. var tempStr = "";
  444. var start = p * provideNumber;
  445. var end = start + provideNumber;
  446. if (p == rowNumber - 1) {
  447. tempStr = params.substring(start, paramsNameNumber);
  448. } else {
  449. tempStr = params.substring(start, end) + "\n";
  450. }
  451. newParamsName += tempStr;
  452. }
  453. } else {
  454. newParamsName = params;
  455. }
  456. params = newParamsName;
  457. return '{Sunny|' + params + '}';
  458. },
  459. color: '#1AA1FD',
  460. },
  461. },
  462. yAxis: {
  463. axisLine: {
  464. show: true,
  465. lineStyle: {
  466. color: '#1AA1FD',
  467. },
  468. symbol: ['none', 'arrow']
  469. },
  470. type: 'value',
  471. axisTick: {
  472. show: false
  473. },
  474. axisLabel: {
  475. show: false
  476. },
  477. splitLine: {
  478. show: false,
  479. lineStyle: {
  480. color: '#1AA1FD',
  481. type: 'solid'
  482. },
  483. }
  484. },
  485. series: myData.seriesArr
  486. }
  487. // 使用刚指定的配置项和数据显示图表。
  488. myChart.setOption(option);
  489. window.addEventListener("resize", function () {
  490. myChart.resize();
  491. });
  492. }
  493. function echart_4() {
  494. // 基于准备好的dom,初始化echarts实例
  495. var myChart = echarts.init(document.getElementById('chart_4'));
  496. var data = echart4date;
  497. var titlename = echart4titlename;
  498. var valdata =[];
  499. for(let i=0;i<echart4date.length;i++){
  500. valdata.push(100);
  501. }
  502. var myColor = ['#1089E7', '#F57474', '#56D0E3', '#F8B448', '#8B78F6'];
  503. option = {
  504. title: {
  505. text: '主轴利用率',
  506. x: 'center',
  507. textStyle: {
  508. color: '#FFF'
  509. },
  510. left: '6%',
  511. top: '10%'
  512. },
  513. //图标位置
  514. grid: {
  515. top: '20%',
  516. left: '32%'
  517. },
  518. xAxis: {
  519. show: false
  520. },
  521. yAxis: [{
  522. show: true,
  523. data: titlename,
  524. inverse: true,
  525. axisLine: {
  526. show: false
  527. },
  528. splitLine: {
  529. show: false
  530. },
  531. axisTick: {
  532. show: false
  533. },
  534. axisLabel: {
  535. color: '#fff',
  536. formatter: (value, index) => {
  537. return [
  538. `{lg|${index+1}} ` + '{title|' + value + '} '
  539. ].join('\n')
  540. },
  541. rich: {
  542. lg: {
  543. backgroundColor: '#339911',
  544. color: '#fff',
  545. borderRadius: 15,
  546. // padding: 5,
  547. align: 'center',
  548. width: 15,
  549. height: 15
  550. },
  551. }
  552. },
  553. }, {
  554. show: true,
  555. inverse: true,
  556. data: valdata,
  557. axisLabel: {
  558. textStyle: {
  559. fontSize: 12,
  560. color: '#fff',
  561. },
  562. },
  563. axisLine: {
  564. show: false
  565. },
  566. splitLine: {
  567. show: false
  568. },
  569. axisTick: {
  570. show: false
  571. },
  572. }],
  573. series: [{
  574. name: '条',
  575. type: 'bar',
  576. yAxisIndex: 0,
  577. data: data,
  578. barWidth: 10,
  579. itemStyle: {
  580. normal: {
  581. barBorderRadius: 20,
  582. color: function(params) {
  583. var num = myColor.length;
  584. return myColor[params.dataIndex % num]
  585. },
  586. }
  587. },
  588. label: {
  589. normal: {
  590. show: true,
  591. position: 'inside',
  592. formatter: '{c}%'
  593. }
  594. },
  595. }, {
  596. name: '框',
  597. type: 'bar',
  598. yAxisIndex: 1,
  599. barGap: '-100%',
  600. data: valdata,
  601. barWidth: 15,
  602. itemStyle: {
  603. normal: {
  604. color: 'none',
  605. borderColor: '#00c1de',
  606. borderWidth: 3,
  607. barBorderRadius: 15,
  608. }
  609. }
  610. }, ]
  611. };
  612. // 使用刚指定的配置项和数据显示图表。
  613. myChart.setOption(option);
  614. // window.addEventListener("resize", function () {
  615. // myChart.resize();
  616. // });
  617. }
  618. </script>
  619. </html>