教学任务管理界面完善,教员、教学场地改为下拉

This commit is contained in:
2026-09-20 19:03:39 +08:00
parent 7b84d499a9
commit 035c01e90b
@@ -121,7 +121,7 @@
:remote-method="searchKbOptions" :remote-method="searchKbOptions"
:loading="kbLoading" :loading="kbLoading"
@change="handleKbhChange" @change="handleKbhChange"
@focus="!kbOptions.length && searchKbOptions('')" @focus="searchKbOptions('')"
> >
<el-option <el-option
v-for="item in kbOptions" v-for="item in kbOptions"
@@ -160,12 +160,48 @@
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="教员编号"> <el-form-item label="教员编号">
<el-input v-model="editForm.jybh" placeholder="教员编号" clearable /> <el-select
v-model="editForm.jybh"
filterable
remote
clearable
reserve-keyword
placeholder="按教员姓名 / 编号搜索"
style="width: 100%"
:remote-method="searchTeacherOptions"
:loading="teacherLoading"
@focus="searchTeacherOptions('')"
>
<el-option
v-for="item in teacherOptions"
:key="item.jybh"
:label="teacherOptionLabel(item)"
:value="item.jybh"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="教室编号"> <el-form-item label="教室编号">
<el-input v-model="editForm.jsbh" placeholder="教室编号" clearable /> <el-select
v-model="editForm.jsbh"
filterable
remote
clearable
reserve-keyword
placeholder="按教室名称 / 编号搜索"
style="width: 100%"
:remote-method="searchRoomOptions"
:loading="roomLoading"
@focus="searchRoomOptions('')"
>
<el-option
v-for="item in roomOptions"
:key="item.jsbh"
:label="roomOptionLabel(item)"
:value="item.jsbh"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@@ -412,6 +448,8 @@ import {
pasteTasks pasteTasks
} from '@/api/studentRecords/classCalendar' } from '@/api/studentRecords/classCalendar'
import { listKb } from '@/api/teachOffice/kb' import { listKb } from '@/api/teachOffice/kb'
import { listTeacher } from '@/api/teachOffice/teacher'
import { listClassroom } from '@/api/teachBusiness/classroom'
const TASK_CLIPBOARD_KEY = 'education.classTaskClipboard' const TASK_CLIPBOARD_KEY = 'education.classTaskClipboard'
@@ -446,6 +484,10 @@ export default {
}, },
kbOptions: [], kbOptions: [],
kbLoading: false, kbLoading: false,
teacherOptions: [],
teacherLoading: false,
roomOptions: [],
roomLoading: false,
// ==================== 复制到其它班次 ==================== // ==================== 复制到其它班次 ====================
teamSelectVisible: false, teamSelectVisible: false,
@@ -672,6 +714,8 @@ export default {
form.xydxqbh = s.bh || row.xydxqbh form.xydxqbh = s.bh || row.xydxqbh
this.editForm = form this.editForm = form
this.ensureKbOption(form.kbh, row) this.ensureKbOption(form.kbh, row)
this.ensureTeacherOption(form.jybh, row)
this.ensureRoomOption(form.jsbh, row)
this.editVisible = true this.editVisible = true
this.$nextTick(() => { this.$nextTick(() => {
if (this.$refs.editFormRef) this.$refs.editFormRef.clearValidate() if (this.$refs.editFormRef) this.$refs.editFormRef.clearValidate()
@@ -709,11 +753,75 @@ export default {
}) })
}) })
this.kbOptions = merged this.kbOptions = merged
this.ensureKbOption(this.editForm && this.editForm.kbh)
this.kbLoading = false this.kbLoading = false
}).catch(() => { }).catch(() => {
this.kbLoading = false this.kbLoading = false
}) })
}, },
/* ---------- 教员下拉(责任教员远程检索) ---------- */
teacherOptionLabel(item) {
const name = item.jyxm || ''
return name ? `${name}${item.jybh}` : item.jybh
},
ensureTeacherOption(jybh, row) {
if (!jybh) return
if (this.teacherOptions.some(item => item.jybh === jybh)) return
this.teacherOptions = [{ jybh, jyxm: (row && row.jyxm) || '' }].concat(this.teacherOptions)
},
searchTeacherOptions(keyword) {
this.teacherLoading = true
const kw = (keyword || '').trim()
const params = { pageNum: 1, pageSize: 30 }
if (kw) params.jyxm = kw
listTeacher(params).then(res => {
const data = (res && res.data) || {}
this.teacherOptions = data.records || (Array.isArray(data) ? data : [])
this.ensureTeacherOption(this.editForm && this.editForm.jybh)
this.teacherLoading = false
}).catch(() => {
this.teacherLoading = false
})
},
/* ---------- 教室下拉(教学场地远程检索) ---------- */
roomOptionLabel(item) {
const name = item.jsmc || ''
return name ? `${name}${item.jsbh}` : item.jsbh
},
ensureRoomOption(jsbh, row) {
if (!jsbh) return
if (this.roomOptions.some(item => item.jsbh === jsbh)) return
this.roomOptions = [{ jsbh, jsmc: (row && row.jsmc) || '' }].concat(this.roomOptions)
},
searchRoomOptions(keyword) {
this.roomLoading = true
const kw = (keyword || '').trim()
const unwrap = res => {
const data = (res && res.data) || {}
return data.records || (Array.isArray(data) ? data : [])
}
const requests = kw
? [listClassroom({ pageNum: 1, pageSize: 30, jsmc: kw }), listClassroom({ pageNum: 1, pageSize: 30, jsbh: kw })]
: [listClassroom({ pageNum: 1, pageSize: 30 })]
Promise.all(requests).then(results => {
const merged = []
const seen = {}
results.forEach(res => {
unwrap(res).forEach(item => {
if (!item.jsbh || seen[item.jsbh]) return
seen[item.jsbh] = true
merged.push(item)
})
})
this.roomOptions = merged
this.ensureRoomOption(this.editForm && this.editForm.jsbh)
this.roomLoading = false
}).catch(() => {
this.roomLoading = false
})
},
/** 选中课程后带出课程档案信息(仅覆盖课程有值的字段) */ /** 选中课程后带出课程档案信息(仅覆盖课程有值的字段) */
handleKbhChange(kbh) { handleKbhChange(kbh) {
const course = this.kbOptions.find(item => item.kbh === kbh) const course = this.kbOptions.find(item => item.kbh === kbh)