# =========================================== # 班级操行分管理系统 - 管理端路由 # # 开发者: Canglan # 联系方式: admin@sea-studio.top # 版权归属: Sea Network Technology Studio # 许可证: MIT License # # 版权所有 © Sea Network Technology Studio # =========================================== # 在 admin.py 中修改导入接口 @router.post("/students/import") async def import_students( request: Request, file: UploadFile = File(...) ): """ 批量导入学生(JSON格式) 初始操行分默认为60分 """ 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) # 检查文件大小 file_size = 0 content = await file.read() file_size = len(content) if file_size > settings.MAX_UPLOAD_SIZE: return error_response(message=f"文件大小不能超过{settings.MAX_UPLOAD_SIZE // 1024 // 1024}MB") # 检查文件扩展名 filename = file.filename or "" extension = filename.split('.')[-1].lower() if '.' in filename else '' if extension not in settings.ALLOWED_EXTENSIONS: return error_response(message=f"不支持的文件类型,仅支持 {', '.join(settings.ALLOWED_EXTENSIONS)}") # 解析JSON try: import json data = json.loads(content.decode('utf-8')) students = data.get("students", []) except json.JSONDecodeError as e: return error_response(message=f"JSON格式错误: {str(e)}") except UnicodeDecodeError: return error_response(message="文件编码错误,请使用UTF-8编码") if not students: return error_response(message="文件中没有学生数据") # 导入学生(初始操行分60分) result = await AdminService.import_students( students=students, operator_id=user["user_id"], initial_points=60 ) return success_response(data=result, message=f"导入完成: 成功{result['success_count']}人,失败{result['failed_count']}人")