From aed4c4e0513ac51226e690606ff3797f5355a750 Mon Sep 17 00:00:00 2001
From: luohairen <3399054449@qq.com>
Date: 星期三, 30 十月 2024 21:56:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
src/views/exam/exam/ExamManage.vue | 599 +++++++++++++++++++++++++++++++++++------------------------
1 files changed, 354 insertions(+), 245 deletions(-)
diff --git a/src/views/exam/exam/ExamManage.vue b/src/views/exam/exam/ExamManage.vue
index f609511..39a3ad7 100644
--- a/src/views/exam/exam/ExamManage.vue
+++ b/src/views/exam/exam/ExamManage.vue
@@ -1,133 +1,264 @@
<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.examName" @input="page" clearable size="small" clearable @clear="page" placeholder="鐝骇鍚嶇О"></el-input>
- </el-form-item>
- <el-form-item label="鍙傝�冪彮绾�">
- <el-select v-model="searchForm.classesId" @change="page" clearable @clear="page">
- <el-option v-for="classes in classesList" :key="classes.id" :value="classes.id" :label="classes.className"/>
- </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="examPaperName"
- ></el-table-column>
- <el-table-column
- label="鍙傝�冪彮绾�"
- prop="className"
- ></el-table-column>
- <el-table-column
- label="鐝骇浜烘暟"
- prop="studentNum"
- ></el-table-column>
- <el-table-column
- label="鑰冭瘯鍦扮偣"
- prop="examPlace"
- ></el-table-column>
- <el-table-column
- label="鑰冭瘯鐘舵��"
- prop="status"
- :formatter="statusFormatter"
- ></el-table-column>
- <el-table-column
- label="鍒涘缓鏃堕棿"
- width="150px"
- prop="createTime"
- ></el-table-column>
- <el-table-column
- label="鑰冭瘯鏃堕棿"
- width="200px"
- algin="center"
- >
- <template slot-scope="scope">
- <div>{{scope.row.startTime}}</div>
- <div>鑷�</div>
- <div>{{scope.row.endTime}}</div>
- </template>
- </el-table-column>
- <el-table-column label="鎿嶄綔" fiexd="right" width="150px">
- <template slot-scope="scope">
- <el-button
- type="primary"
- size="small"
- @click="handlerEdit(scope.row)"
- >淇敼
- </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>
- </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 class="app-container">
+ <div style="display: flex; flex-direction: row">
+ <div>
+ <el-button
+ type="primary"
+ size="small"
+ style="margin-right: 10px"
+ @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.examName"
+ @input="page"
+ clearable
+ size="small"
+ @clear="page"
+ placeholder="鑰冭瘯鍚嶇О"
+ ></el-input>
+ </el-form-item>
+ <el-form-item label="鍙傝�冪彮绾�">
+ <el-select
+ v-model="searchForm.classesId"
+ @change="page"
+ clearable
+ size="small"
+ @clear="page"
+ >
+ <el-option
+ v-for="classes in classesList"
+ :key="classes.id"
+ :value="classes.id"
+ :label="classes.className"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item>
+ <el-button type="primary" @click="page" size="small"
+ >鏌ヨ</el-button
+ >
+ </el-form-item>
+ </el-form>
+ </div>
</div>
+ <el-table :data="tableData" border style="width: 100%">
+ <el-table-column
+ label="鑰冭瘯鍚嶇О"
+ width="150px"
+ prop="examName"
+ ></el-table-column>
+ <el-table-column
+ label="鑰冭瘯璇曞嵎"
+ prop="examPaperName"
+ width="200px"
+ ></el-table-column>
+ <el-table-column
+ label="鍙傝�冪彮绾�"
+ width="200px"
+ prop="className"
+ ></el-table-column>
+ <!-- <el-table-column-->
+ <!-- label="鐝骇浜烘暟"-->
+ <!-- prop="studentNum"-->
+ <!-- ></el-table-column>-->
+ <el-table-column
+ label="鑰冭瘯鍦扮偣"
+ prop="examPlace"
+ width="150px"
+ ></el-table-column>
+ <el-table-column
+ label="鑰冭瘯鐘舵��"
+ prop="status"
+ :formatter="statusFormatter"
+ ></el-table-column>
+ <el-table-column label="鑰冭瘯鏃堕棿" width="180px" algin="center">
+ <template slot-scope="scope">
+ <div>{{ scope.row.startTime }}</div>
+ <div>鑷�</div>
+ <div>{{ scope.row.endTime }}</div>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鍒涘缓鏃堕棿"
+ width="160px"
+ prop="createTime"
+ ></el-table-column>
+ <el-table-column label="鎿嶄綔" fixed="right" width="220px">
+ <template slot-scope="scope">
+ <el-button
+ type="primary"
+ size="small"
+ @click="handlerEdit(scope.row)"
+ v-if="scope.row.status === 'not_start'"
+ v-show="scope.row.status !== 'cancel'"
+ >淇敼
+ </el-button>
+ <el-popconfirm
+ v-if="scope.row.status === 'not_start'"
+ v-show="scope.row.status !== 'cancel'"
+ style="margin: 0 5px"
+ title="纭畾瑕佸垹闄よ鑰冭瘯鍚楋紵"
+ @confirm="deleteExam(scope.row.id)"
+ >
+ <el-button
+ slot="reference"
+ type="danger"
+ size="small"
+ v-show="scope.row.status !== 'cancel'"
+ >鍒犻櫎</el-button
+ >
+ </el-popconfirm>
-
- <el-dialog width="500px" :title="title" @close="closeHandler" :visible.sync="open" :destroy-on-close="true"
- :append-to-body="true" :close-on-click-modal="false">
+ <el-button
+ v-if="scope.row.status === 'finished'"
+ type="success"
+ size="small"
+ @click="markPaper(scope.row)"
+ v-show="scope.row.status !== 'cancel'"
+ >
+ 闃呭嵎
+ </el-button>
+ <el-button
+ v-if="scope.row.status === 'ing'"
+ type="warning"
+ size="small"
+ @click="monitor(scope.row)"
+ v-show="scope.row.status !== 'cancel'"
+ >鐩戞帶</el-button
+ >
+ <el-popconfirm
+ class="confirm"
+ style="margin: 0 5px"
+ title="纭畾瑕佷綔搴熻鑰冭瘯璁板綍鍚楋紵"
+ @confirm="cancel(scope.row.id)"
+ >
+ <el-button
+ slot="reference"
+ v-show="scope.row.status !== 'cancel'"
+ type="danger"
+ size="small"
+ v-if="scope.row.status !== 'ing'"
+ >浣滃簾
+ </el-button>
+ </el-popconfirm>
+ <el-popconfirm
+ class="confirm"
+ title="纭畾瑕佹仮澶嶈鑰冭瘯璁板綍鍚楋紵"
+ @confirm="recover(scope.row.id)"
+ >
+ <el-button
+ slot="reference"
+ v-show="scope.row.status === 'cancel'"
+ type="success"
+ size="small"
+ >鎭㈠姝e父
+ </el-button>
+ </el-popconfirm>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="flex" style="justify-content: center; margin-top: 20px">
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="searchForm.currentPage"
+ :limit.sync="searchForm.pageSize"
+ @pagination="page"
+ />
+ </div>
+ <el-dialog
+ width="500px"
+ :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-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-form-item
+ label="鍙傝�冪彮绾�"
+ :label-width="formLabelWidth"
+ prop="classesId"
+ >
<el-select v-model="examForm.classesId">
- <el-option v-for="classes in classesList" :key="classes.id" :value="classes.id" :label="classes.className"/>
+ <el-option
+ v-for="classes in classesList"
+ :key="classes.id"
+ :value="classes.id"
+ :label="classes.className"
+ />
</el-select>
</el-form-item>
- <el-form-item label="璇曞嵎绫诲瀷" :label-width="formLabelWidth" prop="examPaperType">
- <el-select v-model="examForm.examPaperType" @change="getMyExamPaperList">
+ <el-form-item
+ label="璇曞嵎绫诲瀷"
+ :label-width="formLabelWidth"
+ prop="examPaperType"
+ >
+ <el-select
+ v-model="examForm.examPaperType"
+ @change="getMyExamPaperList"
+ >
<el-option label="鍥哄畾璇曞嵎" :value="1"></el-option>
<el-option label="闅忔満璇曞嵎" :value="2"></el-option>
<el-option label="闅忓簭璇曞嵎" :value="3"></el-option>
</el-select>
</el-form-item>
- <el-form-item label="鑰冭瘯璇曞嵎" :label-width="formLabelWidth" prop="examPaperId">
- <el-select v-model="examForm.examPaperId" :disabled="!examForm.examPaperType" placeholder="璇峰厛閫夋嫨璇曞嵎绫诲瀷">
- <el-option v-for="examPaper in examPaperList" :key="examPaper.id" :value="examPaper.id" :label="examPaper.name"/>
+ <el-form-item
+ label="鑰冭瘯璇曞嵎"
+ :label-width="formLabelWidth"
+ prop="examPaperId"
+ >
+ <el-select
+ @change="handleExamPaperSelect"
+ v-model="examForm.examPaperId"
+ :disabled="!examForm.examPaperType"
+ placeholder="璇峰厛閫夋嫨璇曞嵎绫诲瀷"
+ >
+ <el-option
+ v-for="examPaper in examPaperList"
+ :key="examPaper.id"
+ :value="examPaper.id"
+ :label="examPaper.name"
+ />
</el-select>
</el-form-item>
- <el-form-item label="寮�濮嬫椂闂�" :label-width="formLabelWidth" prop="time">
+ <el-form-item v-show="examForm.examPaperId" label="鑰冭瘯鏃堕暱">
+ <div>{{ selectExamPaper.suggestTime }}鍒嗛挓</div>
+ </el-form-item>
+ <el-form-item
+ label="寮�濮嬫椂闂�"
+ :label-width="formLabelWidth"
+ prop="time"
+ >
<el-date-picker
v-model="examForm.time"
- type="daterange"
+ type="datetimerange"
+ format="yyyy-MM-dd HH:mm:ss"
+ value-format="yyyy-MM-dd HH:mm:ss"
range-separator="鑷�"
start-placeholder="寮�濮嬫棩鏈�"
- end-placeholder="缁撴潫鏃ユ湡">
+ end-placeholder="缁撴潫鏃ユ湡"
+ >
</el-date-picker>
</el-form-item>
- <el-form-item label="鑰冭瘯鍦扮偣" :label-width="formLabelWidth" prop="examPlace">
+ <el-form-item
+ label="鑰冭瘯鍦扮偣"
+ :label-width="formLabelWidth"
+ prop="examPlace"
+ >
<el-input v-model="examForm.examPlace" autocomplete="off"></el-input>
</el-form-item>
</el-form>
@@ -140,29 +271,38 @@
</template>
<script>
-import Pagination from "@/components/Pagination"
-import { getExams, addExam, editExam, deleteExamById } from "@/api/exam"
-import { myClasses } from "@/api/classes"
-import examPaperAPI from "@/api/examPaper"
+import Pagination from '@/components/Pagination'
+import {
+ getExams,
+ addExam,
+ editExam,
+ deleteExamById,
+ cancel,
+ recover
+} from '@/api/exam'
+import { myClasses } from '@/api/classes'
+import examPaperAPI from '@/api/examPaper'
+
export default {
components: { Pagination },
- data() {
+ data () {
return {
- formLabelWidth: "80px",
+ formLabelWidth: '80px',
classesList: [],
examPaperList: [],
examForm: {
id: null,
- examName: "",
- examPaperId: "",
- classesId: "",
+ examName: '',
+ examPaperId: '',
+ classesId: '',
examPaperType: null,
- examPlace: "",
- status: "",
- startTime: "",
- endTime: "",
- time: [],
+ examPlace: '',
+ status: '',
+ startTime: null,
+ endTime: null,
+ time: []
},
+ selectExamPaper: {},
examRules: {
examName: [
{ required: true, message: '璇疯緭鍏ヨ�冭瘯鍚嶇О', trigger: 'blur' }
@@ -181,197 +321,166 @@
],
time: [
{ required: true, message: '璇烽�夋嫨鑰冭瘯鏃堕棿', trigger: 'change' }
- ],
+ ]
},
total: 0,
- title: "瀹夋帓鑰冭瘯",
+ title: '瀹夋帓鑰冭瘯',
open: false,
searchForm: {
- examName: "",
+ examName: '',
subject: null,
- pageIndex: 1,
+ currentPage: 1,
pageSize: 10
},
- tableData: [
- ],
- };
+ tableData: []
+ }
},
- mounted() {
- this.page();
+ mounted () {
+ this.page()
this.getMyClasses()
this.MyExamPaperList()
},
methods: {
- markPaper(row) {
+ // 浣滃簾鑰冭瘯
+ cancel (id) {
+ cancel(id).then((res) => {
+ this.$message.success(res.data.message)
+ this.page()
+ })
+ },
+ // 鎭㈠鑰冭瘯
+ recover (id) {
+ recover(id).then((res) => {
+ this.$message.success(res.data.message)
+ this.page()
+ })
+ },
+ // 鑰冭瘯鐩戞帶鍒楄〃
+ 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}})
+ this.$router.push({
+ path: '/exam/mark/paper',
+ query: { examName: row.examName, examId: row.id }
+ })
},
- timeFormatter(row) {
- return row.startTime + "鑷�" + row.endTime
+ timeFormatter (row) {
+ return row.startTime + '鑷�' + row.endTime
},
- statusFormatter(row) {
- if (row.status === "ing") {
- return "杩涜涓�"
- } else if (row.status === "not_start") {
- return "鏈紑濮�"
- } else if (row.status === "finished") {
- return "宸茬粨鏉�"
+ statusFormatter (row) {
+ if (row.status === 'ing') {
+ return '杩涜涓�'
+ } else if (row.status === 'not_start') {
+ return '鏈紑濮�'
+ } else if (row.status === 'finished') {
+ return '宸茬粨鏉�'
+ } else if (row.status === 'cancel') {
+ return '宸蹭綔搴�'
}
},
- MyExamPaperList() {
+ MyExamPaperList () {
let param = {
- "paperType": this.examForm.examPaperType
+ paperType: this.examForm.examPaperType
}
- examPaperAPI.myExamPaperList(param).then(res => {
+ examPaperAPI.myExamPaperList(param).then((res) => {
this.examForm.examPaperId = null
this.examPaperList = res.data
})
},
- getMyExamPaperList() {
- if (! this.examForm.examPaperType) {
+ getMyExamPaperList () {
+ if (!this.examForm.examPaperType) {
return
}
this.MyExamPaperList()
},
- getMyClasses() {
- myClasses().then(res => {
+ getMyClasses () {
+ myClasses().then((res) => {
this.classesList = res.data.data
})
},
- deleteExam(id) {
- deleteExamById(id).then(res => {
- this.$message.success("鍒犻櫎鎴愬姛")
- this.page()
+ deleteExam (row) {
+ this.$confirm('纭鏄惁鍒犻櫎' + row.examName + '?', '鎻愮ず', {
+ confirmButtonText: '纭畾',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ deleteExamById(row.id).then((res) => {
+ this.$message.success('鍒犻櫎鎴愬姛')
+ this.page()
+ })
})
},
- handlerEdit(row) {
- this.examForm = row
- this.examForm.time = [row.startTime, row.endTime]
- this.title = "淇敼鑰冭瘯"
+ handlerEdit (row) {
+ this.examForm = {
+ ...row,
+ time: [row.startTime, row.endTime]
+ }
+ this.title = '淇敼鑰冭瘯'
this.open = true
},
- addOrEditExam() {
+ addOrEditExam () {
this.$refs['examForm'].validate((valid) => {
if (valid) {
this.examForm.startTime = this.examForm.time[0]
this.examForm.endTime = this.examForm.time[1]
if (this.examForm.id) {
- editExam(this.examForm).then(res => {
+ editExam(this.examForm).then((res) => {
this.open = false
this.clearForm()
- this.$message.success("鎿嶄綔鎴愬姛")
+ this.$message.success('鎿嶄綔鎴愬姛')
this.page()
})
} else {
- addExam(this.examForm).then(res => {
+ addExam(this.examForm).then((res) => {
this.open = false
this.clearForm()
- this.$message.success("鎿嶄綔鎴愬姛")
+ this.$message.success('鎿嶄綔鎴愬姛')
this.page()
})
}
}
})
},
- clearForm() {
+ clearForm () {
this.examForm = {
id: null,
- examName: "",
- examPaperId: "",
- classesId: "",
- examPaperType: "",
- examPlace: "",
- status: "",
- startTime: "",
- endTime: "",
+ examName: '',
+ examPaperId: '',
+ classesId: '',
+ examPaperType: '',
+ examPlace: '',
+ status: '',
+ startTime: null,
+ endTime: null,
+ time: []
}
},
- closeHandler() {
+ closeHandler () {
this.open = false
this.clearForm()
},
- openAdd() {
- this.title = this.examForm.id ? "淇敼鑰冭瘯" : "瀹夋帓鑰冭瘯"
+ openAdd () {
+ this.title = this.examForm.id ? '淇敼鑰冭瘯' : '瀹夋帓鑰冭瘯'
this.open = true
},
- formatterType(row) {
- },
- page() {
- getExams(this.searchForm).then(res => {
+ formatterType (row) {},
+ page () {
+ getExams(this.searchForm).then((res) => {
this.tableData = res.data.data
this.total = res.data.total
})
},
- routerTo(url) {
- this.$router.push(url);
+ routerTo (url) {
+ this.$router.push(url)
},
- },
-};
+ handleExamPaperSelect (e) {
+ this.selectExamPaper = this.examPaperList.find((o) => o.id === e)
+ }
+ }
+}
</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>
--
Gitblit v1.8.0