主要更新:

班级课表支持年级、学院、专业、行政班分级筛选。
管理员课表查询中心支持班级、教师、场地三种课表。
超级管理员、校级教务、学院教务、领导可查询草稿和已发布版本;学院管理员保留学院数据范围。
增加周视图、日视图切换。
支持 Excel 导出和当前视图 PDF 导出。
学生端增加“空闲教室”,支持学期、周次、星期、连续节次、校区、教学楼、容量筛选,并按教学楼分组、分页展示。
空闲教室只依据正式课表计算;未配置节次表时自动提供默认节次。
This commit is contained in:
2026-07-25 08:53:42 +08:00 Unverified
parent fe508054d0
commit 0d34936d38
15 changed files with 2411 additions and 209 deletions
+10 -1
View File
@@ -27,6 +27,11 @@ const isTeacher = computed(() => roles.value.includes('Teacher'))
const isTeachingAdmin = computed(() =>
roles.value.some((role) => ['SuperAdmin', 'AcademicAdmin', 'CollegeAdmin'].includes(role)),
)
const isTimetableManager = computed(() =>
roles.value.some((role) =>
['SuperAdmin', 'AcademicAdmin', 'CollegeAdmin', 'Leader'].includes(role),
),
)
function hasAnyRole(allowedRoles: string[]) {
return roles.value.some((role) => allowedRoles.includes(role))
@@ -99,7 +104,11 @@ const navigationGroups = computed<NavigationGroup[]>(() => [
{ path: '/schedules', label: '排课与课表' },
),
...whenVisible(isStudent.value, { path: '/my-timetable', label: '我的课表' }),
...whenVisible(!isStudent.value, { path: '/class-timetable', label: '班级课表查询' }),
...whenVisible(isStudent.value, { path: '/free-classrooms', label: '空闲教室' }),
...whenVisible(!isStudent.value, {
path: '/class-timetable',
label: isTimetableManager.value ? '课表查询中心' : '班级课表查询',
}),
...whenVisible(
hasAnyRole(['SuperAdmin', 'AcademicAdmin', 'CollegeAdmin', 'Student']),
{