Bladeren bron

将系统配置迁移到系统设置页面

dev 1 week geleden
bovenliggende
commit
7658eb5d2e
2 gewijzigde bestanden met toevoegingen van 43 en 75 verwijderingen
  1. 2 75
      web/config.html
  2. 41 0
      web/index.html

+ 2 - 75
web/config.html

@@ -129,44 +129,6 @@ body.rail .logo .t,body.rail .nav-label,body.rail .side-foot .nav-label{display:
       </div>
     </div>
 
-    <div class="card">
-      <h3>系统配置</h3>
-      <div class="form-row">
-        <div class="form-group"><label>RTSP超时(秒)</label><input type="number" id="rtspTimeout" min="1" max="60" value="10"></div>
-        <div class="form-group">
-          <label><input type="checkbox" id="targetEnabled"> 是否启用目标识别</label>
-        </div>
-        <div class="form-group">
-          <label><input type="checkbox" id="poseEnabled"> 是否启用姿态识别</label>
-        </div>
-      </div>
-      <div class="form-row">
-        <div class="form-group">
-          <label>输出通道网格到显示器</label>
-          <select id="gridOutput">
-            <option value="true">启用</option>
-            <option value="false">禁用</option>
-          </select>
-        </div>
-        <div class="form-group">
-          <label>输出钢包位到显示器</label>
-          <select id="steelOutput">
-            <option value="true">启用</option>
-            <option value="false">禁用</option>
-          </select>
-        </div>
-      </div>
-      <div class="form-group">
-        <label>Web视频推流(MJPEG) <span style="color:#e94560" id="mjpegState"></span></label>
-        <select id="mjpegEnabled" onchange="toggleMjpeg()">
-          <option value="true">启用</option>
-          <option value="false">临时关闭(省CPU)</option>
-        </select>
-      </div>
-      <div class="btn-row">
-        <button class="btn btn-primary" onclick="saveSystemConfig()">保存系统配置</button>
-      </div>
-    </div>
   </main>
 </div>
 
@@ -175,35 +137,15 @@ let buckets = [];
 
 async function loadConfig() {
   try {
-    const [modRes, bucketRes, poseRes, statusRes] = await Promise.all([
+    const [modRes, bucketRes] = await Promise.all([
       fetch('/api/module/config'),
-      fetch('/api/buckets'),
-      fetch('/api/pose/status'),
-      fetch('/api/status')
+      fetch('/api/buckets')
     ]);
     const modData = await modRes.json();
     const bucketData = await bucketRes.json();
-    let targetEnabled = true, poseEnabled = true;
-    try {
-      const poseData = await poseRes.json();
-      if (poseData.target_enabled !== undefined) targetEnabled = poseData.target_enabled;
-      if (poseData.pose_cfg_enabled !== undefined) poseEnabled = poseData.pose_cfg_enabled;
-      else if (poseData.pose_enabled !== undefined) poseEnabled = poseData.pose_enabled;
-    } catch (e) {}
-    let gridOutput = true, steelOutput = true;
-    try {
-      const statusData = await statusRes.json();
-      if (statusData.target_enabled !== undefined) targetEnabled = statusData.target_enabled;
-      if (statusData.grid_output !== undefined) gridOutput = statusData.grid_output;
-      if (statusData.steel_output !== undefined) steelOutput = statusData.steel_output;
-    } catch (e) {}
 
     document.getElementById('moduleType').value = modData.module_type || 'RFID';
     document.getElementById('idleTimeout').value = modData.idle_timeout || 5;
-    document.getElementById('targetEnabled').checked = targetEnabled;
-    document.getElementById('poseEnabled').checked = poseEnabled;
-    document.getElementById('gridOutput').value = gridOutput ? 'true' : 'false';
-    document.getElementById('steelOutput').value = steelOutput ? 'true' : 'false';
     onModuleTypeChange();
 
     if (modData.rfid) {
@@ -354,21 +296,6 @@ async function saveModuleConfig() {
   } catch (e) { alert('保存失败: ' + e.message); }
 }
 
-async function saveSystemConfig() {
-  const targetEnabled = document.getElementById('targetEnabled').checked;
-  const poseEnabled = document.getElementById('poseEnabled').checked;
-  const gridOutput = document.getElementById('gridOutput').value === 'true';
-  const steelOutput = document.getElementById('steelOutput').value === 'true';
-  try {
-    await fetch('/api/config', {
-      method: 'POST',
-      headers: {'Content-Type': 'application/json'},
-      body: JSON.stringify({ target_enabled: targetEnabled, pose_enabled: poseEnabled, grid_output: gridOutput, steel_output: steelOutput })
-    });
-    alert('系统配置已保存' + (poseEnabled ? '' : '(姿态识别需重启后生效)'));
-  } catch (e) { alert('保存失败: ' + e.message); }
-}
-
 loadConfig();
 </script>
 </body>

+ 41 - 0
web/index.html

@@ -315,6 +315,19 @@ border-left:3px solid #e94560;padding:8px 10px;margin-bottom:8px;cursor:pointer}
             <button class="btn btn-primary" onclick="saveConfig()">保存参数</button>
           </div>
         </div>
+        <div class="card">
+          <h3>系统配置</h3>
+          <div style="display:flex;gap:10px;flex-wrap:wrap">
+            <div class="form-group" style="flex:1;min-width:180px"><label><input type="checkbox" id="sysTargetEnabled"> 是否启用目标识别</label></div>
+            <div class="form-group" style="flex:1;min-width:180px"><label><input type="checkbox" id="sysPoseEnabled"> 是否启用姿态识别</label></div>
+          </div>
+          <div style="display:flex;gap:10px;flex-wrap:wrap">
+            <div class="form-group" style="flex:1;min-width:180px"><label>输出通道网格到显示器</label><select id="sysGridOutput"><option value="true">启用</option><option value="false">禁用</option></select></div>
+            <div class="form-group" style="flex:1;min-width:180px"><label>输出钢包位到显示器</label><select id="sysSteelOutput"><option value="true">启用</option><option value="false">禁用</option></select></div>
+            <div class="form-group" style="flex:1;min-width:180px"><label>Web视频推流(MJPEG)</label><select id="sysMjpegEnabled" onchange="toggleSystemMjpeg()"><option value="true">启用</option><option value="false">临时关闭(省CPU)</option></select></div>
+          </div>
+          <div class="btn-row" style="margin-top:0"><button class="btn btn-primary" onclick="saveSystemOptions()">保存系统配置</button></div>
+        </div>
         <div class="card">
           <h3>自动重启</h3>
           <div class="form-group" style="display:flex;align-items:center;gap:8px;margin-bottom:8px">
@@ -1302,8 +1315,17 @@ async function loadConfig() {
     if (d.skip_frames !== undefined) document.getElementById('cfgSkip').value = d.skip_frames;
     if (d.conf_thresh !== undefined) document.getElementById('cfgConf').value = d.conf_thresh;
     if (d.alarm_retention_days !== undefined) document.getElementById('cfgRetention').value = d.alarm_retention_days;
+    if (document.getElementById('sysTargetEnabled')) document.getElementById('sysTargetEnabled').checked = d.target_enabled !== false;
+    if (document.getElementById('sysPoseEnabled')) document.getElementById('sysPoseEnabled').checked = d.pose_cfg_enabled !== false;
+    if (document.getElementById('sysGridOutput')) document.getElementById('sysGridOutput').value = d.grid_output === false ? 'false' : 'true';
+    if (document.getElementById('sysSteelOutput')) document.getElementById('sysSteelOutput').value = d.steel_output === false ? 'false' : 'true';
     setSelectedClasses(d.alarm_classes);
   } catch (e) {}
+  try {
+    const r = await fetch('/api/mjpeg/status');
+    const d = await r.json();
+    if (document.getElementById('sysMjpegEnabled')) document.getElementById('sysMjpegEnabled').value = d.enabled === false ? 'false' : 'true';
+  } catch (e) {}
 }
 async function saveConfig() {
   const body = {
@@ -1330,6 +1352,25 @@ async function loadSystemConfig() {
     if (d.reboot_time) document.getElementById('sysRebootTime').value = d.reboot_time;
   } catch (e) {}
 }
+async function saveSystemOptions() {
+  const body = {
+    target_enabled: document.getElementById('sysTargetEnabled').checked,
+    pose_enabled: document.getElementById('sysPoseEnabled').checked,
+    grid_output: document.getElementById('sysGridOutput').value === 'true',
+    steel_output: document.getElementById('sysSteelOutput').value === 'true'
+  };
+  try {
+    const r = await fetch('/api/config', {method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify(body)});
+    const d = await r.json();
+    alert(d.ok ? '系统配置已保存,识别开关重启后生效' : '保存失败');
+  } catch (e) { alert('保存失败'); }
+}
+async function toggleSystemMjpeg() {
+  const enabled = document.getElementById('sysMjpegEnabled').value === 'true';
+  try {
+    await fetch('/api/mjpeg/toggle', {method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify({enabled})});
+  } catch (e) {}
+}
 async function saveSystemConfig() {
   const body = {
     auto_reboot: {