From a2eb2511f620956dbb5d36742f1d0ffda034f090 Mon Sep 17 00:00:00 2001
From: Junjie <DELL@qq.com>
Date: 星期四, 15 一月 2026 16:07:28 +0800
Subject: [PATCH] #

---
 src/main/webapp/views/index.html |  318 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 301 insertions(+), 17 deletions(-)

diff --git a/src/main/webapp/views/index.html b/src/main/webapp/views/index.html
index e7e5e93..f970799 100644
--- a/src/main/webapp/views/index.html
+++ b/src/main/webapp/views/index.html
@@ -1,11 +1,13 @@
 <!DOCTYPE html>
 <html lang="en">
+
 <head>
   <meta charset="utf-8">
-  <title>娴欐睙涓壃 - 鑷姩鍖栫珛浣撲粨搴� - AS / RS</title>
+  <title>娴欐睙涓壃 - 鑷姩鍖栫珛浣撲粨搴� - WCS</title>
   <meta name="renderer" content="webkit">
   <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+  <meta name="viewport"
+        content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
   <link rel="stylesheet" href="../static/layui/css/layui.css" media="all">
   <link rel="stylesheet" href="../static/css/admin.css?v=318" media="all">
   <link rel="stylesheet" href="../static/css/loader.css" media="all">
@@ -13,13 +15,73 @@
     .layui-logo img {
       width: 25px;
     }
+
     .layui-logo cite {
       font-size: 18px;
       font-weight: 400;
       /*margin-left: 5px;*/
     }
+
+    /* 寮圭獥鏍峰紡 */
+    .popup {
+      position: fixed;
+      top: 0;
+      left: 0;
+      width: 100%;
+      height: 100%;
+      background-color: rgba(0, 0, 0, 0.5);
+      display: none;
+      justify-content: center;
+      align-items: center;
+      z-index: 9999;
+    }
+
+    .popup-content {
+      background-color: #fff;
+      padding: 20px;
+      border-radius: 5px;
+      box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.3);
+      text-align: center;
+    }
+
+    /* AI鍔╂墜鎶藉眽鍔ㄧ敾 */
+    @keyframes slideInRight {
+      from {
+        transform: translate3d(100%, 0, 0);
+        opacity: 0;
+      }
+
+      to {
+        transform: translate3d(0, 0, 0);
+        opacity: 1;
+      }
+    }
+
+    @keyframes slideOutRight {
+      from {
+        transform: translate3d(0, 0, 0);
+        opacity: 1;
+      }
+
+      to {
+        transform: translate3d(100%, 0, 0);
+        opacity: 0;
+      }
+    }
+
+    .ai-drawer-layer {
+      box-shadow: -8px 0 24px rgba(0, 0, 0, 0.15) !important;
+      border-radius: 8px 0 0 8px !important;
+      overflow: hidden;
+      animation: slideInRight 0.5s cubic-bezier(0.16, 1, 0.3, 1);
+    }
+
+    .ai-drawer-layer-close {
+      animation: slideOutRight 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards !important;
+    }
   </style>
 </head>
+
 <body class="layui-layout-body">
 <div class="layui-layout layui-layout-admin">
   <!-- 澶撮儴 -->
@@ -40,11 +102,15 @@
       </li>
     </ul>
     <ul class="layui-nav layui-layout-right">
-<!--      <li class="layui-nav-item" lay-unselect>-->
-<!--        <a ew-event="note" title="渚跨"><i class="layui-icon layui-icon-note"></i></a>-->
-<!--      </li>-->
+      <!--      <li class="layui-nav-item" lay-unselect>-->
+      <!--        <a ew-event="note" title="渚跨"><i class="layui-icon layui-icon-note"></i></a>-->
+      <!--      </li>-->
+      <li class="layui-nav-item" lay-unselect id="fakeShow"
+          style="display: none;user-select: none;margin-right: 10px;">
+        <div style="color: red;" id="fakeShowText">浠跨湡妯℃嫙杩愯涓�</div>
+      </li>
       <li class="layui-nav-item" lay-unselect id="licenseShow" style="display: none;user-select: none;">
-        <div style="color: red;">璁稿彲璇佹湁鏁堟湡锛�<span id="licenseDays">29</span>澶�</div>
+        <div style="color: red;">涓存椂璁稿彲璇佹湁鏁堟湡锛�<span id="licenseDays">29</span>澶�</div>
       </li>
       <li class="layui-nav-item layui-hide-xs" lay-unselect>
         <a ew-event="fullScreen" title="鍏ㄥ睆"><i class="layui-icon layui-icon-screen-full"></i></a>
