From 21c661161976e403865515cd37db2698d24952fb Mon Sep 17 00:00:00 2001
From: root <13910913995@163.com>
Date: Mon, 13 Oct 2025 11:12:05 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E7=99=BB=E5=BD=95?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BF=9D=E8=AF=81=E5=90=8E=E5=8F=B0?=
=?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=AD=A3=E5=B8=B8=E5=90=AF=E5=8A=A8=E5=90=8E?=
=?UTF-8?q?=EF=BC=8C=E6=89=8D=E8=83=BD=E6=AD=A3=E5=B8=B8=E7=99=BB=E5=BD=95?=
=?UTF-8?q?=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
backend/app.py | 120 ++++++++----------
backend/devices/camera_manager.py | 4 +-
frontend/src/renderer/src/views/Detection.vue | 2 +-
frontend/src/renderer/src/views/Login.vue | 36 +++++-
4 files changed, 85 insertions(+), 77 deletions(-)
diff --git a/backend/app.py b/backend/app.py
index 2a5e590a..66dfca7f 100644
--- a/backend/app.py
+++ b/backend/app.py
@@ -242,81 +242,61 @@ def api_health_check():
@app.route('/api/auth/login', methods=['POST'])
def login():
"""用户登录"""
- max_retries = 3
- retry_delay = 1 # 1秒延迟
-
- for attempt in range(max_retries):
- try:
- data = flask_request.get_json()
- username = data.get('username')
- password = data.get('password')
- if not username or not password:
- return jsonify({
- 'success': False,
- 'message': '用户名或密码不能为空'
- }), 400
+ try:
+ data = flask_request.get_json()
+ username = data.get('username')
+ password = data.get('password')
+ if not username or not password:
+ return jsonify({
+ 'success': False,
+ 'message': '用户名或密码不能为空'
+ }), 400
- # 使用数据库验证用户
- user = db_manager.authenticate_user(username, password)
-
- if user:
- # 检查用户是否已激活
- if not user['is_active']:
- return jsonify({
- 'success': False,
- 'message': '账户未激活,请联系管理员审核'
- }), 403
-
- # 构建用户数据
- user_data = {
- 'id': user['id'],
- 'username': user['username'],
- 'name': user['name'],
- 'role': 'admin' if user['user_type'] == 'admin' else 'user',
- 'user_type': user['user_type'],
- 'avatar': ''
- }
-
- # 生成token(实际项目中应使用JWT等安全token)
- token = f"token_{username}_{int(time.time())}"
-
- logger.info(f'用户 {username} 登录成功')
-
- return jsonify({
- 'success': True,
- 'data': {
- 'token': token,
- 'user': user_data
- },
- 'message': '登录成功'
- })
- else:
- logger.warning(f'用户 {username} 登录失败:用户名或密码错误')
+ # 使用数据库验证用户
+ user = db_manager.authenticate_user(username, password)
+
+ if user:
+ # 检查用户是否已激活
+ if not user['is_active']:
return jsonify({
'success': False,
- 'message': '用户名或密码错误'
- }), 401
-
- except Exception as e:
- logger.error(f'登录失败 (尝试 {attempt + 1}/{max_retries}): {e}')
+ 'message': '账户未激活,请联系管理员审核'
+ }), 403
- # 如果是最后一次尝试,直接返回错误
- if attempt == max_retries - 1:
- logger.error(f'登录失败,已达到最大重试次数 ({max_retries})')
- return jsonify({
- 'success': False,
- 'message': '系统异常,请稍后重试'
- }), 500
+ # 构建用户数据
+ user_data = {
+ 'id': user['id'],
+ 'username': user['username'],
+ 'name': user['name'],
+ 'role': 'admin' if user['user_type'] == 'admin' else 'user',
+ 'user_type': user['user_type'],
+ 'avatar': ''
+ }
- # 延迟后重试
- logger.info(f'等待 {retry_delay} 秒后重试...')
- time.sleep(retry_delay)
-
- # 理论上不会执行到这里,但为了安全起见
- return jsonify({
- 'success': False,
- 'message': '系统异常,请稍后重试'
- }), 500
+ # 生成token(实际项目中应使用JWT等安全token)
+ token = f"token_{username}_{int(time.time())}"
+
+ logger.info(f'用户 {username} 登录成功')
+
+ return jsonify({
+ 'success': True,
+ 'data': {
+ 'token': token,
+ 'user': user_data
+ },
+ 'message': '登录成功'
+ })
+ else:
+ logger.warning(f'用户 {username} 登录失败:用户名或密码错误')
+ return jsonify({
+ 'success': False,
+ 'message': '用户名或密码错误'
+ }), 401
+
+ except Exception as e:
+ logger.error(f'登录失败: {e}')
+ return jsonify({'success': False, 'message': '登录失败'}), 500
+
@app.route('/api/auth/register', methods=['POST'])
def register():
diff --git a/backend/devices/camera_manager.py b/backend/devices/camera_manager.py
index 1b8c4dc9..43926695 100644
--- a/backend/devices/camera_manager.py
+++ b/backend/devices/camera_manager.py
@@ -64,7 +64,7 @@ class CameraManager(BaseDevice):
self.backend_name = backend_name
# 额外可调的降采样宽度(不改变外部配置语义,仅内部优化传输)
- self._tx_max_width = int(config.get('tx_max_width', 640))
+ self._tx_max_width = int(config.get('tx_max_width', 1920))
# 流控制
self.streaming_thread = None
@@ -862,7 +862,7 @@ class CameraManager(BaseDevice):
self.fps = config.get('fps', 30)
self.buffer_size = config.get('buffer_size', 1)
self.fourcc = config.get('fourcc', 'MJPG')
- self._tx_max_width = int(config.get('tx_max_width', 640))
+ self._tx_max_width = int(config.get('tx_max_width', 1920))
# 新增:动态更新重连/阈值配置
self.max_reconnect_attempts = int(config.get('max_reconnect_attempts', self.max_reconnect_attempts))
self.reconnect_delay = float(config.get('reconnect_delay', self.reconnect_delay))
diff --git a/frontend/src/renderer/src/views/Detection.vue b/frontend/src/renderer/src/views/Detection.vue
index 455efd6e..30a80595 100644
--- a/frontend/src/renderer/src/views/Detection.vue
+++ b/frontend/src/renderer/src/views/Detection.vue
@@ -565,7 +565,7 @@