Compare commits

...

57 Commits

Author SHA1 Message Date
c6a47d0e69 删除首页5条限制 2021-11-26 10:18:19 +08:00
25ee3c9bb0
线上密码 2021-03-26 14:33:11 +08:00
ba2a295f09
学生名成从用户名改为中文名 2021-03-26 11:38:26 +08:00
f1dacb165a
修改权限 2021-03-23 11:48:58 +08:00
40f7e34528
批改移动到后台 2021-03-23 11:45:51 +08:00
1757a8fd4f
删除了学生端批改 2021-03-23 11:19:11 +08:00
3a947518ef
权限与后台提交 2021-03-23 11:17:51 +08:00
f318e23220
session 过期时间 2021-03-22 09:30:48 +08:00
45b2507948
修正了错误 2021-03-22 09:29:22 +08:00
b4b8c38294
删除了lang en 2021-03-17 11:25:12 +08:00
597dfccf84
修复了列表的问题 2021-03-17 11:23:53 +08:00
alvis
04ff77ed3e
Merge pull request #83 from mindskip/alvis
v3.3.0
2021-03-16 12:25:44 +08:00
alvis
fd2ac75c44 v3.3.0 2021-03-16 12:25:19 +08:00
思维跳跃科技
b6a9a1d435
Merge pull request #82 from mindskip/mindskip
数据库设计
2021-03-15 12:57:20 +08:00
思维跳跃科技
1cf243e542
Merge pull request #81 from mindskip/mindskip
数据库设计
2021-03-12 12:34:11 +08:00
思维跳跃科技
98f4d75d59
Merge pull request #80 from mindskip/mindskip
数据库设计
2021-03-11 13:05:03 +08:00
思维跳跃科技
db012a8f51
Merge pull request #79 from mindskip/mindskip
数据库设计
2021-03-10 12:48:14 +08:00
alvis
eab090c2a7
Merge pull request #78 from mindskip/alvis
http -> https
2021-03-09 12:45:49 +08:00
alvis
839af4f589 http -> https 2021-03-09 12:45:36 +08:00
alvis
6f3054a030
Merge pull request #77 from mindskip/alvis
组件升级
2021-03-08 13:10:40 +08:00
alvis
9ee89c5287 组件升级 2021-03-08 13:10:16 +08:00
思维跳跃科技
d9b98386d2
Merge pull request #76 from mindskip/mindskip
文档更新
2021-03-04 23:22:44 -06:00
思维跳跃科技
89e883ff2c
Merge pull request #75 from mindskip/mindskip
数据库设计
2021-03-03 22:40:32 -06:00
思维跳跃科技
fd614d9f21
Merge pull request #74 from mindskip/mindskip
数据库设计
2021-03-02 22:58:13 -06:00
思维跳跃科技
bd36a8f321
Merge pull request #73 from mindskip/mindskip
数据库设计
2021-03-02 13:12:42 +08:00
思维跳跃科技
d08d8f2cda
Merge pull request #72 from mindskip/mindskip
修复IE浏览器bug
2021-03-01 20:45:19 +08:00
思维跳跃科技
02e5a206bf
Merge pull request #71 from mindskip/mindskip
数据库设计
2021-02-26 10:37:08 +08:00
思维跳跃科技
b6a9f488cb
Merge pull request #70 from mindskip/mindskip
数据库设计
2021-02-25 10:06:48 +08:00
思维跳跃科技
3738c5b744
Merge pull request #69 from mindskip/mindskip
QQ交流群八:902855996
2021-02-24 09:21:40 +08:00
alvis
9518070c08
Merge pull request #68 from mindskip/alvis
修复选项清空bug
2021-02-23 08:52:19 +08:00
alvis
aac89f3df7 修复选项清空bug 2021-02-23 08:51:04 +08:00
思维跳跃科技
9a629b7ea3
Merge pull request #67 from mindskip/mindskip
数据库设计
2021-02-22 09:56:47 +08:00
思维跳跃科技
918c4c1de8
Merge pull request #66 from mindskip/mindskip
数据库设计
2021-02-20 13:44:20 +08:00
思维跳跃科技
acf3a907b4
Merge pull request #65 from mindskip/mindskip
数据库设计
2021-02-19 10:04:49 +08:00
思维跳跃科技
e9b3520023
Merge pull request #64 from mindskip/mindskip
数据库设计
2021-02-18 09:28:53 +08:00
alvis
d89dc8b2d8
Merge pull request #63 from mindskip/alvis
优化
2021-02-07 12:10:47 +08:00
alvis
cb9c5ffcc5 优化 2021-02-07 12:09:37 +08:00
alvis
d2c976323e
Merge pull request #62 from mindskip/alvis
优化
2021-02-05 10:10:17 +08:00
alvis
1dee271b14 优化 2021-02-05 10:00:33 +08:00
alvis
faeee8cdce
Merge pull request #61 from mindskip/alvis
bug fix
2021-02-04 10:23:27 +08:00
alvis
be2b51ad1e bug fix 2021-02-04 10:22:14 +08:00
alvis
7fe265c45d
Merge pull request #60 from mindskip/alvis
成绩管理
2021-02-03 09:32:11 +08:00
alvis
5f31d444d4 成绩管理 2021-02-03 09:29:20 +08:00
思维跳跃科技
a2f6cc7c79
Merge pull request #59 from mindskip/mindskip
文档更新
2021-02-02 09:20:01 +08:00
alvis
626ba788c7 成绩管理 2021-02-01 12:11:37 +08:00
思维跳跃科技
edcf038602
Merge pull request #58 from mindskip/mindskip
docker更新
2021-02-01 10:10:15 +08:00
alvis
e934fdc2d5
Merge pull request #57 from mindskip/alvis
主题切换
2021-02-01 09:59:05 +08:00
alvis
e8159a17e1 主题切换 2021-02-01 09:58:14 +08:00
思维跳跃科技
4614ee3f53
Merge pull request #56 from mindskip/mindskip
update docs/README.md
2021-01-29 09:16:06 +08:00
alvis
5398f551ba
Merge pull request #55 from mindskip/alvis
bug fix
2021-01-28 10:26:56 +08:00
alvis
f2d0192277 bug fix 2021-01-28 10:22:59 +08:00
alvis
b809fe7b69
Merge pull request #54 from mindskip/alvis
bug fix
2021-01-27 09:16:55 +08:00
alvis
e97a614832 bug fix 2021-01-27 09:15:37 +08:00
alvis
595a71792c
Merge pull request #53 from mindskip/alvis
bug fix
2021-01-26 09:15:37 +08:00
alvis
3be08dfa92 bug fix 2021-01-26 09:14:15 +08:00
alvis
42237dfe11
Merge pull request #52 from mindskip/alvis
bug fix
2021-01-25 09:56:36 +08:00
alvis
7fc051fdb0 bug fix 2021-01-25 09:52:09 +08:00
161 changed files with 19633 additions and 28790 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "xzs-admin",
"version": "3.2.0",
"version": "3.3.0",
"author": "武汉思维跳跃科技有限公司",
"description": "学之思管理系统",
"license": "AGPL-3.0",
@ -16,22 +16,22 @@
},
"dependencies": {
"axios": "^0.19.0",
"core-js": "^3.8.3",
"core-js": "^3.9.0",
"element-ui": "^2.15.0",
"js-cookie": "2.2.0",
"normalize.css": "8.0.1",
"nprogress": "0.2.0",
"vue": "^2.6.10",
"vue-count-to": "^1.0.13",
"vue-router": "^3.4.9",
"vuex": "^3.6.0"
"vue-router": "^3.5.1",
"vuex": "^3.6.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.5.10",
"@vue/cli-plugin-eslint": "^4.5.10",
"@vue/cli-plugin-router": "^4.5.10",
"@vue/cli-plugin-vuex": "^4.5.10",
"@vue/cli-service": "^4.5.10",
"@vue/cli-plugin-babel": "^4.5.11",
"@vue/cli-plugin-eslint": "^4.5.11",
"@vue/cli-plugin-router": "^4.5.11",
"@vue/cli-plugin-vuex": "^4.5.11",
"@vue/cli-service": "^4.5.11",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.1.0",
"eslint": "^5.16.0",

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />

View File

@ -0,0 +1,5 @@
import { post } from '@/utils/request'
export default {
page: query => post('/api/admin/examPaperAnswer/page', query)
}

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1569065326528" class="icon" viewBox="0 0 1152 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3178" xmlns:xlink="http://www.w3.org/1999/xlink" width="225" height="200"><defs><style type="text/css"></style></defs><path d="M1023.584 0 128.416 0C57.472 0 0 57.504 0 128.416L0 767.584C0 838.496 57.472 896 128.416 896L192 896 192 985.856C192 1007.904 210.08 1024 230.112 1024 235.552 1024 241.12 1022.816 246.528 1020.256L480.544 908.48C497.76 900.256 516.608 896 535.68 896L1023.584 896C1094.496 896 1152 838.496 1152 767.584L1152 128.416C1152 57.504 1094.496 0 1023.584 0ZM319.9936 352C319.9936 334.32689 334.221792 320 352.021504 320L799.965696 320C817.654208 320 831.9936 334.203674 831.9936 352 831.9936 369.67311 817.765408 384 799.965696 384L352.021504 384C334.332992 384 319.9936 369.796326 319.9936 352ZM319.9936 544C319.9936 526.32689 334.221792 512 352.021504 512L799.965696 512C817.654208 512 831.9936 526.203674 831.9936 544 831.9936 561.67311 817.765408 576 799.965696 576L352.021504 576C334.332992 576 319.9936 561.796326 319.9936 544Z" p-id="3179"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -187,6 +187,24 @@ const constantRoutes = [
}
]
},
{
path: '/answer',
component: Layout,
name: 'AnswerPage',
meta: {
title: '成绩管理',
icon: 'answer'
},
alwaysShow: true,
children: [
{
path: 'list',
component: () => import('@/views/answer/list'),
name: 'AnswerPageList',
meta: { title: '答卷列表', noCache: true }
}
]
},
{
path: '/message',
component: Layout,

View File

@ -4,7 +4,7 @@
**/
/* theme color */
$--color-primary: #13C2C2;
$--color-primary: #1890ff;
$--color-success: #13ce66;
$--color-warning: #FFBA00;
$--color-danger: #ff4949;

View File

@ -0,0 +1,96 @@
<template>
<div class="app-container">
<el-form :model="queryParam" ref="queryForm" :inline="true">
<el-form-item label="学科:" >
<el-select v-model="queryParam.subjectId" clearable>
<el-option v-for="item in subjects" :key="item.id" :value="item.id" :label="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">查询</el-button>
</el-form-item>
</el-form>
<el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
<el-table-column prop="id" label="Id" width="100" />
<el-table-column prop="paperName" label="试卷名称"/>
<el-table-column prop="userName" label="用户名称"/>
<el-table-column label="得分" width="100px" >
<template slot-scope="{row}">
{{row.userScore}} / {{row.paperScore}}
</template>
</el-table-column>
<el-table-column label="题目对错" width="80px" >
<template slot-scope="{row}">
{{row.questionCorrect}} / {{row.questionCount}}
</template>
</el-table-column>
<el-table-column prop="doTime" label="耗时" width="100px"/>
<el-table-column prop="createTime" label="提交时间" width="160px"/>
<el-table-column label="操作" width="160px">
<template slot-scope="scope" >
<el-button v-show="scope.row.status == 1" type="primary" round @click="toedit(scope.row.id,1)">批改</el-button>
<el-button v-show="scope.row.status == 2" type="primary" round @click="toedit(scope.row.id,0)">查看试卷</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
@pagination="search"/>
</div>
</template>
<script>
import { mapGetters, mapState, mapActions } from 'vuex'
import Pagination from '@/components/Pagination'
import examPaperAnswerApi from '@/api/examPaperAnwser'
export default {
components: { Pagination },
data () {
return {
queryParam: {
subjectId: null,
pageIndex: 1,
pageSize: 10
},
listLoading: false,
tableData: [],
total: 0
}
},
created () {
this.initSubject()
this.search()
},
methods: {
search () {
this.listLoading = true
examPaperAnswerApi.page(this.queryParam).then(data => {
const re = data.response
this.tableData = re.list
this.total = re.total
this.queryParam.pageIndex = re.pageNum
this.listLoading = false
})
},
submitForm () {
this.queryParam.pageIndex = 1
this.search()
},
toedit(id,type){
if(type == 1){
window.open("/student/index.html#/edit?id=" + id)
}else{
window.open("/student/index.html#/read?id=" + id)
}
},
...mapActions('exam', { initSubject: 'initSubject' })
},
computed: {
...mapGetters('enumItem', ['enumFormat']),
...mapGetters('exam', ['subjectEnumFormat']),
...mapState('exam', { subjects: state => state.subjects })
}
}
</script>

View File

@ -65,6 +65,7 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
@ -72,6 +73,7 @@ export default {
level: 1,
levelName: ''
}
this.form.id = lastId
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},

