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