课表调整申请新增
This commit is contained in:
@@ -10,6 +10,15 @@ export function listElective(query) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 新建选修课(body: ElectiveCourseSaveDTO)
|
||||||
|
export function addElective(data) {
|
||||||
|
return request({
|
||||||
|
url: '/jys/elective/add',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 批量开放报名
|
// 批量开放报名
|
||||||
export function batchOpenElective(bhList) {
|
export function batchOpenElective(bhList) {
|
||||||
return request({
|
return request({
|
||||||
|
|||||||
@@ -80,7 +80,7 @@
|
|||||||
<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-button v-if="showAuditMenu(scope.row)" type="text" size="mini" @click="openAudit(scope.row)">审批</el-button>
|
<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>
|
<el-button v-if="scope.row.sczt === 0 && scope.row.jyspzzt !== 1 && scope.row.jyspzzt !== 3" type="text" size="mini" class="danger-btn" @click="handleCancel(scope.row)">撤销</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -194,9 +194,6 @@
|
|||||||
<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="审批人编号">
|
|
||||||
<el-input v-model="auditForm.sprbh" placeholder="不填默认取当前登录人" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button type="primary" :loading="auditLoading" @click="submitAudit">确定</el-button>
|
<el-button type="primary" :loading="auditLoading" @click="submitAudit">确定</el-button>
|
||||||
@@ -223,6 +220,7 @@
|
|||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="教研室审批人">{{ detailData.jyspzrbh || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="教研室审批人">{{ detailData.jyspzrbh || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="教研室审批时间">{{ fmtDateTime(detailData.jyspzsj) }}</el-descriptions-item>
|
<el-descriptions-item label="教研室审批时间">{{ fmtDateTime(detailData.jyspzsj) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="审批意见" :span="2">{{ detailData.fhyj || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="教研室查收人">{{ detailData.jyscsrbh || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="教研室查收人">{{ detailData.jyscsrbh || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="教研室查收时间">{{ fmtDateTime(detailData.jyscssj) }}</el-descriptions-item>
|
<el-descriptions-item label="教研室查收时间">{{ fmtDateTime(detailData.jyscssj) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="教学内容" :span="2">{{ detailData.jxnr || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="教学内容" :span="2">{{ detailData.jxnr || '-' }}</el-descriptions-item>
|
||||||
@@ -316,6 +314,7 @@ import {
|
|||||||
} from '@/api/teachBusiness/courseRunning'
|
} from '@/api/teachBusiness/courseRunning'
|
||||||
import { listAllSemester } from '@/api/teachBusiness/semester'
|
import { listAllSemester } from '@/api/teachBusiness/semester'
|
||||||
import { listAllClassroom } from '@/api/teachBusiness/classroom'
|
import { listAllClassroom } from '@/api/teachBusiness/classroom'
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
|
||||||
// 节次 -> 节次区间映射
|
// 节次 -> 节次区间映射
|
||||||
const JC_SECTION = {
|
const JC_SECTION = {
|
||||||
@@ -381,13 +380,22 @@ export default {
|
|||||||
// 审批
|
// 审批
|
||||||
auditVisible: false,
|
auditVisible: false,
|
||||||
auditLoading: false,
|
auditLoading: false,
|
||||||
auditForm: { ssdksqbh: '', spzt: 1, fhyj: '', sprbh: '' },
|
auditForm: { ssdksqbh: '', spzt: 1, fhyj: '' },
|
||||||
// 详情
|
// 详情
|
||||||
detailVisible: false,
|
detailVisible: false,
|
||||||
detailLoading: false,
|
detailLoading: false,
|
||||||
detailData: null
|
detailData: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['roles']),
|
||||||
|
isTeacher() {
|
||||||
|
const r = this.roles || []
|
||||||
|
const hasTeacher = r.includes('TEACHER') || r.includes('teacher') || r.includes('ROLE_TEACHER')
|
||||||
|
const hasAdmin = r.includes('admin') || r.includes('ROLE_ADMIN')
|
||||||
|
return hasTeacher && !hasAdmin
|
||||||
|
}
|
||||||
|
},
|
||||||
created() {
|
created() {
|
||||||
this.loadYearOptions().then(() => this.loadList())
|
this.loadYearOptions().then(() => this.loadList())
|
||||||
},
|
},
|
||||||
@@ -701,14 +709,15 @@ export default {
|
|||||||
},
|
},
|
||||||
/* ---------- 审批 ---------- */
|
/* ---------- 审批 ---------- */
|
||||||
showAuditMenu(row) {
|
showAuditMenu(row) {
|
||||||
return row.sczt === 0 && (row.jyspzzt === 0 || row.jyspzzt === 2 || row.jyspzzt === 3)
|
// 教员角色不展示审批入口;已拒绝状态不展示审批
|
||||||
|
if (this.isTeacher) return false
|
||||||
|
return row.sczt === 0 && (row.jyspzzt === 0 || row.jyspzzt === 2)
|
||||||
},
|
},
|
||||||
openAudit(row) {
|
openAudit(row) {
|
||||||
this.auditForm = {
|
this.auditForm = {
|
||||||
ssdksqbh: row.ssdksqbh,
|
ssdksqbh: row.ssdksqbh,
|
||||||
spzt: 1,
|
spzt: 1,
|
||||||
fhyj: '',
|
fhyj: ''
|
||||||
sprbh: ''
|
|
||||||
}
|
}
|
||||||
this.auditVisible = true
|
this.auditVisible = true
|
||||||
},
|
},
|
||||||
@@ -723,7 +732,6 @@ export default {
|
|||||||
spzt: f.spzt,
|
spzt: f.spzt,
|
||||||
fhyj: f.fhyj
|
fhyj: f.fhyj
|
||||||
}
|
}
|
||||||
if (f.sprbh) payload.sprbh = f.sprbh
|
|
||||||
this.auditLoading = true
|
this.auditLoading = true
|
||||||
auditByTeachingOffice(payload).then(() => {
|
auditByTeachingOffice(payload).then(() => {
|
||||||
this.auditLoading = false
|
this.auditLoading = false
|
||||||
|
|||||||
@@ -186,17 +186,23 @@
|
|||||||
@update:visible="val => (dialogVisible = val)"
|
@update:visible="val => (dialogVisible = val)"
|
||||||
>
|
>
|
||||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
|
<el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
|
||||||
|
<el-form-item label="选修班名称" prop="xxbmc">
|
||||||
|
<el-input v-model="form.xxbmc" placeholder="请输入选修班名称" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="年级">
|
||||||
|
<el-input v-model="form.nj" placeholder="新建选修班时填写,如 2024" clearable />
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="课程名称" prop="kcmc">
|
<el-form-item label="课程名称" prop="kcmc">
|
||||||
<el-input v-model="form.kcmc" placeholder="请输入课程名称" clearable />
|
<el-input v-model="form.kcmc" placeholder="请输入课程名称,提交时按名称查找课编号" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="实施教员" prop="js">
|
<el-form-item label="实施教员" prop="js">
|
||||||
<el-input v-model="form.js" placeholder="请输入实施教员" clearable />
|
<el-input v-model="form.js" placeholder="请输入实施教员,提交时按名称查找教员编号" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="教材">
|
<el-form-item label="教材">
|
||||||
<el-input v-model="form.jc" placeholder="请输入教材" clearable />
|
<el-input v-model="form.jc" placeholder="请输入教材" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="教学场地">
|
<el-form-item label="教学场地">
|
||||||
<el-input v-model="form.jxcd" placeholder="请输入教学场地" clearable />
|
<el-input v-model="form.jxcd" placeholder="请输入教学场地,提交时按名称查找教室编号" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="计划学时">
|
<el-form-item label="计划学时">
|
||||||
<el-input-number v-model="form.jhsxs" :min="0" :precision="0" class="w-full" />
|
<el-input-number v-model="form.jhsxs" :min="0" :precision="0" class="w-full" />
|
||||||
@@ -222,6 +228,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import {
|
import {
|
||||||
listElective,
|
listElective,
|
||||||
|
addElective,
|
||||||
batchOpenElective,
|
batchOpenElective,
|
||||||
batchCancelOpenElective,
|
batchCancelOpenElective,
|
||||||
batchStopElective,
|
batchStopElective,
|
||||||
@@ -229,6 +236,9 @@ import {
|
|||||||
exportElectiveStudentsExcel,
|
exportElectiveStudentsExcel,
|
||||||
exportElectiveStudentsWord
|
exportElectiveStudentsWord
|
||||||
} from '@/api/teachOffice/elective'
|
} from '@/api/teachOffice/elective'
|
||||||
|
import { listKb } from '@/api/teachOffice/kb'
|
||||||
|
import { listTeacher } from '@/api/teachOffice/teacher'
|
||||||
|
import { listClassroom } from '@/api/teachBusiness/classroom'
|
||||||
import { saveAs } from 'file-saver'
|
import { saveAs } from 'file-saver'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -261,6 +271,8 @@ export default {
|
|||||||
// ==================== 新建选修课弹窗 ====================
|
// ==================== 新建选修课弹窗 ====================
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
form: {
|
form: {
|
||||||
|
xxbmc: '',
|
||||||
|
nj: '',
|
||||||
kcmc: '',
|
kcmc: '',
|
||||||
js: '',
|
js: '',
|
||||||
jc: '',
|
jc: '',
|
||||||
@@ -271,6 +283,7 @@ export default {
|
|||||||
jh: 0
|
jh: 0
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
|
xxbmc: [{ required: true, message: '请输入选修班名称', trigger: 'blur' }],
|
||||||
kcmc: [{ required: true, message: '请输入课程名称', trigger: 'blur' }],
|
kcmc: [{ required: true, message: '请输入课程名称', trigger: 'blur' }],
|
||||||
js: [{ required: true, message: '请输入实施教员', trigger: 'blur' }]
|
js: [{ required: true, message: '请输入实施教员', trigger: 'blur' }]
|
||||||
},
|
},
|
||||||
@@ -425,17 +438,63 @@ export default {
|
|||||||
|
|
||||||
// ==================== 新建选修课弹窗 ====================
|
// ==================== 新建选修课弹窗 ====================
|
||||||
handleOpenNew() {
|
handleOpenNew() {
|
||||||
this.$message.warning('后端暂未提供该接口')
|
this.form = {
|
||||||
|
xxbmc: '',
|
||||||
|
nj: '',
|
||||||
|
kcmc: '',
|
||||||
|
js: '',
|
||||||
|
jc: '',
|
||||||
|
jxcd: '',
|
||||||
|
jhsxs: 0,
|
||||||
|
yxsxs: 0,
|
||||||
|
xf: 0,
|
||||||
|
jh: 0
|
||||||
|
}
|
||||||
|
this.dialogVisible = true
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.$refs.formRef && this.$refs.formRef.clearValidate()
|
||||||
|
})
|
||||||
},
|
},
|
||||||
handleNewConfirm() {
|
handleNewConfirm() {
|
||||||
if (!this.$refs.formRef) return
|
if (!this.$refs.formRef) return
|
||||||
this.$refs.formRef.validate((valid) => {
|
this.$refs.formRef.validate((valid) => {
|
||||||
if (!valid) return
|
if (!valid) return
|
||||||
console.log('新建选修课:', JSON.parse(JSON.stringify(this.form)))
|
this.submitNewElective()
|
||||||
this.$message.success('新建选修课成功(前端模拟)')
|
|
||||||
this.dialogVisible = false
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
submitNewElective() {
|
||||||
|
const emptyPage = { data: { records: [] } }
|
||||||
|
Promise.all([
|
||||||
|
listKb({ pageNum: 1, pageSize: 1, kmc: this.form.kcmc }),
|
||||||
|
listTeacher({ pageNum: 1, pageSize: 1, jyxm: this.form.js }),
|
||||||
|
this.form.jxcd ? listClassroom({ pageNum: 1, pageSize: 1, jsmc: this.form.jxcd }) : Promise.resolve(emptyPage)
|
||||||
|
])
|
||||||
|
.then(([kbRes, teacherRes, roomRes]) => {
|
||||||
|
const kbh = kbRes?.data?.records?.[0]?.kbh
|
||||||
|
const jybh = teacherRes?.data?.records?.[0]?.jybh
|
||||||
|
const jsbh = roomRes?.data?.records?.[0]?.jsbh
|
||||||
|
if (!kbh) {
|
||||||
|
this.$message.warning(`未找到课程科目:${this.form.kcmc}`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const dto = {
|
||||||
|
kbh: kbh,
|
||||||
|
xxbmc: this.form.xxbmc,
|
||||||
|
nj: this.form.nj || undefined,
|
||||||
|
jybh: jybh || undefined,
|
||||||
|
jsbh: jsbh || undefined,
|
||||||
|
rs: this.form.jh || undefined,
|
||||||
|
xs: this.form.jhsxs || undefined,
|
||||||
|
xf: this.form.xf || undefined
|
||||||
|
}
|
||||||
|
return addElective(dto).then(() => {
|
||||||
|
this.$message.success('新建选修课成功')
|
||||||
|
this.dialogVisible = false
|
||||||
|
this.loadList()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch(() => {})
|
||||||
|
},
|
||||||
|
|
||||||
// ==================== 分页 ====================
|
// ==================== 分页 ====================
|
||||||
handlePageChange(page) {
|
handlePageChange(page) {
|
||||||
|
|||||||
Reference in New Issue
Block a user