From 3980b7b055eb1d790a5fe1f588a1a6441fc50472 Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期一, 28 十月 2024 18:31:47 +0800
Subject: [PATCH] 12.学生列表中的添加学生 14.题目难度导入 17.建议时长
---
src/components/UploadC.vue | 7
src/views/train/index.vue | 4
src/views/education/resource/list.vue | 11 +
src/views/exam/exam/ExamManage.vue | 219 +++++++++++++++++++++++++++--------
src/views/class-management/ClassStaff.vue | 94 ++++++++++-----
5 files changed, 239 insertions(+), 96 deletions(-)
diff --git a/src/components/UploadC.vue b/src/components/UploadC.vue
index 3c60774..c34b1b1 100644
--- a/src/components/UploadC.vue
+++ b/src/components/UploadC.vue
@@ -41,7 +41,7 @@
},
data () {
return {
- uploadUrl: 'https://ycl.easyblog.vip:81/api/upload/upload',
+ uploadUrl: '/api/upload/upload',
fileTypeList: {
'video': ['mp4', 'avi', 'webm'],
'img': ['jpg', 'png', 'jpeg'],
@@ -50,14 +50,13 @@
'excel': ['xlsx', 'xls'],
'audio': ['mp3'],
'ppt': ['ppt', 'pptx'],
- 'file': ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'png', 'jpg', 'jpeg', 'pdf'],
+ 'file': ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'png', 'jpg', 'jpeg', 'pdf']
}
}
},
methods: {
clearFile () {
this.fileUrl = []
-
},
beforeRemove (file, fileList) {
if (file && file.status === 'success') {
@@ -94,7 +93,7 @@
this.$message.error(`涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ${this.fileSizeLimitM}MB!`)
}
return limitType && limit
- },
+ }
},
computed: {
acceptList () {
diff --git a/src/views/class-management/ClassStaff.vue b/src/views/class-management/ClassStaff.vue
index e737a14..18b7d74 100644
--- a/src/views/class-management/ClassStaff.vue
+++ b/src/views/class-management/ClassStaff.vue
@@ -85,24 +85,35 @@
:before-close="handleAddClose"
:close-on-click-modal="false">
<el-form :model="studentForm" :rules="studentRules" ref="studentForm" label-width="100px" class="demo-ruleForm">
- <el-form-item label="濮撳悕" prop="realName">
- <el-input v-model="studentForm.realName"></el-input>
- </el-form-item>
- <el-form-item label="鎬у埆" prop="sex">
- <el-select v-model="studentForm.sex">
- <el-option label="鐢�" :value="1"></el-option>
- <el-option label="濂�" :value="2"></el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="鐢佃瘽" prop="phone">
- <el-input v-model="studentForm.phone"></el-input>
- </el-form-item>
- <el-form-item label="鐧诲綍璐﹀彿" prop="account">
- <el-input v-model="studentForm.account"></el-input>
- </el-form-item>
- <el-form-item label="鐧诲綍瀵嗙爜" prop="password">
- <el-input v-model="studentForm.password" show-password placeholder="涓嶅~鍐欎細浣跨敤榛樿202406"></el-input>
- </el-form-item>
+ <el-form-item label="鐪熷疄濮撳悕锛�" prop="realName" required>
+ <el-input v-model="studentForm.realName"></el-input>
+ </el-form-item>
+ <el-form-item label="鎵嬫満鍙风爜锛�" prop="phone" required>
+ <el-input v-model="studentForm.phone"></el-input>
+ </el-form-item>
+ <el-form-item label="鐧诲綍璐﹀彿锛�" prop="userName" required>
+ <el-input v-model="studentForm.userName" autocomplete="off"></el-input>
+ </el-form-item>
+ <el-form-item v-if="!studentForm.id" label="鐧诲綍瀵嗙爜锛�" prop="password" required>
+ <el-input v-model="studentForm.password" show-password autocomplete="off"></el-input>
+ </el-form-item>
+ <el-form-item label="骞撮緞锛�">
+ <el-input v-model="studentForm.age"></el-input>
+ </el-form-item>
+ <el-form-item label="鎬у埆锛�">
+ <el-select v-model="studentForm.sex" placeholder="鎬у埆" clearable>
+ <el-option v-for="item in sexEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍑虹敓鏃ユ湡锛�">
+ <el-date-picker v-model="studentForm.birthDay" type="date" value-format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡"/>
+ </el-form-item>
+
+ <el-form-item label="鐘舵�侊細" required>
+ <el-select v-model="studentForm.status" placeholder="鐘舵��">
+ <el-option v-for="item in statusEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
+ </el-select>
+ </el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="handleAddClose">鍙� 娑�</el-button>
@@ -139,6 +150,7 @@
<script>
// 寮曞叆褰堝嚭绐楀彛绲勪欢
import UserApi from '@/api/user'
+import { mapGetters, mapState } from 'vuex'
import {
updateClassesUser,
getClassesUsers,
@@ -147,7 +159,6 @@
editClassesUser
} from '@/api/classesUser'
import Pagination from '@/components/Pagination'
-import {deleteExamById} from "@/api/exam";
export default {
components: { Pagination },
@@ -158,22 +169,23 @@
realName: '',
sex: 1,
phone: '',
+ birthDay: '',
age: null,
- account: '',
+ userName: '',
password: ''
},
studentRules: {
realName: [
- { required: true, message: '璇峰~鍐欏鍛樺鍚�', trigger: 'blur' },
+ { required: true, message: '璇峰~鍐欏鍛樺鍚�', trigger: 'blur' }
],
sex: [
- { required: true, message: '璇烽�夋嫨瀛﹀憳鎬у埆', trigger: 'change' },
+ { required: true, message: '璇烽�夋嫨瀛﹀憳鎬у埆', trigger: 'change' }
],
phone: [
- { required: true, message: '璇峰~鍐欏鍛樼數璇�', trigger: 'blur' },
+ { required: true, message: '璇峰~鍐欏鍛樼數璇�', trigger: 'blur' }
],
- account: [
- { required: true, message: '璇峰~鍐欏鍛樼櫥褰曡处鍙�', trigger: 'blur' },
+ userName: [
+ { required: true, message: '璇峰~鍐欏鍛樼櫥褰曡处鍙�', trigger: 'blur' }
]
},
studentTitle: '鏂板瀛﹀憳',
@@ -196,9 +208,9 @@
formLabelAlign: {
type: '',
user: '',
- region: '',
+ region: ''
},
- tableData: [],
+ tableData: []
}
},
mounted () {
@@ -229,7 +241,7 @@
this.page()
this.resetStudentForm()
})
- }else {
+ } else {
addClassesUser(this.studentForm).then(res => {
this.addOpen = false
this.$message.success(res.data.message)
@@ -242,10 +254,14 @@
},
resetStudentForm () {
this.studentForm = {
+ id: null,
realName: '',
- sex: '',
+ sex: 1,
phone: '',
- age: null
+ birthDay: '',
+ age: null,
+ userName: '',
+ password: ''
}
},
handleAddClose () {
@@ -322,17 +338,28 @@
// 鐢熸垚璇曞嵎
getCreate () {
// 璺宠浆鍒扮敓鎴愰〉闈�
- //璺宠浆鍒板搴旂殑绠$悊椤甸潰
+ // 璺宠浆鍒板搴旂殑绠$悊椤甸潰
this.$router.push({
- path: '/manage/test-paper-generation',
+ path: '/manage/test-paper-generation'
})
},
// 寮圭獥
// 鎺ユ敹寮圭獥缁勪欢杩斿洖鐨勮〃鍗曞��
parentGoods (obj) {
console.log(obj, '寮圭獥缁勪欢鐨勮〃鍗曞��')
- },
+ }
},
+ computed: {
+ ...mapGetters('enumItem', [
+ 'enumFormat'
+ ]),
+ ...mapState('enumItem', {
+ sexEnum: state => state.user.sexEnum,
+ roleEnum: state => state.user.roleEnum,
+ statusEnum: state => state.user.statusEnum,
+ levelEnum: state => state.user.levelEnum
+ })
+ }
}
</script>
<style scoped lang="scss">
@@ -351,4 +378,3 @@
margin-right: 5px;
}
</style>
-
diff --git a/src/views/education/resource/list.vue b/src/views/education/resource/list.vue
index 8879b7d..25e29ae 100644
--- a/src/views/education/resource/list.vue
+++ b/src/views/education/resource/list.vue
@@ -106,7 +106,7 @@
<el-form-item label="涓婚绠�浠�" prop="introduction">
<el-input v-model="form.introduction" placeholder="涓婚鍐呭"></el-input>
</el-form-item>
- <el-form-item label="鐝骇">
+ <el-form-item label="鐝骇" prop="classId">
<el-select
v-model="form.classId"
placeholder="鐝骇"
@@ -212,6 +212,12 @@
introduction: [
{ required: true, message: '璇疯緭鍏ヤ富棰樺唴瀹�', trigger: 'blur' }
],
+ classId: [
+ { required: true, message: '璇烽�夋嫨鐝骇', trigger: 'blur' }
+ ],
+ subjectId: [
+ { required: true, message: '璇烽�夋嫨绉戠洰', trigger: 'blur' }
+ ],
belongType: [
{ required: true, message: '璇烽�夋嫨瀛︿範鍒嗙被', trigger: 'change' }
],
@@ -267,7 +273,6 @@
if (row.contentType === 'ppt') {
return 'PPT'
}
-
},
clearFile () {
this.form.contentUrl = []
@@ -373,7 +378,7 @@
this.form.belongType = row.belongType
this.dialogTitle = '淇敼瀛︿範鍐呭'
this.open = true
- },
+ }
},
mounted () {
this.page()
diff --git a/src/views/exam/exam/ExamManage.vue b/src/views/exam/exam/ExamManage.vue
index 5853fb9..667e3b9 100644
--- a/src/views/exam/exam/ExamManage.vue
+++ b/src/views/exam/exam/ExamManage.vue
@@ -2,22 +2,46 @@
<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>
+ <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-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
+ 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-button type="primary" @click="page" size="small"
+ >鏌ヨ</el-button
+ >
</el-form-item>
</el-form>
</div>
@@ -52,11 +76,7 @@
prop="status"
:formatter="statusFormatter"
></el-table-column>
- <el-table-column
- label="鑰冭瘯鏃堕棿"
- width="180px"
- algin="center"
- >
+ <el-table-column label="鑰冭瘯鏃堕棿" width="180px" algin="center">
<template slot-scope="scope">
<div>{{ scope.row.startTime }}</div>
<div>鑷�</div>
@@ -76,7 +96,7 @@
@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'"
@@ -85,22 +105,45 @@
title="纭畾瑕佸垹闄よ鑰冭瘯鍚楋紵"
@confirm="deleteExam(scope.row.id)"
>
- <el-button slot="reference" type="danger" size="small" v-show="scope.row.status !== 'cancel'">鍒犻櫎</el-button>
+ <el-button
+ slot="reference"
+ type="danger"
+ size="small"
+ v-show="scope.row.status !== 'cancel'"
+ >鍒犻櫎</el-button
+ >
</el-popconfirm>
- <el-button v-if="scope.row.status === 'finished'" type="success" size="small" @click="markPaper(scope.row)" v-show="scope.row.status !== 'cancel'">
+ <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-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
+ slot="reference"
+ v-show="scope.row.status !== 'cancel'"
+ type="danger"
+ size="small"
+ v-if="scope.row.status !== 'ing'"
+ >浣滃簾
</el-button>
</el-popconfirm>
<el-popconfirm
@@ -108,45 +151,98 @@
title="纭畾瑕佹仮澶嶈鑰冭瘯璁板綍鍚楋紵"
@confirm="recover(scope.row.id)"
>
- <el-button slot="reference" v-show="scope.row.status === 'cancel'" type="success"
- size="small">鎭㈠姝e父
+ <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 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-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="datetimerange"
@@ -158,7 +254,11 @@
>
</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>
@@ -172,7 +272,14 @@
<script>
import Pagination from '@/components/Pagination'
-import { getExams, addExam, editExam, deleteExamById, cancel, recover } from '@/api/exam'
+import {
+ getExams,
+ addExam,
+ editExam,
+ deleteExamById,
+ cancel,
+ recover
+} from '@/api/exam'
import { myClasses } from '@/api/classes'
import examPaperAPI from '@/api/examPaper'
@@ -195,6 +302,7 @@
endTime: null,
time: []
},
+ selectExamPaper: {},
examRules: {
examName: [
{ required: true, message: '璇疯緭鍏ヨ�冭瘯鍚嶇О', trigger: 'blur' }
@@ -235,14 +343,14 @@
methods: {
// 浣滃簾鑰冭瘯
cancel (id) {
- cancel(id).then(res => {
+ cancel(id).then((res) => {
this.$message.success(res.data.message)
this.page()
})
},
// 鎭㈠鑰冭瘯
recover (id) {
- recover(id).then(res => {
+ recover(id).then((res) => {
this.$message.success(res.data.message)
this.page()
})
@@ -253,7 +361,10 @@
},
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
@@ -271,9 +382,9 @@
},
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
})
@@ -285,7 +396,7 @@
this.MyExamPaperList()
},
getMyClasses () {
- myClasses().then(res => {
+ myClasses().then((res) => {
this.classesList = res.data.data
})
},
@@ -295,7 +406,7 @@
cancelButtonText: '鍙栨秷',
type: 'warning'
}).then(() => {
- deleteExamById(row.id).then(res => {
+ deleteExamById(row.id).then((res) => {
this.$message.success('鍒犻櫎鎴愬姛')
this.page()
})
@@ -315,14 +426,14 @@
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.page()
})
} else {
- addExam(this.examForm).then(res => {
+ addExam(this.examForm).then((res) => {
this.open = false
this.clearForm()
this.$message.success('鎿嶄綔鎴愬姛')
@@ -354,10 +465,9 @@
this.title = this.examForm.id ? '淇敼鑰冭瘯' : '瀹夋帓鑰冭瘯'
this.open = true
},
- formatterType (row) {
- },
+ formatterType (row) {},
page () {
- getExams(this.searchForm).then(res => {
+ getExams(this.searchForm).then((res) => {
this.tableData = res.data.data
this.total = res.data.total
})
@@ -365,6 +475,9 @@
routerTo (url) {
this.$router.push(url)
},
+ handleExamPaperSelect (e) {
+ this.selectExamPaper = this.examPaperList.find((o) => o.id === e)
+ }
}
}
</script>
diff --git a/src/views/train/index.vue b/src/views/train/index.vue
index 4632607..a5b3549 100644
--- a/src/views/train/index.vue
+++ b/src/views/train/index.vue
@@ -120,7 +120,7 @@
time: [
{ required: true, message: '璇烽�夋嫨鏃堕棿', trigger: 'change' }
]
- },
+ }
}
},
created () {
@@ -157,7 +157,7 @@
path: '/meet',
query: {
meetId: item.id,
- domain: 'ycl.easyblog.vip:81/' + item.id,
+ domain: 'ycl.easyblog.vip:8443/' + item.id,
roomName: item.meetName,
userInfoStr: JSON.stringify({
displayName: item.teacherName
--
Gitblit v1.8.0