v2.9update

This commit is contained in:
2026-06-08 10:40:59 +08:00
parent 8d497d73d2
commit 70e7ad8e5e
20 changed files with 162 additions and 74 deletions

View File

@@ -500,11 +500,13 @@ async def add_admin(request: Request, req: AddAdminRequest):
operator_id=user["user_id"]
)
if result["success"]:
is_reactivation = result.get("password") is None
await LogService.write_operation_log(
operator_id=user["user_id"], operator_name=user["real_name"],
operator_role="班主任", operation_type="add_admin",
operator_role="班主任",
operation_type="reactivate_admin" if is_reactivation else "add_admin",
target_type="admin",
details=f"新增管理员: {req.real_name}({req.username}), 角色: {req.role_type}",
details=f"{'重新激活' if is_reactivation else '新增'}管理员: {req.real_name}({req.username}), 角色: {req.role_type}",
ip=request.client.host
)
return success_response(data=result, message="管理员添加成功")
@@ -563,36 +565,43 @@ async def update_admin(request: Request, user_id: int, req: UpdateAdminRequest):
return error_response(message="更新失败或管理员不存在")
@router.delete("/delete/{user_id}")
async def delete_admin(request: Request, user_id: int):
"""删除管理员(班主任)"""
@router.put("/toggle-status/{user_id}")
async def toggle_admin_status(request: Request, user_id: int):
"""启用/禁用管理员(班主任),保留角色记录"""
user = await get_current_user(request)
is_teacher = await PermissionChecker.check_is_teacher(user["user_id"])
if not is_teacher:
return error_response(message="仅班主任可删除管理员", code=403)
return error_response(message="仅班主任可操作", code=403)
# 防止删除自己
# 防止禁用自己
if user_id == user["user_id"]:
return error_response(message="不能删除当前登录的管理员", code=400)
return error_response(message="不能禁用当前登录的管理员", code=400)
from models.admin_role import AdminRoleModel
from models.user import UserModel
# 先删除角色记录
role_deleted = await AdminRoleModel.delete(user_id)
if role_deleted:
# 再删除用户账号(软删除,将状态设为禁用)
await UserModel.update_status(user_id, 0)
await LogService.write_operation_log(
operator_id=user["user_id"], operator_name=user["real_name"],
operator_role="班主任", operation_type="delete_admin",
target_type="admin", target_id=user_id,
details=f"删除管理员: ID={user_id}",
ip=request.client.host
)
return success_response(message="管理员删除成功")
else:
return error_response(message="删除失败或管理员不存在")
target_user = await UserModel.get_by_user_id(user_id)
if not target_user or target_user.get("user_type") != "admin":
return error_response(message="管理员不存在", code=404)
# 检查是否有管理员角色
admin_role = await AdminRoleModel.get_by_user_id(user_id)
if not admin_role:
return error_response(message="该用户无管理员角色", code=400)
new_status = 0 if target_user["status"] == 1 else 1
action_text = "禁用" if new_status == 0 else "启用"
await UserModel.update_status(user_id, new_status)
await LogService.write_operation_log(
operator_id=user["user_id"], operator_name=user["real_name"],
operator_role="班主任", operation_type="toggle_admin_status",
target_type="admin", target_id=user_id,
details=f"{action_text}管理员: {target_user['real_name']}({target_user['username']})",
ip=request.client.host
)
return success_response(message=f"管理员已{action_text}")
@router.post("/reset-password/{user_id}")