From 3beb3b001475e09c8beb8a5a107464d4abf39fbe Mon Sep 17 00:00:00 2001 From: 叶松 <2217086471@qq.com> Date: 星期四, 16 十一月 2023 13:49:46 +0800 Subject: [PATCH] 安全考核迁移 --- web/src/views/SecureManage/NipCheck/components/ExamineRecord.vue | 4 web/src/views/SecureManage/NipCheck/components/SafetyExamine.vue | 346 +++++++++++++++++++ web/src/views/SecureManage/NipCheck/components/SafetyTopic.vue | 343 +++++++++++++++++++ web/src/views/SecureManage/NipCheck/SafeExam.vue | 341 ------------------ 4 files changed, 707 insertions(+), 327 deletions(-) diff --git a/web/src/views/SecureManage/NipCheck/SafeExam.vue b/web/src/views/SecureManage/NipCheck/SafeExam.vue index 49f2769..4999661 100644 --- a/web/src/views/SecureManage/NipCheck/SafeExam.vue +++ b/web/src/views/SecureManage/NipCheck/SafeExam.vue @@ -1,341 +1,28 @@ <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 class="main"> + <div class="main_tabs"> + <el-tabs v-model="activeName"> + <el-tab-pane label="安全考核" name="first"></el-tab-pane> + <el-tab-pane label="安全考题" name="second"></el-tab-pane> + </el-tabs> </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> + <component :is="activeName === 'first' ? 'SafetyExamine' : 'SafetyTopic'"></component> </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'; +import SafetyExamine from './components/SafetyExamine.vue'; // 安全考核 +import SafetyTopic from './components/SafetyTopic.vue'; // 安全考题 export default { components: { - ExamineRecord + SafetyExamine, + SafetyTopic }, 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(); - } + activeName: 'first' } } } @@ -343,4 +30,8 @@ <style lang="scss" scoped> @import '@/style/layout-main.scss'; + +/deep/.main { + background: none; +} </style> \ No newline at end of file diff --git a/web/src/views/SecureManage/NipCheck/ExamineRecord.vue b/web/src/views/SecureManage/NipCheck/components/ExamineRecord.vue similarity index 98% rename from web/src/views/SecureManage/NipCheck/ExamineRecord.vue rename to web/src/views/SecureManage/NipCheck/components/ExamineRecord.vue index 4068c28..4fce8a8 100644 --- a/web/src/views/SecureManage/NipCheck/ExamineRecord.vue +++ b/web/src/views/SecureManage/NipCheck/components/ExamineRecord.vue @@ -89,7 +89,7 @@ </template> <script> -import { buttonPinia } from '../../../pinia'; +import { buttonPinia } from '../../../../pinia'; export default { name: 'ExamineRecord', props: { @@ -229,7 +229,7 @@ width: calc(100% / 8); height: 80px; color: #FFFFFF; - background: url('../../../assets/stir_img.png')no-repeat; + background: url('../../../../assets/stir_img.png')no-repeat; background-size: 100% 100%; &:first-child { diff --git a/web/src/views/SecureManage/NipCheck/components/SafetyExamine.vue b/web/src/views/SecureManage/NipCheck/components/SafetyExamine.vue new file mode 100644 index 0000000..52b32da --- /dev/null +++ b/web/src/views/SecureManage/NipCheck/components/SafetyExamine.vue @@ -0,0 +1,346 @@ +<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> \ No newline at end of file diff --git a/web/src/views/SecureManage/NipCheck/components/SafetyTopic.vue b/web/src/views/SecureManage/NipCheck/components/SafetyTopic.vue new file mode 100644 index 0000000..657af75 --- /dev/null +++ b/web/src/views/SecureManage/NipCheck/components/SafetyTopic.vue @@ -0,0 +1,343 @@ +<template> + <div class="main tabs_main"> + <div class="main_header"> + <div class="header_item"> + <span class="header_label">考核名称:</span> + <el-input v-model="examName" clearable placeholder="请输入考核名称"></el-input> + </div> + <div class="header_item"> + <el-button v-if="showButton('search')" icon="el-icon-search" @click="searchSafetyTopicList(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="safetyTopicList" + 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="question" label="问题" show-overflow-tooltip align="center"></el-table-column> + <el-table-column prop="answers" label="答案" show-overflow-tooltip align="center"></el-table-column> + <el-table-column prop="score" 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> + </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="asyncTopic" + width="35%"> + <el-form ref="form" :model="formTopic" :rules="rulesTopic" label-width="auto" class="rule_form"> + <el-form-item label="考核名称:" prop="examId"> + <el-select v-model="formTopic.examId" clearable placeholder="请选择考核名称"> + <el-option + v-for="item in typeNameData" + :key="item.examId" + :label="item.examName" + :value="item.examId"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="问题:" prop="question"> + <el-input + type="textarea" + v-model="formTopic.question" + clearable + placeholder="请输入问题" + :maxlength="200" + show-word-limit> + </el-input> + </el-form-item> + <el-form-item label="分数:" prop="score"> + <el-input-number + v-model="formTopic.score" + :controls="false" + :min="0" + placeholder="请输入分数"> + </el-input-number> + </el-form-item> + <el-form-item label="答案:" prop="answerList"> + <el-table + :data="formTopic.answerList" + height="240" + :header-cell-style="() => 'background-color: #082F57; color: #18F6F8'"> + <el-table-column label="序号" width="60" align="center"> + <template #default="scope"> + <span>{{scope.$index + 1}}</span> + </template> + </el-table-column> + <el-table-column label="答案" align="center"> + <template #default="{ row }"> + <el-input v-model="row.answer" clearable placeholder="请输入答案"></el-input> + </template> + </el-table-column> + <el-table-column label="是否为正确答案" align="center"> + <template #default="{ row }"> + <el-switch + v-model="row.isRight" + active-color="#409FFF" + inactive-color="#FD494B" + active-text="是" + :active-value="1" + inactive-text="否" + :inactive-value="0"> + </el-switch> + </template> + </el-table-column> + <el-table-column label="操作" align="center"> + <template #default="{ $index }"> + <el-button class="table_btn" size="mini" v-if="$index + 1 === formTopic.answerList.length" @click="addDataList($index)">新增</el-button> + <el-button class="delete_btn" size="mini" v-else @click="deleteDataList($index)">删除</el-button> + </template> + </el-table-column> + </el-table> + </el-form-item> + </el-form> + <div slot="footer"> + <el-button @click="asyncTopic = false">取 消</el-button> + <el-button class="submit_btn" @click="asyncTitle ? submitInsertForm() : submitUpdateForm()">提 交</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import { buttonPinia } from '../../../../pinia'; +import { throttle } from '../../../../plugins/public'; + export default { + data() { + return { + examName: '', + loading: false, + pageNum: 1, + pageSize: 10, + total: 0, + safetyTopicList: [], + asyncTitle: true, // true 新增 false 修改 + asyncTopic: false, // 弹窗 + formTopic: {}, // 表单信息 + rulesTopic: { + examId: [{ + required: true, + message: '请选择考核名称', + trigger: ['blur', 'change'] + }], + question: [{ + required: true, + message: '请输入问题', + trigger: 'blur' + }], + score: [{ + required: true, + message: '请输入分数', + trigger: 'blur' + }], + answerList: [{ + required: true, + message: '请填入答案信息', + trigger: 'blur' + }], + }, // 表单校验信息 + typeNameData: [], // 类型名称信息 + } + }, + mounted() { + this.searchSafetyTopicList(true); + }, + methods: { + // 获取考核名称信息 + async getAllSecureTrainPull() { + const { data } = await this.$api.Safety.searchSafetyExamineList({ + pageNum: 1, + pageSize: 1000000, + examName: '', + startDay: '', + endDay: '' + }) + this.typeNameData = data.list; + }, + // 查询安全考题信息 + searchSafetyTopicList(bol) { + if(bol) { + this.pageNum = 1; + } + this.loading = true; + this.safetyTopicList = []; + this.$api.Safety.searchSafetyTopicList({ + pageNum: this.pageNum, + pageSize: this.pageSize, + trainName: this.examName + }).then((res) => { + if(res.success) { + this.total = res.data.total; + this.safetyTopicList = res.data.list; + } + this.loading = false; + }).catch(() => { + this.loading = false; + }) + }, + // 打开添加信息 + propInsert() { + this.asyncTitle = true; + this.asyncTopic = true; + this.$set(this.formTopic, 'answerList', [{ + answer: '', + isRight: 0 + }]); + }, + // 打开修改信息 + propUpdate(row) { + this.$api.Safety.getAnswerlIstInfo({ + queId: row.queId + }).then((res) => { + this.$set(this.formTopic, 'answerList', res.data.map(item => { + return { + answer: item.answer, + isRight: item.isRight + } + })) + }) + this.$set(this.formTopic, 'queId', row.queId); + this.$set(this.formTopic, 'examId', row.examId); + this.$set(this.formTopic, 'question', row.question); + this.$set(this.formTopic, 'score', row.score); + this.asyncTitle = false; + this.asyncTopic = true; + }, + // 删除考题信息 + deleteInfo(row) { + this.$confirm("该操作将删除该考题信息,是否继续删除?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(() => { + this.$api.Safety.deleteSafetyTopicInfo({ + queId: row.queId + }).then(res => { + if(res.success) { + this.searchSafetyTopicList(true); + this.$message.success("删除成功!"); + } else { + this.$message.warning(res.statusMsg); + } + }) + }) + .catch(() => { + this.$message.warning("您已取消"); + }) + }, + // 新增题目信息 + addDataList(index) { + this.$set(this.formTopic.answerList, index + 1, { + answer: '', + isRight: 0 + }); + }, + // 删除题目信息 + deleteDataList(index) { + this.formTopic.answerList.splice(index, 1); + }, + // 提交添加信息 + submitInsertForm: throttle(function () { + this.$refs.form.validate((valid) => { + if(valid) { + const params = Object.assign({}, this.formTopic); + this.$api.Safety.insertSafetyTopicInfo(params).then((res) => { + if(res.success) { + this.asyncTopic = false; + this.$message.success('添加成功!'); + this.searchSafetyTopicList(true); + } else { + this.$message.warning(res.statusMsg); + } + }) + } + }) + }, 3000), + // 提交修改信息 + submitUpdateForm: throttle(function() { + this.$refs.form.validate((valid) => { + if(valid) { + const params = Object.assign({}, this.formTopic); + this.$api.Safety.insertSafetyTopicInfo(params).then((res) => { + if(res.success) { + this.asyncTopic = false; + this.$message.success('修改成功!'); + this.searchSafetyTopicList(true); + } else { + this.$message.warning(res.statusMsg); + } + }) + } + }) + }, 3000), + // 切换页码 + changePageNum(page) { + this.pageNum = page; + this.searchSafetyTopicList(); + }, + // 切换每页条数 + changePageSize(size) { + this.pageSize = size; + this.searchSafetyTopicList(); + }, + // 判断按钮权限信息 + showButton(str) { + const pinia = buttonPinia(); + return pinia.$state.buttonInfo.includes(str); + } + }, + watch: { + asyncTopic(bol) { + if(bol) { + this.getAllSecureTrainPull(); + this.getAllSecureTrainPull(); + } else { + this.formTopic = {}; + this.$refs.form.resetFields(); + } + } + } + } +</script> + +<style lang="scss" scoped> +@import '@/style/layout-main.scss'; + +::v-deep .el-form-item__content .el-switch { + padding: 0 !important; +} + +::v-deep .el-switch__label { + color: #FFFFFF; +} + +::v-deep .el-switch__label.is-active { + color: #1890ff; +} +</style> \ No newline at end of file -- Gitblit v1.9.3