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