- 新增 /device-logs 设备事件日志管理页 (admin 权限) - 支持按设备序列号/事件类型筛选查询 - 支持 admin 按条件删除日志 - 不同事件类型彩色标识 (在线=绿, 离线=红, 通信不良=橙) - 新增 /api/devices/<id>/status 设备状态 API - 设备列表页:每 5s 异步刷新所有设备在线状态 - 测试操作页:顶部显示设备状态,每 5s 异步刷新 - dnt_info state 支持三态显示 (在线/离线/通信不良) - 导航栏增加「设备日志」入口 (admin only)
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""设备事件日志 API"""
|
||
|
||
from flask import Blueprint, jsonify, render_template, request
|
||
from flask_login import login_required, current_user
|
||
from app.models import get_device_logs, delete_device_logs, insert_log
|
||
|
||
bp = Blueprint("device_logs", __name__)
|
||
|
||
|
||
@bp.route("/device-logs")
|
||
@login_required
|
||
def index():
|
||
"""设备日志页面"""
|
||
return render_template("device_logs.html")
|
||
|
||
|
||
@bp.route("/api/device-logs")
|
||
@login_required
|
||
def api_device_logs():
|
||
"""查询设备事件日志"""
|
||
page = request.args.get("page", 1, type=int)
|
||
per_page = request.args.get("per_page", 30, type=int)
|
||
serial = request.args.get("serial", "", type=str)
|
||
event_type = request.args.get("event_type", "", type=str)
|
||
|
||
records, total = get_device_logs(
|
||
page=page, per_page=per_page,
|
||
serial=serial, event_type=event_type,
|
||
)
|
||
pages = max(1, (total + per_page - 1) // per_page)
|
||
return jsonify({"records": records, "total": total, "pages": pages})
|
||
|
||
|
||
@bp.route("/api/device-logs/delete", methods=["POST"])
|
||
@login_required
|
||
def api_device_logs_delete():
|
||
"""删除设备日志(admin 权限)"""
|
||
if current_user.role != "admin":
|
||
return jsonify({"ok": False, "error": "无权限"}), 403
|
||
|
||
data = request.get_json()
|
||
serial = data.get("serial", "")
|
||
event_type = data.get("event_type", "")
|
||
date_from = data.get("date_from", "")
|
||
date_to = data.get("date_to", "")
|
||
|
||
deleted = delete_device_logs(
|
||
serial=serial, event_type=event_type,
|
||
date_from=date_from, date_to=date_to,
|
||
)
|
||
insert_log(
|
||
current_user.id, current_user.username, "delete",
|
||
target="device_log",
|
||
detail=f"删除 {deleted} 条设备日志 serial={serial} type={event_type}",
|
||
result="ok",
|
||
ip=request.remote_addr or "",
|
||
)
|
||
return jsonify({"ok": True, "deleted": deleted})
|