一、新增内容
4月21日,完成了对管理员端部分功能的细化。
1.学生管理
学生管理功能界面如下:
学生管理内包括学生管理与添加学生两个板块,学生管理负责管理已存在学生信息,添加学生可以添加一名新的学生。
学生管理界面如下:
添加学生界面如下:
2.教师管理
教师管理功能界面如下:
教师管理内包括教师管理与添加教师两个板块,教师管理负责管理已存在教师信息,添加教师可以添加一名新的教师。
教师管理界面如下:
添加教师界面如下:
3.考试管理
考试管理功能界面如下:
考试管理内包括功能介绍、考试查询与添加考试三个板块,功能介绍介绍考试管理的功能,考试查询可以查询已经发布的考试,添加考试可以添加一场考试。
功能介绍界面如下:
考试查询界面如下:
添加考试界面如下:
4.主要代码
学生管理与教师管理代码基本相同,这里以教师管理为例。
管理教师信息:
// 教师管理页面
<template>
<div class="all">
<el-table :data="pagination.records" border>
<el-table-column fixed="left" prop="teacherName" label="姓名" width="180"></el-table-column>
<el-table-column prop="institute" label="学院" width="200"></el-table-column>
<el-table-column prop="sex" label="性别" width="120"></el-table-column>
<el-table-column prop="tel" label="联系方式" width="120"></el-table-column>
<el-table-column prop="email" label="密码" width="120"></el-table-column>
<el-table-column prop="cardId" label="身份证号" width="120"></el-table-column>
<el-table-column prop="type" label="职称" width="120"></el-table-column>
<el-table-column fixed="right" label="操作" width="150">
<template slot-scope="scope">
<el-button @click="checkGrade(scope.row.teacherId)" type="primary" size="small">编辑</el-button>
<el-button @click="deleteById(scope.row.teacherId)" type="danger" size="small">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pagination.current"
:page-sizes="[6, 10]"
:page-size="pagination.size"
layout="total, sizes, prev, pager, next, jumper"
:total="pagination.total"
class="page">
</el-pagination>
<!-- 编辑对话框-->
<el-dialog
title="编辑试卷信息"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose">
<section class="update">
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="姓名">
<el-input v-model="form.teacherName"></el-input>
</el-form-item>
<el-form-item label="学院">
<el-input v-model="form.institute"></el-input>
</el-form-item>
<el-form-item label="性别">
<el-input v-model="form.sex"></el-input>
</el-form-item>
<el-form-item label="电话号码">
<el-input v-model="form.tel"></el-input>
</el-form-item>
<el-form-item label="密码">
<el-input v-model="form.pwd"></el-input>
</el-form-item>
<el-form-item label="身份证号">
<el-input v-model="form.cardId"></el-input>
</el-form-item>
<el-form-item label="职称">
<el-input v-model="form.type"></el-input>
</el-form-item>
</el-form>
</section>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submit()">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
pagination: {
//分页后的考试信息
current: 1, //当前页
total: null, //记录条数
size: 6, //每页条数
},
dialogVisible: false, //对话框
form: {}, //保存点击以后当前试卷的信息
};
},
created() {
this.getTeacherInfo();
},
methods: {
getTeacherInfo() {
//分页查询所有试卷信息
this.$axios(`/api/teachers/${this.pagination.current}/${this.pagination.size}`).then(res => {
this.pagination = res.data.data;
}).catch(error => {});
},
//改变当前记录条数
handleSizeChange(val) {
this.pagination.size = val;
this.getTeacherInfo();
},
//改变当前页码,重新发送请求
handleCurrentChange(val) {
this.pagination.current = val;
this.getTeacherInfo();
},
checkGrade(teacherId) { //修改教师信息
this.dialogVisible = true
this.$axios(`/api/teacher/${teacherId}`).then(res => {
this.form = res.data.data
})
},
deleteById(teacherId) { //删除当前学生
this.$confirm("确定删除当前教师吗?删除后无法恢复","Warning",{
confirmButtonText: '确定删除',
cancelButtonText: '算了,留着吧',
type: 'danger'
}).then(()=> { //确认删除
this.$axios({
url: `/api/teacher/${teacherId}`,
method: 'delete',
}).then(res => {
this.getTeacherInfo()
})
}).catch(() => {
})
},
submit() { //提交更改
this.dialogVisible = false
this.$axios({
url: '/api/teacher',
method: 'put',
data: {
...this.form
}
}).then(res => {
console.log(res)
if(res.data.code ==200) {
this.$message({
message: '更新成功',
type: 'success'
})
}
this.getTeacherInfo()
})
},
handleClose(done) { //关闭提醒
this.$confirm('确认关闭?')
.then(_ => {
done();
}).catch(_ => {});
},
}
};
</script>
添加教师信息:
<template>
<section class="add">
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="姓名">
<el-input v-model="form.teacherName"></el-input>
</el-form-item>
<el-form-item label="学院">
<el-input v-model="form.institute"></el-input>
</el-form-item>
<el-form-item label="性别">
<el-input v-model="form.sex"></el-input>
</el-form-item>
<el-form-item label="电话号码">
<el-input v-model="form.tel"></el-input>
</el-form-item>
<el-form-item label="密码">
<el-input v-model="form.pwd"></el-input>
</el-form-item>
<el-form-item label="身份证号">
<el-input v-model="form.cardId"></el-input>
</el-form-item>
<el-form-item label="职称">
<el-input v-model="form.type"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit()">立即创建</el-button>
<el-button type="text" @click="cancel()">取消</el-button>
</el-form-item>
</el-form>
</section>
</template>
<script>
export default {
data() {
return {
form: { //表单数据初始化
studentName: null,
grade: null,
major: null,
clazz: null,
institute: null,
tel: null,
email: null,
pwd: null,
cardId: null,
sex: null,
role: 2
}
};
},
methods: {
onSubmit() { //数据提交
this.$axios({
url: '/api/teacher',
method: 'post',
data: {
...this.form
}
}).then(res => {
if(res.data.code == 200) {
this.$message({
message: '数据添加成功',
type: 'success'
})
this.$router.push({path: '/teacherManage'})
}
})
},
cancel() { //取消按钮
this.form = {}
},
}
};
</script>
考试查询界面:
//查询所有考试
<template>
<div class="exam">
<el-table :data="pagination.records" border>
<el-table-column fixed="left" prop="source" label="试卷名称" width="180"></el-table-column>
<el-table-column prop="description" label="介绍" width="200"></el-table-column>
<el-table-column prop="institute" label="所属学院" width="120"></el-table-column>
<el-table-column prop="major" label="所属专业" width="200"></el-table-column>
<el-table-column prop="grade" label="年级" width="100"></el-table-column>
<el-table-column prop="examDate" label="考试日期" width="120"></el-table-column>
<el-table-column prop="totalTime" label="持续时间" width="120"></el-table-column>
<el-table-column prop="totalScore" label="总分" width="120"></el-table-column>
<el-table-column prop="type" label="试卷类型" width="120"></el-table-column>
<el-table-column prop="tips" label="考生提示" width="400"></el-table-column>
<el-table-column fixed="right" label="操作" width="150">
<template slot-scope="scope">
<el-button @click="edit(scope.row.examCode)" type="primary" size="small">编辑</el-button>
<el-button @click="deleteRecord(scope.row.examCode)" type="danger" size="small">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pagination.current"
:page-sizes="[4, 8, 10, 20]"
:page-size="pagination.size"
layout="total, sizes, prev, pager, next, jumper"
:total="pagination.total" class="page">
</el-pagination>
<!-- 编辑对话框-->
<el-dialog
title="编辑试卷信息"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose">
<section class="update">
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="试卷名称">
<el-input v-model="form.source"></el-input>
</el-form-item>
<el-form-item label="介绍">
<el-input v-model="form.description"></el-input>
</el-form-item>
<el-form-item label="所属学院">
<el-input v-model="form.institute"></el-input>
</el-form-item>
<el-form-item label="所属专业">
<el-input v-model="form.major"></el-input>
</el-form-item>
<el-form-item label="年级">
<el-input v-model="form.grade"></el-input>
</el-form-item>
<el-form-item label="考试日期">
<el-col :span="11">
<el-date-picker type="date" placeholder="选择日期" v-model="form.examDate" style="width: 100%;"></el-date-picker>
</el-col>
</el-form-item>
<el-form-item label="持续时间">
<el-input v-model="form.totalTime"></el-input>
</el-form-item>
<el-form-item label="总分">
<el-input v-model="form.totalScore"></el-input>
</el-form-item>
<el-form-item label="试卷类型">
<el-input v-model="form.type"></el-input>
</el-form-item>
<el-form-item label="考生提示">
<el-input type="textarea" v-model="form.tips"></el-input>
</el-form-item>
</el-form>
</section>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submit()">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
form: {}, //保存点击以后当前试卷的信息
pagination: { //分页后的考试信息
current: 1, //当前页
total: null, //记录条数
size: 4 //每页条数
},
dialogVisible: false
}
},
created() {
this.getExamInfo()
},
methods: {
edit(examCode) { //编辑试卷
this.dialogVisible = true
this.$axios(`/api/exam/${examCode}`).then(res => { //根据试卷id请求后台
if(res.data.code == 200) {
this.form = res.data.data
}
})
},
handleClose(done) { //关闭提醒
this.$confirm('确认关闭?')
.then(_ => {
done();
}).catch(_ => {});
},
submit() { //提交修改后的试卷信息
this.dialogVisible = false
this.$axios({
url: '/api/exam',
method: 'put',
data: {
...this.form
}
}).then(res => {
if(res.data.code == 200) {
this.$message({ //成功修改提示
message: '更新成功',
type: 'success'
})
}
this.getExamInfo()
})
},
deleteRecord(examCode) {
this.$confirm("确定删除该记录吗,该操作不可逆!!!","删除提示",{
confirmButtonText: '确定删除',
cancelButtonText: '算了,留着',
type: 'danger'
}).then(()=> { //确认删除
this.$axios({
url: `/api/exam/${examCode}`,
method: 'delete',
}).then(res => {
this.getExamInfo()
})
}).catch(() => {
})
},
getExamInfo() { //分页查询所有试卷信息
this.$axios(`/api/exams/${this.pagination.current}/${this.pagination.size}`).then(res => {
this.pagination = res.data.data
}).catch(error => {
})
},
//改变当前记录条数
handleSizeChange(val) {
this.pagination.size = val
this.getExamInfo()
},
//改变当前页码,重新发送请求
handleCurrentChange(val) {
this.pagination.current = val
this.getExamInfo()
},
},
};
</script>
添加考试界面:
<template>
<section class="add">
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="试卷名称">
<el-input v-model="form.source"></el-input>
</el-form-item>
<el-form-item label="介绍">
<el-input v-model="form.description"></el-input>
</el-form-item>
<el-form-item label="所属学院">
<el-input v-model="form.institute"></el-input>
</el-form-item>
<el-form-item label="所属专业">
<el-input v-model="form.major"></el-input>
</el-form-item>
<el-form-item label="年级">
<el-input v-model="form.grade"></el-input>
</el-form-item>
<el-form-item label="考试日期">
<el-col :span="11">
<el-date-picker placeholder="选择日期" v-model="form.examDate" style="width: 100%;"></el-date-picker>
</el-col>
</el-form-item>
<el-form-item label="持续时间">
<el-input v-model="form.totalTime"></el-input>
</el-form-item>
<el-form-item label="总分">
<el-input v-model="form.totalScore"></el-input>
</el-form-item>
<el-form-item label="考试类型">
<el-input v-model="form.type"></el-input>
</el-form-item>
<el-form-item label="考生提示">
<el-input type="textarea" v-model="form.tips"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit()">立即创建</el-button>
<el-button type="text" @click="cancel()">取消</el-button>
</el-form-item>
</el-form>
</section>
</template>
<script>
export default {
data() {
return {
form: { //表单数据初始化
source: null,
description: null,
institute: null,
major: null,
grade: null,
examDate: null,
totalTime: null,
totalScore: null,
type: null,
tips: null,
paperId: null,
}
};
},
methods: {
formatTime(date) { //日期格式化
let year = date.getFullYear()
let month= date.getMonth()+ 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
let day=date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
let hours=date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
let minutes=date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
let seconds=date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
// 拼接
return year+"-"+month+"-"+day+" "+hours+":"+minutes+":"+seconds;
},
onSubmit() {
let examDate = this.formatTime(this.form.examDate)
this.form.examDate = examDate.substr(0,10)
this.$axios(`/api/examManagePaperId`).then(res => {
this.form.paperId = res.data.data.paperId + 1 //实现paperId自增1
this.$axios({
url: '/api/exam',
method: 'post',
data: {
...this.form
}
}).then(res => {
if(res.data.code == 200) {
this.$message({
message: '数据添加成功',
type: 'success'
})
this.$router.push({path: '/selectExam'})
}
})
})
},
cancel() { //取消按钮
this.form = {}
},
}
};
</script>
二、未来开发计划
目前实现了部分的管理员端功能,之后将对学生端界面进行开发,使学生可以看到自己的试卷与成绩情况,同时将会进一步补充教师端与管理员端功能。