课程科目新建的时候部分字段改为下拉选择

This commit is contained in:
2026-09-22 17:13:55 +08:00
parent f87e02b06b
commit 62fb137611
@@ -123,7 +123,14 @@
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="教研室代号" prop="jysdh"> <el-form-item label="教研室代号" prop="jysdh">
<el-input v-model="addForm.jysdh" placeholder="请输入教研室代号" clearable /> <el-select v-model="addForm.jysdh" filterable clearable placeholder="请选择教研室代号" class="w-full" :loading="optionsLoading">
<el-option
v-for="item in officeOptions"
:key="item.jysdh"
:label="item.jysmc ? `${item.jysdh}(${item.jysmc})` : item.jysdh"
:value="item.jysdh"
/>
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
@@ -138,17 +145,23 @@
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="培训层次" prop="pxcc"> <el-form-item label="培训层次" prop="pxcc">
<el-input v-model="addForm.pxcc" placeholder="请输入培训层次" clearable /> <el-select v-model="addForm.pxcc" filterable clearable placeholder="请选择培训层次" class="w-full" :loading="optionsLoading">
<el-option v-for="item in trainLevelOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="培训类型" prop="pxlx"> <el-form-item label="培训类型" prop="pxlx">
<el-input v-model="addForm.pxlx" placeholder="请输入培训类型" clearable /> <el-select v-model="addForm.pxlx" filterable clearable placeholder="请选择培训类型" class="w-full" :loading="optionsLoading">
<el-option v-for="item in trainTypeOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="课程类型" prop="kclx"> <el-form-item label="课程类型" prop="kclx">
<el-input v-model="addForm.kclx" placeholder="请输入课程类型" clearable /> <el-select v-model="addForm.kclx" filterable clearable placeholder="请选择课程类型" class="w-full" :loading="optionsLoading">
<el-option v-for="item in courseTypeOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
@@ -158,7 +171,9 @@
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="成绩分制" prop="cjfz"> <el-form-item label="成绩分制" prop="cjfz">
<el-input v-model="addForm.cjfz" placeholder="请输入成绩分制" clearable /> <el-select v-model="addForm.cjfz" filterable clearable placeholder="请选择成绩分制" class="w-full" :loading="optionsLoading">
<el-option v-for="item in scoreScaleOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
@@ -186,7 +201,9 @@
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="课类型" prop="klx"> <el-form-item label="课类型" prop="klx">
<el-input v-model="addForm.klx" placeholder="请输入课类型" clearable /> <el-select v-model="addForm.klx" filterable clearable placeholder="请选择课类型" class="w-full" :loading="optionsLoading">
<el-option v-for="item in courseTypeOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
@@ -219,17 +236,23 @@
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="节次优选级" prop="jcyxj"> <el-form-item label="节次优选级" prop="jcyxj">
<el-input v-model="addForm.jcyxj" placeholder="请输入节次优选级" clearable /> <el-select v-model="addForm.jcyxj" filterable clearable placeholder="请选择节次优选级" class="w-full" :loading="optionsLoading">
<el-option v-for="item in sessionPriorityOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="Number(item.dictValue)" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="课程支持方式" prop="kczcfs"> <el-form-item label="课程支持方式" prop="kczcfs">
<el-input v-model="addForm.kczcfs" placeholder="请输入课程支持方式" clearable /> <el-select v-model="addForm.kczcfs" filterable clearable placeholder="请选择课程支持方式" class="w-full" :loading="optionsLoading">
<el-option v-for="item in courseSupportTypeOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="课程建设方式" prop="kcjsfs"> <el-form-item label="课程建设方式" prop="kcjsfs">
<el-input v-model="addForm.kcjsfs" placeholder="请输入课程建设方式" clearable /> <el-select v-model="addForm.kcjsfs" filterable clearable placeholder="请选择课程建设方式" class="w-full" :loading="optionsLoading">
<el-option v-for="item in courseBuildTypeOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
@@ -242,7 +265,9 @@
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="考核方式" prop="khfs"> <el-form-item label="考核方式" prop="khfs">
<el-input v-model="addForm.khfs" placeholder="请输入考核方式" clearable /> <el-select v-model="addForm.khfs" filterable clearable placeholder="请选择考核方式" class="w-full" :loading="optionsLoading">
<el-option v-for="item in examMethodOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
@@ -257,7 +282,9 @@
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
<el-form-item label="密级" prop="mj"> <el-form-item label="密级" prop="mj">
<el-input v-model="addForm.mj" placeholder="请输入密级" clearable /> <el-select v-model="addForm.mj" filterable clearable placeholder="请选择密级" class="w-full" :loading="optionsLoading">
<el-option v-for="item in secretLevelOptions" :key="item.dictCode || item.dictValue" :label="item.dictLabel" :value="item.dictLabel" />
</el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="12" :md="8"> <el-col :xs="24" :sm="12" :md="8">
@@ -311,6 +338,8 @@
<script> <script>
import { saveAs } from 'file-saver' import { saveAs } from 'file-saver'
import { listKb as listSubject, addKb as addSubject, updateKb as updateSubject, deleteKb as deleteSubject, getKb, downloadCourseSubjectTemplate } from '@/api/teachOffice/kb' import { listKb as listSubject, addKb as addSubject, updateKb as updateSubject, deleteKb as deleteSubject, getKb, downloadCourseSubjectTemplate } from '@/api/teachOffice/kb'
import { listOffice } from '@/api/teachOffice/office'
import { getDicts } from '@/api/system/dict/data'
export default { export default {
name: 'SubjectIndex', name: 'SubjectIndex',
@@ -347,31 +376,43 @@ export default {
dialogVisible: false, dialogVisible: false,
addLoading: false, addLoading: false,
isEdit: false, isEdit: false,
optionsLoading: false,
optionsLoaded: false,
officeOptions: [],
trainLevelOptions: [],
trainTypeOptions: [],
courseTypeOptions: [],
sessionPriorityOptions: [],
courseSupportTypeOptions: [],
courseBuildTypeOptions: [],
examMethodOptions: [],
secretLevelOptions: [],
scoreScaleOptions: [],
addForm: this.createEmptyForm(), addForm: this.createEmptyForm(),
rules: { rules: {
kmc: [{ required: true, message: '请输入课名称', trigger: 'blur' }], kmc: [{ required: true, message: '请输入课名称', trigger: 'blur' }],
jysdh: [{ required: true, message: '请输入教研室代号', trigger: 'blur' }], jysdh: [{ required: true, message: '请选择教研室代号', trigger: 'change' }],
xf: [{ required: true, message: '请输入学分', trigger: 'blur' }], xf: [{ required: true, message: '请输入学分', trigger: 'blur' }],
pxcc: [{ required: true, message: '请输入培训层次', trigger: 'blur' }], pxcc: [{ required: true, message: '请选择培训层次', trigger: 'change' }],
pxlx: [{ required: true, message: '请输入培训类型', trigger: 'blur' }], pxlx: [{ required: true, message: '请选择培训类型', trigger: 'change' }],
kclx: [{ required: true, message: '请输入课程类型', trigger: 'blur' }], kclx: [{ required: true, message: '请选择课程类型', trigger: 'change' }],
ksks: [{ required: true, message: '请输入考试课时', trigger: 'blur' }], ksks: [{ required: true, message: '请输入考试课时', trigger: 'blur' }],
cjfz: [{ required: true, message: '请输入成绩分制', trigger: 'blur' }], cjfz: [{ required: true, message: '请选择成绩分制', trigger: 'change' }],
llxs: [{ required: true, message: '请输入理论学时', trigger: 'blur' }], llxs: [{ required: true, message: '请输入理论学时', trigger: 'blur' }],
sjxs: [{ required: true, message: '请输入实践学时', trigger: 'blur' }], sjxs: [{ required: true, message: '请输入实践学时', trigger: 'blur' }],
zks: [{ required: true, message: '请输入周课时', trigger: 'blur' }], zks: [{ required: true, message: '请输入周课时', trigger: 'blur' }],
klx: [{ required: true, message: '请输入课类型', trigger: 'blur' }], klx: [{ required: true, message: '请选择课类型', trigger: 'change' }],
kctybh: [{ required: true, message: '请输入课程统一编号', trigger: 'blur' }], kctybh: [{ required: true, message: '请输入课程统一编号', trigger: 'blur' }],
fddyks: [{ required: true, message: '请输入辅导答疑课时', trigger: 'blur' }], fddyks: [{ required: true, message: '请输入辅导答疑课时', trigger: 'blur' }],
zxks: [{ required: true, message: '请输入自修课时', trigger: 'blur' }], zxks: [{ required: true, message: '请输入自修课时', trigger: 'blur' }],
xdrq: [{ required: true, message: '请输入修订日期', trigger: 'blur' }], xdrq: [{ required: true, message: '请输入修订日期', trigger: 'blur' }],
jcyxj: [{ required: true, message: '请输入节次优选级', trigger: 'blur' }], jcyxj: [{ required: true, message: '请选择节次优选级', trigger: 'change' }],
kczcfs: [{ required: true, message: '请输入课程支持方式', trigger: 'blur' }], kczcfs: [{ required: true, message: '请选择课程支持方式', trigger: 'change' }],
kcjsfs: [{ required: true, message: '请输入课程建设方式', trigger: 'blur' }], kcjsfs: [{ required: true, message: '请选择课程建设方式', trigger: 'change' }],
khfs: [{ required: true, message: '请输入考核方式', trigger: 'blur' }], khfs: [{ required: true, message: '请选择考核方式', trigger: 'change' }],
xcxcjfz: [{ required: true, message: '请输入形成性成绩分值', trigger: 'blur' }], xcxcjfz: [{ required: true, message: '请输入形成性成绩分值', trigger: 'blur' }],
zjxcjfz: [{ required: true, message: '请输入终结性成绩分值', trigger: 'blur' }], zjxcjfz: [{ required: true, message: '请输入终结性成绩分值', trigger: 'blur' }],
mj: [{ required: true, message: '请输入密级', trigger: 'blur' }], mj: [{ required: true, message: '请选择密级', trigger: 'change' }],
pxqk: [{ required: true, message: '请输入评选情况', trigger: 'blur' }] pxqk: [{ required: true, message: '请输入评选情况', trigger: 'blur' }]
} }
} }
@@ -541,9 +582,43 @@ export default {
}, },
// ==================== 新增/编辑弹窗 ==================== // ==================== 新增/编辑弹窗 ====================
loadFormOptions() {
if (this.optionsLoaded) return
this.optionsLoading = true
const empty = { data: [] }
Promise.all([
listOffice({ pageNum: 1, pageSize: 500 }).catch(() => empty),
getDicts('train_level').catch(() => empty),
getDicts('train_type').catch(() => empty),
getDicts('course_type').catch(() => empty),
getDicts('session_priority').catch(() => empty),
getDicts('course_support_type').catch(() => empty),
getDicts('course_build_type').catch(() => empty),
getDicts('exam_method').catch(() => empty),
getDicts('secret_level').catch(() => empty),
getDicts('score_scale').catch(() => empty)
]).then(([officeRes, levelRes, typeRes, courseRes, spRes, cstRes, cbtRes, emRes, slRes, ssRes]) => {
const officeData = (officeRes && officeRes.data) || {}
const officeList = officeData.records || officeData || []
this.officeOptions = officeList.filter(item => !item.ty)
this.trainLevelOptions = (levelRes && levelRes.data) || []
this.trainTypeOptions = (typeRes && typeRes.data) || []
this.courseTypeOptions = (courseRes && courseRes.data) || []
this.sessionPriorityOptions = (spRes && spRes.data) || []
this.courseSupportTypeOptions = (cstRes && cstRes.data) || []
this.courseBuildTypeOptions = (cbtRes && cbtRes.data) || []
this.examMethodOptions = (emRes && emRes.data) || []
this.secretLevelOptions = (slRes && slRes.data) || []
this.scoreScaleOptions = (ssRes && ssRes.data) || []
this.optionsLoaded = true
}).finally(() => {
this.optionsLoading = false
})
},
handleOpenDialog() { handleOpenDialog() {
this.isEdit = false this.isEdit = false
this.resetForm() this.resetForm()
this.loadFormOptions()
this.dialogVisible = true this.dialogVisible = true
}, },
@@ -554,6 +629,7 @@ export default {
const data = (res && res.data) || row const data = (res && res.data) || row
this.isEdit = true this.isEdit = true
this.addForm = Object.assign(this.createEmptyForm(), data) this.addForm = Object.assign(this.createEmptyForm(), data)
this.loadFormOptions()
this.dialogVisible = true this.dialogVisible = true
}) })
.finally(() => { .finally(() => {