From 63c6838701096548abe910f630d86575e82322a2 Mon Sep 17 00:00:00 2001 From: zstar <65890619+zstar1003@users.noreply.github.com> Date: Fri, 25 Apr 2025 17:20:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=8D=E7=BD=AE=E7=94=A8=E6=88=B7=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E5=8A=9F=E8=83=BD=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在用户管理页面中新增重置用户密码的功能,包括前端对话框、表单验证、API调用以及后端服务层的密码重置逻辑。同时,更新了用户管理页面的操作列,增加了重置密码按钮,并调整了相关UI样式。 --- docker/.env | 3 + management/server/routes/users/routes.py | 39 ++++++- .../server/services/knowledgebases/service.py | 4 +- management/server/services/users/service.py | 57 ++++++++++ .../web/src/common/apis/tables/index.ts | 14 +++ .../web/src/pages/user-management/index.vue | 106 ++++++++++++++++-- management/web/types/auto/components.d.ts | 2 + 7 files changed, 214 insertions(+), 11 deletions(-) diff --git a/docker/.env b/docker/.env index 053aae9..ef91484 100644 --- a/docker/.env +++ b/docker/.env @@ -79,6 +79,9 @@ RAGFLOW_IMAGE=zstar1003/ragflowplus:v0.2.0 # The local time zone. TIMEZONE='Asia/Shanghai' +# 后端允许上传的最大文件大小 +MAX_CONTENT_LENGTH=10737418240 # 10GB + # 管理系统用户名和密码 MANAGEMENT_ADMIN_USERNAME=admin MANAGEMENT_ADMIN_PASSWORD=12345678 diff --git a/management/server/routes/users/routes.py b/management/server/routes/users/routes.py index 68808f8..ee9283c 100644 --- a/management/server/routes/users/routes.py +++ b/management/server/routes/users/routes.py @@ -1,5 +1,5 @@ from flask import jsonify, request -from services.users.service import get_users_with_pagination, delete_user, create_user, update_user +from services.users.service import get_users_with_pagination, delete_user, create_user, update_user, reset_user_password from .. import users_bp @users_bp.route('', methods=['GET']) @@ -71,4 +71,39 @@ def get_current_user(): "roles": ["admin"] }, "message": "获取用户信息成功" - }) \ No newline at end of file + }) + +@users_bp.route('//reset-password', methods=['PUT']) +def reset_password_route(user_id): + """ + 重置用户密码的API端点 + Args: + user_id (str): 需要重置密码的用户ID + Returns: + Response: JSON响应 + """ + try: + data = request.json + new_password = data.get('password') + + # 校验密码是否存在 + if not new_password: + return jsonify({"code": 400, "message": "缺少新密码参数 'password'"}), 400 + + # 调用 service 函数重置密码 + success = reset_user_password(user_id=user_id, new_password=new_password) + + if success: + return jsonify({ + "code": 0, + "message": f"用户密码重置成功" + }) + else: + # service 层可能因为用户不存在或其他原因返回 False + return jsonify({"code": 404, "message": f"用户未找到或密码重置失败"}), 404 + except Exception as e: + # 统一处理异常 + return jsonify({ + "code": 500, + "message": f"重置密码失败: {str(e)}" + }), 500 \ No newline at end of file diff --git a/management/server/services/knowledgebases/service.py b/management/server/services/knowledgebases/service.py index 1af57a1..d670695 100644 --- a/management/server/services/knowledgebases/service.py +++ b/management/server/services/knowledgebases/service.py @@ -229,7 +229,7 @@ class KnowledgebaseService: # 设置默认值 default_parser_config = json.dumps({ - "layout_recognize": "DeepDOC", + "layout_recognize": "MinerU", "chunk_token_num": 512, "delimiter": "\n!?;。;!?", "auto_keywords": 0, @@ -557,7 +557,7 @@ class KnowledgebaseService: # 设置默认值 default_parser_id = "naive" default_parser_config = json.dumps({ - "layout_recognize": "DeepDOC", + "layout_recognize": "MinerU", "chunk_token_num": 512, "delimiter": "\n!?;。;!?", "auto_keywords": 0, diff --git a/management/server/services/users/service.py b/management/server/services/users/service.py index d8e871c..e25e0b6 100644 --- a/management/server/services/users/service.py +++ b/management/server/services/users/service.py @@ -287,4 +287,61 @@ def update_user(user_id, user_data): return True except mysql.connector.Error as err: print(f"更新用户错误: {err}") + return False + +def reset_user_password(user_id, new_password): + """ + 重置指定用户的密码 + Args: + user_id (str): 用户ID + new_password (str): 新的明文密码 + Returns: + bool: 操作是否成功 + """ + try: + conn = mysql.connector.connect(**DB_CONFIG) + cursor = conn.cursor() + + # 加密新密码 + encrypted_password = encrypt_password(new_password) # 使用与创建用户时相同的加密方法 + update_time = int(datetime.now().timestamp() * 1000) + update_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + # 更新用户密码 + update_query = """ + UPDATE user + SET password = %s, update_time = %s, update_date = %s + WHERE id = %s + """ + cursor.execute(update_query, (encrypted_password, update_time, update_date, user_id)) + + # 检查是否有行被更新 + if cursor.rowcount == 0: + conn.rollback() # 如果没有更新,回滚 + cursor.close() + conn.close() + print(f"用户 {user_id} 未找到,密码未更新。") + return False # 用户不存在 + + conn.commit() # 提交事务 + cursor.close() + conn.close() + print(f"用户 {user_id} 密码已成功重置。") + return True + + except mysql.connector.Error as err: + print(f"重置密码时数据库错误: {err}") + # 可以在这里添加更详细的日志记录 + # 如果 conn 存在且打开,尝试回滚 + if 'conn' in locals() and conn.is_connected(): + conn.rollback() + cursor.close() + conn.close() + return False + except Exception as e: + print(f"重置密码时发生未知错误: {e}") + if 'conn' in locals() and conn.is_connected(): + conn.rollback() + cursor.close() + conn.close() return False \ No newline at end of file diff --git a/management/web/src/common/apis/tables/index.ts b/management/web/src/common/apis/tables/index.ts index d2018b9..7a9ed4e 100644 --- a/management/web/src/common/apis/tables/index.ts +++ b/management/web/src/common/apis/tables/index.ts @@ -35,3 +35,17 @@ export function getTableDataApi(params: Tables.TableRequestData) { params }) } + +/** + * 重置用户密码 + * @param userId 用户ID + * @param password 新密码 + * @returns BaseResponse + */ +export function resetPasswordApi(userId: number, password: string) { + return request({ + url: `api/v1/users/${userId}/reset-password`, + method: "put", + data: { password } // 发送新密码 + }) +} diff --git a/management/web/src/pages/user-management/index.vue b/management/web/src/pages/user-management/index.vue index ec30392..692c953 100644 --- a/management/web/src/pages/user-management/index.vue +++ b/management/web/src/pages/user-management/index.vue @@ -1,9 +1,9 @@