11. 开发学生选课功能

31 字约 1 分钟读完167 次阅读更新于 2026/5/3

SQL

CREATE TABLE `student_course` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `student_id` int DEFAULT NULL COMMENT '学生ID',
  `course_id` int DEFAULT NULL COMMENT '课程ID',
  `year` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '学年',
  `status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '选课状态',
  `check_status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '审核状态',
  `time` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '选课时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='选课信息';

登录返回学生的专业 ID

# 登录
@api_router.post("/login")
async def login(account: Account):
    if account.role == '管理员':
        admin = await Admin.get_or_none(username=account.username)
        if admin is None:
            raise CustomException("账号或密码错误")
        if admin.password != account.password:
            raise CustomException("账号或密码错误")
        account = Account.model_validate(admin)
    elif account.role == '学生':
        student = await Student.get_or_none(username=account.username).prefetch_related("clazz__major")
        if student is None:
            raise CustomException("账号或密码错误")
        if student.password != account.password:
            raise CustomException("账号或密码错误")
        account = Account.model_validate(student)
        account.clazzId = student.clazz.id if student and student.clazz else None
        account.majorId = student.clazz.major.id if student and student.clazz and student.clazz.major else None
    else:
        raise CustomException("角色错误")
    return Result.success(account)

个人资料里面的表单

<el-form-item label="所属班级" prop="clazzId" v-if="data.user.role === '学生'">
  <el-select disabled placeholder="请选择班级" v-model="data.user.clazzId">
    <el-option v-for="item in data.classList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  </el-select>
</el-form-item>
 <el-form-item label="所属专业" v-if="data.user.role === '学生'">
  <el-select disabled v-model="data.user.majorId">
    <el-option v-for="item in data.majorList" :key="item.id" :label="item.name" :value="item.id"></el-option>
  </el-select>
</el-form-item>

后端接口

前端页面