@@ -77,8 +143,8 @@
   <div class="layui-body"></div>
   <!-- 搴曢儴 -->
   <div class="layui-footer layui-text">
-    copyright 漏 2023 娴欐睙涓壃绔嬪簱鎶�鏈湁闄愬叕鍙� all rights reserved.
-    <span class="pull-right">Version 1.0.0</span>
+    copyright 漏 2026 娴欐睙涓壃绔嬪簱鎶�鏈湁闄愬叕鍙� all rights reserved.
+    <span class="pull-right" id="system-version">Version loading...</span>
   </div>
 
 </div>
@@ -88,17 +154,88 @@
   <div class="layuimini-loader-inner"></div>
 </div>
 
+<!-- 寮圭獥鍐呭 -->
+<div class="popup" id="popup">
+  <div class="popup-content">
+    <h2 style="font-size: 28px;margin-bottom: 10px;">璁稿彲璇佸嵆灏嗚繃鏈�</h2>
+    <div id="popup-text" style="font-size: 28px;color: red"></div>
+    <button
+            style="background-color: #007bff;color: #fff;border: none;padding: 10px 20px;border-radius: 5px;cursor: pointer;font-size: 16px;"
+            onclick="hidePopup()">鍏抽棴</button>
+  </div>
+</div>
+
+<!-- 鍙充笅瑙扴VG鍔ㄧ敾 -->
+<div id="ai-assistant-btn" style="position: fixed; bottom: 40px; right: 20px; z-index: 9999; cursor: pointer;">
+</div>
+
 <script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
 <script type="text/javascript" src="../static/layui/layui.js"></script>
 <script type="text/javascript" src="../static/js/handlebars/handlebars-v4.5.3.js"></script>
 <script type="text/javascript" src="../static/js/common.js"></script>
 <script>
-  console.log('%c 涓壃绔嬪簱骞冲彴 %c 1.0.0','background-color:rgb(53,73,94);color: #fff;border-radius:2px 0 0 2px;padding:2px 4px;','background-color:rgb(25,190,107);color: #fff;border-radius:0 2px 2px 0;padding:2px 4px;font: 9pt "Apercu Regular", Georgia, "Times New Roman", Times, serif;');
+  // 鐗堟湰淇℃伅鍙橀噺
+  var systemVersion = '...';
+  var systemVersionType = '';
+
+  // 鍔犺浇绯荤粺鐗堟湰淇℃伅
+  function loadSystemVersion() {
+    $.ajax({
+      url: baseUrl + "/openapi/getSystemVersion",
+      headers: { 'token': localStorage.getItem('token') },
+      method: 'GET',
+      success: function (res) {
+        if (res.code === 200) {
+          systemVersion = res.data.version;
+          systemVersionType = res.data.versionType;
+          var versionTypeLabel = systemVersionType === 'stable' ? '' : ' (' + systemVersionType + ')';
+          var versionTypeColor = systemVersionType === 'stable' ? 'rgb(25,190,107)' : 'rgb(245,166,35)';
+
+          // 鏇存柊椤佃剼鐗堟湰鏄剧ず
+          $('#system-version').html('Version ' + systemVersion + '<span style="margin-left:5px;padding:1px 6px;font-size:12px;border-radius:3px;background-color:' + versionTypeColor + ';color:#fff;">' + systemVersionType + '</span>');
+
+          // 鎺у埗鍙拌緭鍑虹増鏈俊鎭�
+          console.log('%c 涓壃绔嬪簱骞冲彴 %c ' + systemVersion + ' %c ' + systemVersionType + ' ', 'background-color:rgb(53,73,94);color: #fff;border-radius:2px 0 0 2px;padding:2px 4px;', 'background-color:rgb(25,190,107);color: #fff;padding:2px 4px;font: 9pt "Apercu Regular", Georgia, "Times New Roman", Times, serif;', 'background-color:' + versionTypeColor + ';color: #fff;border-radius:0 2px 2px 0;padding:2px 4px;font: 9pt "Apercu Regular", Georgia, "Times New Roman", Times, serif;');
+        }
+      }
+    });
+  }
+
   $(function () {
+    // 娉ㄥ叆AI鍔╂墜鍥炬爣
+    $('#ai-assistant-btn').html(getAiIconHtml(60, 60));
+
     if ("" === localStorage.getItem('token')) {
       top.location.href = baseUrl + "/login";
     }
+
+    // 鍔犺浇鐗堟湰淇℃伅
+    loadSystemVersion();
   });
