From 769e32852ba2d588cd1582decb76c9173a4976b7 Mon Sep 17 00:00:00 2001 From: chenyuan Date: Sat, 1 Aug 2026 14:04:47 +0800 Subject: [PATCH] feat: disable locked teacher actions --- src/views/teacherEnd/teacher/index.vue | 30 ++++++++++++++----- ...cher-management-class-lock.static.test.cjs | 16 ++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 tests/teacher-management-class-lock.static.test.cjs diff --git a/src/views/teacherEnd/teacher/index.vue b/src/views/teacherEnd/teacher/index.vue index 88d9a31..379ccc5 100644 --- a/src/views/teacherEnd/teacher/index.vue +++ b/src/views/teacherEnd/teacher/index.vue @@ -55,8 +55,9 @@ @@ -65,13 +66,13 @@ - + - + @@ -108,6 +109,11 @@ const dialogVisible = ref(false); const loading = ref(false); const currentUserId = computed(() => userStore.userInfo.userId); const isManagerTeacher = computed(() => userStore.userInfo.teacherAdmin === true || String(userStore.userInfo.roleId || userStore.userInfo.role) === "1"); +const legacyOrganizationManagementEnabled = computed(() => userStore.schoolProductConfig?.organizationMode !== "TEACHING_CLASS_ONLY"); +const facultyManagementEnabled = computed(() => userStore.schoolProductConfig?.facultyManagementEnabled ?? legacyOrganizationManagementEnabled.value); +const majorManagementEnabled = computed(() => userStore.schoolProductConfig?.majorManagementEnabled ?? legacyOrganizationManagementEnabled.value); +const adminClassManagementEnabled = computed(() => userStore.schoolProductConfig?.adminClassManagementEnabled ?? legacyOrganizationManagementEnabled.value); +const isOrganizationManagementEnabled = computed(() => facultyManagementEnabled.value || majorManagementEnabled.value || adminClassManagementEnabled.value); const formatDate = (cellValue) => { const numeric = Number(cellValue); if (!cellValue || !Number.isFinite(numeric)) { @@ -130,12 +136,15 @@ const formInline = ref({ email: "", phone: "", }); -const rules = ref({ +const organizationRules = { schoolFacultyId: [{ required: true, message: "请选择院系", trigger: "change" }], schoolMajorId: [{ required: true, message: "请选择专业", trigger: "change" }], +}; +const rules = computed(() => ({ + ...((status.value || isOrganizationManagementEnabled.value) ? organizationRules : {}), name: [{ required: true, message: "请输入教师姓名", trigger: "blur" }], userName: [{ required: true, message: "请输入教师工号", trigger: "blur" }], -}); +})); const paramsquery = ref({ index: 1, size: 10, @@ -149,7 +158,7 @@ const status = ref(false); const tableData = ref([]); // 获取院校列表 const getList = () => { - indexApi.getTeacherList(paramsquery.value).then((res) => { + indexApi.getTeacherList({ ...paramsquery.value, operatorId: currentUserId.value }).then((res) => { tableData.value = res.data.list; schoolTotal.value = res.data.total; }); @@ -172,6 +181,9 @@ const editSchool = (row) => { formInline.value.userName = row.username; dialogVisible.value = true; status.value = false; + if (!isOrganizationManagementEnabled.value) { + return; + } indexApi.getFacultyAndMajorName({ schoolMajorId: row.schoolMajorId }).then((res) => { classInfo.value.name = Object.keys(res.data)[0]; classInfo.value.value = Object.values(res.data)[0]; @@ -260,7 +272,9 @@ const downloadTemplate = () => { onMounted(() => { getList(); - getFacultyList(); + if (isOrganizationManagementEnabled.value) { + getFacultyList(); + } });