mesHeatProcessBoard.html 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>热加工数据实时看板</title>
  7. <script src="${ctxStatic}/jquery-1.11.3.min.js"></script>
  8. <style>
  9. * { margin: 0; padding: 0; box-sizing: border-box; }
  10. html, body { width: 100%; height: 100%; }
  11. body {
  12. font-family: "Microsoft YaHei", sans-serif;
  13. background: #04122b;
  14. background-image: radial-gradient(circle at 50% 0%, #0a2350 0%, #04122b 60%);
  15. color: #d6e6ff;
  16. overflow: auto;
  17. padding-bottom: 24px;
  18. }
  19. .bd-header {
  20. height: 64px; display: flex; align-items: center; justify-content: center;
  21. position: relative; border-bottom: 1px solid rgba(0,160,255,0.25);
  22. }
  23. .bd-title { font-size: 24px; letter-spacing: 4px; color: #5ad8ff; font-weight: bold; text-shadow: 0 0 12px rgba(0,180,255,0.6); }
  24. .bd-time { position: absolute; right: 24px; font-size: 14px; color: #8fb6e6; }
  25. .bd-status { position: absolute; left: 24px; font-size: 14px; }
  26. .dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin-right: 6px; vertical-align: middle; }
  27. .dot-on { background: #25e29a; box-shadow: 0 0 8px #25e29a; }
  28. .dot-off { background: #ff5a6a; box-shadow: 0 0 8px #ff5a6a; }
  29. .section { margin: 18px 24px 0; }
  30. .section-title { font-size: 16px; color: #7fd6ff; letter-spacing: 2px; margin-bottom: 12px; border-left: 4px solid #2fa8ff; padding-left: 10px; }
  31. .cards { display: flex; flex-wrap: wrap; gap: 14px; }
  32. .card {
  33. flex: 1 1 200px; min-width: 180px; height: 130px; border-radius: 12px;
  34. background: linear-gradient(160deg, rgba(13,45,95,0.9), rgba(8,26,56,0.9));
  35. border: 1px solid rgba(0,160,255,0.35);
  36. display: flex; flex-direction: column; align-items: center; justify-content: center;
  37. position: relative; overflow: hidden;
  38. }
  39. .card::before { content:""; position:absolute; top:0; left:0; right:0; height:3px; background: linear-gradient(90deg, transparent, #2fa8ff, transparent); }
  40. .card-label { font-size: 14px; color: #9cc4f0; margin-bottom: 12px; letter-spacing: 1px; }
  41. .card-value { font-size: 36px; font-weight: bold; color: #41e6c3; line-height: 1; text-shadow: 0 0 14px rgba(65,230,195,0.5); }
  42. .card-unit { font-size: 16px; color: #7fd6ff; margin-left: 4px; }
  43. .tc-pv .card-value { color: #ffb454; text-shadow: 0 0 14px rgba(255,180,84,0.5); }
  44. .tc-sp .card-value { color: #41e6c3; }
  45. .mon-pv .card-value { color: #5ab8ff; }
  46. .mon-sp .card-value { color: #ff7a9c; text-shadow: 0 0 14px rgba(255,122,156,0.5); }
  47. .bd-foot { text-align: center; color: #6f93c4; font-size: 13px; margin-top: 18px; }
  48. </style>
  49. </head>
  50. <body>
  51. <div class="bd-header">
  52. <span class="bd-status"><i id="connDot" class="dot dot-off"></i><span id="connText">未连接</span></span>
  53. <span class="bd-title">热加工数据实时监控看板</span>
  54. <span class="bd-time" id="nowTime"></span>
  55. </div>
  56. <div class="section">
  57. <div class="section-title">一区温度</div>
  58. <div class="cards">
  59. <div class="card tc-pv"><div class="card-label">一区温控 PV</div><div><span class="card-value" id="z1TcPv">--</span><span class="card-unit">℃</span></div></div>
  60. <div class="card tc-sp"><div class="card-label">一区温控 SP</div><div><span class="card-value" id="z1TcSp">--</span><span class="card-unit">℃</span></div></div>
  61. <div class="card mon-pv"><div class="card-label">一区监控 PV</div><div><span class="card-value" id="z1MonPv">--</span><span class="card-unit">℃</span></div></div>
  62. <div class="card mon-sp"><div class="card-label">一区监控 SP</div><div><span class="card-value" id="z1MonSp">--</span><span class="card-unit">℃</span></div></div>
  63. </div>
  64. </div>
  65. <div class="section">
  66. <div class="section-title">二区温度</div>
  67. <div class="cards">
  68. <div class="card tc-pv"><div class="card-label">二区温控 PV</div><div><span class="card-value" id="z2TcPv">--</span><span class="card-unit">℃</span></div></div>
  69. <div class="card tc-sp"><div class="card-label">二区温控 SP</div><div><span class="card-value" id="z2TcSp">--</span><span class="card-unit">℃</span></div></div>
  70. <div class="card mon-pv"><div class="card-label">二区监控 PV</div><div><span class="card-value" id="z2MonPv">--</span><span class="card-unit">℃</span></div></div>
  71. <div class="card mon-sp"><div class="card-label">二区监控 SP</div><div><span class="card-value" id="z2MonSp">--</span><span class="card-unit">℃</span></div></div>
  72. </div>
  73. </div>
  74. <div class="section">
  75. <div class="section-title">主驱动 / 产量 / 风机</div>
  76. <div class="cards">
  77. <div class="card tc-pv"><div class="card-label">主驱动运行频率</div><div><span class="card-value" id="runFreq">--</span><span class="card-unit">Hz</span></div></div>
  78. <div class="card tc-sp"><div class="card-label">主驱动设定频率</div><div><span class="card-value" id="setFreq">--</span><span class="card-unit">Hz</span></div></div>
  79. <div class="card mon-pv"><div class="card-label">入炉数</div><div><span class="card-value" id="furnaceCount">--</span></div></div>
  80. <div class="card mon-sp"><div class="card-label">风机转速-一区</div><div><span class="card-value" id="fan1">--</span></div></div>
  81. <div class="card mon-sp"><div class="card-label">风机转速-二区</div><div><span class="card-value" id="fan2">--</span></div></div>
  82. </div>
  83. </div>
  84. <div class="bd-foot">最近更新时间:<span id="dataTime">--</span> | 每 5 秒自动刷新</div>
  85. <script>
  86. var CTX = "${ctx}";
  87. function pad(n){ return n < 10 ? '0'+n : ''+n; }
  88. function updateClock(){
  89. var d = new Date();
  90. document.getElementById('nowTime').textContent =
  91. d.getFullYear()+'-'+pad(d.getMonth()+1)+'-'+pad(d.getDate())+' '+pad(d.getHours())+':'+pad(d.getMinutes())+':'+pad(d.getSeconds());
  92. }
  93. function setConn(ok){
  94. var dot = document.getElementById('connDot'), txt = document.getElementById('connText');
  95. if(ok){ dot.className='dot dot-on'; txt.textContent='采集正常'; }
  96. else { dot.className='dot dot-off'; txt.textContent='采集异常 / 无数据'; }
  97. }
  98. function setVal(id, val){
  99. var el = document.getElementById(id);
  100. if(el) el.textContent = (val===null||val===undefined||val==='') ? '--' : val;
  101. }
  102. var MAP = {
  103. z1TcPv: 'zone1TcPv', z1TcSp: 'zone1TcSp', z1MonPv: 'zone1MonPv', z1MonSp: 'zone1MonSp',
  104. z2TcPv: 'zone2TcPv', z2TcSp: 'zone2TcSp', z2MonPv: 'zone2MonPv', z2MonSp: 'zone2MonSp',
  105. runFreq: 'mainDriveRunFreq', setFreq: 'mainDriveSetFreq',
  106. furnaceCount: 'furnaceCount', fan1: 'fanSpeedZone1', fan2: 'fanSpeedZone2'
  107. };
  108. function loadData(){
  109. $.ajax({
  110. url: CTX + '/mes/mesHeatProcess/latestData',
  111. type: 'POST',
  112. dataType: 'json',
  113. success: function(data){
  114. if(!data || !data.id){ setConn(false); return; }
  115. for(var k in MAP){ setVal(k, data[MAP[k]]); }
  116. setVal('dataTime', data.createDate || '--');
  117. setConn(true);
  118. },
  119. error: function(){ setConn(false); }
  120. });
  121. }
  122. $(function(){
  123. updateClock();
  124. setInterval(updateClock, 1000);
  125. loadData();
  126. setInterval(loadData, 5000);
  127. });
  128. </script>
  129. </body>
  130. </html>