From d52cbf92340d0387355e5969147d4150469df75d Mon Sep 17 00:00:00 2001 From: zhouwenxuan <1175765986@qq.com> Date: 星期二, 05 三月 2024 11:45:34 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/notCoalMine/nTrainManage/index.vue | 330 ++++++++++++++++++++++++++++++ src/views/notCoalMine/nTrainManage/components/trainPlanDialog.vue | 327 +++++++++++++++++++++++++++++ 2 files changed, 657 insertions(+), 0 deletions(-) diff --git a/src/views/notCoalMine/nTrainManage/components/trainPlanDialog.vue b/src/views/notCoalMine/nTrainManage/components/trainPlanDialog.vue new file mode 100644 index 0000000..e73e276 --- /dev/null +++ b/src/views/notCoalMine/nTrainManage/components/trainPlanDialog.vue @@ -0,0 +1,327 @@ +<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> diff --git a/src/views/notCoalMine/nTrainManage/index.vue b/src/views/notCoalMine/nTrainManage/index.vue new file mode 100644 index 0000000..476f215 --- /dev/null +++ b/src/views/notCoalMine/nTrainManage/index.vue @@ -0,0 +1,330 @@ +<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> -- Gitblit v1.9.2