feat(students,teachers,classes,auth,web): 学生个人账号彻底清理,学生只是名单记录
学生不再有登录能力:User.passwordHash 以空串占位,role=STUDENT 在密码校验之前 一律 403 并提示改用班级登录(否则「密码错 401 / 密码对但已停用 403」的差异会把 学生账号密码变成可离线验证的预言机)。成绩、未交名单、叫人、已读全部按名单记。 配套改动: - 删除 POST /students/:id/reset-password(调用返回 404,e2e 有负断言); - 新建学生不设密码,StudentsView 移除密码输入与「重置密码」入口, 列表标识仍自动生成为学号式(student01…); - class-account.ts / auth.service.ts 收紧班级会话语义; - 经管「修改密码」入口收敛到 Web 端:教师改本人密码走顶栏下拉, 班级密码由管理员在班级管理里维护,教师可用 POST /teachers/:id/reset-password 设初始密码。
This commit is contained in:
1 parent
7ea0e0f7c9
commit
d27f9a4b9e
11 files changed
+121
-104
No files matched your search
@@ -3,6 +3,7 @@ import { computed, onMounted, onUnmounted, reactive, ref } from 'vue';
|
||||
import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'element-plus';
|
||||
import {
|
||||
SOCKET_EVENTS,
|
||||
MAX_TERM_WEEK,
|
||||
formatDate,
|
||||
type ClassDetailDto,
|
||||
type ClassDto,
|
||||
@@ -76,6 +77,11 @@ function openEdit(row: ClassDto): void {
|
||||
form.grade = row.grade;
|
||||
form.code = '';
|
||||
form.termWeeks = row.termWeeks ?? 20;
|
||||
// 必须回填当前班主任:编辑弹窗里的下拉与"新建"共用同一个 form.headTeacherId,
|
||||
// 而 submitForm 会在"值不同"时直接调 assignHeadTeacher。不回填的话,只要之前打开过一次
|
||||
// 「新建班级」(openCreate 会把它设成当前管理员自己),之后保存任何一次编辑都会把
|
||||
// 该班班主任静默改成管理员本人 —— 而班主任决定谁能管这个班的课表与成绩。
|
||||
form.headTeacherId = row.teacher?.id ?? '';
|
||||
void loadStaffOptions();
|
||||
formVisible.value = true;
|
||||
}
|
||||
@@ -102,6 +108,9 @@ async function submitForm(): Promise<void> {
|
||||
await classApi.create({
|
||||
name: form.name,
|
||||
grade: form.grade,
|
||||
// 学期周数:新建时也要提交。原先只提交名称/年级/班级码,表单里填的周数被直接丢弃,
|
||||
// 服务端落库恒为默认 20,用户看到的是"设置了没生效"且没有任何提示。
|
||||
termWeeks: form.termWeeks,
|
||||
...(form.code.trim() ? { code: form.code.trim().toUpperCase() } : {}),
|
||||
...(isAdmin.value && form.headTeacherId ? { teacherId: form.headTeacherId } : {}),
|
||||
});
|
||||
@@ -452,9 +461,9 @@ onUnmounted(() => {
|
||||
</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="学期周数">
|
||||
<el-input-number v-model="form.termWeeks" :min="1" :max="40" :step="1" />
|
||||
<el-input-number v-model="form.termWeeks" :min="1" :max="MAX_TERM_WEEK" :step="1" />
|
||||
<span class="text-muted ml-8">
|
||||
本学期一共多少教学周(默认 20);课表周次选择与默认结束周都按它来
|
||||
本学期一共多少教学周(默认 20,最多 {{ MAX_TERM_WEEK }} 周);课表周次选择与默认结束周都按它来
|
||||
</span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
Reference in new issue
Block a user