| | |
| | | <template> |
| | | <div>安全考核</div> |
| | | </template> |
| | | <div class="main tabs_main" v-if="!recordShow"> |
| | | <div class="main_header"> |
| | | <div class="header_item"> |
| | | <span class="header_label">考核名称:</span> |
| | | <el-input v-model="examineName" clearable placeholder="请输入考核名称"></el-input> |
| | | </div> |
| | | <div class="header_item"> |
| | | <span class="header_label">时间范围:</span> |
| | | <el-date-picker |
| | | v-model="timeData" |
| | | type="daterange" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </div> |
| | | <div class="header_item"> |
| | | <el-button v-if="showButton('search')" icon="el-icon-search" @click="searchSafetyExamineList(true)">查询</el-button> |
| | | <el-button class="search_btn" v-if="showButton('insert')" icon="el-icon-plus" @click="propInsert()">新增</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="main_content"> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="examineList" |
| | | height="100%"> |
| | | <el-table-column label="序号" width="60" align="center"> |
| | | <template #default="scope"> |
| | | <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="examName" label="考核名称" width="180" align="center"></el-table-column> |
| | | <el-table-column prop="examDate" label="考核日期" align="center"></el-table-column> |
| | | <el-table-column prop="userCount" label="人数" align="center"></el-table-column> |
| | | <el-table-column label="操作" align="center"> |
| | | <template #default="{ row }"> |
| | | <el-button class="table_btn" size="mini" v-if="showButton('update')" @click="propUpdate(row)">修改</el-button> |
| | | <el-button class="delete_btn" size="mini" v-if="showButton('delete')" @click="deleteInfo(row)">删除</el-button> |
| | | <el-button class="table_btn" size="mini" v-if="showButton('delete')" @click="propRecord(row)">记录</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div class="main_footer"> |
| | | <el-pagination |
| | | background |
| | | @current-change="changePageNum" |
| | | @size-change="changePageSize" |
| | | :current-page="pageNum" |
| | | :page-sizes="[10, 20, 50, 100]" |
| | | :page-size="pageSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="total"> |
| | | </el-pagination> |
| | | </div> |
| | | <!-- 新增考核 修改考核信息 --> |
| | | <el-dialog |
| | | class="prop_dialog" |
| | | :title="asyncTitle ? '新增安全考核' : '修改安全考核信息'" |
| | | :visible.sync="asyncExamine" |
| | | width="35%"> |
| | | <el-form ref="form" :model="formExamine" :rules="rulesExamine" label-width="auto" class="rule_form"> |
| | | <el-form-item label="考核名称:" prop="examName"> |
| | | <el-input v-model="formExamine.examName" clearable placeholder="请输入考核名称"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="考题数量:" prop="questionCount"> |
| | | <el-input-number |
| | | v-model="formExamine.questionCount" |
| | | :controls="false" |
| | | :precision="0" |
| | | :min="0" |
| | | placeholder="请输入考题数量"> |
| | | </el-input-number> |
| | | </el-form-item> |
| | | <el-form-item label="合格分数:" prop="qualifiedScore"> |
| | | <el-input-number |
| | | v-model="formExamine.qualifiedScore" |
| | | :controls="false" |
| | | :min="0" |
| | | placeholder="请输入合格分数"> |
| | | </el-input-number> |
| | | </el-form-item> |
| | | <el-form-item label="考核日期:" prop="examDate"> |
| | | <el-date-picker |
| | | v-model="formExamine.examDate" |
| | | type="date" |
| | | clearable |
| | | value-format="yyyy-MM-dd" |
| | | placeholder="选择日期"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="类型:" prop="examType"> |
| | | <el-select v-model="formExamine.examType" clearable placeholder="请选择类型" @change="getSecureTrainPull"> |
| | | <el-option |
| | | v-for="item in typeData" |
| | | :key="item.dictId" |
| | | :label="item.dictName" |
| | | :value="item.dictId"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="类型名称:" prop="trainId"> |
| | | <el-select v-model="formExamine.trainId" clearable placeholder="请选择类型名称"> |
| | | <el-option |
| | | v-for="item in typeNameData" |
| | | :key="item.secureId" |
| | | :label="item.secureName" |
| | | :value="item.secureId"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer"> |
| | | <el-button @click="asyncExamine = false">取 消</el-button> |
| | | <el-button class="submit_btn" @click="asyncTitle ? submitInsertForm() : submitUpdateForm()">提 交</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | <examine-record v-else :examine-id.sync="examineId" :record-show.sync="recordShow"></examine-record> |
| | | </template> |
| | | |
| | | <script> |
| | | import { buttonPinia } from '../../../pinia'; |
| | | import { throttle } from '../../../plugins/public'; |
| | | import ExamineRecord from './ExamineRecord.vue'; |
| | | export default { |
| | | components: { |
| | | ExamineRecord |
| | | }, |
| | | data() { |
| | | return { |
| | | examineName: '', |
| | | timeData: '', |
| | | loading: false, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | total: 0, |
| | | examineList: [], |
| | | asyncTitle: true, // true 新增 false 修改 |
| | | asyncExamine: false, // 弹窗 |
| | | formExamine: {}, // 表单信息 |
| | | rulesExamine: { |
| | | examName: [{ |
| | | required: true, |
| | | message: '请输入考核名称', |
| | | trigger: 'blur' |
| | | }], |
| | | questionCount: [{ |
| | | required: true, |
| | | message: '请输入考题数量', |
| | | trigger: 'blur' |
| | | }], |
| | | qualifiedScore: [{ |
| | | required: true, |
| | | message: '请输入合格分数', |
| | | trigger: 'blur' |
| | | }], |
| | | examDate: [{ |
| | | required: true, |
| | | message: '请选择考试日期', |
| | | trigger: ['blur', 'change'] |
| | | }], |
| | | examType: [{ |
| | | required: true, |
| | | message: '请选择类型', |
| | | trigger: ['blur', 'change'] |
| | | }], |
| | | trainId: [{ |
| | | required: true, |
| | | message: '请选择类型名称', |
| | | trigger: ['blur', 'change'] |
| | | }] |
| | | }, // 表单验证 |
| | | typeData: [], // 类型信息 |
| | | typeNameData: [], // 类型名称信息 |
| | | recordShow: false, // 记录 |
| | | examineId: '', |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.searchSafetyExamineList(true); |
| | | }, |
| | | methods: { |
| | | // 获取类型信息 |
| | | async getExamineTypeData() { |
| | | const { data } = await this.$api.Dictionary.searchDictionary({ |
| | | dictType: 'train_type', |
| | | pageNum: 1, |
| | | pageSize: 100000 |
| | | }); |
| | | this.typeData = data.list; |
| | | }, |
| | | // 查询安全考核信息 |
| | | searchSafetyExamineList(bol) { |
| | | if(bol) { |
| | | this.pageNum = 1; |
| | | } |
| | | this.loading = true; |
| | | this.examineList = []; |
| | | this.$api.Safety.searchSafetyExamineList({ |
| | | pageNum: this.pageNum, |
| | | pageSize: this.pageSize, |
| | | examName: this.examineName, |
| | | startDay: this.timeData ? this.timeData[0] : '', |
| | | endDay: this.timeData ? this.timeData[1] : '' |
| | | }).then((res) => { |
| | | if(res.success) { |
| | | this.total = res.data.total; |
| | | this.examineList = res.data.list; |
| | | } |
| | | this.loading = false; |
| | | }).catch(() => { |
| | | this.loading = false; |
| | | }) |
| | | }, |
| | | // 打开添加信息 |
| | | propInsert() { |
| | | this.asyncTitle = true; |
| | | this.asyncExamine = true; |
| | | }, |
| | | // 打开修改信息 |
| | | propUpdate(row) { |
| | | this.$api.Safety.getAllSecureTrainPull({ |
| | | secureType: row.examType |
| | | }).then((res) => { |
| | | this.typeNameData = res.data; |
| | | }) |
| | | this.$set(this.formExamine, 'examId', row.examId); |
| | | this.$set(this.formExamine, 'examName', row.examName); |
| | | this.$set(this.formExamine, 'questionCount', row.questionCount); |
| | | this.$set(this.formExamine, 'qualifiedScore', row.qualifiedScore); |
| | | this.$set(this.formExamine, 'examDate', row.examDate); |
| | | this.$set(this.formExamine, 'examType', row.examType); |
| | | this.$set(this.formExamine, 'trainId', row.trainId); |
| | | this.asyncTitle = false; |
| | | this.asyncExamine = true; |
| | | }, |
| | | // 打开记录信息 |
| | | propRecord(row) { |
| | | this.examineId = row.examId; |
| | | this.recordShow = true; |
| | | }, |
| | | // 删除考核信息 |
| | | deleteInfo(row) { |
| | | this.$confirm("该操作将删除该考核信息,是否继续删除?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | this.$api.Safety.deleteSafetyExamineInfo({ |
| | | examId: row.examId |
| | | }).then(res => { |
| | | if(res.success) { |
| | | this.searchSafetyExamineList(true); |
| | | this.$message.success("删除成功!"); |
| | | } else { |
| | | this.$message.warning(res.statusMsg); |
| | | } |
| | | }) |
| | | }) |
| | | .catch(() => { |
| | | this.$message.warning("您已取消"); |
| | | }) |
| | | }, |
| | | // 提交添加信息 |
| | | submitInsertForm: throttle(function () { |
| | | this.$refs.form.validate((valid) => { |
| | | if(valid) { |
| | | const params = Object.assign({}, this.formExamine); |
| | | this.$api.Safety.insertSafetyExamineInfo(params).then((res) => { |
| | | if(res.success) { |
| | | this.asyncExamine = false; |
| | | this.searchSafetyExamineList(true); |
| | | this.$message.success('添加成功!'); |
| | | } else { |
| | | this.$message.warning(res.statusMsg); |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, 3000), |
| | | // 提交修改信息 |
| | | submitUpdateForm: throttle(function() { |
| | | this.$refs.form.validate((valid) => { |
| | | if(valid) { |
| | | const params = Object.assign({}, this.formExamine); |
| | | this.$api.Safety.insertSafetyExamineInfo(params).then((res) => { |
| | | if(res.success) { |
| | | this.asyncExamine = false; |
| | | this.searchSafetyExamineList(true); |
| | | this.$message.success('修改成功!'); |
| | | } else { |
| | | this.$message.warning(res.statusMsg); |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | }, 3000), |
| | | // 根据类型获取类型名称信息 |
| | | getSecureTrainPull(data) { |
| | | this.typeNameData = []; |
| | | if(data) { |
| | | this.$api.Safety.getAllSecureTrainPull({ |
| | | secureType: data |
| | | }).then((res) => { |
| | | this.typeNameData = res.data; |
| | | }) |
| | | } else { |
| | | this.$set(this.formExamine, 'trainId', ''); |
| | | } |
| | | }, |
| | | // 切换页码 |
| | | changePageNum(page) { |
| | | this.pageNum = page; |
| | | this.searchSafetyExamineList(); |
| | | }, |
| | | // 切换每页条数 |
| | | changePageSize(size) { |
| | | this.pageSize = size; |
| | | this.searchSafetyExamineList(); |
| | | }, |
| | | // 判断按钮权限信息 |
| | | showButton(str) { |
| | | const pinia = buttonPinia(); |
| | | return pinia.$state.buttonInfo.includes(str); |
| | | } |
| | | }, |
| | | watch: { |
| | | asyncExamine(bol) { |
| | | if(bol) { |
| | | this.getExamineTypeData(); |
| | | } else { |
| | | this.formExamine = {}; |
| | | this.$refs.form.resetFields(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import '@/style/layout-main.scss'; |
| | | </style> |