教员管理,教研室管理

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
@@ -79,21 +79,7 @@
<template slot-scope="scope">
<div class="ops-cell">
<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 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="showAuditMenu(scope.row)" type="text" size="mini" @click="openAudit(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>
</template>
@@ -135,23 +121,17 @@
<el-form-item label="申请教员编号" prop="sqjybh">
<el-input v-model="addForm.sqjybh" placeholder="请输入申请教员编号" />
</el-form-item>
<el-form-item label="教学内容">
<el-input v-model="addForm.jxnr" placeholder="选" />
<el-form-item label="学员队名称">
<el-input v-model="addForm.xydmc" placeholder="选择可供调课课次后自动带出" />
</el-form-item>
<el-form-item label="教学要点">
<el-input v-model="addForm.jxyd" placeholder="选" />
<el-form-item label="原教室编号">
<el-input v-model="addForm.yjsbh" placeholder="选择可供调课课次后自动带出" />
</el-form-item>
<el-form-item label="教学方法">
<el-input v-model="addForm.jxff" placeholder="选填" />
<el-form-item label="拟调整教室编号">
<el-input v-model="addForm.xjsbh" placeholder="选填" />
</el-form-item>
<el-form-item label="教学保障备注">
<el-input v-model="addForm.jxbzbz" 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 label="原上课时间">
<el-input v-model="addForm.ydsjap" placeholder="选择可供调课课次后自动带出" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -180,7 +160,7 @@
</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-item label="审批结果" required>
<el-radio-group v-model="auditForm.spzt">
@@ -188,15 +168,13 @@
<el-radio :label="2">发回</el-radio>
<el-radio :label="3">拒绝</el-radio>
</el-radio-group>
<div class="form-tip">点审批即已查收</div>
</el-form-item>
<el-form-item label="审批意见">
<el-input v-model="auditForm.fhyj" type="textarea" :rows="3" placeholder="请输入审批意见(发回/拒绝时必填)" />
</el-form-item>
<el-form-item label="审批人编号" required>
<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 label="审批人编号">
<el-input v-model="auditForm.sprbh" placeholder="不填默认取当前登录人" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -205,22 +183,6 @@
</div>
</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>
<div v-loading="detailLoading">
@@ -329,10 +291,6 @@ import {
getScheduleAdjustDetail,
submitScheduleAdjust,
auditByTeachingOffice,
auditByTeachingDepartment,
auditByAuthority,
receiveByTeachingOffice,
receiveByAuthority,
cancelScheduleAdjust
} from '@/api/teachBusiness/courseRunning'
import { listAllSemester } from '@/api/teachBusiness/semester'
@@ -402,13 +360,7 @@ export default {
// 审批
auditVisible: false,
auditLoading: false,
auditTitle: '审批',
auditForm: { ssdksqbh: '', auditRole: 'jys', spzt: 1, fhyj: '', sprbh: '', jgbh: '' },
// 查收
receiveVisible: false,
receiveLoading: false,
receiveTitle: '查收',
receiveForm: { ssdksqbh: '', type: 'jys', csrbh: '', jgbh: '' },
auditForm: { ssdksqbh: '', spzt: 1, fhyj: '', sprbh: '' },
// 详情
detailVisible: false,
detailLoading: false,
@@ -523,12 +475,10 @@ export default {
rq: '',
jc: 1,
sqjybh: this.curUserName,
jxnr: '',
jxyd: '',
jxff: '',
jxbzbz: '',
ycxx: '',
bz: ''
xydmc: '',
yjsbh: '',
xjsbh: '',
ydsjap: ''
}
this.$nextTick(() => this.$refs.addForm && this.$refs.addForm.clearValidate())
this.addVisible = true
@@ -545,11 +495,16 @@ export default {
this.lessonDialogVisible = true
}).catch(() => {
this.lessonLoading = false
this.$message.info('后端暂未提供可供调课课次接口,请手动填写课次编号')
this.$message.info('加载可供调课课次失败,请手动填写课次编号')
})
},
pickLesson(row) {
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.$message.success('已选择课次:' + (row.kcmc || row.sskcbbh))
},
@@ -564,7 +519,7 @@ export default {
nd: this.addForm.nd,
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]
})
this.addLoading = true
@@ -580,46 +535,31 @@ export default {
},
/* ---------- 审批 ---------- */
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) {
const titleMap = { jys: '教研室审批', jxx: '教学系审批', jg: '机关审批' }
this.auditTitle = titleMap[role] || '审批'
openAudit(row) {
this.auditForm = {
ssdksqbh: row.ssdksqbh,
auditRole: role,
spzt: 1,
fhyj: '',
sprbh: this.curUserName,
jgbh: ''
sprbh: ''
}
this.auditVisible = true
},
submitAudit() {
const f = this.auditForm
if (!f.sprbh) {
this.$message.warning('请填写审批人编号')
return
}
if (f.auditRole === 'jg' && !f.jgbh) {
this.$message.warning('请填写机关编号')
if (f.spzt !== 1 && !f.fhyj) {
this.$message.warning('发回/拒绝时请填写审批意见')
return
}
const payload = {
ssdksqbh: f.ssdksqbh,
auditRole: f.auditRole,
spzt: f.spzt,
fhyj: f.fhyj,
sprbh: f.sprbh
}
if (f.jgbh) payload.jgbh = f.jgbh
const apiMap = {
jys: auditByTeachingOffice,
jxx: auditByTeachingDepartment,
jg: auditByAuthority
fhyj: f.fhyj
}
if (f.sprbh) payload.sprbh = f.sprbh
this.auditLoading = true
apiMap[f.auditRole](payload).then(() => {
auditByTeachingOffice(payload).then(() => {
this.auditLoading = false
this.auditVisible = false
this.$message.success('审批成功')
@@ -628,48 +568,11 @@ export default {
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) {
this.$confirm('确认撤销该调课申请?撤销后课次将恢复原时间。', '提示', { type: 'warning' })
this.$confirm('确认撤销该调课申请?', '提示', { type: 'warning' })
.then(() => {
cancelScheduleAdjust({ ssdksqbh: row.ssdksqbh, sqjybh: row.sqjybh }).then(() => {
cancelScheduleAdjust({ ssdksqbh: row.ssdksqbh }).then(() => {
this.$message.success('撤销成功')
this.loadList()
}).catch(() => {})
@@ -791,6 +694,13 @@ export default {
gap: 0 4px;
}
.form-tip {
font-size: 12px;
color: #909399;
line-height: 1.4;
margin-top: 4px;
}
.pick-lesson-btn {
margin-top: 6px;
width: 100%;