主要更新:

班级课表支持年级、学院、专业、行政班分级筛选。
管理员课表查询中心支持班级、教师、场地三种课表。
超级管理员、校级教务、学院教务、领导可查询草稿和已发布版本;学院管理员保留学院数据范围。
增加周视图、日视图切换。
支持 Excel 导出和当前视图 PDF 导出。
学生端增加“空闲教室”,支持学期、周次、星期、连续节次、校区、教学楼、容量筛选,并按教学楼分组、分页展示。
空闲教室只依据正式课表计算;未配置节次表时自动提供默认节次。
This commit is contained in:
biss committed 2026-07-25 08:53:42 +08:00
1 parent fe508054d0
commit 0d34936d38
15 files changed
+2411 -209

No files matched your search

+1
View File
@@ -13,6 +13,7 @@ declare module 'vue' {
export interface GlobalComponents {
ElAlert: typeof import('element-plus/es')['ElAlert']
ElButton: typeof import('element-plus/es')['ElButton']
ElCard: typeof import('element-plus/es')['ElCard']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
+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']),
{
+6
View File
@@ -137,6 +137,12 @@ const router = createRouter({
component: () => import('../views/TimetableView.vue'),
meta: { roles: ['Student'], mine: true },
},
{
path: 'free-classrooms',
name: 'free-classrooms',
component: () => import('../views/FreeClassroomsView.vue'),
meta: { roles: ['Student'] },
},
{
path: 'course-selections',
name: 'course-selections',
Loaded 3 of 15 files, more files were not shown because too many files have changed in this diff. Show more