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