index.html 24 KB

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