From 241255fbe2b6db3b2ed263f1e5a9956f5f9a0ee2 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期二, 11 六月 2024 11:40:58 +0800 Subject: [PATCH] 考试管理 --- src/views/Manage/ClassManagement/Class.vue | 13 + src/views/Exam/ExamManage.vue | 317 +++++++++++++++++++++++++++++++++++++++++++++ src/api/classes.js | 8 + src/api/exam.js | 61 ++++++++ src/router.js | 2 src/api/examPaper.js | 5 6 files changed, 397 insertions(+), 9 deletions(-) diff --git a/src/api/classes.js b/src/api/classes.js index 164459d..c3e8bee 100644 --- a/src/api/classes.js +++ b/src/api/classes.js @@ -9,6 +9,14 @@ }) } +// 鎴戠殑鐝骇 +export const myClasses = () => { + return axios({ + url: "/api/admin/classes/my", + method: "GET" + }) +} + // 鑾峰彇鐝骇鍒楄〃 export const getClassesList = () => { return axios({ diff --git a/src/api/exam.js b/src/api/exam.js new file mode 100644 index 0000000..04b3180 --- /dev/null +++ b/src/api/exam.js @@ -0,0 +1,61 @@ +import axios from "./request"; + +// 鑾峰彇鑰冭瘯鍒嗛〉 +export const getExams = (params) => { + return axios({ + url: "/api/exam/page", + method: "GET", + params: params + }) +} + +// 鑾峰彇鑰冭瘯鍒楄〃 +export const getExamList = () => { + return axios({ + url: "/api/exam/list", + method: "GET" + }) +} + +// 閫氳繃id鑾峰彇鑰冭瘯 +export const getExamById = (params) => { + return axios({ + url: "/api/exam/" + params, + method: "GET" + }) +} + +// 閫氳繃id鍒犻櫎鑰冭瘯 +export const deleteExamById = (params) => { + return axios({ + url: "/api/exam/" + params, + method: "DELETE" + }) +} + +// 鎵归噺鍒犻櫎鑰冭瘯 +export const deleteExamByIds = (params) => { + return axios({ + url: "/api/exam/batch", + method: "DELETE", + data: params + }) +} + +// 淇敼鑰冭瘯 +export const editExam = (params) => { + return axios({ + url: "/api/exam/", + method: "PUT", + data: params + }) +} + +// 娣诲姞鑰冭瘯 +export const addExam = (params) => { + return axios({ + url: "/api/exam/", + method: "POST", + data: params + }) +} diff --git a/src/api/examPaper.js b/src/api/examPaper.js index 787676a..1a11e5c 100644 --- a/src/api/examPaper.js +++ b/src/api/examPaper.js @@ -1,9 +1,10 @@ -import { post } from '@/utils/request' +import { post,get } from '@/utils/request' export default { pageList: query => post('/api/admin/exam/paper/page', query), addPaper: query => post('/api/admin/exam/paper/addPaper', query), edit: query => post('/api/admin/exam/paper/edit', query), select: id => post('/api/admin/exam/paper/select/' + id), - deletePaper: id => post('/api/admin/exam/paper/delete/' + id) + deletePaper: id => post('/api/admin/exam/paper/delete/' + id), + myExamPaperList: param => get('/api/admin/exam/paper/my', param), } diff --git a/src/router.js b/src/router.js index 05b93d1..4fdb4f0 100644 --- a/src/router.js +++ b/src/router.js @@ -45,7 +45,7 @@ { path: '/', name: 'examIndex', - component: () => import('@/views/Exam/Exam.vue') + component: () => import('@/views/Exam/ExamManage.vue') }, { path: 'myexam', diff --git a/src/views/Exam/ExamManage.vue b/src/views/Exam/ExamManage.vue new file mode 100644 index 0000000..5b58e00 --- /dev/null +++ b/src/views/Exam/ExamManage.vue @@ -0,0 +1,317 @@ +<template> + <div class="c"> + <div class="bg"> + <div class="main"> + <div class="main-1"> + <div class="main-btn"> + <el-button + type="primary" + @click="openAdd" + >瀹夋帓鑰冭瘯 + </el-button> + </div> + <div> + <el-form :inline="true" :model="searchForm" class="demo-form-inline"> + <el-form-item label="鑰冭瘯鍚嶇О"> + <el-input v-model="searchForm.className" size="small" clearable @clear="page" placeholder="鐝骇鍚嶇О"></el-input> + </el-form-item> + <el-form-item label="鑰冭瘯鐝骇"> + <el-select v-model="searchForm.classesId" size="small" clearable @change="page" placeholder="鐝骇鐘舵��"> + <el-option label="姝e父" value="normal"></el-option> + <el-option label="瑙f暎" value="dissolution"></el-option> + </el-select> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="page" size="small">鏌ヨ</el-button> + </el-form-item> + </el-form> + <div> + <el-table :data="tableData"> + <el-table-column + label="鑰冭瘯鍚嶇О" + prop="examName" + ></el-table-column> + <el-table-column + label="鑰冭瘯璇曞嵎" + prop="examName" + ></el-table-column> + <el-table-column + label="鍙傝�冪彮绾�" + prop="examClasses" + ></el-table-column> + <el-table-column + label="鐝骇浜烘暟" + prop="studentNum" + ></el-table-column> + <el-table-column + label="鑰冭瘯鍦扮偣" + prop="site" + ></el-table-column> + <el-table-column + label="鑰冭瘯绉戠洰" + prop="subject" + ></el-table-column> + <el-table-column label="鐘舵��" prop="type" :formatter="formatterType"> + </el-table-column> + <el-table-column + label="鑰冭瘯鏃堕棿" + prop="ctime" + ></el-table-column> + <el-table-column label="鎿嶄綔"> + <template slot-scope="scope"> + <el-button + class="deepBlue" + colorType="blue" + >淇敼 + </el-button> + </template> + </el-table-column> + </el-table> + </div> + <div + class="flex" + style="justify-content:center;margin-top:20px;" + > + <pagination v-show="total>0" :total="total" :page.sync="searchForm.pageIndex" :limit.sync="searchForm.pageSize" + @pagination="page"/> + </div> + </div> + </div> + </div> + + </div> + + + <el-dialog width="35%" :title="title" @close="closeHandler" :visible.sync="open" :destroy-on-close="true" + :append-to-body="true" :close-on-click-modal="false"> + <el-form :model="examForm" :rules="examRules" ref="examForm"> + <el-form-item label="鑰冭瘯鍚嶇О" :label-width="formLabelWidth" prop="examName"> + <el-input v-model="examForm.examName" autocomplete="off"></el-input> + </el-form-item> + <el-form-item label="鍙傝�冪彮绾�" :label-width="formLabelWidth" prop="classesId"> + <el-input v-model="examForm.classesId" autocomplete="off"></el-input> + </el-form-item> + <el-form-item label="璇曞嵎绫诲瀷" :label-width="formLabelWidth" prop="examPaperType"> + <el-input v-model="examForm.examPaperType" autocomplete="off"></el-input> + </el-form-item> + <el-form-item label="鑰冭瘯璇曞嵎" :label-width="formLabelWidth" prop="examPaperId"> + <el-input v-model="examForm.examPaperId" autocomplete="off"></el-input> + </el-form-item> + <el-form-item label="鑰冭瘯鍦扮偣" :label-width="formLabelWidth" prop="examPlace"> + <el-input v-model="examForm.examPlace" autocomplete="off"></el-input> + </el-form-item> + <el-form-item label="寮�濮嬫椂闂�" :label-width="formLabelWidth" prop="startTime"> + <el-input v-model="examForm.startTime" autocomplete="off"></el-input> + </el-form-item> + <el-form-item label="缁撴潫鏃堕棿" :label-width="formLabelWidth" prop="endTime"> + <el-input v-model="examForm.endTime" autocomplete="off"></el-input> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button @click="closeHandler">鍙� 娑�</el-button> + <el-button type="primary" @click="addOrEditExam">纭� 瀹�</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import Pagination from "@/components/Pagination" +import { getExams, addExam, editExam, deleteExamById } from "@/api/exam" +import { myClasses } from "@/api/classes" +import { myExamPaperList } from "@/api/examPaper" +export default { + components: { Pagination }, + data() { + return { + formLabelWidth: "80px", + classesList: [], + examPaperList: [], + examForm: { + id: null, + examName: "", + examPaperId: "", + classesId: "", + examPaperType: "", + examPlace: "", + status: "", + startTime: "", + endTime: "", + }, + examRules: { + examName: [ + { required: true, message: '璇疯緭鍏ヨ�冭瘯鍚嶇О', trigger: 'blur' } + ], + examPaperId: [ + { required: true, message: '璇烽�夋嫨鑰冭瘯璇曞嵎', trigger: 'change' } + ], + classesId: [ + { required: true, message: '璇烽�夋嫨鍙傝�冪彮绾�', trigger: 'change' } + ], + examPaperType: [ + { required: true, message: '璇烽�夋嫨璇曞嵎绫诲瀷', trigger: 'change' } + ], + examPlace: [ + { required: true, message: '璇疯緭鍏ヨ�冭瘯鍦扮偣', trigger: 'blur' } + ], + startTime: [ + { required: true, message: '璇烽�夋嫨寮�濮嬫椂闂�', trigger: 'change' } + ], + endTime: [ + { required: true, message: '璇烽�夋嫨缁撴潫鏃堕棿', trigger: 'change' } + ], + }, + total: 0, + title: "瀹夋帓鑰冭瘯", + open: false, + searchForm: { + examName: "", + subject: null, + pageIndex: 1, + pageSize: 10 + }, + tableData: [ + ], + }; + }, + mounted() { + this.page(); + }, + methods: { + getMyExamPaperList() { + if (! this.examForm.examPaperType) { + return + } + let param = { + "paperType": this.examForm.examPaperType + } + myExamPaperList(param).then(res => { + this.examPaperList = res.data + }) + }, + getMyClasses() { + myClasses().then(res => { + this.classesList = res.data.data + }) + }, + deleteExam(id) { + deleteExamById(id).then(res => { + this.$message.success("鍒犻櫎鎴愬姛") + }) + }, + addOrEditExam() { + this.$refs['examForm'].validate((valid) => { + if (valid) { + if (this.examForm.id) { + editExam(this.examForm).then(res => { + this.$message.success("鎿嶄綔鎴愬姛") + }) + } else { + addExam(this.examForm).then(res => { + this.$message.success("鎿嶄綔鎴愬姛") + }) + } + } + }) + }, + clearForm() { + this.examForm = { + id: null, + examName: "", + examPaperId: "", + classesId: "", + examPaperType: "", + examPlace: "", + status: "", + startTime: "", + endTime: "", + } + }, + closeHandler() { + this.open = false + this.clearForm() + }, + openAdd() { + this.title = this.examForm.id ? "淇敼鑰冭瘯" : "瀹夋帓鑰冭瘯" + this.open = true + }, + formatterType(row) { + }, + page() { + getExams(this.searchForm).then(res => { + this.tableData = res.data.data + }) + }, + routerTo(url) { + this.$router.push(url); + }, + }, +}; +</script> + +<style scoped lang="scss"> +.flex { + display: flex; +} + +.mian-1-top { + margin: 10px 0; + align-items: center; + + & input { + height: 30px; + width: 200px; + margin-right: 20px; + } +} + +// .c{ +// background-image:url('../../assets/img/loginBackground.jpg'); +// width:100vw; +// height:calc(100vh - 75px); +// background-size: cover; +// } +// .bg{ +// width:100%; +// height:100%; +// background: rgba(255,255,255,0.2); +// display: flex; +// justify-content: center; + +// } +.main { + &-title { + border-left: 5px solid rgb(16, 71, 247); + padding-left: 10px; + margin: 50px 0; + + & p { + font-weight: 700; + } + } + + &-1 { + width: 1227px; + height: 784px; + background: white; + box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.1); + border-radius: 10px; + padding: 32px 40px; + } + + &-btn { + padding-bottom: 32px; + border-bottom: 3px solid rgb(16, 71, 247); + } +} + +.deepBlue { + background: rgb(16, 71, 247); + color: white; + border: none; + + &:hover { + background-color: rgb(45, 92, 248); + } +} +</style> diff --git a/src/views/Manage/ClassManagement/Class.vue b/src/views/Manage/ClassManagement/Class.vue index db5b41d..2c73497 100644 --- a/src/views/Manage/ClassManagement/Class.vue +++ b/src/views/Manage/ClassManagement/Class.vue @@ -11,16 +11,17 @@ <div> <el-button type="primary" + size="small" style="margin-right:20px;" @click="handlerAdd" >鏂板鐝骇</el-button> </div> <el-form :inline="true" :model="searchForm" class="demo-form-inline"> <el-form-item label="鐝骇鍚嶇О"> - <el-input v-model="searchForm.className" clearable @clear="page" placeholder="鐝骇鍚嶇О"></el-input> + <el-input v-model="searchForm.className" size="small" clearable @clear="page" placeholder="鐝骇鍚嶇О"></el-input> </el-form-item> <el-form-item label="鐝骇鐘舵��"> - <el-select v-model="searchForm.status" clearable @change="page" placeholder="鐝骇鐘舵��"> + <el-select v-model="searchForm.status" size="small" clearable @change="page" placeholder="鐝骇鐘舵��"> <el-option label="姝e父" value="normal"></el-option> <el-option label="瑙f暎" value="dissolution"></el-option> </el-select> @@ -92,10 +93,10 @@ fixed="right" > <template slot-scope="scope"> - <el-button size="small" @click="handlerEdit(scope.row)" type="primary">淇敼</el-button> - <el-button size="small" type="warning">鐝骇楠岃瘉</el-button> - <el-button size="small" @click="handlerOpenNotify(scope.row)" type="info">閫氱煡</el-button> - <el-button @click="studentManager(scope.row.id)" size="small" type="success">鎴愬憳绠$悊</el-button> + <el-button v-if="scope.row.status !== '瑙f暎'" size="small" @click="handlerEdit(scope.row)" type="primary">淇敼</el-button> + <el-button v-if="scope.row.status !== '瑙f暎'" size="small" type="warning">鐝骇楠岃瘉</el-button> + <el-button v-if="scope.row.status !== '瑙f暎'" size="small" @click="handlerOpenNotify(scope.row)" type="info">閫氱煡</el-button> + <el-button v-if="scope.row.status !== '瑙f暎'" @click="studentManager(scope.row.id)" size="small" type="success">鎴愬憳绠$悊</el-button> <el-button v-if="scope.row.status !== '瑙f暎'" @click="dissolution(scope.row.id)" type="danger" size="small">瑙f暎</el-button> </template> </el-table-column> -- Gitblit v1.8.0