+
+  // 鏄剧ず寮圭獥
+  function showPopup(res) {
+    document.getElementById('popup').style.display = 'block';
+    // 鑾峰彇寮瑰嚭绐楀彛鍐呭鐨勫鍣ㄥ厓绱�
+    var popupText = document.getElementById('popup-text');
+    // 鍋囪鍚庡彴杩斿洖鐨勫瓧绗︿覆涓� responseString
+    if (res !== "") {
+      // 鑾峰彇褰撳墠鏃ユ湡
+      const currentDate = new Date();
+      // 鍒涘缓鏂版棩鏈熷璞″苟娣诲姞澶╂暟
+      const newDate = new Date();
+      newDate.setDate(currentDate.getDate() + res + 1);
+      // 灏嗗瓧绗︿覆璁剧疆涓哄脊绐楀唴瀹圭殑鏂囨湰
+      popupText.textContent = "璁稿彲璇佸皢浜�" + new Intl.DateTimeFormat('zh-CN').format(newDate) + "杩囨湡锛屽墿浣欐湁鏁堟湡:" + res + "澶╋紒";
+    } else {
+      document.getElementById('popup').style.display = 'none';
+    }
+  }
+
+  // 闅愯棌寮圭獥
+  function hidePopup() {
+    document.getElementById('popup').style.display = 'none';
+  }
 
   layui.config({
     base: baseUrl + "/static/layui/lay/modules/"
@@ -120,9 +257,83 @@
       }
     }
 
