Commit ee6e762832d1ccd2a0812e97fbbfa9b157e2495f
1 parent
b769660c
备题组卷借口数据对接调整
Showing
20 changed files
with
625 additions
and
540 deletions
src/api/apis/answerSheet.js
| @@ -4,9 +4,17 @@ import answerSheet from "../urls/answerSheet" | @@ -4,9 +4,17 @@ import answerSheet from "../urls/answerSheet" | ||
| 4 | 4 | ||
| 5 | export default { | 5 | export default { |
| 6 | // 答题卡列表 | 6 | // 答题卡列表 |
| 7 | - fetchAnswerList(data) { | 7 | + fetchPaperList(data) { |
| 8 | return service({ | 8 | return service({ |
| 9 | - url: answerSheet.answerList, | 9 | + url: answerSheet.paperList, |
| 10 | + method: 'POST', | ||
| 11 | + data | ||
| 12 | + }) | ||
| 13 | + }, | ||
| 14 | + // 答题卡详情 | ||
| 15 | + fetchPaperDetail(data) { | ||
| 16 | + return service({ | ||
| 17 | + url: answerSheet.paperDetail, | ||
| 10 | method: 'POST', | 18 | method: 'POST', |
| 11 | data | 19 | data |
| 12 | }) | 20 | }) |
| @@ -44,41 +52,33 @@ export default { | @@ -44,41 +52,33 @@ export default { | ||
| 44 | }) | 52 | }) |
| 45 | }, | 53 | }, |
| 46 | // 添加测验类型 | 54 | // 添加测验类型 |
| 47 | - addAnswerTypeName(data) { | 55 | + addPaperType(data) { |
| 48 | return service({ | 56 | return service({ |
| 49 | - url: answerSheet.addAnswerTypeName, | 57 | + url: answerSheet.addPaperType, |
| 50 | method: 'POST', | 58 | method: 'POST', |
| 51 | data | 59 | data |
| 52 | }) | 60 | }) |
| 53 | }, | 61 | }, |
| 54 | // 保存答题卡 | 62 | // 保存答题卡 |
| 55 | - saveAnswerSheet(data) { | 63 | + addPaper(data) { |
| 56 | return service({ | 64 | return service({ |
| 57 | - url: answerSheet.saveAnswerSheet, | 65 | + url: answerSheet.addPaper, |
| 58 | method: 'POST', | 66 | method: 'POST', |
| 59 | data | 67 | data |
| 60 | }) | 68 | }) |
| 61 | }, | 69 | }, |
| 62 | // 删除答题卡 | 70 | // 删除答题卡 |
| 63 | - removeAnswerSheet(data) { | ||
| 64 | - return service({ | ||
| 65 | - url: answerSheet.removeAnswerSheet, | ||
| 66 | - method: 'POST', | ||
| 67 | - data | ||
| 68 | - }) | ||
| 69 | - }, | ||
| 70 | - // 恢复答题卡 | ||
| 71 | - useAnswerSheet(data) { | 71 | + delPaper(data) { |
| 72 | return service({ | 72 | return service({ |
| 73 | - url: answerSheet.useAnswerSheet, | 73 | + url: answerSheet.delPaper, |
| 74 | method: 'POST', | 74 | method: 'POST', |
| 75 | data | 75 | data |
| 76 | }) | 76 | }) |
| 77 | }, | 77 | }, |
| 78 | - // 恢复答题卡 | ||
| 79 | - updateAnswerSheet(data) { | 78 | + // 修改答题卡 |
| 79 | + modifyPaper(data) { | ||
| 80 | return service({ | 80 | return service({ |
| 81 | - url: answerSheet.updateAnswerSheet, | 81 | + url: answerSheet.modifyPaper, |
| 82 | method: 'POST', | 82 | method: 'POST', |
| 83 | data | 83 | data |
| 84 | }) | 84 | }) |
src/api/apis/ask.js
| @@ -3,7 +3,7 @@ import service from "../axios" | @@ -3,7 +3,7 @@ import service from "../axios" | ||
| 3 | import askUrls from "../urls/login" | 3 | import askUrls from "../urls/login" |
| 4 | 4 | ||
| 5 | export default { | 5 | export default { |
| 6 | - // 账号密码登陆 | 6 | + // 随堂问列表 |
| 7 | fetchQuizList(data) { | 7 | fetchQuizList(data) { |
| 8 | return service({ | 8 | return service({ |
| 9 | url: askUrls.quizList, | 9 | url: askUrls.quizList, |
| @@ -11,4 +11,12 @@ export default { | @@ -11,4 +11,12 @@ export default { | ||
| 11 | data | 11 | data |
| 12 | }) | 12 | }) |
| 13 | }, | 13 | }, |
| 14 | + // 随堂问详情 | ||
| 15 | + quizDetail(data) { | ||
| 16 | + return service({ | ||
| 17 | + url: askUrls.quizDetail, | ||
| 18 | + method: 'POST', | ||
| 19 | + data | ||
| 20 | + }) | ||
| 21 | + }, | ||
| 14 | } | 22 | } |
src/api/apis/login.js
| @@ -4,11 +4,25 @@ import loginUrls from "../urls/login" | @@ -4,11 +4,25 @@ import loginUrls from "../urls/login" | ||
| 4 | 4 | ||
| 5 | export default { | 5 | export default { |
| 6 | // 账号密码登陆 | 6 | // 账号密码登陆 |
| 7 | - fetchLogin(data) { | 7 | + login(data) { |
| 8 | return service({ | 8 | return service({ |
| 9 | url: loginUrls.login, | 9 | url: loginUrls.login, |
| 10 | method: 'POST', | 10 | method: 'POST', |
| 11 | data | 11 | data |
| 12 | }) | 12 | }) |
| 13 | }, | 13 | }, |
| 14 | + ssoLogin(data) { | ||
| 15 | + return service({ | ||
| 16 | + url: loginUrls.ssoLogin, | ||
| 17 | + method: 'POST', | ||
| 18 | + data | ||
| 19 | + }) | ||
| 20 | + }, | ||
| 21 | + logout(data) { | ||
| 22 | + return service({ | ||
| 23 | + url: loginUrls.logout, | ||
| 24 | + method: 'POST', | ||
| 25 | + data | ||
| 26 | + }) | ||
| 27 | + }, | ||
| 14 | } | 28 | } |
src/api/axios.js
| @@ -37,7 +37,7 @@ service.interceptors.response.use( | @@ -37,7 +37,7 @@ service.interceptors.response.use( | ||
| 37 | store.commit('delTokenSources', response.config.cancelToken) | 37 | store.commit('delTokenSources', response.config.cancelToken) |
| 38 | } | 38 | } |
| 39 | if (response.status == 200) { | 39 | if (response.status == 200) { |
| 40 | - Cookies.set("access_token", response.data.message, { expires: 1 / 12 }) | 40 | + // Cookies.set("access_token", response.data.message, { expires: 1 / 12 }) |
| 41 | // console.log(response.status) | 41 | // console.log(response.status) |
| 42 | if (res.code == 999) { | 42 | if (res.code == 999) { |
| 43 | if (!location.href.includes('localhost')) { | 43 | if (!location.href.includes('localhost')) { |
| @@ -56,7 +56,7 @@ service.interceptors.response.use( | @@ -56,7 +56,7 @@ service.interceptors.response.use( | ||
| 56 | } | 56 | } |
| 57 | return | 57 | return |
| 58 | } else { | 58 | } else { |
| 59 | - Cookies.set("access_token", response.data.message, { expires: 1 / 12 }) | 59 | + // Cookies.set("access_token", response.data.message, { expires: 1 / 12 }) |
| 60 | } | 60 | } |
| 61 | } | 61 | } |
| 62 | return Promise.resolve(response) | 62 | return Promise.resolve(response) |
| @@ -72,20 +72,23 @@ service.interceptors.response.use( | @@ -72,20 +72,23 @@ service.interceptors.response.use( | ||
| 72 | } | 72 | } |
| 73 | Message.closeAll() | 73 | Message.closeAll() |
| 74 | const { | 74 | const { |
| 75 | + data, | ||
| 75 | status | 76 | status |
| 76 | } = error.response | 77 | } = error.response |
| 77 | if (status === 403 || status === 401) { | 78 | if (status === 403 || status === 401) { |
| 78 | Message({ | 79 | Message({ |
| 79 | - message: "未登录或登录超时,即将跳转到登录页面", | 80 | + message: data.info||"未登录或登录超时,即将跳转到登录页面", |
| 80 | type: 'error', | 81 | type: 'error', |
| 81 | duration: 3 * 1000 | 82 | duration: 3 * 1000 |
| 82 | }) | 83 | }) |
| 83 | - router.push({ | ||
| 84 | - path: '/login', | ||
| 85 | - query: { | ||
| 86 | - url: window.location.href | ||
| 87 | - } | ||
| 88 | - }) | 84 | + if (!window.location.href.includes('login')) { |
| 85 | + router.push({ | ||
| 86 | + path: '/login', | ||
| 87 | + query: { | ||
| 88 | + url: window.location.href | ||
| 89 | + } | ||
| 90 | + }) | ||
| 91 | + } | ||
| 89 | return | 92 | return |
| 90 | } | 93 | } |
| 91 | return Promise.reject(error.response) // 返回接口返回的错误信息 | 94 | return Promise.reject(error.response) // 返回接口返回的错误信息 |
src/api/urls/answerSheet.js
| 1 | export default { | 1 | export default { |
| 2 | // 答题卡列表 | 2 | // 答题卡列表 |
| 3 | - answerList: "/apis/answerList", | ||
| 4 | - // 测验类型 | ||
| 5 | - typeNames: "/apis/typeNames", | 3 | + paperList: "/api_html/teaching/paperList", |
| 4 | + // 答题卡详情 | ||
| 5 | + paperList: "/api_html/teaching/paperDetail", | ||
| 6 | // 查找年级 | 6 | // 查找年级 |
| 7 | - gradeList: "/apis/gradeList", | 7 | + gradeList: "/api_html/teaching/gradeList", |
| 8 | + // 测验类型 | ||
| 9 | + typeNames: "/api_html/teaching/tagList", | ||
| 8 | // 查找班级 | 10 | // 查找班级 |
| 9 | - classList: "/apis/classList", | 11 | + classList: "/api_html/teaching/classList", |
| 10 | // 查找科目 | 12 | // 查找科目 |
| 11 | - subjectList: "/apis/subjectList", | ||
| 12 | - // 天假答题卡测验类型 | ||
| 13 | - addAnswerTypeName: "/apis/addAnswerTypeName", | 13 | + subjectList: "/api_html/teaching/subjectList", |
| 14 | + // 添加答题卡测验类型 | ||
| 15 | + addPaperType: "/api_html/teaching/addPaperType", | ||
| 14 | // 保存答题卡 | 16 | // 保存答题卡 |
| 15 | - saveAnswerSheet: "/apis/saveAnswerSheet", | 17 | + addPaper: "/api_html/teaching/addPaper", |
| 16 | // 删除答题卡 | 18 | // 删除答题卡 |
| 17 | - removeAnswerSheet: "/apis/removeAnswerSheet", | ||
| 18 | - // 恢复使用答题卡 | ||
| 19 | - useAnswerSheet: "/apis/useAnswerSheet", | 19 | + delPaper: "/api_html/teaching/delPaper", |
| 20 | // 更新答题卡 | 20 | // 更新答题卡 |
| 21 | - updateAnswerSheet: "/apis/updateAnswerSheet", | 21 | + modifyPaper: "/api_html/teaching/modifyPaper", |
| 22 | } | 22 | } |
| 23 | \ No newline at end of file | 23 | \ No newline at end of file |
src/api/urls/ask.js
src/api/urls/login.js
src/components/userForm/editPassword.vue deleted
| 1 | -<template> | ||
| 2 | - <el-dialog title="修改密码" width="700px" :visible.sync="visible" destroy-on-close @close="closeCallback"> | ||
| 3 | - <div class="card"> | ||
| 4 | - <p class="title"><i class="fa fa-th-large fa-lg"></i>修改密码</p> | ||
| 5 | - <el-form :model="ruleForm2" status-icon :rules="rules2" ref="ruleForm2" label-width="100px" class="demo-ruleForm"> | ||
| 6 | - <el-form-item label="原密码" prop="oldPassword"> | ||
| 7 | - <el-input type="password" v-model="ruleForm2.oldPassword" autocomplete="off"></el-input> | ||
| 8 | - </el-form-item> | ||
| 9 | - <el-form-item label="密码" prop="password"> | ||
| 10 | - <el-input type="password" v-model="ruleForm2.password" autocomplete="off"></el-input> | ||
| 11 | - </el-form-item> | ||
| 12 | - <el-form-item label="确认密码" prop="checkPass"> | ||
| 13 | - <el-input type="password" v-model="ruleForm2.checkPass" autocomplete="off"></el-input> | ||
| 14 | - </el-form-item> | ||
| 15 | - <el-form-item> | ||
| 16 | - <el-button type="primary" @click="submitForm('ruleForm2')">提交</el-button> | ||
| 17 | - <el-button @click="resetForm('ruleForm2')">重置</el-button> | ||
| 18 | - </el-form-item> | ||
| 19 | - </el-form> | ||
| 20 | - </div> | ||
| 21 | - </el-dialog> | ||
| 22 | -</template> | ||
| 23 | - | ||
| 24 | -<script> | ||
| 25 | -import Cookies from "js-cookie" | ||
| 26 | -export default { | ||
| 27 | - name: "editPassword", | ||
| 28 | - props: { | ||
| 29 | - dialogVisible: { | ||
| 30 | - type: Boolean, | ||
| 31 | - default: false | ||
| 32 | - } | ||
| 33 | - }, | ||
| 34 | - data () { | ||
| 35 | - var validatePass = (rule, value, callback) => { | ||
| 36 | - if (value === "") { | ||
| 37 | - callback(new Error("请输入密码")) | ||
| 38 | - } else if (value.toString().length < 6) { | ||
| 39 | - callback(new Error("密码长度不能低于6位")) | ||
| 40 | - } else { | ||
| 41 | - if (this.ruleForm2.checkPass !== "") { | ||
| 42 | - this.$refs.ruleForm2.validateField("checkPass") | ||
| 43 | - } | ||
| 44 | - callback() | ||
| 45 | - } | ||
| 46 | - } | ||
| 47 | - var validatePass2 = (rule, value, callback) => { | ||
| 48 | - if (value === "") { | ||
| 49 | - callback(new Error("请再次输入密码")) | ||
| 50 | - } else if (value.toString().length < 6) { | ||
| 51 | - callback(new Error("密码长度不能低于6位")) | ||
| 52 | - } else if (value !== this.ruleForm2.password) { | ||
| 53 | - callback(new Error("两次输入密码不一致!")) | ||
| 54 | - } else { | ||
| 55 | - callback() | ||
| 56 | - } | ||
| 57 | - } | ||
| 58 | - return { | ||
| 59 | - visible: this.dialogVisible, | ||
| 60 | - ruleForm2: { | ||
| 61 | - oldPassword: "", | ||
| 62 | - password: "", | ||
| 63 | - checkPass: "" | ||
| 64 | - }, | ||
| 65 | - rules2: { | ||
| 66 | - oldPassword: [ | ||
| 67 | - {required: true, validator: validatePass, trigger: "blur"} | ||
| 68 | - ], | ||
| 69 | - password: [ | ||
| 70 | - {required: true, validator: validatePass, trigger: "blur"} | ||
| 71 | - ], | ||
| 72 | - checkPass: [ | ||
| 73 | - {required: true, validator: validatePass2, trigger: "blur"} | ||
| 74 | - ] | ||
| 75 | - } | ||
| 76 | - } | ||
| 77 | - }, | ||
| 78 | - methods: { | ||
| 79 | - closeCallback () { | ||
| 80 | - this.$emit("editPwdCallback") | ||
| 81 | - }, | ||
| 82 | - submitForm (formName) { | ||
| 83 | - let that = this | ||
| 84 | - this.$refs[formName].validate((valid) => { | ||
| 85 | - if (valid) { | ||
| 86 | - this.$request.fetchEditPassword({ | ||
| 87 | - oldPassword: that.ruleForm2.oldPassword, | ||
| 88 | - newPassword: that.ruleForm2.password | ||
| 89 | - }).then((res) => { | ||
| 90 | - that.$message({ | ||
| 91 | - showClose: true, | ||
| 92 | - message: res.data.message, | ||
| 93 | - type: "success" | ||
| 94 | - }) | ||
| 95 | - setTimeout(function () { | ||
| 96 | - Cookies.remove("access_token") | ||
| 97 | - location.reload() | ||
| 98 | - }, 3000) | ||
| 99 | - }).catch((err) => { | ||
| 100 | - that.$message({ | ||
| 101 | - showClose: true, | ||
| 102 | - message: err.data.message, | ||
| 103 | - type: "error" | ||
| 104 | - }) | ||
| 105 | - }) | ||
| 106 | - } else { | ||
| 107 | - console.log("error submit!!") | ||
| 108 | - return false | ||
| 109 | - } | ||
| 110 | - }) | ||
| 111 | - }, | ||
| 112 | - resetForm (formName) { | ||
| 113 | - this.$refs[formName].resetFields() | ||
| 114 | - } | ||
| 115 | - } | ||
| 116 | -} | ||
| 117 | -</script> | ||
| 118 | - | ||
| 119 | -<style scoped> | ||
| 120 | - .demo-ruleForm { | ||
| 121 | - width: 460px; | ||
| 122 | - padding-top: 25px; | ||
| 123 | - } | ||
| 124 | - | ||
| 125 | - .card { | ||
| 126 | - width: 560px; | ||
| 127 | - padding-bottom: 15px; | ||
| 128 | - margin: 0px auto; | ||
| 129 | - } | ||
| 130 | -</style> |
src/router/permission.js
| @@ -92,47 +92,3 @@ router.onError((error) => { | @@ -92,47 +92,3 @@ router.onError((error) => { | ||
| 92 | const targetPath = router.history.pending.fullPath; | 92 | const targetPath = router.history.pending.fullPath; |
| 93 | if (isChunkLoadFailed) { router.replace(targetPath); } | 93 | if (isChunkLoadFailed) { router.replace(targetPath); } |
| 94 | }); | 94 | }); |
| 95 | - | ||
| 96 | - | ||
| 97 | - | ||
| 98 | -// // 真实使用 | ||
| 99 | -// import fetchUser from "@/api/apis/user" | ||
| 100 | -// | ||
| 101 | -// router.beforeEach((to, from, next) => { | ||
| 102 | -// if (store.getters.token && store.getters.token !== "undefined") { | ||
| 103 | -// // store.dispatch('setToken', store.getters.token) | ||
| 104 | -// if (to.path === "/login") { | ||
| 105 | -// next({path: "/"}) | ||
| 106 | -// } else { | ||
| 107 | -// if (!store.getters.info) { | ||
| 108 | -// (async function getAddRouters () { | ||
| 109 | -// fetchUser.fetchGetUserInfo().then(async function (response) { | ||
| 110 | -// await store.dispatch("setInfo", response.data) | ||
| 111 | - // await store.dispatch("newRoutes", store.getters.info.authorityRouter) | ||
| 112 | -// await router.addRoutes(store.getters.addRouters) | ||
| 113 | -// next({path: "/index"}) | ||
| 114 | -// }).catch(function (error) { | ||
| 115 | -// console.log(error) | ||
| 116 | -// }) | ||
| 117 | -// }()) | ||
| 118 | -// } else { | ||
| 119 | -// let is404 = to.matched.some(record => { | ||
| 120 | -// console.log(record) | ||
| 121 | -// if (record.meta.role) { | ||
| 122 | -// return store.getters.info.authorityRouter === -1 | ||
| 123 | -// } | ||
| 124 | -// }) | ||
| 125 | -// if (is404) { | ||
| 126 | -// next({path: "/404"}) | ||
| 127 | -// return false | ||
| 128 | -// } | ||
| 129 | -// next() | ||
| 130 | -// } | ||
| 131 | -// } | ||
| 132 | -// } else { | ||
| 133 | -// if (to.path === "/login") { | ||
| 134 | -// next() | ||
| 135 | -// } | ||
| 136 | -// next({path: "/login"}) | ||
| 137 | -// } | ||
| 138 | -// }) |
src/store/index.js
| @@ -64,7 +64,7 @@ const store = new Vuex.Store({ | @@ -64,7 +64,7 @@ const store = new Vuex.Store({ | ||
| 64 | let loginForm = {} | 64 | let loginForm = {} |
| 65 | loginForm.username = params.username; | 65 | loginForm.username = params.username; |
| 66 | loginForm.password = encryptLoginPassword(params.password); | 66 | loginForm.password = encryptLoginPassword(params.password); |
| 67 | - request.fetchLogin({ ...loginForm }).then(res => { | 67 | + request.login({ ...loginForm }).then(res => { |
| 68 | let response = res.data | 68 | let response = res.data |
| 69 | if (response.status == 0) { | 69 | if (response.status == 0) { |
| 70 | const userInfo = { ...response.data } | 70 | const userInfo = { ...response.data } |
| @@ -92,7 +92,7 @@ const store = new Vuex.Store({ | @@ -92,7 +92,7 @@ const store = new Vuex.Store({ | ||
| 92 | }) | 92 | }) |
| 93 | }, | 93 | }, |
| 94 | permissions({ state, commit }, that) { | 94 | permissions({ state, commit }, that) { |
| 95 | - // request.fetchLogin(that.loginForm).then(res => { | 95 | + // request.login(that.loginForm).then(res => { |
| 96 | // if (res.status == 200) { | 96 | // if (res.status == 200) { |
| 97 | commit("setToken", "xxxx") | 97 | commit("setToken", "xxxx") |
| 98 | commit("setInfo", { | 98 | commit("setInfo", { |
src/views/ask/analysis.vue
| @@ -5,23 +5,161 @@ | @@ -5,23 +5,161 @@ | ||
| 5 | <span>单课分析</span> | 5 | <span>单课分析</span> |
| 6 | </template> | 6 | </template> |
| 7 | </back-box> | 7 | </back-box> |
| 8 | - <div class="tab-box"> | ||
| 9 | - <span class="tab-item active">答题表现</span> | ||
| 10 | - <span class="tab-item">学生问答表现</span> | ||
| 11 | - <span class="tab-item">学生互动表现</span> | ||
| 12 | - <span class="tab-item">签到明细</span> | 8 | + <div class="page-content"> |
| 9 | + <div class="tab-box"> | ||
| 10 | + <span | ||
| 11 | + class="tab-item" | ||
| 12 | + :class="type == 1 ? 'active' : ''" | ||
| 13 | + @click="type = 1" | ||
| 14 | + >答题表现</span | ||
| 15 | + > | ||
| 16 | + <span | ||
| 17 | + class="tab-item" | ||
| 18 | + :class="type == 2 ? 'active' : ''" | ||
| 19 | + @click="type = 2" | ||
| 20 | + >学生问答表现</span | ||
| 21 | + > | ||
| 22 | + <span | ||
| 23 | + class="tab-item" | ||
| 24 | + :class="type == 3 ? 'active' : ''" | ||
| 25 | + @click="type = 3" | ||
| 26 | + >学生互动表现</span | ||
| 27 | + > | ||
| 28 | + <span | ||
| 29 | + class="tab-item" | ||
| 30 | + :class="type == 4 ? 'active' : ''" | ||
| 31 | + @click="type = 4" | ||
| 32 | + >签到明细</span | ||
| 33 | + > | ||
| 34 | + </div> | ||
| 35 | + <ul class="info"> | ||
| 36 | + <li class="info-item">科目:语文</li> | ||
| 37 | + <li class="info-item">课时:课时1</li> | ||
| 38 | + <li class="info-item">上课时间:2022-11-9 21:30</li> | ||
| 39 | + <li class="info-item">下课时间:2022-11-9 21:30</li> | ||
| 40 | + <li class="info-item">签到人数:45</li> | ||
| 41 | + <li class="info-item">题目总数:8</li> | ||
| 42 | + <li class="info-item">答题总数:8</li> | ||
| 43 | + <li class="info-item">课时时长:45分钟</li> | ||
| 44 | + <li class="info-item">总参与度::80%</li> | ||
| 45 | + <li class="info-item">班级总正确率:82%</li> | ||
| 46 | + <li class="info-item">已答总正确率:89%</li> | ||
| 47 | + <li class="info-item">反馈时长:15分钟</li> | ||
| 48 | + </ul> | ||
| 49 | + <el-table | ||
| 50 | + :data="tableData" | ||
| 51 | + border | ||
| 52 | + style="width: 100%" | ||
| 53 | + :default-sort="{ prop: 'dadui', order: 'descending' }" | ||
| 54 | + > | ||
| 55 | + <el-table-column | ||
| 56 | + prop="questionIndex" | ||
| 57 | + label="题号" | ||
| 58 | + align="center" | ||
| 59 | + ><template slot-scope="scoped">Q{{scoped.row.questionIndex}}</template></el-table-column> | ||
| 60 | + <el-table-column | ||
| 61 | + prop="questionType" | ||
| 62 | + label="题型" | ||
| 63 | + align="center" | ||
| 64 | + ></el-table-column> | ||
| 65 | + <el-table-column | ||
| 66 | + prop="dati" | ||
| 67 | + label="答题人数" | ||
| 68 | + sortable | ||
| 69 | + align="center" | ||
| 70 | + ></el-table-column> | ||
| 71 | + <el-table-column | ||
| 72 | + prop="dadui" | ||
| 73 | + label="答对人数" | ||
| 74 | + sortable | ||
| 75 | + align="center" | ||
| 76 | + ></el-table-column> | ||
| 77 | + <el-table-column | ||
| 78 | + prop="canyu" | ||
| 79 | + label="班级参与度" | ||
| 80 | + sortable | ||
| 81 | + align="center" | ||
| 82 | + ><template slot-scope="scoped">{{scoped.row.canyu}}%</template></el-table-column> | ||
| 83 | + <el-table-column | ||
| 84 | + prop="banjidadui" | ||
| 85 | + label="班级正确率" | ||
| 86 | + sortable | ||
| 87 | + align="center" | ||
| 88 | + ><template slot-scope="scoped">{{scoped.row.banjidadui}}%</template></el-table-column> | ||
| 89 | + <el-table-column | ||
| 90 | + prop="yida" | ||
| 91 | + label="已答正确率" | ||
| 92 | + sortable | ||
| 93 | + align="center" | ||
| 94 | + ><template slot-scope="scoped">{{scoped.row.yida}}%</template></el-table-column> | ||
| 95 | + <el-table-column | ||
| 96 | + prop="correctAnswer" | ||
| 97 | + label="正确答案" | ||
| 98 | + align="center" | ||
| 99 | + ></el-table-column> | ||
| 100 | + <el-table-column | ||
| 101 | + prop="ganrao" | ||
| 102 | + label="干扰答案" | ||
| 103 | + align="center" | ||
| 104 | + ></el-table-column> | ||
| 105 | + </el-table> | ||
| 13 | </div> | 106 | </div> |
| 14 | </div> | 107 | </div> |
| 15 | </template> | 108 | </template> |
| 16 | 109 | ||
| 17 | <script> | 110 | <script> |
| 18 | -export default {}; | 111 | +export default { |
| 112 | + data() { | ||
| 113 | + return { | ||
| 114 | + id: "", | ||
| 115 | + type: 1, | ||
| 116 | + tableData: [ | ||
| 117 | + { | ||
| 118 | + questionIndex: 1, | ||
| 119 | + questionType: "单选题", | ||
| 120 | + dati: 5, | ||
| 121 | + dadui: 60, | ||
| 122 | + canyu: 50, | ||
| 123 | + banjidadui: 80, | ||
| 124 | + yida: 90, | ||
| 125 | + correctAnswer:"A", | ||
| 126 | + ganrao:"C" | ||
| 127 | + }, | ||
| 128 | + { | ||
| 129 | + questionIndex: 2, | ||
| 130 | + questionType: "单选题", | ||
| 131 | + dati: 6, | ||
| 132 | + dadui: 80, | ||
| 133 | + canyu: 60, | ||
| 134 | + banjidadui: 90, | ||
| 135 | + yida: 100, | ||
| 136 | + correctAnswer:"B", | ||
| 137 | + ganrao:"D" | ||
| 138 | + }, | ||
| 139 | + ], | ||
| 140 | + }; | ||
| 141 | + }, | ||
| 142 | + created() { | ||
| 143 | + this.id = this.$route.query.id; | ||
| 144 | + // this._QueryData() | ||
| 145 | + }, | ||
| 146 | + methods: { | ||
| 147 | + async _QueryData() { | ||
| 148 | + let { data, info, status } = this.$request.quizDetail({ | ||
| 149 | + id: this.id, | ||
| 150 | + }); | ||
| 151 | + }, | ||
| 152 | + }, | ||
| 153 | +}; | ||
| 19 | </script> | 154 | </script> |
| 20 | 155 | ||
| 21 | <style lang="scss" scoped> | 156 | <style lang="scss" scoped> |
| 157 | +.page-content { | ||
| 158 | + padding: 20px 20px 0; | ||
| 159 | +} | ||
| 22 | .tab-box { | 160 | .tab-box { |
| 23 | width: 800px; | 161 | width: 800px; |
| 24 | - margin: 20px auto; | 162 | + margin: 0 auto 12px; |
| 25 | background: #f8f8f8; | 163 | background: #f8f8f8; |
| 26 | border-radius: 20px; | 164 | border-radius: 20px; |
| 27 | display: flex; | 165 | display: flex; |
| @@ -35,10 +173,29 @@ export default {}; | @@ -35,10 +173,29 @@ export default {}; | ||
| 35 | font-weight: 500; | 173 | font-weight: 500; |
| 36 | background: transparent; | 174 | background: transparent; |
| 37 | border-radius: 20px; | 175 | border-radius: 20px; |
| 176 | + cursor: pointer; | ||
| 38 | &.active { | 177 | &.active { |
| 39 | background: #667ffd; | 178 | background: #667ffd; |
| 40 | color: #fff; | 179 | color: #fff; |
| 41 | } | 180 | } |
| 42 | } | 181 | } |
| 43 | } | 182 | } |
| 183 | +.info { | ||
| 184 | + display: flex; | ||
| 185 | + flex-wrap: wrap; | ||
| 186 | + border-left: 1px solid #e2e2e2; | ||
| 187 | + border-top: 1px solid #e2e2e2; | ||
| 188 | + margin-bottom: 12px; | ||
| 189 | + .info-item { | ||
| 190 | + width: 25%; | ||
| 191 | + height: 50px; | ||
| 192 | + box-sizing: border-box; | ||
| 193 | + flex-shrink: 0; | ||
| 194 | + background: #f8f8f8; | ||
| 195 | + border-right: 1px solid #e2e2e2; | ||
| 196 | + border-bottom: 1px solid #e2e2e2; | ||
| 197 | + line-height: 50px; | ||
| 198 | + text-align: center; | ||
| 199 | + } | ||
| 200 | +} | ||
| 44 | </style> | 201 | </style> |
| 45 | \ No newline at end of file | 202 | \ No newline at end of file |
src/views/ask/index.vue
| @@ -774,7 +774,7 @@ export default { | @@ -774,7 +774,7 @@ export default { | ||
| 774 | } | 774 | } |
| 775 | }, | 775 | }, |
| 776 | async saveAnswer(){ | 776 | async saveAnswer(){ |
| 777 | - // const { data, code, message } = await this.$request.updateAnswerSheet({...this.form}); | 777 | + // const { data, code, message } = await this.$request.modifyPaper({...this.form}); |
| 778 | // if (code == 0) { | 778 | // if (code == 0) { |
| 779 | this.dialogVisible = false | 779 | this.dialogVisible = false |
| 780 | // } else { | 780 | // } else { |
src/views/examinationPaper/add.vue
| @@ -37,7 +37,7 @@ | @@ -37,7 +37,7 @@ | ||
| 37 | ></el-col> | 37 | ></el-col> |
| 38 | </el-form-item> | 38 | </el-form-item> |
| 39 | <el-form-item label="测验类型:"> | 39 | <el-form-item label="测验类型:"> |
| 40 | - <el-select v-model="form.tag" placeholder="选择测验类型"> | 40 | + <el-select v-model="form.tagId" placeholder="选择测验类型"> |
| 41 | <el-option | 41 | <el-option |
| 42 | v-for="item in answerTypeList" | 42 | v-for="item in answerTypeList" |
| 43 | :key="item.id" | 43 | :key="item.id" |
| @@ -71,8 +71,8 @@ | @@ -71,8 +71,8 @@ | ||
| 71 | </el-option> | 71 | </el-option> |
| 72 | </el-select> | 72 | </el-select> |
| 73 | </el-form-item> | 73 | </el-form-item> |
| 74 | - <el-form-item label="科目:" prop="subjectId"> | ||
| 75 | - <el-select class="sel" v-model="form.subjectId" placeholder=""> | 74 | + <el-form-item label="科目:" prop="subjectName"> |
| 75 | + <el-select class="sel" v-model="form.subjectName" placeholder=""> | ||
| 76 | <el-option | 76 | <el-option |
| 77 | v-for="item in subjectList" | 77 | v-for="item in subjectList" |
| 78 | :key="item.value" | 78 | :key="item.value" |
| @@ -91,8 +91,8 @@ | @@ -91,8 +91,8 @@ | ||
| 91 | label="考试时长" | 91 | label="考试时长" |
| 92 | ></el-input-number> | 92 | ></el-input-number> |
| 93 | </el-form-item> | 93 | </el-form-item> |
| 94 | - <el-form-item label="分享范围:" prop="share"> | ||
| 95 | - <el-radio-group v-model="form.share"> | 94 | + <el-form-item label="分享范围:" prop="sharingType"> |
| 95 | + <el-radio-group v-model="form.sharingType"> | ||
| 96 | <el-radio :label="1">任课班级分享</el-radio> | 96 | <el-radio :label="1">任课班级分享</el-radio> |
| 97 | <el-radio :label="2">全年级分享</el-radio> | 97 | <el-radio :label="2">全年级分享</el-radio> |
| 98 | </el-radio-group> | 98 | </el-radio-group> |
| @@ -105,7 +105,7 @@ | @@ -105,7 +105,7 @@ | ||
| 105 | <el-button type="primary" round @click="setStep1">下一步</el-button> | 105 | <el-button type="primary" round @click="setStep1">下一步</el-button> |
| 106 | </div> | 106 | </div> |
| 107 | <el-dialog | 107 | <el-dialog |
| 108 | - title="天假测验类型" | 108 | + title="添加测验类型" |
| 109 | :visible.sync="dialogVisible" | 109 | :visible.sync="dialogVisible" |
| 110 | width="500px" | 110 | width="500px" |
| 111 | > | 111 | > |
| @@ -122,9 +122,7 @@ | @@ -122,9 +122,7 @@ | ||
| 122 | </p> | 122 | </p> |
| 123 | </div> | 123 | </div> |
| 124 | <div class="" slot="footer"> | 124 | <div class="" slot="footer"> |
| 125 | - <el-button type="primary" @click="addAnswerTypeName" | ||
| 126 | - >确 定</el-button | ||
| 127 | - > | 125 | + <el-button type="primary" @click="addPaperType">确 定</el-button> |
| 128 | <el-button @click="dialogVisible = false">取 消</el-button> | 126 | <el-button @click="dialogVisible = false">取 消</el-button> |
| 129 | </div> | 127 | </div> |
| 130 | </el-dialog> | 128 | </el-dialog> |
| @@ -218,7 +216,7 @@ | @@ -218,7 +216,7 @@ | ||
| 218 | <p v-else class="answer-box"> | 216 | <p v-else class="answer-box"> |
| 219 | <span | 217 | <span |
| 220 | class="answer-s" | 218 | class="answer-s" |
| 221 | - v-for="option in subQuestions.answerOptions" | 219 | + v-for="option in subQuestions.answerOptions.split(',')" |
| 222 | :key="option" | 220 | :key="option" |
| 223 | >{{ option }}</span | 221 | >{{ option }}</span |
| 224 | > | 222 | > |
| @@ -394,7 +392,7 @@ | @@ -394,7 +392,7 @@ | ||
| 394 | <p v-if="subQuestions.questionType == 3" class="answer-box"> | 392 | <p v-if="subQuestions.questionType == 3" class="answer-box"> |
| 395 | <span | 393 | <span |
| 396 | class="answer-s" | 394 | class="answer-s" |
| 397 | - v-for="option in subQuestions.answerOptions" | 395 | + v-for="option in subQuestions.answerOptions.split(',')" |
| 398 | :class=" | 396 | :class=" |
| 399 | subQuestions.correctAnswer.includes(option) | 397 | subQuestions.correctAnswer.includes(option) |
| 400 | ? 'active' | 398 | ? 'active' |
| @@ -408,7 +406,7 @@ | @@ -408,7 +406,7 @@ | ||
| 408 | <p v-if="subQuestions.questionType == 2" class="answer-box"> | 406 | <p v-if="subQuestions.questionType == 2" class="answer-box"> |
| 409 | <span | 407 | <span |
| 410 | class="answer-s" | 408 | class="answer-s" |
| 411 | - v-for="option in subQuestions.answerOptions" | 409 | + v-for="option in subQuestions.answerOptions.split(',')" |
| 412 | :class=" | 410 | :class=" |
| 413 | subQuestions.correctAnswer == option ? 'active' : '' | 411 | subQuestions.correctAnswer == option ? 'active' : '' |
| 414 | " | 412 | " |
| @@ -434,6 +432,8 @@ | @@ -434,6 +432,8 @@ | ||
| 434 | </template> | 432 | </template> |
| 435 | 433 | ||
| 436 | <script> | 434 | <script> |
| 435 | +import { formatDate, deepClone } from "utils"; | ||
| 436 | +import { number } from "echarts"; | ||
| 437 | const questionForm = { | 437 | const questionForm = { |
| 438 | questionTitle: "", | 438 | questionTitle: "", |
| 439 | questionType: 2, | 439 | questionType: 2, |
| @@ -444,7 +444,7 @@ const subQuesOptions = { | @@ -444,7 +444,7 @@ const subQuesOptions = { | ||
| 444 | score: 1, | 444 | score: 1, |
| 445 | partScore: 0, | 445 | partScore: 0, |
| 446 | selectNum: 4, | 446 | selectNum: 4, |
| 447 | - answerOptions: ["A", "B", "C", "D"], | 447 | + answerOptions: "A,B,C,D", |
| 448 | correctAnswer: "", | 448 | correctAnswer: "", |
| 449 | }; | 449 | }; |
| 450 | export default { | 450 | export default { |
| @@ -471,7 +471,7 @@ export default { | @@ -471,7 +471,7 @@ export default { | ||
| 471 | { label: "判断题", value: 4 }, | 471 | { label: "判断题", value: 4 }, |
| 472 | { label: "主观题", value: 5 }, | 472 | { label: "主观题", value: 5 }, |
| 473 | ], | 473 | ], |
| 474 | - rightOptions: ["A", "B", "C", "D", "E", "F", "G"], | 474 | + rightOptions: ["A","B","C","D","E","F","G"], |
| 475 | addSubQuestionsType: "", | 475 | addSubQuestionsType: "", |
| 476 | step: 0, //步骤 | 476 | step: 0, //步骤 |
| 477 | gradeList: [], //年级 | 477 | gradeList: [], //年级 |
| @@ -481,11 +481,11 @@ export default { | @@ -481,11 +481,11 @@ export default { | ||
| 481 | form: { | 481 | form: { |
| 482 | //答题卡详情 | 482 | //答题卡详情 |
| 483 | title: "", | 483 | title: "", |
| 484 | - tag: "", | ||
| 485 | - subjectId: "", | ||
| 486 | - examsDuration: 0, | 484 | + tagId: "", |
| 487 | gradeName: "", | 485 | gradeName: "", |
| 488 | - share: 1, | 486 | + subjectName: "", |
| 487 | + examsDuration: 0, | ||
| 488 | + sharingType: 1, | ||
| 489 | questionList: [], | 489 | questionList: [], |
| 490 | }, | 490 | }, |
| 491 | formRules: { | 491 | formRules: { |
| @@ -500,7 +500,9 @@ export default { | @@ -500,7 +500,9 @@ export default { | ||
| 500 | }, | 500 | }, |
| 501 | ], | 501 | ], |
| 502 | gradeName: [{ required: true, message: "请选择年级", trigger: "blur" }], | 502 | gradeName: [{ required: true, message: "请选择年级", trigger: "blur" }], |
| 503 | - subjectId: [{ required: true, message: "请选择科目", trigger: "blur" }], | 503 | + subjectName: [ |
| 504 | + { required: true, message: "请选择科目", trigger: "blur" }, | ||
| 505 | + ], | ||
| 504 | examsDuration: [ | 506 | examsDuration: [ |
| 505 | { required: true, message: "请设置考试时长", trigger: "blur" }, | 507 | { required: true, message: "请设置考试时长", trigger: "blur" }, |
| 506 | ], | 508 | ], |
| @@ -510,9 +512,7 @@ export default { | @@ -510,9 +512,7 @@ export default { | ||
| 510 | created() { | 512 | created() { |
| 511 | this.type = this.$route.query.type ? this.$route.query.type : 1; | 513 | this.type = this.$route.query.type ? this.$route.query.type : 1; |
| 512 | if (this.type == 2) { | 514 | if (this.type == 2) { |
| 513 | - this.form = this.$route.query.form && JSON.parse(this.$route.query.form); | ||
| 514 | - console.log(this.form.examsDuration) | ||
| 515 | - this.form.examsDuration = Number(this.form.examsDuration)/60 | 515 | + this._QueryDetail(); |
| 516 | } | 516 | } |
| 517 | }, | 517 | }, |
| 518 | methods: { | 518 | methods: { |
| @@ -632,13 +632,13 @@ export default { | @@ -632,13 +632,13 @@ export default { | ||
| 632 | questionsOptions.answerOptions = this.rightOptions.slice( | 632 | questionsOptions.answerOptions = this.rightOptions.slice( |
| 633 | 0, | 633 | 0, |
| 634 | questionsOptions.selectNum | 634 | questionsOptions.selectNum |
| 635 | - ); | 635 | + ).join(','); |
| 636 | break; | 636 | break; |
| 637 | case 3: | 637 | case 3: |
| 638 | questionsOptions.answerOptions = this.rightOptions.slice( | 638 | questionsOptions.answerOptions = this.rightOptions.slice( |
| 639 | 0, | 639 | 0, |
| 640 | questionsOptions.selectNum | 640 | questionsOptions.selectNum |
| 641 | - ); | 641 | + ).join(','); |
| 642 | questionsOptions.partScore = 0.5; | 642 | questionsOptions.partScore = 0.5; |
| 643 | break; | 643 | break; |
| 644 | case 4: | 644 | case 4: |
| @@ -667,7 +667,7 @@ export default { | @@ -667,7 +667,7 @@ export default { | ||
| 667 | let score = question.subQuestions.reduce((a, b) => { | 667 | let score = question.subQuestions.reduce((a, b) => { |
| 668 | return a + b.score; | 668 | return a + b.score; |
| 669 | }, 0); | 669 | }, 0); |
| 670 | - return score; | 670 | + return Number(score).toFixed(2); |
| 671 | }, | 671 | }, |
| 672 | changeAddSubQuestions(val, question) { | 672 | changeAddSubQuestions(val, question) { |
| 673 | if (val) { | 673 | if (val) { |
| @@ -680,13 +680,13 @@ export default { | @@ -680,13 +680,13 @@ export default { | ||
| 680 | questionsOptions.answerOptions = this.rightOptions.slice( | 680 | questionsOptions.answerOptions = this.rightOptions.slice( |
| 681 | 0, | 681 | 0, |
| 682 | questionsOptions.selectNum | 682 | questionsOptions.selectNum |
| 683 | - ); | 683 | + ).join(','); |
| 684 | break; | 684 | break; |
| 685 | case 3: | 685 | case 3: |
| 686 | questionsOptions.answerOptions = this.rightOptions.slice( | 686 | questionsOptions.answerOptions = this.rightOptions.slice( |
| 687 | 0, | 687 | 0, |
| 688 | questionsOptions.selectNum | 688 | questionsOptions.selectNum |
| 689 | - ); | 689 | + ).join(','); |
| 690 | questionsOptions.partScore = 0.5; | 690 | questionsOptions.partScore = 0.5; |
| 691 | break; | 691 | break; |
| 692 | case 4: | 692 | case 4: |
| @@ -710,13 +710,13 @@ export default { | @@ -710,13 +710,13 @@ export default { | ||
| 710 | subQuestions.answerOptions = that.rightOptions.slice( | 710 | subQuestions.answerOptions = that.rightOptions.slice( |
| 711 | 0, | 711 | 0, |
| 712 | subQuestions.selectNum | 712 | subQuestions.selectNum |
| 713 | - ); | 713 | + ).join(','); |
| 714 | break; | 714 | break; |
| 715 | case 3: | 715 | case 3: |
| 716 | subQuestions.answerOptions = that.rightOptions.slice( | 716 | subQuestions.answerOptions = that.rightOptions.slice( |
| 717 | 0, | 717 | 0, |
| 718 | subQuestions.selectNum | 718 | subQuestions.selectNum |
| 719 | - ); | 719 | + ).join(','); |
| 720 | subQuestions.partScore = 0.5; | 720 | subQuestions.partScore = 0.5; |
| 721 | break; | 721 | break; |
| 722 | case 4: | 722 | case 4: |
| @@ -727,23 +727,23 @@ export default { | @@ -727,23 +727,23 @@ export default { | ||
| 727 | }, | 727 | }, |
| 728 | addOptions(subQuestions) { | 728 | addOptions(subQuestions) { |
| 729 | //添加选项 | 729 | //添加选项 |
| 730 | - let length = subQuestions.answerOptions.length; | 730 | + let length = subQuestions.answerOptions.split(',').length; |
| 731 | if (length > 6) return; | 731 | if (length > 6) return; |
| 732 | subQuestions.selectNum = length + 1; | 732 | subQuestions.selectNum = length + 1; |
| 733 | subQuestions.answerOptions = this.rightOptions.slice( | 733 | subQuestions.answerOptions = this.rightOptions.slice( |
| 734 | 0, | 734 | 0, |
| 735 | subQuestions.selectNum | 735 | subQuestions.selectNum |
| 736 | - ); | 736 | + ).join(','); |
| 737 | }, | 737 | }, |
| 738 | removeOptions(subQuestions) { | 738 | removeOptions(subQuestions) { |
| 739 | //删除选项 | 739 | //删除选项 |
| 740 | - let length = subQuestions.answerOptions.length; | 740 | + let length = subQuestions.answerOptions.split(',').length; |
| 741 | if (length < 2) return; | 741 | if (length < 2) return; |
| 742 | subQuestions.selectNum = length - 1; | 742 | subQuestions.selectNum = length - 1; |
| 743 | subQuestions.answerOptions = this.rightOptions.slice( | 743 | subQuestions.answerOptions = this.rightOptions.slice( |
| 744 | 0, | 744 | 0, |
| 745 | subQuestions.selectNum | 745 | subQuestions.selectNum |
| 746 | - ); | 746 | + ).join(','); |
| 747 | }, | 747 | }, |
| 748 | changAnswer(sub, option) { | 748 | changAnswer(sub, option) { |
| 749 | //设置多选答案 | 749 | //设置多选答案 |
| @@ -756,17 +756,17 @@ export default { | @@ -756,17 +756,17 @@ export default { | ||
| 756 | sub.correctAnswer = arrs.sort().join(""); | 756 | sub.correctAnswer = arrs.sort().join(""); |
| 757 | } | 757 | } |
| 758 | }, | 758 | }, |
| 759 | - async addAnswerTypeName() { | 759 | + async addPaperType() { |
| 760 | //保存测验类型 | 760 | //保存测验类型 |
| 761 | if (!this.answerTypeName) { | 761 | if (!this.answerTypeName) { |
| 762 | this.$message.error("请填写测验名称!"); | 762 | this.$message.error("请填写测验名称!"); |
| 763 | return; | 763 | return; |
| 764 | } | 764 | } |
| 765 | //添加测验类型 | 765 | //添加测验类型 |
| 766 | - const { data, code, message } = await this.$request.addAnswerTypeName({ | 766 | + const { data, status, message } = await this.$request.addPaperType({ |
| 767 | typeName: this.answerTypeName, | 767 | typeName: this.answerTypeName, |
| 768 | }); | 768 | }); |
| 769 | - if (code == 0) { | 769 | + if (status == 0) { |
| 770 | this._CreatedTypeList(); | 770 | this._CreatedTypeList(); |
| 771 | this.dialogVisible = false; | 771 | this.dialogVisible = false; |
| 772 | this.answerTypeName = ""; | 772 | this.answerTypeName = ""; |
| @@ -778,14 +778,24 @@ export default { | @@ -778,14 +778,24 @@ export default { | ||
| 778 | async save() { | 778 | async save() { |
| 779 | if (this.saceLoading) return; | 779 | if (this.saceLoading) return; |
| 780 | this.saceLoading = true; | 780 | this.saceLoading = true; |
| 781 | - const { data, code, message } = await this.$request.saveAnswerSheet({ | 781 | + //添加题目ID、序号 |
| 782 | + this.form.questionList.map((item, index) => { | ||
| 783 | + item.questionId = index + 1; | ||
| 784 | + item.questionIndex = index + 1; | ||
| 785 | + item.questionType = 0; | ||
| 786 | + item.subQuestions.map((items, indexs) => { | ||
| 787 | + items.questionId = indexs + 1; | ||
| 788 | + items.questionIndex = indexs + 1; | ||
| 789 | + }); | ||
| 790 | + }); | ||
| 791 | + const { data, status, message } = await this.$request.addPaper({ | ||
| 782 | ...this.form, | 792 | ...this.form, |
| 783 | }); | 793 | }); |
| 784 | this.saceLoading = false; | 794 | this.saceLoading = false; |
| 785 | - if (code == 0) { | 795 | + if (status == 0) { |
| 786 | this.$router.push({ | 796 | this.$router.push({ |
| 787 | - path:"/examinationPaper" | ||
| 788 | - }) | 797 | + path: "/examinationPaper", |
| 798 | + }); | ||
| 789 | } else { | 799 | } else { |
| 790 | this.$message.error(message); | 800 | this.$message.error(message); |
| 791 | } | 801 | } |
| @@ -796,15 +806,15 @@ export default { | @@ -796,15 +806,15 @@ export default { | ||
| 796 | }, | 806 | }, |
| 797 | async _CreatedTypeList() { | 807 | async _CreatedTypeList() { |
| 798 | //测验类型查询 | 808 | //测验类型查询 |
| 799 | - const { data, code, message } = await this.$request.fetchTypeNames(); | ||
| 800 | - if (code == 0) { | 809 | + const { data, status, message } = await this.$request.fetchTypeNames(); |
| 810 | + if (status == 0) { | ||
| 801 | this.answerTypeList = [...data.list] || []; | 811 | this.answerTypeList = [...data.list] || []; |
| 802 | this.answerTypeList.unshift({ | 812 | this.answerTypeList.unshift({ |
| 803 | - typeName: "--", | 813 | + typeName: "", |
| 804 | id: "", | 814 | id: "", |
| 805 | }); | 815 | }); |
| 806 | if (this.type != 2) { | 816 | if (this.type != 2) { |
| 807 | - this.form.tag = this.answerTypeList[0].id || ""; | 817 | + this.form.tagId = this.answerTypeList[0].id || ""; |
| 808 | } | 818 | } |
| 809 | } else { | 819 | } else { |
| 810 | this.$message.error(message); | 820 | this.$message.error(message); |
| @@ -812,8 +822,8 @@ export default { | @@ -812,8 +822,8 @@ export default { | ||
| 812 | }, | 822 | }, |
| 813 | async _GradeList() { | 823 | async _GradeList() { |
| 814 | //查询年级列表 | 824 | //查询年级列表 |
| 815 | - const { data, code, message } = await this.$request.fetchGradeList(); | ||
| 816 | - if (code == 0) { | 825 | + const { data, status, message } = await this.$request.fetchGradeList(); |
| 826 | + if (status == 0) { | ||
| 817 | this.gradeList = [...data.gradeNames] || []; | 827 | this.gradeList = [...data.gradeNames] || []; |
| 818 | if (this.type != 2) { | 828 | if (this.type != 2) { |
| 819 | this.form.gradeName = this.gradeList[0]; | 829 | this.form.gradeName = this.gradeList[0]; |
| @@ -829,38 +839,56 @@ export default { | @@ -829,38 +839,56 @@ export default { | ||
| 829 | if (grade) { | 839 | if (grade) { |
| 830 | param.gradeName = grade; | 840 | param.gradeName = grade; |
| 831 | } | 841 | } |
| 832 | - const { data, code, message } = await this.$request.fetchSubjectList( | 842 | + const { data, status, message } = await this.$request.fetchSubjectList( |
| 833 | param | 843 | param |
| 834 | ); | 844 | ); |
| 835 | - if (code === 0) { | 845 | + if (status === 0) { |
| 836 | this.subjectList = data.list.map((item) => { | 846 | this.subjectList = data.list.map((item) => { |
| 837 | return { | 847 | return { |
| 838 | - value: item.subjectId, | 848 | + value: item.subjectName, |
| 839 | label: item.subjectName, | 849 | label: item.subjectName, |
| 840 | }; | 850 | }; |
| 841 | }); | 851 | }); |
| 842 | - if (this.subjectList.length > 1) { | ||
| 843 | - let isTeachingCourse = false; | ||
| 844 | - this.subjectList.map((item) => { | ||
| 845 | - if (item.isTeachingCourse) { | ||
| 846 | - isTeachingCourse = true; | ||
| 847 | - } | ||
| 848 | - }); | ||
| 849 | - if (this.type != 2) { | ||
| 850 | - !isTeachingCourse && !dont | ||
| 851 | - ? (this.form.subjectId = this.subjectList[0].value) | ||
| 852 | - : ""; | ||
| 853 | - } | ||
| 854 | - } | ||
| 855 | - if (this.subjectList.length > 0 && !dont) { | ||
| 856 | - this.form.subjectId = this.subjectList[0].value; | 852 | + if (this.subjectList.length) { |
| 853 | + this.form.subjectName = this.subjectList[0].value; | ||
| 857 | } | 854 | } |
| 858 | } else { | 855 | } else { |
| 859 | this.$message.error(message); | 856 | this.$message.error(message); |
| 860 | } | 857 | } |
| 861 | }, | 858 | }, |
| 862 | - | ||
| 863 | - | 859 | + async _QueryDetail() { |
| 860 | + //查询年级列表 | ||
| 861 | + const { data, status, message } = await this.$request.fetchPaperDetail({ | ||
| 862 | + paperId: this.$route.query.paperId, | ||
| 863 | + }); | ||
| 864 | + if (status == 0) { | ||
| 865 | + this.form.title = data.title; | ||
| 866 | + this.form.tagId = data.tagId; | ||
| 867 | + this.form.subjectName = data.subjectName; | ||
| 868 | + this.form.gradeName = data.gradeName; | ||
| 869 | + this.form.examsDuration = data.examsDuration; | ||
| 870 | + this.form.sharingType = data.sharingType; | ||
| 871 | + this.form.questionList = data.questionList?.map((item) => { | ||
| 872 | + let subQuestions = | ||
| 873 | + item.subQuestions?.map((items) => { | ||
| 874 | + return { | ||
| 875 | + questionType: items.questionType, | ||
| 876 | + score: items.score, | ||
| 877 | + partScore: items.partScore, | ||
| 878 | + selectNum: items.answerOptions.split(',').length, | ||
| 879 | + answerOptions: [...items.answerOptions], | ||
| 880 | + correctAnswer: items.correctAnswer, | ||
| 881 | + }; | ||
| 882 | + }) || []; | ||
| 883 | + return { | ||
| 884 | + questionTitle: item.questionTitle, | ||
| 885 | + subQuestions: subQuestions, | ||
| 886 | + }; | ||
| 887 | + }); | ||
| 888 | + } else { | ||
| 889 | + this.$message.error(message); | ||
| 890 | + } | ||
| 891 | + }, | ||
| 864 | }, | 892 | }, |
| 865 | }; | 893 | }; |
| 866 | </script> | 894 | </script> |
src/views/examinationPaper/edit.vue
| @@ -104,6 +104,7 @@ | @@ -104,6 +104,7 @@ | ||
| 104 | export default { | 104 | export default { |
| 105 | data() { | 105 | data() { |
| 106 | return { | 106 | return { |
| 107 | + questionList:[], | ||
| 107 | form: { | 108 | form: { |
| 108 | //答题卡详情 | 109 | //答题卡详情 |
| 109 | title: "", | 110 | title: "", |
| @@ -128,7 +129,7 @@ export default { | @@ -128,7 +129,7 @@ export default { | ||
| 128 | }, | 129 | }, |
| 129 | }, | 130 | }, |
| 130 | created() { | 131 | created() { |
| 131 | - this.form = this.$route.query.form && JSON.parse(this.$route.query.form); | 132 | + this._QueryDetail() |
| 132 | }, | 133 | }, |
| 133 | methods: { | 134 | methods: { |
| 134 | linkBack() { | 135 | linkBack() { |
| @@ -199,17 +200,36 @@ export default { | @@ -199,17 +200,36 @@ export default { | ||
| 199 | sub.correctAnswer = arrs.sort().join(""); | 200 | sub.correctAnswer = arrs.sort().join(""); |
| 200 | } | 201 | } |
| 201 | }, | 202 | }, |
| 202 | - save(){ | ||
| 203 | - //删除答题卡 | ||
| 204 | - // const { data, code, message } = await this.$request.updateAnswerSheet({...this.form}); | ||
| 205 | - // if (code == 0) { | 203 | + async save(){ |
| 204 | + let questionList = [] | ||
| 205 | + //更新答题卡 | ||
| 206 | + const { data, status, message } = await this.$request.modifyPaper({ | ||
| 207 | + paperId:this.form.id, | ||
| 208 | + questionList:questionList | ||
| 209 | + }); | ||
| 210 | + if (status == 0) { | ||
| 206 | this.$router.push({ | 211 | this.$router.push({ |
| 207 | path:"/examinationPaper" | 212 | path:"/examinationPaper" |
| 208 | }) | 213 | }) |
| 209 | - // } else { | ||
| 210 | - // this.$message.error(message); | ||
| 211 | - // } | ||
| 212 | - } | 214 | + } else { |
| 215 | + this.$message.error(message); | ||
| 216 | + } | ||
| 217 | + }, | ||
| 218 | + async _QueryDetail() { | ||
| 219 | + //查询年级列表 | ||
| 220 | + const { data, status, message } = await this.$request.fetchPaperDetail({ | ||
| 221 | + paperId:this.$route.query.paperId | ||
| 222 | + }); | ||
| 223 | + if (status == 0) { | ||
| 224 | + this.form = deepClone(data) | ||
| 225 | + this.questionList = deepClone(data.questionList) | ||
| 226 | + this.form.questionList.map(item=>{ | ||
| 227 | + item.score = "" | ||
| 228 | + }) | ||
| 229 | + } else { | ||
| 230 | + this.$message.error(message); | ||
| 231 | + } | ||
| 232 | + }, | ||
| 213 | }, | 233 | }, |
| 214 | }; | 234 | }; |
| 215 | </script> | 235 | </script> |
src/views/examinationPaper/index.vue
| @@ -19,23 +19,23 @@ | @@ -19,23 +19,23 @@ | ||
| 19 | 19 | ||
| 20 | <div class="answer-header"> | 20 | <div class="answer-header"> |
| 21 | <div class="sel-box"> | 21 | <div class="sel-box"> |
| 22 | - <el-cascader | ||
| 23 | - class="sel sel2" | ||
| 24 | - :options="options" | ||
| 25 | - :props="props" | ||
| 26 | - collapse-tags | ||
| 27 | - clearable | ||
| 28 | - placeholder="选择年级-班级" | ||
| 29 | - v-model="query.gradeClass" | ||
| 30 | - @change="changeGrade" | ||
| 31 | - ><template slot-scope="{ node, data }"> | ||
| 32 | - <span>{{ data.label }}</span> | ||
| 33 | - <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> | ||
| 34 | - </template></el-cascader | 22 | + <el-select |
| 23 | + class="sel" | ||
| 24 | + v-model="query.classId" | ||
| 25 | + placeholder="选择班级" | ||
| 26 | + @change="changClazz" | ||
| 35 | > | 27 | > |
| 28 | + <el-option | ||
| 29 | + v-for="item in classList" | ||
| 30 | + :key="item.value" | ||
| 31 | + :label="item.label" | ||
| 32 | + :value="item.value" | ||
| 33 | + > | ||
| 34 | + </el-option> | ||
| 35 | + </el-select> | ||
| 36 | <el-select | 36 | <el-select |
| 37 | class="sel" | 37 | class="sel" |
| 38 | - v-model="query.subjectId" | 38 | + v-model="query.subjectName" |
| 39 | placeholder="选择科目" | 39 | placeholder="选择科目" |
| 40 | @change="_QueryData()" | 40 | @change="_QueryData()" |
| 41 | > | 41 | > |
| @@ -49,15 +49,15 @@ | @@ -49,15 +49,15 @@ | ||
| 49 | </el-select> | 49 | </el-select> |
| 50 | <el-select | 50 | <el-select |
| 51 | class="sel" | 51 | class="sel" |
| 52 | - v-model="query.typeName" | 52 | + v-model="query.tagId" |
| 53 | placeholder="选择类型" | 53 | placeholder="选择类型" |
| 54 | @change="_QueryData()" | 54 | @change="_QueryData()" |
| 55 | > | 55 | > |
| 56 | <el-option | 56 | <el-option |
| 57 | v-for="item in typeList" | 57 | v-for="item in typeList" |
| 58 | :key="item" | 58 | :key="item" |
| 59 | - :label="item" | ||
| 60 | - :value="item" | 59 | + :label="item.label" |
| 60 | + :value="item.value" | ||
| 61 | >{{ item }} | 61 | >{{ item }} |
| 62 | </el-option> | 62 | </el-option> |
| 63 | </el-select> | 63 | </el-select> |
| @@ -76,7 +76,7 @@ | @@ -76,7 +76,7 @@ | ||
| 76 | </div> | 76 | </div> |
| 77 | </div> | 77 | </div> |
| 78 | <p class="tips"> | 78 | <p class="tips"> |
| 79 | - <span>另有25份已经归档的答题卡,</span> | 79 | + <span>另有{{ archivedTotal }}份已经归档的答题卡,</span> |
| 80 | <router-link to="/examinationPaperRecycle">点击查看>></router-link> | 80 | <router-link to="/examinationPaperRecycle">点击查看>></router-link> |
| 81 | </p> | 81 | </p> |
| 82 | <ul class="content"> | 82 | <ul class="content"> |
| @@ -87,29 +87,29 @@ | @@ -87,29 +87,29 @@ | ||
| 87 | </div> | 87 | </div> |
| 88 | <div class="info"> | 88 | <div class="info"> |
| 89 | <p class="title"> | 89 | <p class="title"> |
| 90 | - {{ item.title }} <span class="label">{{ item.typeName }}</span> | 90 | + {{ item.title }} <span class="label">{{ item.tag }}</span> |
| 91 | </p> | 91 | </p> |
| 92 | <p class="num"> | 92 | <p class="num"> |
| 93 | - 总题数:{{ item.answerNum }} | 93 | + 总题数:{{ item.questionNum }} |
| 94 | <em class="s-line">|</em> | 94 | <em class="s-line">|</em> |
| 95 | - 预计时长:{{ item.time }} | 95 | + 预计时长:{{ item.examsDuration }} |
| 96 | <em class="s-line">|</em> | 96 | <em class="s-line">|</em> |
| 97 | 授课端同步: | 97 | 授课端同步: |
| 98 | <span | 98 | <span |
| 99 | class="clazz" | 99 | class="clazz" |
| 100 | - v-for="(clazzChild, indexs) in item.aboutClazz" | ||
| 101 | - :key="clazzChild" | 100 | + v-for="(clazzChild, indexs) in item.classList" |
| 101 | + :key="clazzChild.classId" | ||
| 102 | >{{ | 102 | >{{ |
| 103 | - `${clazzChild}班${ | 103 | + `${clazzChild.className}班${ |
| 104 | indexs != item.aboutClazz.length - 1 ? "、" : "" | 104 | indexs != item.aboutClazz.length - 1 ? "、" : "" |
| 105 | }` | 105 | }` |
| 106 | }} | 106 | }} |
| 107 | - <i class="el-icon-success"></i | 107 | + <i v-if="clazzChild.keepStatus == 1" class="el-icon-success"></i |
| 108 | ></span> | 108 | ></span> |
| 109 | </p> | 109 | </p> |
| 110 | <p class="person"> | 110 | <p class="person"> |
| 111 | - {{ item.teacher }}<em class="s-line">|</em | ||
| 112 | - ><span class="date">{{ item.date }}</span> | 111 | + {{ item.realName }}<em class="s-line">|</em |
| 112 | + ><span class="date">{{ item.modifiedTime }}</span> | ||
| 113 | </p> | 113 | </p> |
| 114 | </div> | 114 | </div> |
| 115 | <div class="btn-box"> | 115 | <div class="btn-box"> |
| @@ -134,7 +134,9 @@ | @@ -134,7 +134,9 @@ | ||
| 134 | icon="el-icon-more" | 134 | icon="el-icon-more" |
| 135 | ></el-button> | 135 | ></el-button> |
| 136 | <el-dropdown-menu slot="dropdown"> | 136 | <el-dropdown-menu slot="dropdown"> |
| 137 | - <el-dropdown-item :command="1" v-if="this.$store.info.id == item.id">修改分享范围</el-dropdown-item> | 137 | + <el-dropdown-item :command="1" v-if="userId == item.id" |
| 138 | + >修改分享范围</el-dropdown-item | ||
| 139 | + > | ||
| 138 | <el-dropdown-item :command="2">复制</el-dropdown-item> | 140 | <el-dropdown-item :command="2">复制</el-dropdown-item> |
| 139 | <el-dropdown-item :command="3">归档</el-dropdown-item> | 141 | <el-dropdown-item :command="3">归档</el-dropdown-item> |
| 140 | </el-dropdown-menu> | 142 | </el-dropdown-menu> |
| @@ -144,11 +146,6 @@ | @@ -144,11 +146,6 @@ | ||
| 144 | </ul> | 146 | </ul> |
| 145 | <el-dialog title="选择分享范围" :visible.sync="dialogVisible" width="400"> | 147 | <el-dialog title="选择分享范围" :visible.sync="dialogVisible" width="400"> |
| 146 | <el-form :model="shareForm" :rules="shareRulesForm" label-width="160px"> | 148 | <el-form :model="shareForm" :rules="shareRulesForm" label-width="160px"> |
| 147 | - <el-form-item label="适用年级:"> | ||
| 148 | - <el-col :span="11"> | ||
| 149 | - <el-input v-model="shareForm.grade"></el-input> | ||
| 150 | - </el-col> | ||
| 151 | - </el-form-item> | ||
| 152 | <el-form-item prop="share" label="分享范围:"> | 149 | <el-form-item prop="share" label="分享范围:"> |
| 153 | <el-radio-group v-model="shareForm.share"> | 150 | <el-radio-group v-model="shareForm.share"> |
| 154 | <el-radio :label="1">任课班级分享</el-radio> | 151 | <el-radio :label="1">任课班级分享</el-radio> |
| @@ -169,62 +166,23 @@ export default { | @@ -169,62 +166,23 @@ export default { | ||
| 169 | name: "examinationPaper", | 166 | name: "examinationPaper", |
| 170 | data() { | 167 | data() { |
| 171 | return { | 168 | return { |
| 172 | - props: { multiple: true, checkStrictly: true }, | ||
| 173 | - options: [ | ||
| 174 | - { | ||
| 175 | - value: 1, | ||
| 176 | - label: "一年级", | ||
| 177 | - children: [ | ||
| 178 | - { | ||
| 179 | - value: 2, | ||
| 180 | - label: "二班", | ||
| 181 | - }, | ||
| 182 | - { | ||
| 183 | - value: 3, | ||
| 184 | - label: "三班", | ||
| 185 | - }, | ||
| 186 | - ], | ||
| 187 | - }, | ||
| 188 | - { | ||
| 189 | - value: 4, | ||
| 190 | - label: "二年级", | ||
| 191 | - children: [ | ||
| 192 | - { | ||
| 193 | - value: 5, | ||
| 194 | - label: "二班", | ||
| 195 | - }, | ||
| 196 | - { | ||
| 197 | - value: 6, | ||
| 198 | - label: "三班", | ||
| 199 | - }, | ||
| 200 | - ], | ||
| 201 | - }, | ||
| 202 | - ], | 169 | + userId: "", |
| 203 | dialogVisible: false, | 170 | dialogVisible: false, |
| 204 | query: { | 171 | query: { |
| 205 | - gradeClass: [], | ||
| 206 | - subjectId: "0", | ||
| 207 | - typeName: "周测", | 172 | + classId: "", |
| 173 | + subjectName: "", | ||
| 174 | + tagId: "", | ||
| 208 | title: "", | 175 | title: "", |
| 209 | }, | 176 | }, |
| 210 | - classList: [ | ||
| 211 | - { | ||
| 212 | - label: "2003班", | ||
| 213 | - value: "2003", | ||
| 214 | - }, | ||
| 215 | - ], | ||
| 216 | - subjectList: [ | ||
| 217 | - { | ||
| 218 | - label: "语文", | ||
| 219 | - value: "0", | ||
| 220 | - }, | ||
| 221 | - ], | ||
| 222 | - typeList: ["周测"], | 177 | + classList: [], |
| 178 | + subjectList: [], | ||
| 179 | + typeList: [], | ||
| 180 | + archivedTotal: 0, //已归档答题卡数量 | ||
| 223 | tableData: [ | 181 | tableData: [ |
| 224 | { | 182 | { |
| 225 | title: "数学样例试卷202211-324654", | 183 | title: "数学样例试卷202211-324654", |
| 226 | id: "1062837", | 184 | id: "1062837", |
| 227 | - typeName: "周测", | 185 | + tag: "周测", |
| 228 | answerNum: 45, | 186 | answerNum: 45, |
| 229 | time: 90, | 187 | time: 90, |
| 230 | aboutClazz: [203, 204], | 188 | aboutClazz: [203, 204], |
| @@ -246,7 +204,7 @@ export default { | @@ -246,7 +204,7 @@ export default { | ||
| 246 | score: 1, | 204 | score: 1, |
| 247 | partScore: 0, | 205 | partScore: 0, |
| 248 | selectNum: 4, | 206 | selectNum: 4, |
| 249 | - answerOptions: ["A", "B", "C", "D"], | 207 | + answerOptions: "A,B,C,D", |
| 250 | correctAnswer: "B", | 208 | correctAnswer: "B", |
| 251 | }, | 209 | }, |
| 252 | ], | 210 | ], |
| @@ -256,7 +214,7 @@ export default { | @@ -256,7 +214,7 @@ export default { | ||
| 256 | { | 214 | { |
| 257 | title: "数学样例试卷202211-4180949", | 215 | title: "数学样例试卷202211-4180949", |
| 258 | id: "1062838", | 216 | id: "1062838", |
| 259 | - typeName: "周测", | 217 | + tag: "周测", |
| 260 | answerNum: 45, | 218 | answerNum: 45, |
| 261 | time: 90, | 219 | time: 90, |
| 262 | aboutClazz: [203, 204], | 220 | aboutClazz: [203, 204], |
| @@ -288,14 +246,22 @@ export default { | @@ -288,14 +246,22 @@ export default { | ||
| 288 | ], | 246 | ], |
| 289 | shareForm: { | 247 | shareForm: { |
| 290 | id: "", | 248 | id: "", |
| 291 | - grade: "", | ||
| 292 | share: 1, | 249 | share: 1, |
| 293 | }, | 250 | }, |
| 294 | shareRulesForm: { | 251 | shareRulesForm: { |
| 295 | share: [{ required: true, message: "选择分享范围", trigger: "blur" }], | 252 | share: [{ required: true, message: "选择分享范围", trigger: "blur" }], |
| 296 | }, | 253 | }, |
| 254 | + page: 1, | ||
| 255 | + size: 20, | ||
| 297 | }; | 256 | }; |
| 298 | }, | 257 | }, |
| 258 | + async created() { | ||
| 259 | + this.userId = this.$store.getters.info.uid || ""; | ||
| 260 | + await this._QueryClassList(); | ||
| 261 | + await this._QuerySubjectList(); | ||
| 262 | + this._QueryData(); | ||
| 263 | + this._QueryTypeList(); | ||
| 264 | + }, | ||
| 299 | methods: { | 265 | methods: { |
| 300 | toAdd(query) { | 266 | toAdd(query) { |
| 301 | let routerItem = { | 267 | let routerItem = { |
| @@ -308,7 +274,7 @@ export default { | @@ -308,7 +274,7 @@ export default { | ||
| 308 | this.$router.push({ | 274 | this.$router.push({ |
| 309 | path: "/examinationPaperEdit", | 275 | path: "/examinationPaperEdit", |
| 310 | query: { | 276 | query: { |
| 311 | - form: JSON.stringify(item), | 277 | + paperId: item.id, |
| 312 | }, | 278 | }, |
| 313 | }); | 279 | }); |
| 314 | }, | 280 | }, |
| @@ -319,13 +285,12 @@ export default { | @@ -319,13 +285,12 @@ export default { | ||
| 319 | case 1: | 285 | case 1: |
| 320 | //修改分享范围 | 286 | //修改分享范围 |
| 321 | that.shareForm.id = item.id; | 287 | that.shareForm.id = item.id; |
| 322 | - that.shareForm.grade = item.grade; | ||
| 323 | that.shareForm.share = item.share || 1; | 288 | that.shareForm.share = item.share || 1; |
| 324 | that.dialogVisible = true; | 289 | that.dialogVisible = true; |
| 325 | break; | 290 | break; |
| 326 | case 2: | 291 | case 2: |
| 327 | //复制 | 292 | //复制 |
| 328 | - that.toAdd({ type: 2, form: JSON.stringify(item) }); | 293 | + that.toAdd({ type: 2, paperId: item.id }); |
| 329 | break; | 294 | break; |
| 330 | case 3: | 295 | case 3: |
| 331 | //归档 | 296 | //归档 |
| @@ -335,51 +300,61 @@ export default { | @@ -335,51 +300,61 @@ export default { | ||
| 335 | }, | 300 | }, |
| 336 | async saveShare() { | 301 | async saveShare() { |
| 337 | //修改分享范围 | 302 | //修改分享范围 |
| 338 | - // const { data, code, message } = await this.$request.fetchAnswerList({ | ||
| 339 | - // ...this.shareForm, | ||
| 340 | - // }); | ||
| 341 | - // this.loading = false; | ||
| 342 | - // if (code === 0) { | ||
| 343 | - this.shareForm.id = ""; | ||
| 344 | - this.shareForm.grade = ""; | ||
| 345 | - this.shareForm.share = 1; | ||
| 346 | - dialogVisible = false; | ||
| 347 | - // } else { | ||
| 348 | - // this.$message.error(message); | ||
| 349 | - // } | 303 | + const { data, status, message } = await this.$request.modifyPaper({ |
| 304 | + paperId: that.shareForm.id, | ||
| 305 | + sharingType: that.shareForm.share, | ||
| 306 | + }); | ||
| 307 | + this.loading = false; | ||
| 308 | + if (status === 0) { | ||
| 309 | + this.shareForm.id = ""; | ||
| 310 | + this.shareForm.share = 1; | ||
| 311 | + dialogVisible = false; | ||
| 312 | + } else { | ||
| 313 | + this.$message.error(message); | ||
| 314 | + } | ||
| 350 | }, | 315 | }, |
| 351 | async recovery(item) { | 316 | async recovery(item) { |
| 352 | //归档 | 317 | //归档 |
| 353 | - // const { data, code, message } = await this.$request.fetchAnswerList({ | ||
| 354 | - // ...this.shareForm, | ||
| 355 | - // }); | ||
| 356 | - // if (code === 0) { | ||
| 357 | - this.tableData = this.tableData.filter((items) => { | ||
| 358 | - return items.id != item.id; | 318 | + const { data, status, message } = await this.$request.modifyPaper({ |
| 319 | + paperId: item.id, | ||
| 320 | + status: 2, | ||
| 359 | }); | 321 | }); |
| 360 | - // } else { | ||
| 361 | - // this.$message.error(message); | ||
| 362 | - // } | 322 | + if (status === 0) { |
| 323 | + let type = this.query.title ? 1 : 0; | ||
| 324 | + this.page = 1; | ||
| 325 | + this._QueryData(type); | ||
| 326 | + } else { | ||
| 327 | + this.$message.error(message); | ||
| 328 | + } | ||
| 363 | }, | 329 | }, |
| 364 | - async changeGrade() { | ||
| 365 | - //切换班级 | 330 | + //切换班级 |
| 331 | + async changClazz() { | ||
| 366 | await this._QuerySubjectList(); | 332 | await this._QuerySubjectList(); |
| 367 | - this._QueryData(); | 333 | + this._QueryData(false); |
| 368 | }, | 334 | }, |
| 369 | - async changClazz() {}, | ||
| 370 | // 查找答题卡类型 | 335 | // 查找答题卡类型 |
| 371 | async _QueryTypeList() { | 336 | async _QueryTypeList() { |
| 372 | - const { data, code, message } = await this.$request.fetchTypeNames(); | ||
| 373 | - if (code === 0) { | ||
| 374 | - this.typeList = [...data.typeNames] || []; | 337 | + const { data, status, message } = await this.$request.fetchTypeNames(); |
| 338 | + if (status === 0) { | ||
| 339 | + this.typeList = | ||
| 340 | + data.subjectNames.map((item) => { | ||
| 341 | + return { | ||
| 342 | + value: item.tagId, | ||
| 343 | + label: item.tag, | ||
| 344 | + }; | ||
| 345 | + }) || []; | ||
| 346 | + this.subjectNames.unshift({ | ||
| 347 | + value: "", | ||
| 348 | + label: "--", | ||
| 349 | + }); | ||
| 375 | } else { | 350 | } else { |
| 376 | this.$message.error(message); | 351 | this.$message.error(message); |
| 377 | } | 352 | } |
| 378 | }, | 353 | }, |
| 379 | // 查找班级 | 354 | // 查找班级 |
| 380 | async _QueryClassList() { | 355 | async _QueryClassList() { |
| 381 | - const { data, code, message } = await this.$request.fetchClassList(); | ||
| 382 | - if (code === 0) { | 356 | + const { data, status, message } = await this.$request.fetchClassList(); |
| 357 | + if (status === 0) { | ||
| 383 | if (!!data.list) { | 358 | if (!!data.list) { |
| 384 | this.classList = data.list.map((item) => { | 359 | this.classList = data.list.map((item) => { |
| 385 | return { | 360 | return { |
| @@ -395,14 +370,14 @@ export default { | @@ -395,14 +370,14 @@ export default { | ||
| 395 | }, | 370 | }, |
| 396 | // 查找科目 | 371 | // 查找科目 |
| 397 | async _QuerySubjectList() { | 372 | async _QuerySubjectList() { |
| 398 | - const { data, code, message } = await this.$request.fetchSubjectList({ | 373 | + const { data, status, message } = await this.$request.fetchSubjectList({ |
| 399 | clazzId: this.query.clazzId, | 374 | clazzId: this.query.clazzId, |
| 400 | }); | 375 | }); |
| 401 | - if (code === 0) { | ||
| 402 | - this.subjectList = data.list.map((item) => { | 376 | + if (status === 0) { |
| 377 | + this.subjectList = data.subjectNames.map((item) => { | ||
| 403 | return { | 378 | return { |
| 404 | - value: item.subjectId, | ||
| 405 | - label: item.subjectName, | 379 | + value: item, |
| 380 | + label: item, | ||
| 406 | }; | 381 | }; |
| 407 | }); | 382 | }); |
| 408 | this.query.clazzId = this.subjectList[0]?.value; | 383 | this.query.clazzId = this.subjectList[0]?.value; |
| @@ -418,8 +393,8 @@ export default { | @@ -418,8 +393,8 @@ export default { | ||
| 418 | query = { ...this.query }; | 393 | query = { ...this.query }; |
| 419 | } else { | 394 | } else { |
| 420 | query = { title: this.query.title }; | 395 | query = { title: this.query.title }; |
| 421 | - this.query.typeName = ""; | ||
| 422 | - this.query.subjectId = ""; | 396 | + this.query.tagId = ""; |
| 397 | + this.query.subjectName = ""; | ||
| 423 | } | 398 | } |
| 424 | query.clazzId = this.query.clazzId; | 399 | query.clazzId = this.query.clazzId; |
| 425 | for (let key in query) { | 400 | for (let key in query) { |
| @@ -434,11 +409,14 @@ export default { | @@ -434,11 +409,14 @@ export default { | ||
| 434 | return; | 409 | return; |
| 435 | } | 410 | } |
| 436 | this.loading = true; | 411 | this.loading = true; |
| 437 | - const { data, code, message } = await this.$request.fetchAnswerList({ | 412 | + const { data, status, message } = await this.$request.fetchPaperList({ |
| 438 | ...query, | 413 | ...query, |
| 414 | + status: 1, | ||
| 415 | + page: this.page, | ||
| 416 | + size: this.size, | ||
| 439 | }); | 417 | }); |
| 440 | this.loading = false; | 418 | this.loading = false; |
| 441 | - if (code === 0) { | 419 | + if (status === 0) { |
| 442 | this.total = data.total; | 420 | this.total = data.total; |
| 443 | this.tableData = (data.list && [...data.list]) || []; | 421 | this.tableData = (data.list && [...data.list]) || []; |
| 444 | } else { | 422 | } else { |
src/views/examinationPaper/recycle.vue
| @@ -7,7 +7,7 @@ | @@ -7,7 +7,7 @@ | ||
| 7 | </back-box> | 7 | </back-box> |
| 8 | <div class="answer-header"> | 8 | <div class="answer-header"> |
| 9 | <div class="sel-box"> | 9 | <div class="sel-box"> |
| 10 | - <el-cascader | 10 | + <!-- <el-cascader |
| 11 | class="sel sel2" | 11 | class="sel sel2" |
| 12 | :options="options" | 12 | :options="options" |
| 13 | :props="props" | 13 | :props="props" |
| @@ -20,14 +20,27 @@ | @@ -20,14 +20,27 @@ | ||
| 20 | <span>{{ data.label }}</span> | 20 | <span>{{ data.label }}</span> |
| 21 | <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> | 21 | <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> |
| 22 | </template></el-cascader | 22 | </template></el-cascader |
| 23 | + > --> | ||
| 24 | + <el-select | ||
| 25 | + class="sel" | ||
| 26 | + v-model="query.classId" | ||
| 27 | + placeholder="选择班级" | ||
| 28 | + @change="changClazz" | ||
| 23 | > | 29 | > |
| 30 | + <el-option | ||
| 31 | + v-for="item in classList" | ||
| 32 | + :key="item.value" | ||
| 33 | + :label="item.label" | ||
| 34 | + :value="item.value" | ||
| 35 | + > | ||
| 36 | + </el-option> | ||
| 37 | + </el-select> | ||
| 24 | <el-select | 38 | <el-select |
| 25 | class="sel" | 39 | class="sel" |
| 26 | - v-model="query.subjectId" | 40 | + v-model="query.subjectName" |
| 27 | placeholder="选择科目" | 41 | placeholder="选择科目" |
| 28 | @change="_QueryData()" | 42 | @change="_QueryData()" |
| 29 | > | 43 | > |
| 30 | - <el-option label="全部" value=""></el-option> | ||
| 31 | <el-option | 44 | <el-option |
| 32 | v-for="item in subjectList" | 45 | v-for="item in subjectList" |
| 33 | :key="item.value" | 46 | :key="item.value" |
| @@ -38,17 +51,16 @@ | @@ -38,17 +51,16 @@ | ||
| 38 | </el-select> | 51 | </el-select> |
| 39 | <el-select | 52 | <el-select |
| 40 | class="sel" | 53 | class="sel" |
| 41 | - v-model="query.type" | 54 | + v-model="query.tagId" |
| 42 | placeholder="选择类型" | 55 | placeholder="选择类型" |
| 43 | @change="_QueryData()" | 56 | @change="_QueryData()" |
| 44 | > | 57 | > |
| 45 | - <el-option label="全部" value=""></el-option> | ||
| 46 | <el-option | 58 | <el-option |
| 47 | v-for="item in typeList" | 59 | v-for="item in typeList" |
| 48 | - :key="item.value" | 60 | + :key="item" |
| 49 | :label="item.label" | 61 | :label="item.label" |
| 50 | :value="item.value" | 62 | :value="item.value" |
| 51 | - >{{ item.label }} | 63 | + >{{ item }} |
| 52 | </el-option> | 64 | </el-option> |
| 53 | </el-select> | 65 | </el-select> |
| 54 | 66 | ||
| @@ -74,19 +86,18 @@ | @@ -74,19 +86,18 @@ | ||
| 74 | </div> | 86 | </div> |
| 75 | <div class="info"> | 87 | <div class="info"> |
| 76 | <p class="title"> | 88 | <p class="title"> |
| 77 | - {{ item.title }} <span class="label">{{ item.typeName }}</span> | 89 | + {{ item.title }} <span class="label">{{ item.tag }}</span> |
| 78 | </p> | 90 | </p> |
| 79 | <p class="num"> | 91 | <p class="num"> |
| 80 | {{ item.gradeName }} | 92 | {{ item.gradeName }} |
| 81 | <em class="s-line">|</em> | 93 | <em class="s-line">|</em> |
| 82 | - 总题数:{{ item.answerNum }} | ||
| 83 | - <em class="s-line">|</em> | ||
| 84 | - 预计时长:{{ item.time }} | 94 | + 总题数:{{ item.questionNum }} |
| 85 | <em class="s-line">|</em> | 95 | <em class="s-line">|</em> |
| 96 | + 预计时长:{{ item.examsDuration }} | ||
| 86 | </p> | 97 | </p> |
| 87 | <p class="person"> | 98 | <p class="person"> |
| 88 | - {{ item.teacher }}<em class="s-line">|</em | ||
| 89 | - ><span class="date">{{ item.date }}</span> | 99 | + {{ item.realName }}<em class="s-line">|</em |
| 100 | + ><span class="date">{{ item.modifiedTime }}</span> | ||
| 90 | </p> | 101 | </p> |
| 91 | </div> | 102 | </div> |
| 92 | <div class="btn-box"> | 103 | <div class="btn-box"> |
| @@ -97,7 +108,7 @@ | @@ -97,7 +108,7 @@ | ||
| 97 | size="mini" | 108 | size="mini" |
| 98 | circle | 109 | circle |
| 99 | icon="fa fa-mail-reply" | 110 | icon="fa fa-mail-reply" |
| 100 | - @click="have(item)" | 111 | + @click="modify(item)" |
| 101 | ></el-button> | 112 | ></el-button> |
| 102 | </el-tooltip> | 113 | </el-tooltip> |
| 103 | <el-popconfirm title="确定删除这张答题卡吗?" @confirm="remove(item)"> | 114 | <el-popconfirm title="确定删除这张答题卡吗?" @confirm="remove(item)"> |
| @@ -152,17 +163,29 @@ export default { | @@ -152,17 +163,29 @@ export default { | ||
| 152 | }, | 163 | }, |
| 153 | ], | 164 | ], |
| 154 | query: { | 165 | query: { |
| 155 | - gradeClass: [], | ||
| 156 | - type: "", | ||
| 157 | - subjectId: "", | 166 | + classId: 2003, |
| 167 | + subjectName: "语文", | ||
| 168 | + tagId: 1, | ||
| 158 | title: "", | 169 | title: "", |
| 159 | }, | 170 | }, |
| 160 | - gradeList: ["二年级"], | 171 | + classList: [ |
| 172 | + { | ||
| 173 | + label: "2003班", | ||
| 174 | + value: 2003, | ||
| 175 | + }, | ||
| 176 | + ], | ||
| 177 | + subjectList: [ | ||
| 178 | + { | ||
| 179 | + label: "语文", | ||
| 180 | + value: "语文", | ||
| 181 | + }, | ||
| 182 | + ], | ||
| 161 | typeList: [ | 183 | typeList: [ |
| 162 | - { label: "周测", value: 1 }, | ||
| 163 | - { label: "月测", value: 2 }, | 184 | + { |
| 185 | + label: "周测", | ||
| 186 | + value: 1, | ||
| 187 | + }, | ||
| 164 | ], | 188 | ], |
| 165 | - subjectList: [], | ||
| 166 | tableData: [ | 189 | tableData: [ |
| 167 | { | 190 | { |
| 168 | title: "数学样例试卷202211-324654", | 191 | title: "数学样例试卷202211-324654", |
| @@ -192,28 +215,42 @@ export default { | @@ -192,28 +215,42 @@ export default { | ||
| 192 | total: 0, | 215 | total: 0, |
| 193 | }; | 216 | }; |
| 194 | }, | 217 | }, |
| 218 | + async created() { | ||
| 219 | + await this._QueryClassList(); | ||
| 220 | + await this._QuerySubjectList(); | ||
| 221 | + this._QueryTypeList(); | ||
| 222 | + this._QueryData(false); | ||
| 223 | + }, | ||
| 195 | methods: { | 224 | methods: { |
| 196 | - have(obj) { | ||
| 197 | - //删除答题卡 | ||
| 198 | - // const { data, code, message } = await this.$request.useAnswerSheet(); | ||
| 199 | - // if (code == 0) { | ||
| 200 | - this.tableData = this.tableData.filter((item) => { | ||
| 201 | - return obj.if != item.id; | 225 | + async modify(obj) { |
| 226 | + //恢复答题卡 | ||
| 227 | + const { data, status, message } = await this.$request.modifyPaper({ | ||
| 228 | + paperId: obj.id, | ||
| 229 | + status: 2, | ||
| 202 | }); | 230 | }); |
| 203 | - // } else { | ||
| 204 | - // this.$message.error(message); | ||
| 205 | - // } | 231 | + if (status == 0) { |
| 232 | + let type = this.query.title ? 1 : 0; | ||
| 233 | + this._QueryData(type); | ||
| 234 | + } else { | ||
| 235 | + this.$message.error(message); | ||
| 236 | + } | ||
| 206 | }, | 237 | }, |
| 207 | - remove(obj) { | 238 | + async remove(obj) { |
| 208 | //删除答题卡 | 239 | //删除答题卡 |
| 209 | - // const { data, code, message } = await this.$request.removeAnswerSheet(); | ||
| 210 | - // if (code == 0) { | ||
| 211 | - this.tableData = this.tableData.filter((item) => { | ||
| 212 | - return obj.if != item.id; | 240 | + const { data, status, message } = await this.$request.delPaper({ |
| 241 | + paperId: obj.id, | ||
| 213 | }); | 242 | }); |
| 214 | - // } else { | ||
| 215 | - // this.$message.error(message); | ||
| 216 | - // } | 243 | + if (status == 0) { |
| 244 | + let type = this.query.title ? 1 : 0; | ||
| 245 | + this._QueryData(type); | ||
| 246 | + } else { | ||
| 247 | + this.$message.error(message); | ||
| 248 | + } | ||
| 249 | + }, | ||
| 250 | + //切换班级 | ||
| 251 | + async changClazz() { | ||
| 252 | + await this._QuerySubjectList(); | ||
| 253 | + this._QueryData(false); | ||
| 217 | }, | 254 | }, |
| 218 | async _QueryData(type) { | 255 | async _QueryData(type) { |
| 219 | //获取答题卡列表 | 256 | //获取答题卡列表 |
| @@ -232,58 +269,62 @@ export default { | @@ -232,58 +269,62 @@ export default { | ||
| 232 | } | 269 | } |
| 233 | } | 270 | } |
| 234 | this.loading = true; | 271 | this.loading = true; |
| 235 | - const { data, code, message } = await this.$request.fetchAnswerList({ | 272 | + const { data, status, message } = await this.$request.fetchAnswerList({ |
| 236 | ...query, | 273 | ...query, |
| 237 | }); | 274 | }); |
| 238 | this.loading = false; | 275 | this.loading = false; |
| 239 | - if (code === 0) { | 276 | + if (status === 0) { |
| 240 | this.total = data.total; | 277 | this.total = data.total; |
| 241 | this.tableData = (data.list && [...data.list]) || []; | 278 | this.tableData = (data.list && [...data.list]) || []; |
| 242 | } else { | 279 | } else { |
| 243 | this.$message.error(message); | 280 | this.$message.error(message); |
| 244 | } | 281 | } |
| 245 | }, | 282 | }, |
| 246 | - // 查找答题卡类型 | ||
| 247 | - async _QueryTypeList() { | ||
| 248 | - const { data, code, message } = await this.$request.fetchTypeNames(); | ||
| 249 | - if (code === 0) { | ||
| 250 | - this.typeList = [...data.typeNames] || []; | 283 | + // 查找班级 |
| 284 | + async _QueryClassList() { | ||
| 285 | + const { data, status, message } = await this.$request.fetchClassList(); | ||
| 286 | + if (status === 0) { | ||
| 287 | + if (!!data.list) { | ||
| 288 | + this.classList = data.list.map((item) => { | ||
| 289 | + return { | ||
| 290 | + value: item.clazzId, | ||
| 291 | + label: item.clazzName, | ||
| 292 | + }; | ||
| 293 | + }); | ||
| 294 | + this.query.clazzId = this.classList[0]?.value; | ||
| 295 | + } | ||
| 251 | } else { | 296 | } else { |
| 252 | this.$message.error(message); | 297 | this.$message.error(message); |
| 253 | } | 298 | } |
| 254 | }, | 299 | }, |
| 255 | - async changeGrade() { | ||
| 256 | - // this._QueryData(); | ||
| 257 | - // this._GradeList(); | ||
| 258 | - // this._QuerySubjectList(); | ||
| 259 | - }, | ||
| 260 | - async _GradeList() { | ||
| 261 | - //查询年级列表 | ||
| 262 | - const { data, code, message } = await this.$request.fetchGradeList(); | ||
| 263 | - if (code == 0) { | ||
| 264 | - this.gradeList = [...data.gradeNames] || []; | ||
| 265 | - this.query.gradeName = this.gradeList[0]; | ||
| 266 | - this._QuerySubjectList(this.gradeList[0]); | 300 | + // 查找科目 |
| 301 | + async _QuerySubjectList() { | ||
| 302 | + const { data, status, message } = await this.$request.fetchSubjectList({ | ||
| 303 | + clazzId: this.query.clazzId, | ||
| 304 | + }); | ||
| 305 | + if (status === 0) { | ||
| 306 | + this.subjectList = data.subjectNames.map((item) => { | ||
| 307 | + return { | ||
| 308 | + value: item, | ||
| 309 | + label: item, | ||
| 310 | + }; | ||
| 311 | + }); | ||
| 312 | + this.query.clazzId = this.subjectList[0]?.value; | ||
| 267 | } else { | 313 | } else { |
| 268 | this.$message.error(message); | 314 | this.$message.error(message); |
| 269 | } | 315 | } |
| 270 | }, | 316 | }, |
| 271 | - async _QuerySubjectList(grade, dont) { | ||
| 272 | - //查询科目列表 | ||
| 273 | - let param = {}; | ||
| 274 | - if (grade) { | ||
| 275 | - param.gradeName = grade; | ||
| 276 | - } | ||
| 277 | - const { data, code, message } = await this.$request.fetchSubjectList( | ||
| 278 | - param | ||
| 279 | - ); | ||
| 280 | - if (code === 0) { | ||
| 281 | - this.subjectList = data.list.map((item) => { | ||
| 282 | - return { | ||
| 283 | - value: item.subjectId, | ||
| 284 | - label: item.subjectName, | ||
| 285 | - }; | ||
| 286 | - }); | 317 | + // 查找答题卡类型 |
| 318 | + async _QueryTypeList() { | ||
| 319 | + const { data, status, message } = await this.$request.fetchTypeNames(); | ||
| 320 | + if (status === 0) { | ||
| 321 | + this.typeList = | ||
| 322 | + data.subjectNames.map((item) => { | ||
| 323 | + return { | ||
| 324 | + value: item.tagId, | ||
| 325 | + label: item.tag, | ||
| 326 | + }; | ||
| 327 | + }) || []; | ||
| 287 | } else { | 328 | } else { |
| 288 | this.$message.error(message); | 329 | this.$message.error(message); |
| 289 | } | 330 | } |
src/views/index/mainIndex.vue
| 1 | <template> | 1 | <template> |
| 2 | <div class="container"> | 2 | <div class="container"> |
| 3 | - <ul class="nav-list" v-if="type == '学校管理员'"> | 3 | + <ul class="nav-list" v-if="type == 'ROLE_XUEXIAO'"> |
| 4 | <li class="nav-item item1" @click="links('/setUpAccount')"> | 4 | <li class="nav-item item1" @click="links('/setUpAccount')"> |
| 5 | <img class="icon" src="../../assets/nav/setUpAccount.png" alt="" /> | 5 | <img class="icon" src="../../assets/nav/setUpAccount.png" alt="" /> |
| 6 | <div class="text"> | 6 | <div class="text"> |
| @@ -44,7 +44,7 @@ | @@ -44,7 +44,7 @@ | ||
| 44 | </ul> | 44 | </ul> |
| 45 | <ul class="nav-list" v-if="type == 'ROLE_JITUAN'"> | 45 | <ul class="nav-list" v-if="type == 'ROLE_JITUAN'"> |
| 46 | <template v-for="item in navList"> | 46 | <template v-for="item in navList"> |
| 47 | - <li v-if="item.path!='dataSync'" :key="item.path" class="nav-item item4" @click="links(item.path)"> | 47 | + <li v-if="!item.path.includes('dataSync')" :key="item.path" class="nav-item item4" @click="links(item.path)"> |
| 48 | <img class="icon" :src="getImgs(item.path)" alt="" /> | 48 | <img class="icon" :src="getImgs(item.path)" alt="" /> |
| 49 | <div class="text" v-if="item.path == '/setUpConglomerate'"> | 49 | <div class="text" v-if="item.path == '/setUpConglomerate'"> |
| 50 | <p class="p1">学校管理</p> | 50 | <p class="p1">学校管理</p> |
| @@ -65,9 +65,9 @@ | @@ -65,9 +65,9 @@ | ||
| 65 | </li> | 65 | </li> |
| 66 | </template> | 66 | </template> |
| 67 | </ul> | 67 | </ul> |
| 68 | - <ul class="nav-list" v-if="type == 'superAdmin' || type == '任课老师' "> | ||
| 69 | - <template v-for="item in navList"> | ||
| 70 | - <li v-if="item.path!='dataSync'" :key="item.path" class="nav-item item4" @click="links(item.path)"> | 68 | + <ul class="nav-list" v-if="type == 'ROLE_JIAOSHI' || type == 'ROLE_BANZHUREN' "> |
| 69 | + <template v-for="(item) in navList"> | ||
| 70 | + <li v-if="!item.path.includes('dataSync')" :key="item.path" class="nav-item item4" @click="links(item.path)"> | ||
| 71 | <img class="icon" :src="getImgs(item.path)" alt="" /> | 71 | <img class="icon" :src="getImgs(item.path)" alt="" /> |
| 72 | <div class="text" v-if="item.path == '/examinationPaper'"> | 72 | <div class="text" v-if="item.path == '/examinationPaper'"> |
| 73 | <p class="p1">备题组卷</p> | 73 | <p class="p1">备题组卷</p> |
src/views/layout/header/header.vue
| @@ -3,7 +3,8 @@ | @@ -3,7 +3,8 @@ | ||
| 3 | <el-header id="header"> | 3 | <el-header id="header"> |
| 4 | <span class="hideAside" @click="collapse" | 4 | <span class="hideAside" @click="collapse" |
| 5 | ><i class="el-icon-s-fold" v-show="!isCollapse"></i> | 5 | ><i class="el-icon-s-fold" v-show="!isCollapse"></i> |
| 6 | - <i class="el-icon-s-unfold" v-show="isCollapse"></i></span> | 6 | + <i class="el-icon-s-unfold" v-show="isCollapse"></i |
| 7 | + ></span> | ||
| 7 | <ul class="personal"> | 8 | <ul class="personal"> |
| 8 | <!-- <li> | 9 | <!-- <li> |
| 9 | <langSelect></langSelect> | 10 | <langSelect></langSelect> |
| @@ -63,11 +64,10 @@ import Cookies from "js-cookie"; | @@ -63,11 +64,10 @@ import Cookies from "js-cookie"; | ||
| 63 | import langSelect from "../../../components/lang/langSelect"; | 64 | import langSelect from "../../../components/lang/langSelect"; |
| 64 | import tabNav from "./tabNav"; | 65 | import tabNav from "./tabNav"; |
| 65 | import UserInfo from "../../../components/userForm/userInfo"; | 66 | import UserInfo from "../../../components/userForm/userInfo"; |
| 66 | -import EditPassword from "../../../components/userForm/editPassword"; | ||
| 67 | 67 | ||
| 68 | export default { | 68 | export default { |
| 69 | name: "Header", | 69 | name: "Header", |
| 70 | - components: { EditPassword, tabNav, langSelect, UserInfo }, | 70 | + components: { tabNav, langSelect, UserInfo }, |
| 71 | computed: { | 71 | computed: { |
| 72 | permissions: function () { | 72 | permissions: function () { |
| 73 | return this.$store.getters.info.permissions || []; | 73 | return this.$store.getters.info.permissions || []; |
| @@ -81,15 +81,15 @@ export default { | @@ -81,15 +81,15 @@ export default { | ||
| 81 | dialogPassVisible: false, | 81 | dialogPassVisible: false, |
| 82 | title: "", | 82 | title: "", |
| 83 | userId: "", | 83 | userId: "", |
| 84 | - isCollapse:false, | 84 | + isCollapse: false, |
| 85 | }; | 85 | }; |
| 86 | }, | 86 | }, |
| 87 | - created(){ | ||
| 88 | - this.isCollapse = this.$store.getters.isCollapse | 87 | + created() { |
| 88 | + this.isCollapse = this.$store.getters.isCollapse; | ||
| 89 | }, | 89 | }, |
| 90 | methods: { | 90 | methods: { |
| 91 | collapse() { | 91 | collapse() { |
| 92 | - this.isCollapse = !this.isCollapse | 92 | + this.isCollapse = !this.isCollapse; |
| 93 | this.$store.dispatch("collapse"); | 93 | this.$store.dispatch("collapse"); |
| 94 | }, | 94 | }, |
| 95 | successCallback() { | 95 | successCallback() { |
| @@ -128,10 +128,19 @@ export default { | @@ -128,10 +128,19 @@ export default { | ||
| 128 | //刷新权限跳转首页 | 128 | //刷新权限跳转首页 |
| 129 | this.$store.dispatch("permissions", this); | 129 | this.$store.dispatch("permissions", this); |
| 130 | }, | 130 | }, |
| 131 | - logOut() { | ||
| 132 | - this.$router.push({ | ||
| 133 | - path: "/login", | ||
| 134 | - }); | 131 | + async logOut() { |
| 132 | + const { data } = await this.$request.logout(); | ||
| 133 | + if (data.status == 0) { | ||
| 134 | + if (data.data) { | ||
| 135 | + window.location.href = data; | ||
| 136 | + } else { | ||
| 137 | + this.$router.push({ | ||
| 138 | + path: "/login", | ||
| 139 | + }); | ||
| 140 | + } | ||
| 141 | + } else { | ||
| 142 | + this.$message.error(message); | ||
| 143 | + } | ||
| 135 | }, | 144 | }, |
| 136 | }, | 145 | }, |
| 137 | }; | 146 | }; |
| @@ -178,11 +187,11 @@ ul.el-menu { | @@ -178,11 +187,11 @@ ul.el-menu { | ||
| 178 | display: flex; | 187 | display: flex; |
| 179 | justify-content: space-between; | 188 | justify-content: space-between; |
| 180 | color: #fff; | 189 | color: #fff; |
| 181 | - padding:0 20px 0 10px; | 190 | + padding: 0 20px 0 10px; |
| 182 | .hideAside { | 191 | .hideAside { |
| 183 | @extend %cursor; | 192 | @extend %cursor; |
| 184 | - i{ | ||
| 185 | - font-size:24px; | 193 | + i { |
| 194 | + font-size: 24px; | ||
| 186 | line-height: 50px; | 195 | line-height: 50px; |
| 187 | } | 196 | } |
| 188 | } | 197 | } |
src/views/login/index.vue
| @@ -90,16 +90,16 @@ export default { | @@ -90,16 +90,16 @@ export default { | ||
| 90 | disableClick: true, | 90 | disableClick: true, |
| 91 | passwordType: "password", | 91 | passwordType: "password", |
| 92 | loginForm: { | 92 | loginForm: { |
| 93 | - username: "15911715665", | ||
| 94 | - password: "Csiy88888", | 93 | + username: "13028102196", |
| 94 | + password: "Pw102196#", | ||
| 95 | }, | 95 | }, |
| 96 | loginRules: { | 96 | loginRules: { |
| 97 | username: [ | 97 | username: [ |
| 98 | - { required: true, message: "请输入用户账号",trigger: "blur" } | 98 | + { required: true, message: "请输入用户账号", trigger: "blur" }, |
| 99 | ], | 99 | ], |
| 100 | password: [ | 100 | password: [ |
| 101 | - { required: true, message: "请输入账号密码",trigger: "blur" } | ||
| 102 | - ] | 101 | + { required: true, message: "请输入账号密码", trigger: "blur" }, |
| 102 | + ], | ||
| 103 | }, | 103 | }, |
| 104 | url: "", | 104 | url: "", |
| 105 | }; | 105 | }; |
| @@ -127,7 +127,7 @@ export default { | @@ -127,7 +127,7 @@ export default { | ||
| 127 | }); | 127 | }); |
| 128 | return false; | 128 | return false; |
| 129 | } else { | 129 | } else { |
| 130 | - this.$store.dispatch("Login",{...this.loginForm,url:this.url}) | 130 | + this.$store.dispatch("Login", { ...this.loginForm, url: this.url }); |
| 131 | } | 131 | } |
| 132 | }, | 132 | }, |
| 133 | }, | 133 | }, |
| @@ -140,10 +140,8 @@ $dark_gray: #889aa4; | @@ -140,10 +140,8 @@ $dark_gray: #889aa4; | ||
| 140 | $light_gray: #000; | 140 | $light_gray: #000; |
| 141 | $cursor: #000; | 141 | $cursor: #000; |
| 142 | 142 | ||
| 143 | -@supports (-webkit-mask: none) and (not (cater-color: $cursor)) { | ||
| 144 | - .login-container .el-input input { | ||
| 145 | - color: $cursor; | ||
| 146 | - } | 143 | +.login-container .el-input input { |
| 144 | + color: $cursor; | ||
| 147 | } | 145 | } |
| 148 | .login-container { | 146 | .login-container { |
| 149 | width: 100%; | 147 | width: 100%; |
| @@ -166,7 +164,7 @@ $cursor: #000; | @@ -166,7 +164,7 @@ $cursor: #000; | ||
| 166 | border: 0px; | 164 | border: 0px; |
| 167 | -webkit-appearance: none; | 165 | -webkit-appearance: none; |
| 168 | border-radius: 0px; | 166 | border-radius: 0px; |
| 169 | - font-size:16px; | 167 | + font-size: 16px; |
| 170 | color: $light_gray; | 168 | color: $light_gray; |
| 171 | height: 52px; | 169 | height: 52px; |
| 172 | caret-color: $cursor; | 170 | caret-color: $cursor; |
vue.config.js
| @@ -20,13 +20,13 @@ module.exports = { | @@ -20,13 +20,13 @@ module.exports = { | ||
| 20 | warnings: false, | 20 | warnings: false, |
| 21 | errors: true, | 21 | errors: true, |
| 22 | }, | 22 | }, |
| 23 | - // proxy: { | ||
| 24 | - // "/": { | ||
| 25 | - // target:"http://192.168.3.29:8080", | ||
| 26 | - // changeOrigin: true, | ||
| 27 | - // ws:true, | ||
| 28 | - // }, | ||
| 29 | - // }, | 23 | + proxy: { |
| 24 | + "/": { | ||
| 25 | + target:"http://192.168.3.29:8080", | ||
| 26 | + changeOrigin: true, | ||
| 27 | + ws:true, | ||
| 28 | + }, | ||
| 29 | + }, | ||
| 30 | disableHostCheck: true | 30 | disableHostCheck: true |
| 31 | }, | 31 | }, |
| 32 | css: { | 32 | css: { |