This commit is contained in:
2026-08-25 19:25:55 +08:00
parent 0240f410b6
commit 13d72c54f2
16 changed files with 185 additions and 163 deletions
@@ -10,11 +10,11 @@
</el-form-item>
</el-col>
<el-col :xs="24" :md="8">
<el-form-item label="停用标识">
<el-select v-model="searchForm.ty" placeholder="全部" clearable class="w-full">
<el-option :value="0" label="正常" />
<el-option :value="1" label="停用" />
</el-select>
<el-form-item label="停用">
<el-radio-group v-model="searchForm.ty">
<el-radio :label="0">否</el-radio>
<el-radio :label="1">是</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :xs="24" :md="8">
@@ -296,7 +296,7 @@ export default {
loading: false,
searchForm: {
zydh: '',
ty: ''
ty: 0
},
tableData: [],
total: 0,
@@ -381,8 +381,8 @@ export default {
fetchList() {
this.loading = true
const { zydh, ty } = this.searchForm
// 专业代号与停用标识同时给出时走后端 /listByZydhAndTy;否则查全部后本地过滤
const useApiQuery = zydh && ty !== '' && ty !== null && ty !== undefined
// 专业代号存在时走后端组合查询;否则查全部后按停用标识过滤
const useApiQuery = Boolean(zydh)
const req = useApiQuery
? listSyllabusByZydhAndTy(zydh, ty)
: listSyllabus()
@@ -390,9 +390,7 @@ export default {
let list = response.data || []
if (!useApiQuery) {
if (zydh) list = list.filter(i => i.zydh && i.zydh.indexOf(zydh) !== -1)
if (ty !== '' && ty !== null && ty !== undefined) {
list = list.filter(i => Number(i.ty) === Number(ty))
}
list = list.filter(i => Number(i.ty) === Number(ty))
}
this.tableData = list
this.total = list.length
@@ -408,7 +406,7 @@ export default {
this.fetchList()
},
handleReset() {
this.searchForm = { zydh: '', ty: '' }
this.searchForm = { zydh: '', ty: 0 }
this.fetchList()
},
handleSelectionChange(val) {
@@ -99,16 +99,23 @@
<el-dialog title="新增课表调整申请" :visible.sync="addVisible" width="640px" append-to-body>
<el-form ref="addForm" :model="addForm" :rules="addRules" label-width="110px">
<el-form-item label="年度" prop="nd">
<el-select v-model="addForm.nd" placeholder="请选择年度" style="width: 100%">
<el-select v-model="addForm.nd" placeholder="请选择年度" style="width: 100%" @change="handleAddYearChange">
<el-option v-for="y in yearOptions" :key="y" :label="y" :value="y" />
</el-select>
</el-form-item>
<el-form-item label="课次编号" prop="sskcbbh">
<el-input v-model="addForm.sskcbbh" placeholder="请输入课次编号" />
<el-input v-model="addForm.sskcbbh" placeholder="请从可供调课课次中选择" disabled />
<el-button type="primary" plain size="mini" class="pick-lesson-btn" :loading="lessonLoading" @click="loadAdjustableLessons">选择可供调课课次</el-button>
</el-form-item>
<el-form-item label="调课事由" prop="sy">
<el-input v-model="addForm.sy" type="textarea" :rows="2" placeholder="请输入调课事由" />
<el-input
v-model="addForm.sy"
type="textarea"
:rows="2"
maxlength="200"
show-word-limit
placeholder="请输入调课事由"
/>
</el-form-item>
<el-form-item label="拟调整日期" prop="rq">
<el-date-picker v-model="addForm.rq" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期" style="width: 100%" />
@@ -118,20 +125,34 @@
<el-option v-for="n in jcOptions" :key="n" :label="jcLabel(n)" :value="n" />
</el-select>
</el-form-item>
<el-form-item label="申请教员编号" prop="sqjybh">
<el-input v-model="addForm.sqjybh" placeholder="请输入申请教员编号" />
<el-form-item label="申请教员">
<el-input v-model="addForm.sqjybh" placeholder="由服务端根据当前登录人写入" disabled />
</el-form-item>
<el-form-item label="学员队名称">
<el-input v-model="addForm.xydmc" placeholder="选择可供调课课次后自动带出" />
<el-input v-model="addForm.xydmc" placeholder="选择可供调课课次后自动带出" disabled />
</el-form-item>
<el-form-item label="原教室编号">
<el-input v-model="addForm.yjsbh" placeholder="选择可供调课课次后自动带出" />
<el-input v-model="addForm.yjsbh" placeholder="选择可供调课课次后自动带出" disabled />
</el-form-item>
<el-form-item label="拟调整教室编号">
<el-input v-model="addForm.xjsbh" placeholder="选填" />
<el-select
v-model="addForm.xjsbh"
placeholder="请选择拟调整教室"
clearable
filterable
:loading="classroomLoading"
style="width: 100%"
>
<el-option
v-for="room in classroomOptions"
:key="room.jsbh"
:label="classroomOptionLabel(room)"
:value="room.jsbh"
/>
</el-select>
</el-form-item>
<el-form-item label="原上课时间">
<el-input v-model="addForm.ydsjap" placeholder="选择可供调课课次后自动带出" />
<el-input v-model="addForm.ydsjap" placeholder="选择可供调课课次后自动带出" disabled />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -294,6 +315,7 @@ import {
cancelScheduleAdjust
} from '@/api/teachBusiness/courseRunning'
import { listAllSemester } from '@/api/teachBusiness/semester'
import { listAllClassroom } from '@/api/teachBusiness/classroom'
// 节次 -> 节次区间映射
const JC_SECTION = {
@@ -347,16 +369,17 @@ export default {
addForm: {},
addRules: {
nd: [{ required: true, message: '请选择年度', trigger: 'change' }],
sskcbbh: [{ required: true, message: '请输入课次编号', trigger: 'blur' }],
sskcbbh: [{ required: true, message: '请选择可供调课课次', trigger: 'change' }],
sy: [{ required: true, message: '请输入调课事由', trigger: 'blur' }],
rq: [{ required: true, message: '请选择拟调整日期', trigger: 'change' }],
jc: [{ required: true, message: '请选择拟调整节次', trigger: 'change' }],
sqjybh: [{ required: true, message: '请输入申请教员编号', trigger: 'blur' }]
jc: [{ required: true, message: '请选择拟调整节次', trigger: 'change' }]
},
// 可供调课课次
lessonDialogVisible: false,
lessonLoading: false,
lessonOptions: [],
classroomLoading: false,
classroomOptions: [],
// 审批
auditVisible: false,
auditLoading: false,
@@ -480,9 +503,39 @@ export default {
xjsbh: '',
ydsjap: ''
}
this.lessonOptions = []
this.loadClassroomOptions()
this.$nextTick(() => this.$refs.addForm && this.$refs.addForm.clearValidate())
this.addVisible = true
},
handleAddYearChange() {
this.addForm.sskcbbh = ''
this.addForm.xydmc = ''
this.addForm.yjsbh = ''
this.addForm.xjsbh = ''
this.addForm.ydsjap = ''
this.lessonOptions = []
},
loadClassroomOptions() {
this.classroomLoading = true
return listAllClassroom().then(response => {
const classrooms = Array.isArray(response.data) ? response.data : []
this.classroomOptions = classrooms
.filter(room => room.jsbh && !this.isDisabledValue(room.ty))
.sort((first, second) => String(first.jsbh).localeCompare(String(second.jsbh), 'zh-CN'))
}).catch(() => {
this.classroomOptions = []
this.$message.warning('教室列表加载失败,请稍后重试')
}).finally(() => {
this.classroomLoading = false
})
},
classroomOptionLabel(room) {
return room.jsmc ? room.jsbh + ' · ' + room.jsmc : room.jsbh
},
isDisabledValue(value) {
return value === true || value === 1 || value === '1' || value === 'true'
},
loadAdjustableLessons() {
if (!this.addForm.nd) {
this.$message.warning('请先选择年度')
@@ -490,23 +543,32 @@ export default {
}
this.lessonLoading = true
listAdjustableLessons({ nd: this.addForm.nd }).then(response => {
this.lessonOptions = response.data || []
const data = response.data || []
this.lessonOptions = Array.isArray(data) ? data : (data.records || [])
this.lessonLoading = false
this.lessonDialogVisible = true
}).catch(() => {
this.lessonLoading = false
this.$message.info('加载可供调课课次失败,请手动填写课次编号')
this.$message.warning('加载可供调课课次失败,请稍后重试')
})
},
pickLesson(row) {
this.addForm.sskcbbh = row.sskcbbh
// 自动带出课次关联字段(若接口返回则回填)
;['xydmc', 'yjsbh', 'ydsjap', 'kbh', 'kcbbh', 'xydrwbh', 'jysdh', 'xjsbh', 'kcmc', 'sqjyxm'].forEach(key => {
const lessonNumber = row.sskcbbh || row.bh || ''
if (!lessonNumber) {
this.$message.warning('当前课次缺少课次编号,无法选择')
return
}
this.addForm.sskcbbh = lessonNumber
this.addForm.xydmc = row.xydmc || ''
this.addForm.yjsbh = row.jsbh || row.yjsbh || ''
this.addForm.xjsbh = ''
this.addForm.ydsjap = row.rq ? this.fmtRqJc(row.rq, row.jc) : (row.ydsjap || '')
;['kbh', 'kcbbh', 'xydrwbh', 'jysdh', 'kcmc', 'sqjyxm'].forEach(key => {
if (row[key] !== undefined && row[key] !== null) this.addForm[key] = row[key]
})
if (!this.addForm.ydsjap && row.rq) this.addForm.ydsjap = this.fmtRqJc(row.rq, row.jc)
this.lessonDialogVisible = false
this.$message.success('已选择课次:' + (row.kcmc || row.sskcbbh))
this.$nextTick(() => this.$refs.addForm && this.$refs.addForm.validateField('sskcbbh'))
this.$message.success('已选择课次:' + (row.kcmc || lessonNumber))
},
submitAdd() {
this.$refs.addForm.validate(valid => {
@@ -516,12 +578,14 @@ export default {
sy: this.addForm.sy,
rq: this.addForm.rq + 'T00:00:00',
jc: this.addForm.jc,
nd: this.addForm.nd,
sqjybh: this.addForm.sqjybh
nd: this.addForm.nd
}
;['xydmc', 'yjsbh', 'xjsbh', 'ydsjap', 'kbh', 'kcbbh', 'xydrwbh', 'jysdh', 'kcmc', 'sqjyxm'].forEach(key => {
;['xydrwbh', 'kbh', 'kcbbh', 'xjsbh'].forEach(key => {
if (this.addForm[key]) payload[key] = this.addForm[key]
})
if (this.addForm.xjsbh) {
payload.roomList = [{ jsbh: this.addForm.xjsbh }]
}
this.addLoading = true
submitScheduleAdjust(payload).then(() => {
this.addLoading = false
@@ -29,10 +29,10 @@
</el-col>
<el-col :xs="24" :md="8">
<el-form-item label="停用">
<el-select v-model="searchForm.ty" placeholder="全部" clearable class="w-full">
<el-option :value="true" label="停用" />
<el-option :value="false" label="正常" />
</el-select>
<el-radio-group v-model="searchForm.ty">
<el-radio :label="false">否</el-radio>
<el-radio :label="true">是</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :xs="24" :md="8">
@@ -211,7 +211,7 @@ export default {
jsmc: '',
jxldh: '',
jxcdlx: '',
ty: ''
ty: false
},
tableData: [],
jxcdlxOptions: [],
@@ -302,7 +302,7 @@ export default {
jsmc: '',
jxldh: '',
jxcdlx: '',
ty: ''
ty: false
}
this.pageNum = 1
this.fetchList()