You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

248 lines
8.4 KiB

3 months ago
<template>
<div>
<el-dialog title="新建班级" :visible.sync="open" width="700px">
<el-form ref="form" v-loading="loadingChange" :model="form" :rules="rules" label-width="120px" class="add-form">
<el-row>
<el-col :span="12">
<el-form-item label="选择课程:" prop="courseId">
<el-button v-if="chooseCourseInfo.courseId === undefined" type="primary" plain icon="el-icon-reading" size="small" @click="chooseCourse"></el-button>
<el-input v-else v-model="chooseCourseInfo.courseName" disabled readonly>
<el-button v-if="chooseCourseInfo.courseId !== undefined && canChangeCourse" slot="append" icon="el-icon-reading" @click="chooseCourse"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="班级名称:" prop="claName">
<div class="input-with-color-picker-container">
<el-input v-model="form.claName" placeholder="请输入班级名称" />
<el-tooltip class="item" effect="dark" content="选择班级颜色,便于课表中区分各班级" placement="right">
<el-color-picker v-model="form.claColor" :predefine="colorArray" />
</el-tooltip>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="任课教师:" prop="staffId">
<el-select
v-model="form.staffId"
filterable
allow-create
placeholder="选择上课教师"
clearable
default-first-option
>
<el-option
v-for="teacher in teacherOptions"
:key="teacher.staffId"
:label="teacher.staffName"
:value="teacher.staffId"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="满班人数:" prop="capacity">
<el-input-number v-model="form.capacity" controls-position="right" :min="0" placeholder="请输入满班人数" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="招生状态:" prop="recruitStatus">
<el-select
v-model="form.recruitStatus"
placeholder="请选择招生状态"
clearable
filterable
default-first-option
:loading="loadingSelect"
>
<el-option
v-for="dict in recruitStatusOptions"
:key="dict.dictValue"
:label="dict.dictLabel"
:value="dict.dictValue"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="每次上课:" prop="everyStuLoseHour">
学生扣除 <el-input-number v-model="form.everyStuLoseHour" class="auto-width" style="width: 100px" controls-position="right" :min="0" /> 课时
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="开班日期:" prop="openDate">
<el-date-picker
v-model="form.openDate"
clearable
type="date"
value-format="yyyy-MM-dd"
placeholder="选择开班日期"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结班日期:" prop="closeDate">
<el-date-picker
v-model="form.closeDate"
clearable
size="medium"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择结班日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="备注" prop="memo">
<el-input v-model="form.memo" type="textarea" placeholder="请输入备注内容" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="loadingChange" type="primary" @click="submitForm"> </el-button>
<el-button @click="open = false"> </el-button>
</div>
</el-dialog>
<choose-course ref="chooseCourse" @chooseComplete="chooseCourseComplete" />
</div>
</template>
<script>
import chooseCourse from '@/components/sc/course/chooseCourse'
import { addCla, updateCla } from '@/api/school/sc/cla'
import { select as teacherSelect } from '@/api/school/system/staff'
import moment from 'moment'
export default {
components: {
chooseCourse
},
props: {
colorArray: {
type: Array,
default: function() {
return ['#409EFF', '#67C23A', '#E6A23C', '#F56C6C']
}
}
},
data() {
return {
open: false,
loadingChange: false,
loadingSelect: false,
form: {
openDate: undefined,
everyStuLoseHour: 1,
claColor: '#409EFF'
},
rules: {
courseId: [
{ required: true, message: '请选择课程', trigger: 'blur' }
],
claName: [
{ required: true, message: '请输入班级名称', trigger: 'blur' }
],
staffId: [
{ required: true, message: '请选择任课教师', trigger: 'blur' }
],
capacity: [
{ required: true, message: '请填写满班人数', trigger: 'blur' }
],
recruitStatus: [
{ required: true, message: '请选择招生状态', trigger: 'blur' }
],
everyStuLoseHour: [
{ required: true, message: '请输入每次上课学生扣除课时', trigger: 'blur' }
],
openDate: [
{ required: true, message: '请输入开班日期', trigger: 'blur' }
]
},
recruitStatusOptions: [],
// 教师
teacherOptions: [],
// 已选择的课程信息
chooseCourseInfo: {},
// 是否允许变更所属课程
canChangeCourse: true,
// 已选择的校区
chooseDepartId: undefined
}
},
created() {
this.getTeacherOptions()
this.getDictListByDictType('recruit_status').then(response => {
this.recruitStatusOptions = response.data
})
},
methods: {
getTeacherOptions() {
teacherSelect().then(response => {
this.teacherOptions = response.data
})
},
submitForm: function() {
this.form.courseId = this.chooseCourseInfo.courseId
this.form.departId = this.chooseDepartId
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.claId !== undefined) {
updateCla(this.form).then(response => {
this.loadingChange = false
if (response.respCode === '0000') {
this.msgSuccess('修改成功')
this.open = false
this.$emit('ok')
} else {
this.msgError(response.respMsg)
}
}).catch(() => {
this.loadingChange = false
})
} else {
this.loadingChange = true
addCla(this.form).then(response => {
this.loadingChange = false
if (response.respCode === '0000') {
this.msgSuccess('新增成功')
this.open = false
this.$emit('ok')
} else {
this.msgError(response.respMsg)
}
}).catch(() => {
this.loadingChange = false
})
}
}
})
},
// 选择课程
chooseCourse: function() {
this.$refs.chooseCourse.open = true
},
chooseCourseComplete({ courseInfo, departId }) {
this.chooseCourseInfo = courseInfo
this.chooseDepartId = departId
},
reset() {
this.chooseCourseInfo = {}
this.chooseDepartId = undefined
this.form = {
openDate: moment(new Date()).format('YYYY-MM-DD'),
everyStuLoseHour: 1,
claColor: '#409EFF'
}
this.resetForm('form')
}
}
}
</script>