+    let fakeRunning = false
+    let fakeStatusInterval = null
+    function checkFakeStatus() {
+      $.ajax({
+        url: baseUrl + "/openapi/getFakeSystemRunStatus",
+        headers: { 'token': localStorage.getItem('token') },
+        method: 'GET',
+        success: function (res) {
+          if (res.code === 200) {
+            if (res.data.isFake) {
+              $("#fakeShow").show()
+              let running = res.data.running
+              if (running) {
+                $("#fakeShowText").text("浠跨湡妯℃嫙杩愯涓�")
+              } else {
+                $("#fakeShowText").text("浠跨湡妯℃嫙鏈繍琛�")
+              }
+              fakeRunning = running
+              if (!fakeStatusInterval) {
+                fakeStatusInterval = setInterval(checkFakeStatus, 1000);
+              }
+            } else {
+              $("#fakeShow").hide()
+              if (fakeStatusInterval) {
+                clearInterval(fakeStatusInterval);
+                fakeStatusInterval = null;
+              }
+            }
+          } else {
+            top.location.href = baseUrl + "/login";
+          }
+        }
+      });
+    }
+    checkFakeStatus();
+
+    $("#fakeShow").on("click", function () {
+      if (fakeRunning) {
+        layer.confirm('纭畾瑕佸仠姝豢鐪熸ā鎷熷悧锛�', function (index) {
+          layer.close(index);
+          $.ajax({
+            url: baseUrl + "/openapi/stopFakeSystem",
+            headers: { 'token': localStorage.getItem('token') },
+            method: 'POST',
+            success: function (res) {
+              if (res.code === 200) {
+                layer.msg("浠跨湡妯℃嫙宸插仠姝�", { icon: 1 });
+                $("#fakeShowText").text("浠跨湡妯℃嫙鏈繍琛�")
+              } else {
+                layer.msg(res.msg, { icon: 2 });
+              }
+            }
+          });
+        });
+      } else {
+        layer.confirm('纭畾瑕佸惎鍔ㄤ豢鐪熸ā鎷熷悧锛�', function (index) {
+          layer.close(index);
+          $.ajax({
+            url: baseUrl + "/openapi/startFakeSystem",
+            headers: { 'token': localStorage.getItem('token') },
+            method: 'POST',
+            success: function (res) {
+              if (res.code === 200) {
+                layer.msg("浠跨湡妯℃嫙宸插惎鍔�", { icon: 1 });
+                $("#fakeShowText").text("浠跨湡妯℃嫙杩愯涓�")
+              } else {
+                layer.msg(res.msg, { icon: 2 });
+              }
+            }
+          });
+        });
+      }
+    });
+
     $.ajax({
       url: baseUrl + "/menu/auth",
-      headers: {'token': localStorage.getItem('token')},
+      headers: { 'token': localStorage.getItem('token') },
       method: 'POST',
       // async: false,
       success: function (res) {
@@ -137,14 +348,14 @@
         } else if (res.code === 403) {
           top.location.href = baseUrl + "/login";
         } else {
-          layer.msg(res.msg, {icon: 2});
+          layer.msg(res.msg, { icon: 2 });
         }
       }
     });
 
     $.ajax({
       url: baseUrl + "/license/getLicenseDays",
-      headers: {'token': localStorage.getItem('token')},
+      headers: { 'token': localStorage.getItem('token') },
       method: 'POST',
       success: function (res) {
         if (res.code == 200) {
@@ -153,7 +364,15 @@
             $("#licenseShow").show()
             $("#licenseDays").html(days)
           }
-        }else {
+
+          if (days <= 15) {
+            showPopup(days)
+          }
+
+          if (days < 0) {
+            top.location.href = baseUrl + "/login";
+          }
+        } else {
           top.location.href = baseUrl + "/login";
         }
       }
@@ -161,13 +380,13 @@
 
     // 榛樿鍔犺浇涓婚〉
     index.loadHome({
-      menuPath: baseUrl+'/views/watch/console.html',
+      menuPath: baseUrl + '/views/watch/console.html',
       menuName: '<i class="layui-icon layui-icon-home"></i>'
     });
 
     $('#username').text(localStorage.getItem('username'));
 
-    $(document).on('click','#logout', function () {
+    $(document).on('click', '#logout', function () {
       window.location.href = "login.html";
       localStorage.removeItem('token');
       localStorage.removeItem('username');
@@ -178,6 +397,72 @@
     var logout = document.getElementById('logout');
     var url = logout.getAttribute('href');
     logout.setAttribute('href', baseUrl + "/login");
+
+    // AI鍔╂墜寮圭獥绱㈠紩
+    var aiLayerIndex = null;
+
+    // AI鍔╂墜鍥炬爣鎮诞鎻愮ず
+    $('#ai-assistant-btn').on('mouseenter', function () {
+      this.index = layer.tips('AI鍔╂墜', this, {
+        tips: [1, '#333'], // 涓婃柟鏄剧ず锛屾繁鑹茶儗鏅�
+        time: -1 // 涓嶈嚜鍔ㄥ叧闂�
+      });
+    }).on('mouseleave', function () {
+      layer.close(this.index);
+    }).on('click', function () {
+      // 濡傛灉宸茬粡鎵撳紑杩囦笖鏈攢姣侊紝鐩存帴鏄剧ず
+      if (aiLayerIndex !== null && $('#layui-layer' + aiLayerIndex).length > 0) {
+        var $layero = $('#layui-layer' + aiLayerIndex);
+        var $shade = $('#layui-layer-shade' + aiLayerIndex);
+
+        // 鏄剧ず骞堕噸缃姸鎬�
+        $shade.show().css('opacity', 0.1);
+        $layero.show();
+
+        // 閲嶆柊瑙﹀彂杩涘叆鍔ㄧ敾
+        $layero.removeClass('ai-drawer-layer-close');
+        $layero.removeClass('ai-drawer-layer');
+        void $layero.get(0).offsetWidth; // 瑙﹀彂閲嶇粯
+        $layero.addClass('ai-drawer-layer');
+        return;
+      }
+
+      layer.open({
+        type: 2,
+        title: false, // 闅愯棌榛樿鏍囬鏍忥紝鏇寸畝娲�
+        closeBtn: 0, // 闅愯棌鍏抽棴鎸夐挳锛岀偣鍑婚伄缃╁叧闂�
+        shadeClose: false, // 鏀逛负鎵嬪姩鎺у埗鍏抽棴锛屼互渚挎挱鏀惧姩鐢�
+        shade: 0.1,
+        area: ['600px', '100%'],
+        offset: 'r', // 鍙充晶鎮诞
+        anim: -1, // 绂佺敤榛樿鍔ㄧ敾锛屼娇鐢–SS鍔ㄧ敾
+        isOutAnim: false,
+        skin: 'ai-drawer-layer', // 鑷畾涔夌毊鑲�
+        content: 'ai/diagnosis.html',
+        success: function (layero, index) {
+          aiLayerIndex = index; // 璁板綍绱㈠紩
+
+          // 鑳屾櫙妯$硦鏁堟灉
+          var shadeId = layero.attr('id').replace('layui-layer', 'layui-layer-shade');
+          var $shade = $('#' + shadeId);
+          $shade.css({
+            'backdrop-filter': 'blur(3px)',
+            'transition': 'opacity 0.8s'
+          });
+
+          // 鐐瑰嚮閬僵鍏抽棴锛堝甫鍔ㄧ敾锛�
+          $shade.on('click', function () {
+            layero.addClass('ai-drawer-layer-close');
+            $shade.css('opacity', 0);
+            setTimeout(function () {
+              // layer.close(index); // 涓嶉攢姣侊紝鏀逛负闅愯棌
+              layero.hide();
+              $shade.hide();
+            }, 400);
+          });
+        }
+      });
+    });
 
   });
 </script>
@@ -194,6 +479,5 @@
   {{/each}}
 </script>
 </body>
-</html>
 
-
+</html>
\ No newline at end of file

--
Gitblit v1.9.1