v0.7测试

This commit is contained in:
2026-04-15 08:41:44 +08:00
parent a7f491cef6
commit 637f3b665d
7 changed files with 30 additions and 7 deletions

View File

@@ -346,3 +346,14 @@
【修改方式】
- auth_service.py: login 方法返回字典添加 `"student_id": user["student_id"]`
- auth.py: 登录路由 success_response data 字典添加 `"student_id": result.get("student_id")`
- [x] 12.12 批量修复6个管理端/学生端Bug
【目标对象】`backend/models/user.py``backend/routes/admin.py``frontend/assets/js/admin.js``backend/services/conduct_service.py``backend/models/conduct.py``frontend/admin/history.php`
【修改目的】用户报告6个运行时Bug1) 修改密码失败2) 管理端学生列表4223) 添加管理员4044) admin.js报错null5) 历史记录5006) history.php学生列表不完整
【修改方式】
- user.py: get_by_user_id SQL 添加 password_hash 字段(修改密码时验证旧密码需要此字段)
- admin.py: page_size 上限 le=100→le=1000路由 /admin/add→/add, /admin/list→/list避免双重/api/admin前缀
- admin.js: showAddAdminModal 中 addAdminForm.reset() 改为 ?.reset()
- conduct_service.py: get_history 方法开头添加空字符串→None转换
- conduct.py: get_all_records 方法开头添加空字符串→None转换
- history.php: loadStudentsForSelect 传 {page_size: 1000}

View File

@@ -84,6 +84,12 @@ class ConductModel:
end_date: str = None
) -> List[Dict[str, Any]]:
"""获取所有记录(班主任/班长专用)"""
# 空字符串转为None
if start_date == "":
start_date = None
if end_date == "":
end_date = None
sql = """
SELECT cr.*, s.name as student_name, s.student_no, u.real_name as recorder_name
FROM conduct_records cr

View File

@@ -34,9 +34,9 @@ class UserModel:
async def get_by_user_id(user_id: int) -> dict:
"""根据用户ID获取用户"""
sql = """
SELECT user_id, username, real_name, user_type, student_id,
SELECT user_id, username, password_hash, real_name, user_type, student_id,
need_change_password, status
FROM users
FROM users
WHERE user_id = %s
"""
return await execute_one(sql, (user_id,))

View File

@@ -42,7 +42,7 @@ logger = get_logger(__name__)
async def get_students(
request: Request,
page: int = Query(1, ge=1),
page_size: int = Query(20, ge=1, le=100),
page_size: int = Query(20, ge=1, le=1000),
search: Optional[str] = None
):
"""获取所有学生列表(单班级)"""
@@ -328,7 +328,7 @@ async def get_attendance_records(
# ========== 管理员管理 ==========
@router.post("/admin/add")
@router.post("/add")
async def add_admin(request: Request, req: AddAdminRequest):
"""添加管理员(班主任)"""
user = await get_current_user(request)
@@ -357,7 +357,7 @@ async def add_admin(request: Request, req: AddAdminRequest):
return error_response(message=result["message"])
@router.get("/admin/list")
@router.get("/list")
async def get_admins(request: Request):
"""获取管理员列表(班主任)"""
user = await get_current_user(request)

View File

@@ -138,6 +138,12 @@ class ConductService:
end_date: Optional[str] = None
) -> Dict[str, Any]:
"""获取历史记录"""
# 空字符串转为None
if start_date == "":
start_date = None
if end_date == "":
end_date = None
role = await PermissionChecker.get_user_role(user_id)
offset = (page - 1) * page_size

View File

@@ -70,7 +70,7 @@ var currentHistoryPage = 1;
var totalHistoryPages = 1;
async function loadStudentsForSelect() {
const res = await apiGet('/api/admin/students');
const res = await apiGet('/api/admin/students', {page_size: 1000});
if (res && res.success) {
let html = '<option value="">全部</option>';
res.data.students.forEach(s => {

View File

@@ -174,7 +174,7 @@ async function submitAddStudent() {
// 显示添加管理员模态框
function showAddAdminModal() {
document.getElementById('addAdminModal').style.display = 'flex';
document.getElementById('addAdminForm').reset();
document.getElementById('addAdminForm')?.reset();
}
// 提交添加管理员