diff --git a/templates/admin/monitor.html b/templates/admin/monitor.html
index 388511e..6f3756c 100644
--- a/templates/admin/monitor.html
+++ b/templates/admin/monitor.html
@@ -452,6 +452,11 @@ async function stopSelectedDevices(){
setTimeout(loadMonitor,500);
}
+// ================== 设备画面查看 ==================
+let _shotTimer=null; // 自动刷新定时器
+let _shotSerial=''; // 当前查看的 serial
+let _shotLoading=false; // 防止并发请求
+
// 打开截图弹窗
function openScreenshot(serial){
_shotSerial=serial;
@@ -493,7 +498,8 @@ function startShotTimer(){
_shotTimer=setInterval(refreshShot,3000);
}
function stopShotTimer(){
- if(_shotTimer){clearInterval(_shotTimer);_shotTimer=null;}
+ // 用 typeof 容错:变量未声明时不报错(避免 closeModal 调用时抛异常导致弹窗关不掉)
+ if(typeof _shotTimer!=='undefined'&&_shotTimer){clearInterval(_shotTimer);_shotTimer=null;}
}
// 取一次截图
@@ -1311,13 +1317,16 @@ function showModal(){
document.getElementById('modal-overlay').classList.add('show');
}
function closeModal(){
- // 清理截图弹窗的自动刷新定时器(避免关闭后后台继续请求)
- stopShotTimer();
- _shotSerial='';
- // 还原弹窗样式(截图弹窗会加 shot-modal,关闭时移除)
- const box=document.getElementById('modal-box');
- if(box)box.classList.remove('shot-modal');
- document.getElementById('modal-overlay').classList.remove('show');
+ // 先关闭弹窗(最重要的一步,确保一定执行)
+ const ov=document.getElementById('modal-overlay');
+ if(ov)ov.classList.remove('show');
+ // 再做清理工作,任何异常都不影响弹窗关闭
+ try{
+ stopShotTimer();
+ _shotSerial='';
+ const box=document.getElementById('modal-box');
+ if(box)box.classList.remove('shot-modal');
+ }catch(e){console.warn('closeModal cleanup error:',e);}
}
// ================== 行内按钮操作(停止/执行/启停等,自动 toast + 刷新)==================
diff --git a/web_server.py b/web_server.py
index 0a9570d..069e756 100644
--- a/web_server.py
+++ b/web_server.py
@@ -15,7 +15,7 @@
import os
import time
-from flask import Flask, jsonify, request, redirect, url_for, render_template, Response
+from flask import Flask, jsonify, request, redirect, url_for, render_template, Response, make_response
from flask_login import (LoginManager, login_user, logout_user,
login_required, current_user)
@@ -55,7 +55,10 @@ def load_user(user_id):
@login_required
def index():
"""单页应用首页。"""
- return render_template("admin/monitor.html")
+ resp = make_response(render_template("admin/monitor.html"))
+ resp.headers["Cache-Control"] = "no-store, no-cache, must-revalidate, max-age=0"
+ resp.headers["Pragma"] = "no-cache"
+ return resp
@app.route("/login", methods=["GET", "POST"])