View File

@ -238,6 +238,7 @@ export default {
return this.subjectEnumFormat(cellValue)
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
@ -249,6 +250,7 @@ export default {
suggestTime: null,
titleItems: []
}
this.form.id = lastId
},
...mapActions('exam', { initSubject: 'initSubject' }),
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })

View File

@ -157,8 +157,13 @@ export default {
},
questionItemAdd () {
let items = this.form.items
let newLastPrefix
if (items.length > 0) {
let last = items[items.length - 1]
let newLastPrefix = String.fromCharCode(last.prefix.charCodeAt() + 1)
newLastPrefix = String.fromCharCode(last.prefix.charCodeAt() + 1)
} else {
newLastPrefix = 'A'
}
items.push({ id: null, prefix: newLastPrefix, content: '' })
},
submitForm () {

View File

@ -172,6 +172,7 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
@ -188,6 +189,7 @@ export default {
score: '',
difficult: 0
}
this.form.id = lastId
},
levelChange () {
this.form.subjectId = null

View File

@ -89,12 +89,14 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
title: '',
content: '',
receiveUserIds: []
}
this.form.id = lastId
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
}

View File

@ -1,134 +0,0 @@
<template>
<div class="app-container">
<el-form :model="form" ref="form" label-width="100px" v-loading="formLoading" :rules="rules">
<el-form-item label="用户名:" prop="userName" required>
<el-input v-model="form.userName"></el-input>
</el-form-item>
<el-form-item label="密码:" required>
<el-input v-model="form.password"></el-input>
</el-form-item>
<el-form-item label="真实姓名:" prop="realName" required>
<el-input v-model="form.realName"></el-input>
</el-form-item>
<el-form-item label="年龄:">
<el-input v-model="form.age"></el-input>
</el-form-item>
<el-form-item label="性别:">
<el-select v-model="form.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="form.birthDay" value-format="yyyy-MM-dd" type="date" placeholder="选择日期" />
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>
</el-form-item>
<el-form-item label="状态:" required>
<el-select v-model="form.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-item>
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { mapGetters, mapState, mapActions } from 'vuex'
import userApi from '@/api/user'
export default {
data () {
return {
form: {
id: null,
userName: '',
password: '',
realName: '',
role: 2,
status: 1,
age: '',
sex: '',
birthDay: null,
phone: null
},
formLoading: false,
rules: {
userName: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
realName: [
{ required: true, message: '请输入真实姓名', trigger: 'blur' }
]
}
}
},
created () {
let id = this.$route.query.id
let _this = this
if (id && parseInt(id) !== 0) {
_this.formLoading = true
userApi.selectUser(id).then(re => {
_this.form = re.response
_this.formLoading = false
})
}
},
methods: {
submitForm () {
let _this = this
this.$refs.form.validate((valid) => {
if (valid) {
this.formLoading = true
userApi.createUser(this.form).then(data => {
if (data.code === 1) {
_this.$message.success(data.message)
_this.delCurrentView(_this).then(() => {
_this.$router.push('/user/teacher/list')
})
} else {
_this.$message.error(data.message)
_this.formLoading = false
}
}).catch(e => {
_this.formLoading = false
})
} else {
return false
}
})
},
resetForm () {
this.$refs['form'].resetFields()
this.form = {
id: null,
userName: '',
password: '',
realName: '',
role: 2,
status: 1,
age: '',
sex: '',
birthDay: null,
phone: null
}
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},
computed: {
...mapGetters('enumItem', [
'enumFormat'
]),
...mapState('enumItem', {
sexEnum: state => state.user.sexEnum,
roleEnum: state => state.user.roleEnum,
statusEnum: state => state.user.statusEnum
})
}
}
</script>

View File

@ -1,131 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParam" ref="queryForm" :inline="true">
<el-form-item label="用户名:">
<el-input v-model="queryParam.userName"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">查询</el-button>
<router-link :to="{path:'/user/teacher/edit'}" class="link-left">
<el-button type="primary">添加</el-button>
</router-link>
</el-form-item>
</el-form>
<el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
<el-table-column prop="id" label="Id" />
<el-table-column prop="userName" label="用户名"/>
<el-table-column prop="realName" label="真实姓名" />
<el-table-column prop="sex" label="性别" width="60px;" :formatter="sexFormatter"/>
<el-table-column prop="phone" label="手机号"/>
<el-table-column prop="createTime" label="创建时间" width="160px"/>
<el-table-column label="状态" prop="status" width="70px">
<template slot-scope="{row}">
<el-tag :type="statusTagFormatter(row.status)">
{{ statusFormatter(row.status) }}
</el-tag>
</template>
</el-table-column>
<el-table-column width="220px" label="操作" align="center">
<template slot-scope="{row}">
<el-button size="mini" @click="changeStatus(row)" class="link-left">
{{ statusBtnFormatter(row.status) }}
</el-button>
<router-link :to="{path:'/user/teacher/edit', query:{id:row.id}}" class="link-left">
<el-button size="mini" >编辑</el-button>
</router-link>
<el-button size="mini" type="danger" @click="deleteUser(row)" class="link-left">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
@pagination="search"/>
</div>
</template>
<script>
import { mapGetters, mapState } from 'vuex'
import Pagination from '@/components/Pagination'
import userApi from '@/api/user'
export default {
components: { Pagination },
data () {
return {
queryParam: {
userName: '',
role: 2,
pageIndex: 1,
pageSize: 10
},
listLoading: true,
tableData: [],
total: 0
}
},
created () {
this.search()
},
methods: {
search () {
this.listLoading = true
userApi.getUserPageList(this.queryParam).then(data => {
const re = data.response
this.tableData = re.list
this.total = re.total
this.queryParam.pageIndex = re.pageNum
this.listLoading = false
})
},
changeStatus (row) {
let _this = this
userApi.changeStatus(row.id).then(re => {
if (re.code === 1) {
row.status = re.response
_this.$message.success(re.message)
} else {
_this.$message.error(re.message)
}
})
},
deleteUser (row) {
let _this = this
userApi.deleteUser(row.id).then(re => {
if (re.code === 1) {
_this.search()
_this.$message.success(re.message)
} else {
_this.$message.error(re.message)
}
})
},
submitForm () {
this.queryParam.pageIndex = 1
this.search()
},
sexFormatter (row, column, cellValue, index) {
return this.enumFormat(this.sexEnum, cellValue)
},
statusFormatter (status) {
return this.enumFormat(this.statusEnum, status)
},
statusTagFormatter (status) {
return this.enumFormat(this.statusTag, status)
},
statusBtnFormatter (status) {
return this.enumFormat(this.statusBtn, status)
}
},
computed: {
...mapGetters('enumItem', [
'enumFormat'
]),
...mapState('enumItem', {
sexEnum: state => state.user.sexEnum,
statusEnum: state => state.user.statusEnum,
statusTag: state => state.user.statusTag,
statusBtn: state => state.user.statusBtn
})
}
}
</script>

View File

@ -19,7 +19,7 @@ module.exports = {
hotOnly: false,
proxy: {
'/api': {
target: 'http://localhost:8000',
target: 'http://129.211.1.159:8080',
changeOrigin: true
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "xzs-student",
"version": "3.2.0",
"version": "3.3.0",
"author": "武汉思维跳跃科技有限公司",
"description": "学之思考试系统",
"license": "AGPL-3.0",
@ -22,20 +22,20 @@
"normalize.css": "8.0.1",
"nprogress": "0.2.0",
"vue": "^2.6.10",
"vue-router": "^3.4.9",
"vuex": "^3.6.0"
"vue-router": "^3.5.1",
"vuex": "^3.6.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.5.10",
"@vue/cli-plugin-eslint": "^4.5.10",
"@vue/cli-plugin-router": "^4.5.10",
"@vue/cli-plugin-vuex": "^4.5.10",
"@vue/cli-service": "^4.5.10",
"@vue/cli-plugin-babel": "^4.5.11",
"@vue/cli-plugin-eslint": "^4.5.11",
"@vue/cli-plugin-router": "^4.5.11",
"@vue/cli-plugin-vuex": "^4.5.11",
"@vue/cli-service": "^4.5.11",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.0.3",
"eslint": "^5.16.0",
"eslint-plugin-vue": "^5.0.0",
"node-sass": "^4.14.1",
"node-sass": "^4.0.0",
"sass-loader": "^8.0.0",
"svg-sprite-loader": "4.1.6",
"vue-template-compiler": "^2.6.10"

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />

View File

@ -35,10 +35,10 @@
<div class="container">
<div class="footer-main">
<h4>产品介绍</h4>
<a href="http://www.mindskip.net/sdd.html" target="_blank" class="footer-main-link">思多多智能考试平台</a>
<a href="http://www.mindskip.net/wdd.html" target="_blank" class="footer-main-link">维多多培训考试系统</a>
<a href="http://www.mindskip.net/xdd.html" target="_blank" class="footer-main-link">学多多考试系统</a>
<a href="http://www.mindskip.net/xzs.html" target="_blank" class="footer-main-link">学之思考试系统</a>
<a href="https://www.mindskip.net/sdd.html" target="_blank" class="footer-main-link">思多多智能考试平台</a>
<a href="https://www.mindskip.net/wdd.html" target="_blank" class="footer-main-link">维多多培训考试系统</a>
<a href="https://www.mindskip.net/xdd.html" target="_blank" class="footer-main-link">学多多考试系统</a>
<a href="https://www.mindskip.net/xzs.html" target="_blank" class="footer-main-link">学之思考试系统</a>
</div>
<div class="footer-main">
<h4>学多多小程序</h4>

View File

@ -1,6 +1,5 @@
import axios from 'axios'
import vue from 'vue'
const request = function (loadtip, query) {
let loading
if (loadtip) {

View File

@ -50,8 +50,8 @@
</el-row>
<el-row class="app-item-contain">
<h3 class="index-title-h3">固定试卷</h3>
<div style="padding-left: 15px">
<el-col :span="4" v-for="(item, index) in fixedPaper" :key="index" :offset="index > 0 ? 1 : 0">
<div style="padding-left: 15px;display: flex;flex-wrap: wrap;">
<el-col style="float: unset;" :span="4" v-for="(item, index) in fixedPaper" :key="index" :offset="index > 0 ? 1 : 0">
<el-card :body-style="{ padding: '0px' }" v-loading="loading">
<img src="@/assets/exam-paper/show1.png" class="image">
<div style="padding: 14px;">

View File

@ -67,10 +67,13 @@
<span v-html="question.analyze" class="q-item-span-content" />
</div>
<div class="question-answer-show-item">
<span class="question-show-item">正确答案</span>
<span :class="{'question-show-item': qType!=4}">正确答案</span>
<span v-if="qType==1||qType==2 ||qType==5" v-html="question.correct" class="q-item-span-content"/>
<span v-if="qType==3" v-html="trueFalseFormatter(question)" class="q-item-span-content"/>
<span v-if="qType==4">{{question.correctArray}}</span>
<!-- <span v-if="qType==4" v-for="(item,key) in question.correctArray" :key="key" v-html="item"></span> -->
<ol v-if="qType==4">
<li v-for="(item,key) in question.correctArray" :key="key" v-html="item"></li>
</ol>
</div>
</div>
<div v-else>

View File

@ -95,7 +95,7 @@ export default {
_this.$alert('试卷得分:' + re.response + '分', '考试结果', {
confirmButtonText: '返回考试记录',
callback: action => {
_this.$router.push('/record/index')
window.close()
}
})
} else {

View File

@ -16,10 +16,11 @@
<el-table-column prop="createTime" label="做题时间" width="170" />
<el-table-column align="right" width="70">
<template slot-scope="{row}">
<router-link target="_blank" :to="{path:'/edit',query:{id:row.id}}" v-if="row.status === 1 ">
<!-- <router-link target="_blank" :to="{path:'/edit',query:{id:row.id}}" v-if="row.status === 1 ">
<el-button type="text" size="small">批改</el-button>
</router-link>
<router-link target="_blank" :to="{path:'/read',query:{id:row.id}}" v-if="row.status === 2 ">
</router-link> -->
<!-- v-if="row.status === 2 -->
<router-link target="_blank" :to="{path:'/read',query:{id:row.id}}">
<el-button type="text" size="small">查看试卷</el-button>
</router-link>
</template>

View File

@ -19,7 +19,7 @@ module.exports = {
hotOnly: false,
proxy: {
'/api': {
target: 'http://localhost:8000',
target: 'http://129.211.1.159:8080',
changeOrigin: true
}
}

File diff suppressed because it is too large Load Diff

View File

@ -68,6 +68,8 @@ public class SecurityConfigurer {
.authorizeRequests()
.antMatchers(securityIgnoreUrls.toArray(ignores)).permitAll()
.antMatchers("/api/admin/**").hasRole(RoleEnum.ADMIN.getName())
.antMatchers("/api/student/exampaper/answer/read/*").hasAnyRole(RoleEnum.ADMIN.getName(),RoleEnum.STUDENT.getName())
.antMatchers("/api/student/exampaper/answer/edit").hasAnyRole(RoleEnum.ADMIN.getName())
.antMatchers("/api/student/**").hasRole(RoleEnum.STUDENT.getName())
.anyRequest().permitAll()
.and().exceptionHandling().accessDeniedHandler(restAccessDeniedHandler)

View File

@ -0,0 +1,54 @@
package com.mindskip.xzs.controller.admin;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.domain.ExamPaperAnswer;
import com.mindskip.xzs.domain.Subject;
import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.ExamUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM;
import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController("AdminExamPaperAnswerController")
@RequestMapping(value = "/api/admin/examPaperAnswer")
public class ExamPaperAnswerController extends BaseApiController {
private final ExamPaperAnswerService examPaperAnswerService;
private final SubjectService subjectService;
private final UserService userService;
@Autowired
public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, SubjectService subjectService, UserService userService) {
this.examPaperAnswerService = examPaperAnswerService;
this.subjectService = subjectService;
this.userService = userService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<ExamPaperAnswerPageResponseVM>> pageJudgeList(@RequestBody ExamPaperAnswerPageRequestVM model) {
PageInfo<ExamPaperAnswer> pageInfo = examPaperAnswerService.adminPage(model);
PageInfo<ExamPaperAnswerPageResponseVM> page = PageInfoHelper.copyMap(pageInfo, e -> {
ExamPaperAnswerPageResponseVM vm = modelMapper.map(e, ExamPaperAnswerPageResponseVM.class);
Subject subject = subjectService.selectById(vm.getSubjectId());
vm.setDoTime(ExamUtil.secondToVM(e.getDoTime()));
vm.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore()));
vm.setUserScore(ExamUtil.scoreToVM(e.getUserScore()));
vm.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore()));
vm.setSubjectName(subject.getName());
vm.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
User user = userService.selectById(e.getCreateUser());
vm.setUserName(user.getRealName());
return vm;
});
return RestResponse.ok(page);
}
}

View File

@ -7,7 +7,6 @@ import java.util.Map;
public enum RoleEnum {
STUDENT(1, "STUDENT"),
TEACHER(2, "TEACHER"),
ADMIN(3, "ADMIN");
int code;

View File

@ -31,4 +31,5 @@ public interface ExamPaperAnswerMapper extends BaseMapper<ExamPaperAnswer> {
ExamPaperAnswer getByPidUid(@Param("pid") Integer paperId, @Param("uid") Integer uid);
List<ExamPaperAnswer> adminPage(com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM requestVM);
}

View File

@ -48,4 +48,6 @@ public interface ExamPaperAnswerService extends BaseService<ExamPaperAnswer> {
Integer selectAllCount();
List<Integer> selectMothCount();
PageInfo<ExamPaperAnswer> adminPage(com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM requestVM);
}

View File

@ -268,4 +268,11 @@ public class ExamPaperAnswerServiceImpl extends BaseServiceImpl<ExamPaperAnswer>
}
return examPaperAnswer;
}
@Override
public PageInfo<ExamPaperAnswer> adminPage(com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM requestVM) {
return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
examPaperAnswerMapper.adminPage(requestVM));
}
}

View File

@ -0,0 +1,94 @@
package com.mindskip.xzs.viewmodel.admin.paper;
public class ExamAnswerResponseVM {
private Integer id;
private String name;
private Integer questionCount;
private Integer score;
private String createTime;
private Integer createUser;
private Integer subjectId;
private Integer paperType;
private Integer frameTextContentId;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getQuestionCount() {
return questionCount;
}
public void setQuestionCount(Integer questionCount) {
this.questionCount = questionCount;
}
public Integer getScore() {
return score;
}
public void setScore(Integer score) {
this.score = score;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public Integer getCreateUser() {
return createUser;
}
public void setCreateUser(Integer createUser) {
this.createUser = createUser;
}
public Integer getSubjectId() {
return subjectId;
}
public void setSubjectId(Integer subjectId) {
this.subjectId = subjectId;
}
public Integer getPaperType() {
return paperType;
}
public void setPaperType(Integer paperType) {
this.paperType = paperType;
}
public Integer getFrameTextContentId() {
return frameTextContentId;
}
public void setFrameTextContentId(Integer frameTextContentId) {
this.frameTextContentId = frameTextContentId;
}
}

View File

@ -0,0 +1,15 @@
package com.mindskip.xzs.viewmodel.admin.paper;
import com.mindskip.xzs.base.BasePage;
public class ExamPaperAnswerPageRequestVM extends BasePage {
private Integer subjectId;
public Integer getSubjectId() {
return subjectId;
}
public void setSubjectId(Integer subjectId) {
this.subjectId = subjectId;
}
}

View File

@ -28,6 +28,8 @@ public class ExamPaperAnswerPageResponseVM {
private String paperName;
private String userName;
public Integer getId() {
return id;
}
@ -131,4 +133,13 @@ public class ExamPaperAnswerPageResponseVM {
public void setPaperName(String paperName) {
this.paperName = paperName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}

View File

@ -3,9 +3,9 @@ logging:
spring:
redis:
host: 192.168.0.96
host: 127.0.0.1
datasource:
url: jdbc:mysql://192.168.0.96:3306/xzs?useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&allowMultiQueries=true
url: jdbc:mysql://127.0.0.1:3306/tiku?useSSL=false&useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowPublicKeyRetrieval=true&allowMultiQueries=true
username: root
password: 123456
password: Ggy101600!
driver-class-name: com.mysql.cj.jdbc.Driver

View File

@ -1,5 +1,5 @@
server:
port: 8000
port: 8080
undertow:
io-threads: 16
worker-threads: 4000
@ -56,6 +56,7 @@ pagehelper:
spring:
session:
store-type: redis
timeout: 86400
datasource:
hikari:
idle-timeout: 600000 #10 min

View File

@ -251,4 +251,16 @@
limit 1
</select>
<select id="adminPage" resultMap="BaseResultMap" parameterType="com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM">
SELECT
<include refid="Base_Column_List"/>
FROM t_exam_paper_answer
<where>
<if test="subjectId != null">
and subject_id = #{subjectId}
</if>
</where>
</select>
</mapper>

View File

@ -293,7 +293,7 @@
and #{dateTime} between limit_start_time and limit_end_time
</if>
</where>
ORDER BY id desc limit 5
ORDER BY id desc
</select>

View File

@ -1,4 +1,4 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Expires" content="0"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>学之思管理系统</title><style>html {
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Expires" content="0"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>学之思管理系统</title><style>html {
height: 100%;
width: 100%;
}
@ -13,4 +13,4 @@
hm.src = 'https://hm.baidu.com/hm.js?cd8218cd51f800ed2b73e5751cb3f4f9'
var s = document.getElementsByTagName('script')[0]
s.parentNode.insertBefore(hm, s)
})()</script><link href="static/css/chunk-066bbd34.c306629d.css" rel="prefetch"><link href="static/css/chunk-111f3671.d650a2aa.css" rel="prefetch"><link href="static/css/chunk-157f9069.c306629d.css" rel="prefetch"><link href="static/css/chunk-2e16d177.89936c18.css" rel="prefetch"><link href="static/css/chunk-360c43ba.c306629d.css" rel="prefetch"><link href="static/css/chunk-3f483335.7fbe318e.css" rel="prefetch"><link href="static/css/chunk-42236473.c306629d.css" rel="prefetch"><link href="static/css/chunk-5bc3d75d.c306629d.css" rel="prefetch"><link href="static/css/chunk-65f8ca6f.c306629d.css" rel="prefetch"><link href="static/css/chunk-7c62808c.c306629d.css" rel="prefetch"><link href="static/css/chunk-873a42e2.1951fa25.css" rel="prefetch"><link href="static/css/chunk-a85d3c1e.c8588555.css" rel="prefetch"><link href="static/css/chunk-a9d03770.c306629d.css" rel="prefetch"><link href="static/css/chunk-bab2e2c4.c306629d.css" rel="prefetch"><link href="static/js/chunk-066bbd34.f9301dcb.js" rel="prefetch"><link href="static/js/chunk-111f3671.41853efa.js" rel="prefetch"><link href="static/js/chunk-157f9069.61830605.js" rel="prefetch"><link href="static/js/chunk-16f9edc1.b42f52ec.js" rel="prefetch"><link href="static/js/chunk-2d0c138b.e534c09c.js" rel="prefetch"><link href="static/js/chunk-2d221bd2.d8d1ddda.js" rel="prefetch"><link href="static/js/chunk-2d2300ef.27eafde6.js" rel="prefetch"><link href="static/js/chunk-2d230fe7.3bd3f709.js" rel="prefetch"><link href="static/js/chunk-2e16d177.398fc5e3.js" rel="prefetch"><link href="static/js/chunk-360c43ba.cb2ba17c.js" rel="prefetch"><link href="static/js/chunk-3f483335.b2ec95cf.js" rel="prefetch"><link href="static/js/chunk-42236473.bda227e3.js" rel="prefetch"><link href="static/js/chunk-5bc3d75d.64a356fe.js" rel="prefetch"><link href="static/js/chunk-65f8ca6f.d33ccb37.js" rel="prefetch"><link href="static/js/chunk-733c35b2.3e37887f.js" rel="prefetch"><link href="static/js/chunk-75f11c77.a710dac8.js" rel="prefetch"><link href="static/js/chunk-78234ca2.ff8653ac.js" rel="prefetch"><link href="static/js/chunk-793f0082.5bd94100.js" rel="prefetch"><link href="static/js/chunk-7c62808c.2c467b04.js" rel="prefetch"><link href="static/js/chunk-873a42e2.287d3a91.js" rel="prefetch"><link href="static/js/chunk-a85d3c1e.27bb4877.js" rel="prefetch"><link href="static/js/chunk-a9d03770.ceb8e802.js" rel="prefetch"><link href="static/js/chunk-bab2e2c4.f9895f9e.js" rel="prefetch"><link href="static/js/chunk-d0753fda.c183e2b4.js" rel="prefetch"><link href="static/css/chunk-vendors.ee57d822.css" rel="preload" as="style"><link href="static/css/index.187e8cba.css" rel="preload" as="style"><link href="static/js/chunk-vendors.09bde710.js" rel="preload" as="script"><link href="static/js/index.32ce4631.js" rel="preload" as="script"><link href="static/css/chunk-vendors.ee57d822.css" rel="stylesheet"><link href="static/css/index.187e8cba.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but vue-demo doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.09bde710.js"></script><script src="static/js/index.32ce4631.js"></script></body></html>
})()</script><link href="static/css/chunk-066bbd34.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-099b9c43.1951fa25.css" rel="prefetch"><link href="static/css/chunk-157f9069.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-19291efa.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-2e16d177.89936c18.css" rel="prefetch"><link href="static/css/chunk-360c43ba.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-3f483335.7fbe318e.css" rel="prefetch"><link href="static/css/chunk-42236473.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-5bc3d75d.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-65f8ca6f.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-7741c2bf.d650a2aa.css" rel="prefetch"><link href="static/css/chunk-7c62808c.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-a85d3c1e.8287280f.css" rel="prefetch"><link href="static/css/chunk-a9d03770.0fe86cb0.css" rel="prefetch"><link href="static/css/chunk-bab2e2c4.0fe86cb0.css" rel="prefetch"><link href="static/js/chunk-066bbd34.f0457694.js" rel="prefetch"><link href="static/js/chunk-099b9c43.9298ae82.js" rel="prefetch"><link href="static/js/chunk-157f9069.f003ea6f.js" rel="prefetch"><link href="static/js/chunk-16f9edc1.7b8dad0f.js" rel="prefetch"><link href="static/js/chunk-19291efa.66883764.js" rel="prefetch"><link href="static/js/chunk-2d0c138b.3ad920de.js" rel="prefetch"><link href="static/js/chunk-2d221bd2.1c6437e5.js" rel="prefetch"><link href="static/js/chunk-2d2300ef.60f02a7d.js" rel="prefetch"><link href="static/js/chunk-2d230fe7.a21e19a8.js" rel="prefetch"><link href="static/js/chunk-2e16d177.bcbb7ceb.js" rel="prefetch"><link href="static/js/chunk-360c43ba.3c1f02fa.js" rel="prefetch"><link href="static/js/chunk-3f483335.409fa3a4.js" rel="prefetch"><link href="static/js/chunk-42236473.219a1360.js" rel="prefetch"><link href="static/js/chunk-5bc3d75d.5640a809.js" rel="prefetch"><link href="static/js/chunk-5d5cbe73.e9da2c17.js" rel="prefetch"><link href="static/js/chunk-65f8ca6f.807955c2.js" rel="prefetch"><link href="static/js/chunk-733c35b2.ce9fdb48.js" rel="prefetch"><link href="static/js/chunk-75f11c77.b4b89710.js" rel="prefetch"><link href="static/js/chunk-7741c2bf.f02cdd08.js" rel="prefetch"><link href="static/js/chunk-78234ca2.41f829a6.js" rel="prefetch"><link href="static/js/chunk-7c62808c.0a927631.js" rel="prefetch"><link href="static/js/chunk-a85d3c1e.781ccce8.js" rel="prefetch"><link href="static/js/chunk-a9d03770.15a91226.js" rel="prefetch"><link href="static/js/chunk-bab2e2c4.734397cc.js" rel="prefetch"><link href="static/js/chunk-d0753fda.cad95821.js" rel="prefetch"><link href="static/css/chunk-vendors.ee57d822.css" rel="preload" as="style"><link href="static/css/index.d8d9b9e2.css" rel="preload" as="style"><link href="static/js/chunk-vendors.d739977f.js" rel="preload" as="script"><link href="static/js/index.c8ae58d0.js" rel="preload" as="script"><link href="static/css/chunk-vendors.ee57d822.css" rel="stylesheet"><link href="static/css/index.d8d9b9e2.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but vue-demo doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.d739977f.js"></script><script src="static/js/index.c8ae58d0.js"></script></body></html>

