Merge remote-tracking branch 'origin/master'
对比新文件 |
| | |
| | | <template> |
| | | <el-dialog |
| | | :title="title" |
| | | :visible.sync="open" |
| | | append-to-body |
| | | width="50%" |
| | | :before-close="handleClose" |
| | | > |
| | | <el-form ref="ruleForm" :model="form" :rules="rules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中..."> |
| | | <el-form-item label="计划名称:" prop="name"> |
| | | <el-input v-model.trim="form.name" :readonly="disable" type="textarea"/> |
| | | </el-form-item> |
| | | <el-form-item label="培训单位:" prop="dep"> |
| | | <el-input v-model.trim="form.dep" :readonly="disable"/> |
| | | </el-form-item> |
| | | <el-form-item label="培训方式:" prop="trainWay"> |
| | | <el-radio-group v-model="form.trainWay" :disabled="disable"> |
| | | <el-radio :label="0">面授</el-radio> |
| | | <el-radio :label="1">线上</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="发证单位:" prop="cardDep"> |
| | | <el-input v-model.trim="form.cardDep" :readonly="disable"/> |
| | | </el-form-item> |
| | | <el-form-item label="课程管理:" prop="classes"> |
| | | <el-table :data="form.classes" border> |
| | | <el-table-column label="课程名称" align="center" prop="name" /> |
| | | <el-table-column label="标准学时" align="center" prop="time" /> |
| | | <el-table-column label="上课教师" align="center" prop="teacher" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="!disable"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | style="color: red" |
| | | @click="delClass(scope.$index)" |
| | | >删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-button type="primary" size="mini" @click="addClass" style="margin-top: 20px" v-if="!disable">添加课程</el-button> |
| | | </el-form-item> |
| | | <el-form-item label="学员管理:" prop="students"> |
| | | <el-table :data="form.students" border> |
| | | <el-table-column label="报名人员" align="center" prop="name" /> |
| | | <el-table-column label="身份证号" align="center" prop="idCard" /> |
| | | <el-table-column label="性别" align="center" prop="sex" /> |
| | | <el-table-column label="实际总学时" align="center" prop="time"/> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | @click="openStudyRecord(scope.row,'view')" |
| | | >查看学时档案</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-button type="primary" size="mini" @click="addStudent" style="margin-top: 20px" v-if="!disable">导入报名人员</el-button> |
| | | </el-form-item> |
| | | <el-form-item label="历史记录(过程追溯):" prop="history"> |
| | | <el-table :data="form.history" border> |
| | | <el-table-column label="时间" align="center" prop="time" /> |
| | | <el-table-column label="课程" align="center" prop="class" /> |
| | | <el-table-column label="教师" align="center" prop="teacher" /> |
| | | <el-table-column label="缺课学员" align="center" prop="missStudent" /> |
| | | </el-table> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="handleClose">取消</el-button> |
| | | <el-button v-if="disable == false" type="primary" @click="submit">提交</el-button> |
| | | <el-button v-else type="primary" @click="handleClose">确定</el-button> |
| | | </span> |
| | | <el-dialog |
| | | :title="classTitle" |
| | | :visible.sync="classDialog" |
| | | append-to-body |
| | | width="50%" |
| | | > |
| | | <el-form ref="ruleAddForm" :model="addForm" :rules="addRules" label-position="right" label-width="150px" style="padding-right: 50px" element-loading-text="保存中..."> |
| | | <el-form-item label="课程名称:" prop="name"> |
| | | <el-input v-model.trim="addForm.name"/> |
| | | </el-form-item> |
| | | <el-form-item label="标准学时:" prop="time"> |
| | | <el-input v-model.trim="addForm.time"/> |
| | | </el-form-item> |
| | | <el-form-item label="上课教师:" prop="teacher"> |
| | | <el-input v-model.trim="addForm.teacher"/> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeAdd">取消</el-button> |
| | | <el-button type="primary" @click="confirmAdd">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="学时档案" |
| | | :visible.sync="recordDialog" |
| | | append-to-body |
| | | width="50%" |
| | | > |
| | | <el-table :data="record" border> |
| | | <el-table-column label="课程名称" align="center" prop="name" /> |
| | | <el-table-column label="标准学时" align="center" prop="time" /> |
| | | <el-table-column label="实际学时" align="center" prop="actualTime" /> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="recordDialog = false">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script > |
| | | import {addViolation, editViolation, uploadFile} from "@/api/coalMine/violation"; |
| | | import {verifyIdCard} from "@/utils/validate"; |
| | | import {MessageBox} from "element-ui"; |
| | | |
| | | export default { |
| | | name: 'trainPlanDialog', |
| | | components: { |
| | | }, |
| | | props: ['typeList'], |
| | | data() { |
| | | return { |
| | | disable: false, |
| | | title: '新增计划', |
| | | classTitle: '新增课程', |
| | | open: false, |
| | | classDialog: false, |
| | | recordDialog: false, |
| | | form:{ |
| | | id: null, |
| | | isCm: 0, |
| | | name: '', |
| | | dep: '', |
| | | trainWay: '', |
| | | cardDep: '', |
| | | classes: [], |
| | | students: [], |
| | | history: [] |
| | | }, |
| | | rules:{ |
| | | name:[{ required: true, message: '请填写计划名称', trigger: 'blur' }], |
| | | dep: [{ required: true, message: '请填写培训单位', trigger: 'blur' }], |
| | | trainWay: [{ required: true, message: '请选择培训方式', trigger: 'blur' }], |
| | | cardDep: [{ required: true, message: '请填写发证单位', trigger: 'blur' }] |
| | | }, |
| | | addForm: { |
| | | name: '', |
| | | time: '', |
| | | teacher: '' |
| | | }, |
| | | addRules: { |
| | | name:[{ required: true, message: '请填写课程名称', trigger: 'blur' }], |
| | | time: [{ required: true, message: '请填写标准学时', trigger: 'blur' }], |
| | | teacher: [{ required: true, message: '请填写上课教师', trigger: 'blur' }], |
| | | }, |
| | | record:[ |
| | | { |
| | | name:'--', |
| | | time: '5', |
| | | actualTime:'5' |
| | | }, |
| | | { |
| | | name:'--', |
| | | time: '4', |
| | | actualTime:'4' |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | created() { |
| | | |
| | | }, |
| | | methods: { |
| | | openDialog (val,type) { |
| | | const t = this |
| | | if(type == 'add'){ |
| | | t.title = '新增计划' |
| | | t.disable = false |
| | | t.form = { |
| | | id: null, |
| | | isCm: 0, |
| | | name: '', |
| | | dep: '', |
| | | trainWay: '', |
| | | cardDep: '', |
| | | classes: [], |
| | | students: [], |
| | | history: [] |
| | | } |
| | | }else{ |
| | | if(type == 'view'){ |
| | | t.title = '计划详情' |
| | | t.disable = true |
| | | }else{ |
| | | t.title = '编辑计划' |
| | | t.disable = false |
| | | } |
| | | t.form = val |
| | | } |
| | | t.open = true |
| | | }, |
| | | isValidKey(key,obj){ |
| | | return key in obj |
| | | }, |
| | | |
| | | addClass(){ |
| | | this.classDialog = true |
| | | }, |
| | | |
| | | delClass(index){ |
| | | MessageBox.confirm('删除该条信息,是否继续?', '系统提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' }).then(() => { |
| | | this.form.classes.splice(index,1); |
| | | this.$message.success('删除成功') |
| | | }).catch(() => { |
| | | console.log('取消') |
| | | }); |
| | | }, |
| | | |
| | | openStudyRecord(){ |
| | | this.recordDialog = true |
| | | }, |
| | | |
| | | confirmAdd(){ |
| | | this.$refs["ruleAddForm"].validate(async(valid) =>{ |
| | | if(valid) { |
| | | this.form.classes.push(this.addForm) |
| | | this.closeAdd() |
| | | }else{ |
| | | this.$message({ |
| | | type:'warning', |
| | | message:'请完善必填信息' |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | addStudent(){ |
| | | this.$message({ |
| | | type:'warning', |
| | | message: '导入格式较严格,请联系技术人员批量导入' |
| | | }) |
| | | }, |
| | | |
| | | handleClose() { |
| | | this.open = false; |
| | | this.resetForm(); |
| | | }, |
| | | |
| | | closeAdd(){ |
| | | this.classDialog = false |
| | | this.addForm = { |
| | | name: '', |
| | | time: '', |
| | | teacher: '' |
| | | } |
| | | }, |
| | | async submit(){ |
| | | this.$refs["ruleForm"].validate(async(valid) =>{ |
| | | if(valid) { |
| | | await this.submitUpload() |
| | | if(this.title == '新增计划'){ |
| | | const {id,...data} = this.form |
| | | const res= await addViolation(data) |
| | | if(res.code == 200){ |
| | | this.$message({ |
| | | type:'success', |
| | | message: res.msg |
| | | }) |
| | | this.fileList = [] |
| | | this.open = false |
| | | this.$emit('getList') |
| | | }else{ |
| | | this.$message({ |
| | | type:'warning', |
| | | message: res.msg |
| | | }) |
| | | } |
| | | }else{ |
| | | const res= await editViolation(this.form) |
| | | if(res.code == 200){ |
| | | this.$message({ |
| | | type:'success', |
| | | message: res.msg |
| | | }) |
| | | this.fileList = [] |
| | | this.open = false |
| | | this.$emit('getList') |
| | | }else{ |
| | | this.$message({ |
| | | type:'warning', |
| | | message: res.msg |
| | | }) |
| | | } |
| | | } |
| | | }else{ |
| | | this.$message({ |
| | | type:'warning', |
| | | message:'请完善必填信息' |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | resetForm() { |
| | | this.form = { |
| | | id: null, |
| | | isCm: 0, |
| | | name: '', |
| | | idCard: '', |
| | | icNum: '', |
| | | electNum: '', |
| | | dept: '', |
| | | violationTime: '', |
| | | operateTypeId: null, |
| | | violationPath: '', |
| | | remark: '' |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | |
| | | </script> |
| | | <style scoped> |
| | | |
| | | </style> |
对比新文件 |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">--> |
| | | <!-- <el-form-item label="用户姓名" prop="userName">--> |
| | | <!-- <el-input--> |
| | | <!-- v-model="queryParams.name"--> |
| | | <!-- placeholder="请输入用户姓名"--> |
| | | <!-- clearable--> |
| | | <!-- @keyup.enter.native="handleQuery"--> |
| | | <!-- />--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item label="身份证号" prop="idCard">--> |
| | | <!-- <el-input--> |
| | | <!-- v-model="queryParams.idCard"--> |
| | | <!-- placeholder="请输入身份证号"--> |
| | | <!-- clearable--> |
| | | <!-- @keyup.enter.native="handleQuery"--> |
| | | <!-- />--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item label="单位名称" prop="dept">--> |
| | | <!-- <el-input--> |
| | | <!-- v-model="queryParams.dept"--> |
| | | <!-- placeholder="请输入单位名称"--> |
| | | <!-- clearable--> |
| | | <!-- @keyup.enter.native="handleQuery"--> |
| | | <!-- />--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item label="操作类型">--> |
| | | <!-- <el-cascader--> |
| | | <!-- v-model="queryParams.operateTypeId"--> |
| | | <!-- :options="typeList"--> |
| | | <!-- :show-all-levels="false"--> |
| | | <!-- :props="{ expandTrigger: 'hover', value: 'id',label: 'name',emitPath:false}"--> |
| | | <!-- @change="handleChange"></el-cascader>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- <el-form-item>--> |
| | | <!-- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>--> |
| | | <!-- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-form>--> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | size="mini" |
| | | @click="openViolation({},'add')" |
| | | v-hasPermi="['system:experts:add']" |
| | | >新增培训计划</el-button> |
| | | </el-col> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | <el-table v-loading="loading" :data="dataList"> |
| | | <el-table-column label="计划名称" align="center" prop="name" /> |
| | | <el-table-column label="课程信息" align="center" prop="info" /> |
| | | <el-table-column label="培训时间从" align="center" prop="startTime"/> |
| | | <el-table-column label="培训时间至" align="center" prop="endTime"/> |
| | | <el-table-column label="报名学员清单" align="center" prop="sheet"/> |
| | | <el-table-column label="培训人数" align="center" prop="num"/> |
| | | <el-table-column label="合格人数" align="center" prop="passNum"/> |
| | | <el-table-column label="过程追溯" align="center"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | @click="openRecord(scope.row,'view')" |
| | | >培训记录</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-view" |
| | | @click="openViolation(scope.row,'view')" |
| | | >查看详情</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-edit" |
| | | @click="openViolation(scope.row,'edit')" |
| | | v-hasPermi="['system:experts:remove']" |
| | | >编辑</el-button> |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | style="color: red" |
| | | icon="el-icon-delete" |
| | | @click="handleDelete(scope.$index)" |
| | | v-hasPermi="['system:experts:remove']" |
| | | >删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | v-show="total>0" |
| | | :total="total" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | <trainPlan-dialog ref="trainPlanDialog" @getList="getList" :typeList="typeList"></trainPlan-dialog> |
| | | <el-dialog |
| | | title="培训记录" |
| | | :visible.sync="recordDialog" |
| | | append-to-body |
| | | width="50%" |
| | | > |
| | | <el-table :data="record" border> |
| | | <el-table-column label="时间" align="center" prop="time" /> |
| | | <el-table-column label="课程" align="center" prop="class" /> |
| | | <el-table-column label="教师" align="center" prop="teacher" /> |
| | | <el-table-column label="缺课学员" align="center" prop="missStudent" /> |
| | | </el-table> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="recordDialog = false">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | import trainPlanDialog from "@/views/notCoalMine/nTrainManage/components/trainPlanDialog.vue"; |
| | | import {delViolation, getViolationPage} from "@/api/coalMine/violation"; |
| | | import {getOperatePage} from "@/api/coalMine/operateType"; |
| | | import {delPeople} from "@/api/coalMine/people"; |
| | | export default { |
| | | name: "cTrainManage", |
| | | dicts: [], |
| | | components: { |
| | | trainPlanDialog |
| | | }, |
| | | data() { |
| | | return { |
| | | violationDialog: '', |
| | | loading: false, |
| | | showSearch: true, |
| | | recordDialog: false, |
| | | dataList: [ |
| | | { |
| | | name: '计划1', |
| | | info: '--', |
| | | startTime: '2024-02-24', |
| | | endTime: '2024-03-05', |
| | | sheet: '19', |
| | | num: '19', |
| | | passNum: '19', |
| | | dep: '--', |
| | | trainWay: 0, |
| | | cardDep: '--', |
| | | classes: [ |
| | | { |
| | | id: 1, |
| | | name: '--', |
| | | time: 5, |
| | | teacher: '--' |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: '--', |
| | | time: 4, |
| | | teacher: '--' |
| | | } |
| | | ], |
| | | students: [ |
| | | { |
| | | id: 1, |
| | | name: '--', |
| | | idCard: 666, |
| | | sex: '男', |
| | | time: 9 |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: '--', |
| | | idCard: 888, |
| | | sex: '女', |
| | | time: 9 |
| | | } |
| | | ], |
| | | history: [] |
| | | }, |
| | | { |
| | | name: '计划2', |
| | | info: '--', |
| | | startTime: '2024-02-24', |
| | | endTime: '2024-03-04', |
| | | sheet: '19', |
| | | num: '19', |
| | | passNum: '19', |
| | | dep: '--', |
| | | trainWay: 0, |
| | | cardDep: '--', |
| | | classes: [ |
| | | { |
| | | id: 1, |
| | | name: '--', |
| | | time: 5, |
| | | teacher: '--' |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: '--', |
| | | time: 4, |
| | | teacher: '--' |
| | | } |
| | | ], |
| | | students: [ |
| | | { |
| | | id: 1, |
| | | name: '--', |
| | | idCard: 666, |
| | | sex: '男', |
| | | time: 9 |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: '--', |
| | | idCard: 888, |
| | | sex: '女', |
| | | time: 9 |
| | | } |
| | | ], |
| | | history: [] |
| | | } |
| | | ], |
| | | total: 0, |
| | | typeList: [], |
| | | queryParams: { |
| | | name: '', |
| | | idCard:'', |
| | | dept: '', |
| | | operateTypeId: null, |
| | | isCm: 0, |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | }, |
| | | record: [] |
| | | }; |
| | | }, |
| | | created() { |
| | | // this.getList() |
| | | // this.getTypeList() |
| | | }, |
| | | methods: { |
| | | async getList(){ |
| | | const t = this |
| | | t.loading = true |
| | | const res = await getViolationPage(t.queryParams) |
| | | if(res.code == 200){ |
| | | t.dataList = res.rows |
| | | t.total = res.total |
| | | }else{ |
| | | t.$message({ |
| | | message: res.msg, |
| | | type: 'warning' |
| | | }) |
| | | } |
| | | t.loading = false |
| | | }, |
| | | async getTypeList() { |
| | | this.loading = true; |
| | | const res = await getOperatePage({name: ''}) |
| | | if(res.code == 200){ |
| | | this.typeList = this.handleTree(res.data, "id"); |
| | | }else{ |
| | | this.$message({ |
| | | type: 'warning', |
| | | message: res.msg |
| | | }); |
| | | } |
| | | this.loading = false; |
| | | }, |
| | | handleChange(){ |
| | | |
| | | }, |
| | | openRecord(){ |
| | | this.recordDialog = true |
| | | }, |
| | | handleDelete(index){ |
| | | this.$confirm('此操作将永久删除该条数据, 是否继续?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.dataList.splice(index,1); |
| | | this.$message.success('删除成功') |
| | | // const res = await delViolation(row.violationId) |
| | | // if(res.code == 200){ |
| | | // this.$message({ |
| | | // type: 'success', |
| | | // message: '删除成功!' |
| | | // }); |
| | | // await this.getList() |
| | | // }else{ |
| | | // this.$message({ |
| | | // type: 'warning', |
| | | // message: res.msg |
| | | // }); |
| | | // } |
| | | |
| | | }).catch(() => { |
| | | |
| | | }); |
| | | }, |
| | | handleQuery(){ |
| | | this.queryParams.pageNum = 1 |
| | | this.getList() |
| | | }, |
| | | resetQuery(){ |
| | | this.queryParams = { |
| | | name: '', |
| | | idCard:'', |
| | | dept: '', |
| | | operateTypeId: null, |
| | | isCm: 0, |
| | | pageNum: 1, |
| | | pageSize: 10 |
| | | } |
| | | this.getList() |
| | | }, |
| | | openViolation(data,type){ |
| | | this.$refs.trainPlanDialog.openDialog(data,type); |
| | | } |
| | | } |
| | | }; |
| | | </script> |