自动排课完成后逐条显示“需人工处理”的任务和原因,并提供“检查排课约束”入口;刷新页面后仍可读取最近一次结果。
批量排课约束新增校区、教学楼、多教室统一指定,也支持清除原有限定。 课表新增“总视图”,同一时段、不同周次课程会并列显示。 周视图按教学周过滤,支持上一周、下一周、周次下拉和回到本周。 日视图按周次过滤;连续两节课程会跨两行完整占格。
This commit is contained in:
@@ -19,7 +19,6 @@ const editingId = ref('')
|
||||
const selectedRows = ref<any[]>([])
|
||||
const terms = ref<any[]>([])
|
||||
const courses = ref<any[]>([])
|
||||
const teachers = ref<any[]>([])
|
||||
const classes = ref<any[]>([])
|
||||
const majors = ref<any[]>([])
|
||||
const query = reactive({
|
||||
@@ -85,13 +84,15 @@ const plannedHours = computed(() =>
|
||||
const hoursMatch = computed(() =>
|
||||
!selectedCourse.value || plannedHours.value === selectedCourse.value.totalHours,
|
||||
)
|
||||
const assignableTeachers = computed(() => {
|
||||
if (!selectedCourse.value) return teachers.value
|
||||
const approvedIds = new Set(manualEligibleTeachers.value.map((item) => item.teacherId))
|
||||
return teachers.value.filter((item) =>
|
||||
approvedIds.has(item.id) || form.teacherIds?.includes(item.id),
|
||||
)
|
||||
})
|
||||
const assignableTeachers = computed(() =>
|
||||
manualEligibleTeachers.value.map((item) => ({
|
||||
id: item.teacherId,
|
||||
teacherNumber: item.teacherNumber,
|
||||
name: item.name,
|
||||
title: item.title,
|
||||
collegeName: item.collegeName,
|
||||
})),
|
||||
)
|
||||
const selectedTeachers = computed(() =>
|
||||
assignableTeachers.value.filter((item) => form.teacherIds?.includes(item.id)),
|
||||
)
|
||||
@@ -521,16 +522,14 @@ async function generatePublicTasks() {
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
const [termRes, courseRes, teacherRes, classRes, majorRes] = await Promise.all([
|
||||
const [termRes, courseRes, classRes, majorRes] = await Promise.all([
|
||||
http.get('/base-data/terms'),
|
||||
http.get('/courses/options'),
|
||||
http.get('/personnel/teachers', { params: { page: 1, pageSize: 100, teacherStatus: 'Active' } }),
|
||||
http.get('/base-data/classes'),
|
||||
http.get('/base-data/majors'),
|
||||
])
|
||||
terms.value = termRes.data
|
||||
courses.value = courseRes.data
|
||||
teachers.value = teacherRes.data.items
|
||||
classes.value = classRes.data
|
||||
majors.value = majorRes.data
|
||||
query.academicTermId = terms.value.find((item) => item.isCurrent)?.id
|
||||
@@ -700,7 +699,7 @@ onMounted(async () => {
|
||||
<el-select v-model="form.teacherIds" multiple filterable @change="onTeachersChanged">
|
||||
<el-option v-for="item in assignableTeachers" :key="item.id" :label="`${item.teacherNumber} · ${item.name}`" :value="item.id" />
|
||||
</el-select>
|
||||
<small v-if="selectedCourse" class="field-hint">仅显示本学期申报该课程且学院审核通过的教师。</small>
|
||||
<small v-if="selectedCourse" class="field-hint">仅显示本学期已审核通过或由学院直接分配的授课资格教师。</small>
|
||||
</el-form-item>
|
||||
<el-form-item label="主讲教师">
|
||||
<el-select v-model="form.primaryTeacherId" clearable :disabled="!form.teacherIds?.length">
|
||||
|
||||
Reference in New Issue
Block a user