教员管理,教研室管理

This commit is contained in:
2026-08-25 18:08:29 +08:00
parent 7fa8041bf7
commit 5c107426c1
3 changed files with 117 additions and 236 deletions
+17 -73
View File
@@ -21,13 +21,13 @@ export function listTeachingPlan(params) {
} }
// ==================== 调课申请管理 /course-running/adjust ==================== // ==================== 调课申请管理 /course-running/adjust ====================
// 接口依据:CourseRunningController(前端 baseURL 为 /api,此处不重复 /api 前缀) // 接口依据:CourseRunningController(类上 @RequestMapping("/course-running"),前端 baseURL 为 /api,此处不重复 /api 前缀)
/** /**
* 分页查询调课申请列表 * 分页查询调课申请列表
* GET /adjust/list * GET /course-running/adjust/list
* 查询参数(ScheduleAdjustQueryDTO):sskcbbh 课次编号、sqjybh 申请教员编号、nd 年度、 * 查询参数(ScheduleAdjustQueryDTO):sskcbbh 课次编号、sqjybh 申请教员编号、nd 年度、
* jyspzzt 教研室审批状态、jyscszt 教研室查收状态、jgspzt 机关审批状态、sczt 删除状态、 * jyspzzt 教研室审批状态、jyscszt 教研室查收状态、sczt 删除状态、
* cjsjStart/cjsjEnd 申请日期范围(ISO 格式)、pageNum、pageSize * cjsjStart/cjsjEnd 申请日期范围(ISO 格式)、pageNum、pageSize
* 返回:PageResult<ScheduleAdjustApplyVO>(records/total) * 返回:PageResult<ScheduleAdjustApplyVO>(records/total)
*/ */
@@ -40,11 +40,10 @@ export function listScheduleAdjust(params) {
} }
/** /**
* 查询可供调课课次 * 查询当前教员可供调课的课次
* GET /adjust/lessons * GET /course-running/adjust/lessons
* 查询参数:nd 学期年度 * 查询参数:nd 年度(可选)
* 返回:List<AdjustableLessonVO> * 返回:List<AdjustableLessonVO>(kcmc/rq/jc/xydmc/kcxh/jsbh/sskcbbh 等)
* 注意:后端当前未实现该接口,调用会报错(页面已做兜底提示)
*/ */
export function listAdjustableLessons(params) { export function listAdjustableLessons(params) {
return request({ return request({
@@ -56,7 +55,7 @@ export function listAdjustableLessons(params) {
/** /**
* 查询调课申请详情 * 查询调课申请详情
* GET /adjust/detail * GET /course-running/adjust/detail
* @param ssdksqbh 调课申请编号 * @param ssdksqbh 调课申请编号
* 返回:ScheduleAdjustDetailVO * 返回:ScheduleAdjustDetailVO
*/ */
@@ -70,10 +69,10 @@ export function getScheduleAdjustDetail(ssdksqbh) {
/** /**
* 提交调课申请 * 提交调课申请
* POST /adjust/submit * POST /course-running/adjust/submit
* 请求体(ScheduleAdjustApplyDTO):sskcbbh 课次编号、sy 调课事由、rq 新日期、jc 新节次、 * 请求体(ScheduleAdjustApplyDTO)核心字段:sskcbbh 课次编号、sy 调课事由、rq 调课后新日期、
* nd 年度、sqjybh 申请教员编号、jxnr 教学内容、jxyd 教学要点、jxff 教学方法、 * jc 调课后新节次、nd 年度、sqjybh 申请教员编号(可选 ydsjap 原日期节次描述、xydrwbh/kbh/
* jxbzbz 教学保障备注、ycxx 用车信息、bz 备注、roomList/teacherList/teamList/supportList * kcbbh/xydmc/jysdh/yjsbh/xjsbh/kcmc/sqjyxm 由课次自动带出)
*/ */
export function submitScheduleAdjust(data) { export function submitScheduleAdjust(data) {
return request({ return request({
@@ -85,8 +84,9 @@ export function submitScheduleAdjust(data) {
/** /**
* 教研室审批调课申请 * 教研室审批调课申请
* POST /adjust/audit/jys * POST /course-running/adjust/audit/jys
* 请求体(ScheduleAdjustAuditDTO):ssdksqbh、auditRole=jys、spzt(1同意/2发回/3拒绝)、fhyj、sprbh * 请求体(ScheduleAdjustAuditDTO):ssdksqbh(必填)、spzt(1同意/2发回/3拒绝)、
* fhyj(审批意见,发回时填写)、sprbh(审批人编号,不传时取当前登录人;点审批即已查收)
*/ */
export function auditByTeachingOffice(data) { export function auditByTeachingOffice(data) {
return request({ return request({
@@ -96,66 +96,10 @@ export function auditByTeachingOffice(data) {
}) })
} }
/**
* 教研室查收调课申请
* POST /adjust/receive/jys
* @param ssdksqbh 调课申请编号
* @param csrbh 查收人编号
*/
export function receiveByTeachingOffice(params) {
return request({
url: '/course-running/adjust/receive/jys',
method: 'post',
params
})
}
/**
* 教学系审批调课申请
* POST /adjust/audit/jxx
* 请求体(ScheduleAdjustAuditDTO):ssdksqbh、auditRole=jxx、spzt、fhyj、sprbh
*/
export function auditByTeachingDepartment(data) {
return request({
url: '/course-running/adjust/audit/jxx',
method: 'post',
data
})
}
/**
* 机关审批调课申请
* POST /adjust/audit/jg
* 请求体(ScheduleAdjustAuditDTO):ssdksqbh、auditRole=jg、spzt、fhyj、sprbh、jgbh(机关编号必填)
*/
export function auditByAuthority(data) {
return request({
url: '/course-running/adjust/audit/jg',
method: 'post',
data
})
}
/**
* 机关查收调课申请
* POST /adjust/receive/jg
* @param ssdksqbh 调课申请编号
* @param jgbh 机关编号
* @param csrbh 查收人编号
*/
export function receiveByAuthority(params) {
return request({
url: '/course-running/adjust/receive/jg',
method: 'post',
params
})
}
/** /**
* 撤销调课申请 * 撤销调课申请
* DELETE /adjust/cancel * DELETE /course-running/adjust/cancel
* @param ssdksqbh 调课申请编号 * @param params { ssdksqbh, sqjybh }
* @param sqjybh 申请教员编号(权限校验)
*/ */
export function cancelScheduleAdjust(params) { export function cancelScheduleAdjust(params) {
return request({ return request({
@@ -79,21 +79,7 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div class="ops-cell"> <div class="ops-cell">
<el-button type="text" size="mini" icon="el-icon-view" @click="openDetail(scope.row)">详情</el-button> <el-button type="text" size="mini" icon="el-icon-view" @click="openDetail(scope.row)">详情</el-button>
<el-dropdown v-if="showAuditMenu(scope.row)" trigger="click" @command="cmd => openAudit(scope.row, cmd)"> <el-button v-if="showAuditMenu(scope.row)" type="text" size="mini" @click="openAudit(scope.row)">审批</el-button>
<el-button type="text" size="mini" @click.stop>审批<i class="el-icon-arrow-down el-icon--right" /></el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="scope.row.jyspzzt === 0" command="jys">教研室审批</el-dropdown-item>
<el-dropdown-item v-if="scope.row.jyspzzt === 1" command="jxx">教学系审批</el-dropdown-item>
<el-dropdown-item v-if="scope.row.jyspzzt === 1" command="jg">机关审批</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown v-if="showReceiveMenu(scope.row)" trigger="click" @command="cmd => openReceive(scope.row, cmd)">
<el-button type="text" size="mini" @click.stop>查收<i class="el-icon-arrow-down el-icon--right" /></el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="scope.row.jyscszt === 0" command="jys">教研室查收</el-dropdown-item>
<el-dropdown-item command="jg">机关查收</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-button v-if="scope.row.sczt === 0 && scope.row.jyspzzt !== 1" type="text" size="mini" class="danger-btn" @click="handleCancel(scope.row)">撤销</el-button> <el-button v-if="scope.row.sczt === 0 && scope.row.jyspzzt !== 1" type="text" size="mini" class="danger-btn" @click="handleCancel(scope.row)">撤销</el-button>
</div> </div>
</template> </template>
@@ -135,23 +121,17 @@
<el-form-item label="申请教员编号" prop="sqjybh"> <el-form-item label="申请教员编号" prop="sqjybh">
<el-input v-model="addForm.sqjybh" placeholder="请输入申请教员编号" /> <el-input v-model="addForm.sqjybh" placeholder="请输入申请教员编号" />
</el-form-item> </el-form-item>
<el-form-item label="教学内容"> <el-form-item label="学员队名称">
<el-input v-model="addForm.jxnr" placeholder="选填" /> <el-input v-model="addForm.xydmc" placeholder="选择可供调课课次后自动带出" />
</el-form-item> </el-form-item>
<el-form-item label="教学要点"> <el-form-item label="原教室编号">
<el-input v-model="addForm.jxyd" placeholder="选填" /> <el-input v-model="addForm.yjsbh" placeholder="选择可供调课课次后自动带出" />
</el-form-item> </el-form-item>
<el-form-item label="教学方法"> <el-form-item label="拟调整教室编号">
<el-input v-model="addForm.jxff" placeholder="选填" /> <el-input v-model="addForm.xjsbh" placeholder="选填" />
</el-form-item> </el-form-item>
<el-form-item label="教学保障备注"> <el-form-item label="原上课时间">
<el-input v-model="addForm.jxbzbz" placeholder="选填" /> <el-input v-model="addForm.ydsjap" placeholder="选择可供调课课次后自动带出" />
</el-form-item>
<el-form-item label="用车信息">
<el-input v-model="addForm.ycxx" placeholder="选填" />
</el-form-item>
<el-form-item label="备注">
<el-input v-model="addForm.bz" type="textarea" :rows="2" placeholder="选填" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@@ -180,7 +160,7 @@
</el-dialog> </el-dialog>
<!-- 审批弹窗 --> <!-- 审批弹窗 -->
<el-dialog :title="auditTitle" :visible.sync="auditVisible" width="520px" append-to-body> <el-dialog title="教研室审批" :visible.sync="auditVisible" width="520px" append-to-body>
<el-form ref="auditForm" :model="auditForm" label-width="100px"> <el-form ref="auditForm" :model="auditForm" label-width="100px">
<el-form-item label="审批结果" required> <el-form-item label="审批结果" required>
<el-radio-group v-model="auditForm.spzt"> <el-radio-group v-model="auditForm.spzt">
@@ -188,15 +168,13 @@
<el-radio :label="2">发回</el-radio> <el-radio :label="2">发回</el-radio>
<el-radio :label="3">拒绝</el-radio> <el-radio :label="3">拒绝</el-radio>
</el-radio-group> </el-radio-group>
<div class="form-tip">点审批即已查收</div>
</el-form-item> </el-form-item>
<el-form-item label="审批意见"> <el-form-item label="审批意见">
<el-input v-model="auditForm.fhyj" type="textarea" :rows="3" placeholder="请输入审批意见(发回/拒绝时必填)" /> <el-input v-model="auditForm.fhyj" type="textarea" :rows="3" placeholder="请输入审批意见(发回/拒绝时必填)" />
</el-form-item> </el-form-item>
<el-form-item label="审批人编号" required> <el-form-item label="审批人编号">
<el-input v-model="auditForm.sprbh" placeholder="请输入审批人编号" /> <el-input v-model="auditForm.sprbh" placeholder="不填默认取当前登录人" />
</el-form-item>
<el-form-item v-if="auditForm.auditRole === 'jg'" label="机关编号" required>
<el-input v-model="auditForm.jgbh" placeholder="请输入机关编号" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@@ -205,22 +183,6 @@
</div> </div>
</el-dialog> </el-dialog>
<!-- 查收弹窗 -->
<el-dialog :title="receiveTitle" :visible.sync="receiveVisible" width="460px" append-to-body>
<el-form ref="receiveForm" :model="receiveForm" label-width="100px">
<el-form-item v-if="receiveForm.type === 'jg'" label="机关编号" required>
<el-input v-model="receiveForm.jgbh" placeholder="请输入机关编号" />
</el-form-item>
<el-form-item label="查收人编号" required>
<el-input v-model="receiveForm.csrbh" placeholder="请输入查收人编号" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" :loading="receiveLoading" @click="submitReceive">确定</el-button>
<el-button @click="receiveVisible = false">取消</el-button>
</div>
</el-dialog>
<!-- 查看详情弹窗 --> <!-- 查看详情弹窗 -->
<el-dialog title="申请详情" :visible.sync="detailVisible" width="760px" append-to-body> <el-dialog title="申请详情" :visible.sync="detailVisible" width="760px" append-to-body>
<div v-loading="detailLoading"> <div v-loading="detailLoading">
@@ -329,10 +291,6 @@ import {
getScheduleAdjustDetail, getScheduleAdjustDetail,
submitScheduleAdjust, submitScheduleAdjust,
auditByTeachingOffice, auditByTeachingOffice,
auditByTeachingDepartment,
auditByAuthority,
receiveByTeachingOffice,
receiveByAuthority,
cancelScheduleAdjust cancelScheduleAdjust
} from '@/api/teachBusiness/courseRunning' } from '@/api/teachBusiness/courseRunning'
import { listAllSemester } from '@/api/teachBusiness/semester' import { listAllSemester } from '@/api/teachBusiness/semester'
@@ -402,13 +360,7 @@ export default {
// 审批 // 审批
auditVisible: false, auditVisible: false,
auditLoading: false, auditLoading: false,
auditTitle: '审批', auditForm: { ssdksqbh: '', spzt: 1, fhyj: '', sprbh: '' },
auditForm: { ssdksqbh: '', auditRole: 'jys', spzt: 1, fhyj: '', sprbh: '', jgbh: '' },
// 查收
receiveVisible: false,
receiveLoading: false,
receiveTitle: '查收',
receiveForm: { ssdksqbh: '', type: 'jys', csrbh: '', jgbh: '' },
// 详情 // 详情
detailVisible: false, detailVisible: false,
detailLoading: false, detailLoading: false,
@@ -523,12 +475,10 @@ export default {
rq: '', rq: '',
jc: 1, jc: 1,
sqjybh: this.curUserName, sqjybh: this.curUserName,
jxnr: '', xydmc: '',
jxyd: '', yjsbh: '',
jxff: '', xjsbh: '',
jxbzbz: '', ydsjap: ''
ycxx: '',
bz: ''
} }
this.$nextTick(() => this.$refs.addForm && this.$refs.addForm.clearValidate()) this.$nextTick(() => this.$refs.addForm && this.$refs.addForm.clearValidate())
this.addVisible = true this.addVisible = true
@@ -545,11 +495,16 @@ export default {
this.lessonDialogVisible = true this.lessonDialogVisible = true
}).catch(() => { }).catch(() => {
this.lessonLoading = false this.lessonLoading = false
this.$message.info('后端暂未提供可供调课课次接口,请手动填写课次编号') this.$message.info('加载可供调课课次失败,请手动填写课次编号')
}) })
}, },
pickLesson(row) { pickLesson(row) {
this.addForm.sskcbbh = row.sskcbbh this.addForm.sskcbbh = row.sskcbbh
// 自动带出课次关联字段(若接口返回则回填)
;['xydmc', 'yjsbh', 'ydsjap', 'kbh', 'kcbbh', 'xydrwbh', 'jysdh', 'xjsbh', '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.lessonDialogVisible = false
this.$message.success('已选择课次:' + (row.kcmc || row.sskcbbh)) this.$message.success('已选择课次:' + (row.kcmc || row.sskcbbh))
}, },
@@ -564,7 +519,7 @@ export default {
nd: this.addForm.nd, nd: this.addForm.nd,
sqjybh: this.addForm.sqjybh sqjybh: this.addForm.sqjybh
} }
;['jxnr', 'jxyd', 'jxff', 'jxbzbz', 'ycxx', 'bz'].forEach(key => { ;['xydmc', 'yjsbh', 'xjsbh', 'ydsjap', 'kbh', 'kcbbh', 'xydrwbh', 'jysdh', 'kcmc', 'sqjyxm'].forEach(key => {
if (this.addForm[key]) payload[key] = this.addForm[key] if (this.addForm[key]) payload[key] = this.addForm[key]
}) })
this.addLoading = true this.addLoading = true
@@ -580,46 +535,31 @@ export default {
}, },
/* ---------- 审批 ---------- */ /* ---------- 审批 ---------- */
showAuditMenu(row) { showAuditMenu(row) {
return row.sczt === 0 && (row.jyspzzt === 0 || row.jyspzzt === 1) return row.sczt === 0 && (row.jyspzzt === 0 || row.jyspzzt === 2 || row.jyspzzt === 3)
}, },
openAudit(row, role) { openAudit(row) {
const titleMap = { jys: '教研室审批', jxx: '教学系审批', jg: '机关审批' }
this.auditTitle = titleMap[role] || '审批'
this.auditForm = { this.auditForm = {
ssdksqbh: row.ssdksqbh, ssdksqbh: row.ssdksqbh,
auditRole: role,
spzt: 1, spzt: 1,
fhyj: '', fhyj: '',
sprbh: this.curUserName, sprbh: ''
jgbh: ''
} }
this.auditVisible = true this.auditVisible = true
}, },
submitAudit() { submitAudit() {
const f = this.auditForm const f = this.auditForm
if (!f.sprbh) { if (f.spzt !== 1 && !f.fhyj) {
this.$message.warning('请填写审批人编号') this.$message.warning('发回/拒绝时请填写审批意见')
return
}
if (f.auditRole === 'jg' && !f.jgbh) {
this.$message.warning('请填写机关编号')
return return
} }
const payload = { const payload = {
ssdksqbh: f.ssdksqbh, ssdksqbh: f.ssdksqbh,
auditRole: f.auditRole,
spzt: f.spzt, spzt: f.spzt,
fhyj: f.fhyj, fhyj: f.fhyj
sprbh: f.sprbh
}
if (f.jgbh) payload.jgbh = f.jgbh
const apiMap = {
jys: auditByTeachingOffice,
jxx: auditByTeachingDepartment,
jg: auditByAuthority
} }
if (f.sprbh) payload.sprbh = f.sprbh
this.auditLoading = true this.auditLoading = true
apiMap[f.auditRole](payload).then(() => { auditByTeachingOffice(payload).then(() => {
this.auditLoading = false this.auditLoading = false
this.auditVisible = false this.auditVisible = false
this.$message.success('审批成功') this.$message.success('审批成功')
@@ -628,48 +568,11 @@ export default {
this.auditLoading = false this.auditLoading = false
}) })
}, },
/* ---------- 查收 ---------- */
showReceiveMenu(row) {
return row.sczt === 0 && row.jyspzzt === 1
},
openReceive(row, type) {
this.receiveTitle = type === 'jys' ? '教研室查收' : '机关查收'
this.receiveForm = {
ssdksqbh: row.ssdksqbh,
type: type,
csrbh: this.curUserName,
jgbh: ''
}
this.receiveVisible = true
},
submitReceive() {
const f = this.receiveForm
if (!f.csrbh) {
this.$message.warning('请填写查收人编号')
return
}
if (f.type === 'jg' && !f.jgbh) {
this.$message.warning('请填写机关编号')
return
}
const params = { ssdksqbh: f.ssdksqbh, csrbh: f.csrbh }
if (f.jgbh) params.jgbh = f.jgbh
const api = f.type === 'jys' ? receiveByTeachingOffice : receiveByAuthority
this.receiveLoading = true
api(params).then(() => {
this.receiveLoading = false
this.receiveVisible = false
this.$message.success('查收成功')
this.loadList()
}).catch(() => {
this.receiveLoading = false
})
},
/* ---------- 撤销 ---------- */ /* ---------- 撤销 ---------- */
handleCancel(row) { handleCancel(row) {
this.$confirm('确认撤销该调课申请?撤销后课次将恢复原时间。', '提示', { type: 'warning' }) this.$confirm('确认撤销该调课申请?', '提示', { type: 'warning' })
.then(() => { .then(() => {
cancelScheduleAdjust({ ssdksqbh: row.ssdksqbh, sqjybh: row.sqjybh }).then(() => { cancelScheduleAdjust({ ssdksqbh: row.ssdksqbh }).then(() => {
this.$message.success('撤销成功') this.$message.success('撤销成功')
this.loadList() this.loadList()
}).catch(() => {}) }).catch(() => {})
@@ -791,6 +694,13 @@ export default {
gap: 0 4px; gap: 0 4px;
} }
.form-tip {
font-size: 12px;
color: #909399;
line-height: 1.4;
margin-top: 4px;
}
.pick-lesson-btn { .pick-lesson-btn {
margin-top: 6px; margin-top: 6px;
width: 100%; width: 100%;
@@ -103,22 +103,9 @@
<el-form ref="addFormRef" :model="addForm" :rules="addRules" label-width="140px" class="add-form"> <el-form ref="addFormRef" :model="addForm" :rules="addRules" label-width="140px" class="add-form">
<el-divider content-position="left">教员基本信息</el-divider> <el-divider content-position="left">教员基本信息</el-divider>
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="12">
<el-form-item label="教员编号"><el-input v-model="addForm.teacher.jybh" placeholder="选填" /></el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="教员姓名" prop="teacher.jyxm"><el-input v-model="addForm.teacher.jyxm" placeholder="请输入" /></el-form-item> <el-form-item label="教员姓名" prop="teacher.jyxm"><el-input v-model="addForm.teacher.jyxm" placeholder="请输入" /></el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="教研室代号" prop="teacher.jysdh"><el-input v-model="addForm.teacher.jysdh" placeholder="请输入" /></el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="序号" prop="teacher.xh"><el-input v-model="addForm.teacher.xh" placeholder="请输入" /></el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="性别" prop="teacher.xb"> <el-form-item label="性别" prop="teacher.xb">
<el-select v-model="addForm.teacher.xb" style="width:100%"> <el-select v-model="addForm.teacher.xb" style="width:100%">
@@ -126,33 +113,55 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="序号" prop="teacher.xh"><el-input v-model="addForm.teacher.xh" placeholder="请输入" /></el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="身份证号" prop="teacher.sfzh"><el-input v-model="addForm.teacher.sfzh" placeholder="请输入" /></el-form-item> <el-form-item label="身份证号" prop="teacher.sfzh"><el-input v-model="addForm.teacher.sfzh" placeholder="请输入" /></el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="专业技术职务等级" prop="teacher.zyjszwdj"><el-input v-model="addForm.teacher.zyjszwdj" placeholder="请输入" /></el-form-item> <el-form-item label="专业技术职务等级" prop="teacher.zyjszwdj">
<el-select v-model="addForm.teacher.zyjszwdj" placeholder="请选择" clearable style="width:100%">
<el-option v-for="item in zyjszwdjOptions" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="虚实类型" prop="teacher.xslx"> <el-form-item label="虚实类型" prop="teacher.xslx">
<el-select v-model="addForm.teacher.xslx" style="width:100%"> <el-radio-group v-model="addForm.teacher.xslx">
<el-option :value="1" label="实教" /><el-option :value="0" label="非实教" /> <el-radio :label="1">是</el-radio>
<el-radio :label="0">否</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="教员类别" prop="teacher.jylb">
<el-select v-model="addForm.teacher.jylb" placeholder="请选择" clearable style="width:100%">
<el-option v-for="item in jylbOptions" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="在职类别" prop="teacher.zzlb">
<el-select v-model="addForm.teacher.zzlb" placeholder="请选择" clearable style="width:100%">
<el-option v-for="item in zzlbOptions" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="16"> <el-row :gutter="16">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="教员类别" prop="teacher.jylb"><el-input v-model="addForm.teacher.jylb" placeholder="请输入" /></el-form-item> <el-form-item label="导师类别" prop="teacher.dslb">
</el-col> <el-select v-model="addForm.teacher.dslb" placeholder="请选择" clearable style="width:100%">
<el-col :span="12"> <el-option v-for="item in dslbOptions" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue" />
<el-form-item label="在职类别" prop="teacher.zzlb"><el-input v-model="addForm.teacher.zzlb" placeholder="请输入" /></el-form-item> </el-select>
</el-col> </el-form-item>
</el-row>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="导师类别" prop="teacher.dslb"><el-input v-model="addForm.teacher.dslb" placeholder="请输入" /></el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="学缘" prop="teacher.xy"><el-input v-model="addForm.teacher.xy" placeholder="请输入" /></el-form-item> <el-form-item label="学缘" prop="teacher.xy"><el-input v-model="addForm.teacher.xy" placeholder="请输入" /></el-form-item>
@@ -594,6 +603,7 @@ import {
getTeacherAttribute, getTeacherAttribute,
updateTeacherAttribute updateTeacherAttribute
} from '@/api/teachOffice/teacher' } from '@/api/teachOffice/teacher'
import { getDicts } from '@/api/system/dict/data'
export default { export default {
name: 'Teacher', name: 'Teacher',
@@ -614,14 +624,14 @@ export default {
addForm: this.createEmptyAddForm(), addForm: this.createEmptyAddForm(),
addRules: { addRules: {
'teacher.jyxm': [{ required: true, message: '请输入教员姓名', trigger: 'blur' }], 'teacher.jyxm': [{ required: true, message: '请输入教员姓名', trigger: 'blur' }],
'teacher.jysdh': [{ required: true, message: '请输入教研室代号', trigger: 'blur' }],
'teacher.xh': [{ required: true, message: '请输入序号', trigger: 'blur' }], 'teacher.xh': [{ required: true, message: '请输入序号', trigger: 'blur' }],
'teacher.zyjszwdj': [{ required: true, message: '请输入专业技术职务等级', trigger: 'blur' }], 'teacher.zyjszwdj': [{ required: true, message: '请选择专业技术职务等级', trigger: 'change' }],
'teacher.xslx': [{ required: true, message: '请选择虚实类型', trigger: 'change' }], 'teacher.xslx': [{ required: true, message: '请选择虚实类型', trigger: 'change' }],
'teacher.jylb': [{ required: true, message: '请输入教员类别', trigger: 'blur' }], 'teacher.jylb': [{ required: true, message: '请选择教员类别', trigger: 'change' }],
'teacher.zzlb': [{ required: true, message: '请输入在职类别', trigger: 'blur' }], 'teacher.zzlb': [{ required: true, message: '请选择在职类别', trigger: 'change' }],
'teacher.ewyxkbs': [{ required: true, message: '请输入额外允许开班数', trigger: 'change' }], 'teacher.ewyxkbs': [{ required: true, message: '请输入额外允许开班数', trigger: 'change' }],
'teacher.dslb': [{ required: true, message: '请输入导师类别', trigger: 'blur' }], 'teacher.dslb': [{ required: true, message: '请选择导师类别', trigger: 'change' }],
'teacher.xy': [{ required: true, message: '请输入学缘', trigger: 'blur' }], 'teacher.xy': [{ required: true, message: '请输入学缘', trigger: 'blur' }],
'teacher.sfzh': [{ required: true, message: '请输入身份证号', trigger: 'blur' }], 'teacher.sfzh': [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
'teacher.xb': [{ required: true, message: '请选择性别', trigger: 'change' }], 'teacher.xb': [{ required: true, message: '请选择性别', trigger: 'change' }],
@@ -659,11 +669,17 @@ export default {
attributeForm: {}, attributeForm: {},
attributeLoading: false, attributeLoading: false,
attributeSaving: false, attributeSaving: false,
attributeJybh: '' attributeJybh: '',
// 字典选项
zyjszwdjOptions: [],
jylbOptions: [],
zzlbOptions: [],
dslbOptions: []
} }
}, },
mounted() { mounted() {
this.fetchList() this.fetchList()
this.loadDicts()
}, },
methods: { methods: {
/** 统一格式化后端 LocalDateTime(去除 T、截断到秒) */ /** 统一格式化后端 LocalDateTime(去除 T、截断到秒) */
@@ -696,6 +712,15 @@ export default {
}, },
/** 移除空值 */ /** 移除空值 */
loadDicts() {
getDicts('teacher_zyjszwdj').then(res => { this.zyjszwdjOptions = res.data || [] }).catch(() => {})
getDicts('teacher_jylb').then(res => { this.jylbOptions = res.data || [] }).catch(() => {})
getDicts('teacher_zzlb').then(res => { this.zzlbOptions = res.data || [] }).catch(() => {})
getDicts('teacher_dslb').then(res => { this.dslbOptions = res.data || [] }).catch(() => {})
},
cleanPayload(obj) { cleanPayload(obj) {
const payload = {} const payload = {}
Object.keys(obj).forEach(key => { Object.keys(obj).forEach(key => {
@@ -1052,3 +1077,5 @@ export default {
} }
} }
</style> </style>