From a3f19959cbc1ad380ba84e6d8699d3e00afa07a7 Mon Sep 17 00:00:00 2001 From: 龚焕茏 <2842157468@qq.com> Date: 星期三, 26 六月 2024 18:05:29 +0800 Subject: [PATCH] feat:考试监控 --- src/views/exam/exam/monitor.vue | 183 +++++++++++++++++++++++++++++++++++++++++++++ src/views/education/cheat/list.vue | 9 - src/api/cheat.js | 2 src/api/exam.js | 9 ++ src/router.js | 7 + src/views/exam/exam/ExamManage.vue | 7 + 6 files changed, 208 insertions(+), 9 deletions(-) diff --git a/src/api/cheat.js b/src/api/cheat.js index 2b0a33e..d7e2656 100644 --- a/src/api/cheat.js +++ b/src/api/cheat.js @@ -3,7 +3,7 @@ export default { list: query => post('/api/admin/cheat/list'), pageList: query => get('/api/admin/cheat/page', query), - edit: query => post('/api/admin/cheat/edit', query), + edit: query => post('/api/admin/cheat', query), select: id => post('/api/admin/cheat/select/' + id), deletecheat: id => post('/api/admin/cheat/delete/' + id), updateStatus: query => post('/api/admin/cheat/status', query), diff --git a/src/api/exam.js b/src/api/exam.js index c1887ca..6a10b09 100644 --- a/src/api/exam.js +++ b/src/api/exam.js @@ -75,3 +75,12 @@ method: 'GET' }) } + +// 鑰冭瘯鐩戞帶鍒楄〃 +export const monitorList = (params) => { + return axios({ + url: '/api/admin/exam/monitor/list', + method: 'GET', + params: params + }) +} diff --git a/src/router.js b/src/router.js index 1d7acf6..9f0ea40 100644 --- a/src/router.js +++ b/src/router.js @@ -59,6 +59,13 @@ name: 'MarkPaperDetail', meta: { title: '闃呭嵎'}, hidden: true + }, + { + path: '/exam/monitor', + component: () => import('@/views/exam/exam/monitor'), + name: 'monitor', + meta: { title: '鐩戞帶'}, + hidden: true } ] }, diff --git a/src/views/education/cheat/list.vue b/src/views/education/cheat/list.vue index e4c7bbb..147ae49 100644 --- a/src/views/education/cheat/list.vue +++ b/src/views/education/cheat/list.vue @@ -10,8 +10,8 @@ </el-form> <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%"> - <el-table-column align="center" prop="cheatUserName" label="浣滃紛浜哄悕绉�" show-overflow-tooltip /> - <el-table-column align="center" prop="examName" label="鑰冭瘯鍚嶇О" /> + <el-table-column align="center" prop="cheatUserName" label="濮撳悕" show-overflow-tooltip /> + <el-table-column align="center" prop="examName" label="鑰冭瘯" /> <el-table-column align="center" prop="createTime" label="浣滃紛鏃堕棿" /> <!-- <el-table-column label="鎿嶄綔" align="center"> <template slot-scope="{row}"> @@ -97,7 +97,6 @@ }) }, edit(row) { - if (row) { cheatApi.select(row.id).then(re => { if (re.code === 1) { this.form = re.data; @@ -106,10 +105,6 @@ this.$message.error(re.message) } }) - } else { - this.getItemOrder(); - this.visible = true; - } }, status(row) { let question = { diff --git a/src/views/exam/exam/ExamManage.vue b/src/views/exam/exam/ExamManage.vue index 5d391ab..11054e4 100644 --- a/src/views/exam/exam/ExamManage.vue +++ b/src/views/exam/exam/ExamManage.vue @@ -64,7 +64,7 @@ width="150px" prop="createTime" ></el-table-column> - <el-table-column label="鎿嶄綔" fiexd="right" width="210px"> + <el-table-column label="鎿嶄綔" fiexd="right" width="280px"> <template slot-scope="scope"> <el-button type="primary" @@ -74,6 +74,7 @@ </el-button> <el-button type="danger" size="small" @click="deleteExam(scope.row.id)">鍒犻櫎</el-button> <el-button type="success" size="small" @click="markPaper(scope.row)">闃呭嵎</el-button> + <el-button type="warning" size="small" @click="monitor(scope.row)">鐩戞帶</el-button> </template> </el-table-column> </el-table> @@ -195,6 +196,10 @@ this.MyExamPaperList() }, methods: { + // 鑰冭瘯鐩戞帶鍒楄〃 + monitor (row) { + this.$router.push({ path: '/exam/monitor', query: { examId: row.id } }) + }, markPaper (row) { // 璺宠浆闃呭嵎椤甸潰 this.$router.push({ path: '/exam/mark/paper', query: { examName: row.examName, examId: row.id } }) diff --git a/src/views/exam/exam/monitor.vue b/src/views/exam/exam/monitor.vue new file mode 100644 index 0000000..bbcee56 --- /dev/null +++ b/src/views/exam/exam/monitor.vue @@ -0,0 +1,183 @@ +<template> + <div class="app-container"> + <el-form :model="queryParam" ref="queryForm" :inline="true"> + <el-form-item> + <el-input v-model="queryParam.keyword" placeholder="璇疯緭鍏ュ悕绉�" clearable></el-input> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="search">鏌ヨ</el-button> + </el-form-item> + </el-form> + + <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%"> + <el-table-column align="center" prop="examName" label="鑰冭瘯" /> + <el-table-column align="center" prop="userName" label="濮撳悕" show-overflow-tooltip /> + <el-table-column align="center" prop="createTime" label="寮�濮嬫椂闂�" /> + <el-table-column align="center" prop="doTime" label="鑰楁椂锛堢锛�" /> + <el-table-column align="center" prop="status" label="鐘舵��" :formatter="statusFormatter" /> + <el-table-column label="鎿嶄綔" align="center"> + <template slot-scope="{row}"> + <el-button size="mini" type="danger" @click="handleNullify(row)">浣滃簾</el-button> + <el-button size="mini" type="primary" @click="edit(row)">鏀跺嵎</el-button> + <el-button size="mini" type="success" @click="edit(row)">鍔犳椂</el-button> + </template> + </el-table-column> + </el-table> + <pagination v-show="total > 0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize" + @pagination="search" /> + + <el-dialog :visible.sync="visible" width="400px"> + <el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules"> + <el-form-item label="鍚嶇О锛�" prop="name" required> + <el-input v-model="form.name" maxlength="10" show-word-limit /> + </el-form-item> + <el-form-item label="鎺掑簭锛�" prop="itemOrder" required> + <el-input-number v-model="form.itemOrder" type="number" :min="1" :max="100" /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="submitForm">鎻愪氦</el-button> + <el-button @click="resetForm">閲嶇疆</el-button> + </el-form-item> + </el-form> + </el-dialog> + + + </div> +</template> + +<script> +import { mapGetters, mapState } from 'vuex' +import Pagination from '@/components/Pagination' +import { monitorList } from '@/api/exam' +import cheatApi from '@/api/cheat' + +export default { + components: { Pagination }, + data() { + return { + listLoading: true, + queryParam: { + examId: '', + pageIndex: 1, + pageSize: 10 + }, + formLoading: false, + total: 0, + tableData: [], + form: { + id: '', + name: '', + itemOrder: '' + }, + visible: false, + rules: { + name: [ + { required: true, message: '璇疯緭鍏ュ悕绉�', trigger: 'blur' } + ], + itemOrder: [ + { required: true, message: '璇疯緭鍏ユ帓搴�', trigger: 'blur', type: 'number' } + ] + }, + }; + }, + created() { + this.queryParam.examId = this.$route.query.examId; + this.search() + }, + methods: { + handleNullify(row) { + let cheatObj = { examId: row.examId, cheatUser: row.userId }; + cheatApi.edit(cheatObj).then(res => { + this.$message.success(res.message); + }) + }, + statusFormatter(row) { + if (row.status === 'temp') { + return '杩涜涓�' + } else if (row.status === 'finish') { + return '宸茬粨鏉�' + } + }, + // 鑾峰彇鍒楄〃 + search() { + this.listLoading = true + monitorList(this.queryParam).then(re => { + re = re.data + this.tableData = re.data.records + this.total = re.data.total + this.queryParam.pageSize = re.data.size + this.queryParam.pageIndex = re.data.pages + this.listLoading = false + }) + }, + edit(row) { + cheatApi.select(row.id).then(re => { + if (re.code === 1) { + this.form = re.data; + this.visible = true; + } else { + this.$message.error(re.message) + } + }) + }, + status(row) { + let question = { + id: row.id, + status: row.status === '绂佺敤' ? '鍚敤' : '绂佺敤' + } + cheatApi.updateStatus(question).then(re => { + if (re.code === 1) { + this.$message.success(re.message) + this.search() + } else { + this.$message.error(re.message) + } + }) + }, + deletecheat(row) { + let _this = this + cheatApi.deletecheat(row.id).then(re => { + if (re.code === 1) { + _this.search() + _this.$message.success(re.message) + } else { + _this.$message.error(re.message) + } + }) + }, + submitForm() { + let _this = this + this.$refs.form.validate((valid) => { + if (valid) { + this.formLoading = true + cheatApi.edit(this.form).then(re => { + if (re.code === 1) { + _this.$message.success(re.message) + _this.search() + _this.formLoading = false + _this.visible = false + } else { + _this.$message.error(re.message) + _this.formLoading = false + _this.visible = false + } + }) + } + }) + }, + resetForm() { + let lastId = this.form.id + this.$refs['form'].resetFields() + this.form.id = lastId + }, + }, + computed: { + ...mapGetters('enumItem', [ + 'enumFormat' + ]), + ...mapState('enumItem', { + levelEnum: state => state.user.levelEnum + }) + } +} +</script> -- Gitblit v1.8.0