View File

@ -0,0 +1 @@
.pagination-container[data-v-90fd946a]{background:#fff}.pagination-container.hidden[data-v-90fd946a]{display:none}

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-16f9edc1"],{"93fd":function(e,t,r){"use strict";r.r(t);var o=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"app-container"},[r("el-form",{directives:[{name:"loading",rawName:"v-loading",value:e.formLoading,expression:"formLoading"}],ref:"form",attrs:{model:e.form,"label-width":"100px",rules:e.rules}},[r("el-form-item",{attrs:{label:"标题:",prop:"title",required:""}},[r("el-input",{model:{value:e.form.title,callback:function(t){e.$set(e.form,"title",t)},expression:"form.title"}})],1),r("el-form-item",{attrs:{label:"内容:",prop:"content",required:""}},[r("el-input",{attrs:{type:"textarea",rows:"13"},model:{value:e.form.content,callback:function(t){e.$set(e.form,"content",t)},expression:"form.content"}})],1),r("el-form-item",{attrs:{label:"接收人:",required:""}},[r("el-select",{attrs:{multiple:"",filterable:"",remote:"","reserve-keyword":"",placeholder:"请输入用户名","remote-method":e.getUserByUserName,loading:e.selectLoading},model:{value:e.form.receiveUserIds,callback:function(t){e.$set(e.form,"receiveUserIds",t)},expression:"form.receiveUserIds"}},e._l(e.options,(function(e){return r("el-option",{key:e.value,attrs:{label:e.name,value:e.value}})})),1)],1),r("el-form-item",[r("el-button",{attrs:{type:"primary"},on:{click:e.submitForm}},[e._v("发送")]),r("el-button",{on:{click:e.resetForm}},[e._v("重置")])],1)],1)],1)},n=[],s=r("5530"),i=r("2f62"),a=r("c24f"),l=r("c443"),c={data:function(){return{form:{title:"",content:"",receiveUserIds:[]},formLoading:!1,selectLoading:!1,options:[],rules:{title:[{required:!0,message:"请输入消息标题",trigger:"blur"}],realName:[{required:!0,message:"请输入消息内容",trigger:"blur"}]}}},created:function(){},methods:Object(s["a"])({getUserByUserName:function(e){var t=this;""!==e?(t.selectLoading=!0,a["a"].selectByUserName(e).then((function(e){t.selectLoading=!1,t.options=e.response}))):t.options=[]},submitForm:function(){var e=this,t=this;this.$refs.form.validate((function(r){if(!r)return!1;e.formLoading=!0,l["a"].send(e.form).then((function(e){1===e.code?(t.$message.success(e.message),t.delCurrentView(t).then((function(){t.$router.push("/message/list")}))):(t.$message.error(e.message),t.formLoading=!1)})).catch((function(e){t.formLoading=!1}))}))},resetForm:function(){this.$refs["form"].resetFields(),this.form={title:"",content:"",receiveUserIds:[]}}},Object(i["b"])("tagsView",{delCurrentView:"delCurrentView"}))},m=c,u=r("2877"),f=Object(u["a"])(m,o,n,!1,null,null,null);t["default"]=f.exports},c443:function(e,t,r){"use strict";var o=r("b775");t["a"]={pageList:function(e){return Object(o["a"])("/api/admin/message/page",e)},send:function(e){return Object(o["a"])("/api/admin/message/send",e)}}}}]);
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-16f9edc1"],{"93fd":function(e,t,r){"use strict";r.r(t);var o=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"app-container"},[r("el-form",{directives:[{name:"loading",rawName:"v-loading",value:e.formLoading,expression:"formLoading"}],ref:"form",attrs:{model:e.form,"label-width":"100px",rules:e.rules}},[r("el-form-item",{attrs:{label:"标题:",prop:"title",required:""}},[r("el-input",{model:{value:e.form.title,callback:function(t){e.$set(e.form,"title",t)},expression:"form.title"}})],1),r("el-form-item",{attrs:{label:"内容:",prop:"content",required:""}},[r("el-input",{attrs:{type:"textarea",rows:"13"},model:{value:e.form.content,callback:function(t){e.$set(e.form,"content",t)},expression:"form.content"}})],1),r("el-form-item",{attrs:{label:"接收人:",required:""}},[r("el-select",{attrs:{multiple:"",filterable:"",remote:"","reserve-keyword":"",placeholder:"请输入用户名","remote-method":e.getUserByUserName,loading:e.selectLoading},model:{value:e.form.receiveUserIds,callback:function(t){e.$set(e.form,"receiveUserIds",t)},expression:"form.receiveUserIds"}},e._l(e.options,(function(e){return r("el-option",{key:e.value,attrs:{label:e.name,value:e.value}})})),1)],1),r("el-form-item",[r("el-button",{attrs:{type:"primary"},on:{click:e.submitForm}},[e._v("发送")]),r("el-button",{on:{click:e.resetForm}},[e._v("重置")])],1)],1)],1)},s=[],n=r("5530"),i=r("2f62"),a=r("c24f"),l=r("c443"),c={data:function(){return{form:{title:"",content:"",receiveUserIds:[]},formLoading:!1,selectLoading:!1,options:[],rules:{title:[{required:!0,message:"请输入消息标题",trigger:"blur"}],realName:[{required:!0,message:"请输入消息内容",trigger:"blur"}]}}},created:function(){},methods:Object(n["a"])({getUserByUserName:function(e){var t=this;""!==e?(t.selectLoading=!0,a["a"].selectByUserName(e).then((function(e){t.selectLoading=!1,t.options=e.response}))):t.options=[]},submitForm:function(){var e=this,t=this;this.$refs.form.validate((function(r){if(!r)return!1;e.formLoading=!0,l["a"].send(e.form).then((function(e){1===e.code?(t.$message.success(e.message),t.delCurrentView(t).then((function(){t.$router.push("/message/list")}))):(t.$message.error(e.message),t.formLoading=!1)})).catch((function(e){t.formLoading=!1}))}))},resetForm:function(){var e=this.form.id;this.$refs["form"].resetFields(),this.form={title:"",content:"",receiveUserIds:[]},this.form.id=e}},Object(i["b"])("tagsView",{delCurrentView:"delCurrentView"}))},m=c,u=r("2877"),f=Object(u["a"])(m,o,s,!1,null,null,null);t["default"]=f.exports},c443:function(e,t,r){"use strict";var o=r("b775");t["a"]={pageList:function(e){return Object(o["a"])("/api/admin/message/page",e)},send:function(e){return Object(o["a"])("/api/admin/message/send",e)}}}}]);

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0c138b"],{"44b7":function(e,t,r){"use strict";r.r(t);var n=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"app-container"},[r("el-form",{directives:[{name:"loading",rawName:"v-loading",value:e.formLoading,expression:"formLoading"}],ref:"form",attrs:{model:e.form,"label-width":"100px"}},[r("el-form-item",{attrs:{label:"学科:",required:""}},[r("el-input",{model:{value:e.form.name,callback:function(t){e.$set(e.form,"name",t)},expression:"form.name"}})],1),r("el-form-item",{attrs:{label:"年级:",required:""}},[r("el-select",{attrs:{placeholder:"年级"},model:{value:e.form.level,callback:function(t){e.$set(e.form,"level",t)},expression:"form.level"}},e._l(e.levelEnum,(function(e){return r("el-option",{key:e.key,attrs:{value:e.key,label:e.value}})})),1)],1),r("el-form-item",[r("el-button",{attrs:{type:"primary"},on:{click:e.submitForm}},[e._v("提交")]),r("el-button",{on:{click:e.resetForm}},[e._v("重置")])],1)],1)],1)},o=[],l=r("5530"),a=r("2f62"),i=r("c418"),m={data:function(){return{form:{id:null,name:"",level:1,levelName:""},formLoading:!1}},created:function(){var e=this.$route.query.id,t=this;e&&0!==parseInt(e)&&(t.formLoading=!0,i["a"].select(e).then((function(e){t.form=e.response,t.formLoading=!1})))},methods:Object(l["a"])({submitForm:function(){var e=this;this.formLoading=!0,this.form.levelName=this.enumFormat(this.levelEnum,this.form.level),i["a"].edit(this.form).then((function(t){1===t.code?(e.$message.success(t.message),e.delCurrentView(e).then((function(){e.$router.push("/education/subject/list")}))):(e.$message.error(t.message),e.formLoading=!1)})).catch((function(t){e.formLoading=!1}))},resetForm:function(){this.$refs["form"].resetFields(),this.form={id:null,name:"",level:1,levelName:""}}},Object(a["b"])("tagsView",{delCurrentView:"delCurrentView"})),computed:Object(l["a"])(Object(l["a"])({},Object(a["c"])("enumItem",["enumFormat"])),Object(a["e"])("enumItem",{levelEnum:function(e){return e.user.levelEnum}}))},s=m,u=r("2877"),c=Object(u["a"])(s,n,o,!1,null,null,null);t["default"]=c.exports}}]);
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0c138b"],{"44b7":function(e,t,r){"use strict";r.r(t);var n=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"app-container"},[r("el-form",{directives:[{name:"loading",rawName:"v-loading",value:e.formLoading,expression:"formLoading"}],ref:"form",attrs:{model:e.form,"label-width":"100px"}},[r("el-form-item",{attrs:{label:"学科:",required:""}},[r("el-input",{model:{value:e.form.name,callback:function(t){e.$set(e.form,"name",t)},expression:"form.name"}})],1),r("el-form-item",{attrs:{label:"年级:",required:""}},[r("el-select",{attrs:{placeholder:"年级"},model:{value:e.form.level,callback:function(t){e.$set(e.form,"level",t)},expression:"form.level"}},e._l(e.levelEnum,(function(e){return r("el-option",{key:e.key,attrs:{value:e.key,label:e.value}})})),1)],1),r("el-form-item",[r("el-button",{attrs:{type:"primary"},on:{click:e.submitForm}},[e._v("提交")]),r("el-button",{on:{click:e.resetForm}},[e._v("重置")])],1)],1)],1)},o=[],l=r("5530"),i=r("2f62"),a=r("c418"),m={data:function(){return{form:{id:null,name:"",level:1,levelName:""},formLoading:!1}},created:function(){var e=this.$route.query.id,t=this;e&&0!==parseInt(e)&&(t.formLoading=!0,a["a"].select(e).then((function(e){t.form=e.response,t.formLoading=!1})))},methods:Object(l["a"])({submitForm:function(){var e=this;this.formLoading=!0,this.form.levelName=this.enumFormat(this.levelEnum,this.form.level),a["a"].edit(this.form).then((function(t){1===t.code?(e.$message.success(t.message),e.delCurrentView(e).then((function(){e.$router.push("/education/subject/list")}))):(e.$message.error(t.message),e.formLoading=!1)})).catch((function(t){e.formLoading=!1}))},resetForm:function(){var e=this.form.id;this.$refs["form"].resetFields(),this.form={id:null,name:"",level:1,levelName:""},this.form.id=e}},Object(i["b"])("tagsView",{delCurrentView:"delCurrentView"})),computed:Object(l["a"])(Object(l["a"])({},Object(i["c"])("enumItem",["enumFormat"])),Object(i["e"])("enumItem",{levelEnum:function(e){return e.user.levelEnum}}))},s=m,u=r("2877"),c=Object(u["a"])(s,n,o,!1,null,null,null);t["default"]=c.exports}}]);

View File

@ -1 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d230fe7"],{ef3c:function(e,r,n){"use strict";n.r(r);n("ac1f"),n("5319");var t,u,a={created:function(){var e=this.$route,r=e.params,n=e.query,t=r.path;this.$router.replace({path:"/"+t,query:n})},render:function(e){return e()}},c=a,o=n("2877"),p=Object(o["a"])(c,t,u,!1,null,null,null);r["default"]=p.exports}}]);
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d230fe7"],{ef3c:function(e,r,n){"use strict";n.r(r);n("5319"),n("ac1f");var t,u,a={created:function(){var e=this.$route,r=e.params,n=e.query,t=r.path;this.$router.replace({path:"/"+t,query:n})},render:function(e){return e()}},c=a,o=n("2877"),p=Object(o["a"])(c,t,u,!1,null,null,null);r["default"]=p.exports}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,17 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Expires" content="0"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>学生考试系统</title><style>html {
height: 100%;
width: 100%;
}
body {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}</style><script>var _hmt = _hmt || [];
(function () {
var hm = document.createElement('script')
hm.src = 'https://hm.baidu.com/hm.js?cd8218cd51f800ed2b73e5751cb3f4f9'
var s = document.getElementsByTagName('script')[0]
s.parentNode.insertBefore(hm, s)
})()</script><link href="static/css/chunk-099b9c43.1951fa25.css" rel="prefetch"><link href="static/css/chunk-122e80b5.87ccd637.css" rel="prefetch"><link href="static/css/chunk-1d601c29.87ccd637.css" rel="prefetch"><link href="static/css/chunk-31aa2150.ad364b97.css" rel="prefetch"><link href="static/css/chunk-32d09f6a.b56209ba.css" rel="prefetch"><link href="static/css/chunk-5001fd2c.7bab6136.css" rel="prefetch"><link href="static/css/chunk-66bf5956.87ccd637.css" rel="prefetch"><link href="static/css/chunk-69a4052e.54efd6ce.css" rel="prefetch"><link href="static/css/chunk-7d11f9e8.4381df1f.css" rel="prefetch"><link href="static/css/chunk-a938f5fc.87ccd637.css" rel="prefetch"><link href="static/css/chunk-efc0f600.55fc2650.css" rel="prefetch"><link href="static/js/chunk-099b9c43.10f93443.js" rel="prefetch"><link href="static/js/chunk-122e80b5.1888b1be.js" rel="prefetch"><link href="static/js/chunk-1d601c29.519a987f.js" rel="prefetch"><link href="static/js/chunk-2d20f362.f7566b72.js" rel="prefetch"><link href="static/js/chunk-31aa2150.6669a7f5.js" rel="prefetch"><link href="static/js/chunk-32d09f6a.69a9813d.js" rel="prefetch"><link href="static/js/chunk-5001fd2c.38bd24a7.js" rel="prefetch"><link href="static/js/chunk-66bf5956.0bbb6aee.js" rel="prefetch"><link href="static/js/chunk-69a4052e.e5d45fa3.js" rel="prefetch"><link href="static/js/chunk-7d11f9e8.e9fb9895.js" rel="prefetch"><link href="static/js/chunk-a938f5fc.593d7d54.js" rel="prefetch"><link href="static/js/chunk-aa32bb26.e145ebd5.js" rel="prefetch"><link href="static/js/chunk-efc0f600.da82a70b.js" rel="prefetch"><link href="static/css/chunk-vendors.f445a17a.css" rel="preload" as="style"><link href="static/css/index.9fe4a73d.css" rel="preload" as="style"><link href="static/js/chunk-vendors.4379415b.js" rel="preload" as="script"><link href="static/js/index.81977f7e.js" rel="preload" as="script"><link href="static/css/chunk-vendors.f445a17a.css" rel="stylesheet"><link href="static/css/index.9fe4a73d.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but vue-demo doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.4379415b.js"></script><script src="static/js/index.81977f7e.js"></script></body></html>

View File

@ -0,0 +1 @@
.wscn-http404-container[data-v-52fe14af]{-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;top:40%;left:50%}.wscn-http404[data-v-52fe14af]{position:relative;width:1200px;padding:0 50px;overflow:hidden}.wscn-http404 .pic-404[data-v-52fe14af]{position:relative;float:left;width:600px;overflow:hidden}.wscn-http404 .pic-404__parent[data-v-52fe14af]{width:100%}.wscn-http404 .pic-404__child[data-v-52fe14af]{position:absolute}.wscn-http404 .pic-404__child.left[data-v-52fe14af]{width:80px;top:17px;left:220px;opacity:0;-webkit-animation-name:cloudLeft-data-v-52fe14af;animation-name:cloudLeft-data-v-52fe14af;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1s;animation-delay:1s}.wscn-http404 .pic-404__child.mid[data-v-52fe14af]{width:46px;top:10px;left:420px;opacity:0;-webkit-animation-name:cloudMid-data-v-52fe14af;animation-name:cloudMid-data-v-52fe14af;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1.2s;animation-delay:1.2s}.wscn-http404 .pic-404__child.right[data-v-52fe14af]{width:62px;top:100px;left:500px;opacity:0;-webkit-animation-name:cloudRight-data-v-52fe14af;animation-name:cloudRight-data-v-52fe14af;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-delay:1s;animation-delay:1s}@-webkit-keyframes cloudLeft-data-v-52fe14af{0%{top:17px;left:220px;opacity:0}20%{top:33px;left:188px;opacity:1}80%{top:81px;left:92px;opacity:1}to{top:97px;left:60px;opacity:0}}@keyframes cloudLeft-data-v-52fe14af{0%{top:17px;left:220px;opacity:0}20%{top:33px;left:188px;opacity:1}80%{top:81px;left:92px;opacity:1}to{top:97px;left:60px;opacity:0}}@-webkit-keyframes cloudMid-data-v-52fe14af{0%{top:10px;left:420px;opacity:0}20%{top:40px;left:360px;opacity:1}70%{top:130px;left:180px;opacity:1}to{top:160px;left:120px;opacity:0}}@keyframes cloudMid-data-v-52fe14af{0%{top:10px;left:420px;opacity:0}20%{top:40px;left:360px;opacity:1}70%{top:130px;left:180px;opacity:1}to{top:160px;left:120px;opacity:0}}@-webkit-keyframes cloudRight-data-v-52fe14af{0%{top:100px;left:500px;opacity:0}20%{top:120px;left:460px;opacity:1}80%{top:180px;left:340px;opacity:1}to{top:200px;left:300px;opacity:0}}@keyframes cloudRight-data-v-52fe14af{0%{top:100px;left:500px;opacity:0}20%{top:120px;left:460px;opacity:1}80%{top:180px;left:340px;opacity:1}to{top:200px;left:300px;opacity:0}}.wscn-http404 .bullshit[data-v-52fe14af]{position:relative;float:left;width:300px;padding:30px 0;overflow:hidden}.wscn-http404 .bullshit__oops[data-v-52fe14af]{font-size:32px;line-height:40px;color:#1482f0;margin-bottom:20px;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__headline[data-v-52fe14af],.wscn-http404 .bullshit__oops[data-v-52fe14af]{font-weight:700;opacity:0;-webkit-animation-name:slideUp-data-v-52fe14af;animation-name:slideUp-data-v-52fe14af;-webkit-animation-duration:.5s;animation-duration:.5s}.wscn-http404 .bullshit__headline[data-v-52fe14af]{font-size:20px;line-height:24px;color:#222;margin-bottom:10px;-webkit-animation-delay:.1s;animation-delay:.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__info[data-v-52fe14af]{font-size:13px;line-height:21px;color:grey;margin-bottom:30px;-webkit-animation-delay:.2s;animation-delay:.2s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}.wscn-http404 .bullshit__info[data-v-52fe14af],.wscn-http404 .bullshit__return-home[data-v-52fe14af]{opacity:0;-webkit-animation-name:slideUp-data-v-52fe14af;animation-name:slideUp-data-v-52fe14af;-webkit-animation-duration:.5s;animation-duration:.5s}.wscn-http404 .bullshit__return-home[data-v-52fe14af]{display:block;float:left;width:110px;height:36px;background:#1482f0;border-radius:100px;text-align:center;color:#fff;font-size:14px;line-height:36px;cursor:pointer;-webkit-animation-delay:.3s;animation-delay:.3s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}@-webkit-keyframes slideUp-data-v-52fe14af{0%{-webkit-transform:translateY(60px);transform:translateY(60px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes slideUp-data-v-52fe14af{0%{-webkit-transform:translateY(60px);transform:translateY(60px);opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}

View File

@ -0,0 +1 @@
.pagination-container[data-v-52c39d8a]{background:#fff}.pagination-container.hidden[data-v-52c39d8a]{display:none}

View File

@ -0,0 +1 @@
.align-center[data-v-a51a27fe]{text-align:center}.exam-question-item[data-v-a51a27fe]{padding:10px}.exam-question-item .el-form-item__label[data-v-a51a27fe]{font-size:15px!important}.question-title-padding[data-v-a51a27fe]{padding-left:25px;padding-right:25px}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.pagination-container[data-v-52c39d8a]{background:#fff}.pagination-container.hidden[data-v-52c39d8a]{display:none}

View File

@ -0,0 +1 @@
.align-center[data-v-15c1a324]{text-align:center}.exam-question-item[data-v-15c1a324]{padding:10px}.exam-question-item .el-form-item__label[data-v-15c1a324]{font-size:15px!important}.question-title-padding[data-v-15c1a324]{padding-left:25px;padding-right:25px}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.pagination-container[data-v-52c39d8a]{background:#fff}.pagination-container.hidden[data-v-52c39d8a]{display:none}

Some files were not shown because too many files have changed in this diff Show More