提交 db4b2303 authored 作者: lihuihui's avatar lihuihui

update: 优化缓存请求

上级 9c8e7ffe
......@@ -3,7 +3,7 @@ module.exports = {
DesDir: './client-dist',
apiBaseURL: '/api',
isUploadStatic: false,
isEnableToIphoneDebugger: true,
isEnableToIphoneDebugger: false,
webpack: {
externals: {
'CKEDITOR': 'window.CKEDITOR',
......
<template>
<div>
<!-- 单选多选判断题(题目描述dom结构一样,只那选项区分) -->
<template v-if="questionData.question_item_type == 1 || questionData.question_item_type == 2 || questionData.question_item_type == 6">
<template
v-if="
questionData.question_item_type == 1 ||
questionData.question_item_type == 2 ||
questionData.question_item_type == 6
"
>
<div class="title-type">
<div class="type">{{ questionData.question_item_title }}</div>
<div class="num">{{ questionData.q_order }}/{{ questionParams.question.total_question_count }}</div>
</div>
<div class="title">
<div class="num">{{ questionData.q_order }}.</div><div class="des" v-html="questionData.content"></div>
<div class="num">{{ questionData.q_order }}.</div>
<div class="des" v-html="questionData.content"></div>
</div>
<!-- <div class="describe" ></div> -->
<ul :class="questionData.question_item_type == 2 ? 'check-option' : 'radio-option'">
<template v-for="(item, index) in questionData.options">
<li
:key="index"
:class="questionParams.answerRecord[questionData.question_item_id]
? questionParams.answerRecord[questionData.question_item_id][questionData.id]
? questionParams.answerRecord[questionData.question_item_id][questionData.id].answer.find(id => { return id === item.id })
? 'active'
:class="
questionParams.answerRecord[questionData.question_item_id]
? questionParams.answerRecord[questionData.question_item_id][questionData.id]
? questionParams.answerRecord[questionData.question_item_id][questionData.id].answer.find(id => {
return id === item.id
})
? 'active'
: ''
: ''
: ''
: ''"
"
>
<div
@click="
changeOptions(questionData.question_item_type, questionData.question_item_id, questionData.id, item.id)
"
>
<div @click="changeOptions(questionData.question_item_type, questionData.question_item_id, questionData.id, item.id)">
<div class="icon"></div>
<div class="txt" v-html="item.option"></div>
</div>
......@@ -37,9 +52,15 @@
<div class="num">{{ questionData.q_order }}/{{ questionParams.question.total_question_count }}</div>
</div>
<div class="title">
<div class="num">{{ questionData.q_order }}.</div><div class="des" v-html="questionData.content"></div>
<div class="num">{{ questionData.q_order }}.</div>
<div class="des" v-html="questionData.content"></div>
</div>
<el-input @input="QAChange(questionData.question_item_id, questionData.id)" type="textarea" placeholder="请输入内容" v-model="questionData.textContent"></el-input>
<el-input
@input="QAChange(questionData.question_item_id, questionData.id)"
type="textarea"
placeholder="请输入内容"
v-model="questionData.textContent"
></el-input>
</template>
<!-- 复合题 -->
<template v-if="questionData.question_item_type == 5">
......@@ -54,25 +75,33 @@
<template v-for="(item, index) in questionData.list">
<li :key="'type5' + index">
<div class="title">
<div class="num">{{ item.q_order }}.</div><div class="des" v-html="item.content"></div>
<div class="num">{{ item.q_order }}.</div>
<div class="des" v-html="item.content"></div>
</div>
<ul :class="item.type == 2 ? 'check-option' : 'radio-option'"><!-- radio-option check-option -->
<ul :class="item.type == 2 ? 'check-option' : 'radio-option'">
<!-- radio-option check-option -->
<template v-if="item.options">
<template v-for="(items, cIndex) in item.options">
<li
:id="items.id"
:key="'c' + cIndex"
:class="questionParams.answerRecord[questionData.question_item_id]
? questionParams.answerRecord[questionData.question_item_id][questionData.id]
? questionParams.answerRecord[questionData.question_item_id][questionData.id].answer.find(id => { return id === items.id })
? 'active'
:class="
questionParams.answerRecord[questionData.question_item_id]
? questionParams.answerRecord[questionData.question_item_id][questionData.id]
? questionParams.answerRecord[questionData.question_item_id][questionData.id].answer.find(
id => {
return id === items.id
}
)
? 'active'
: ''
: ''
: ''
: ''"
>
"
>
<div @click="changeOptions(item.type, questionData.question_item_id, questionData.id, items.id)">
<div class="icon"></div>
<div class="txt">{{items.option}}</div>
<div class="txt">{{ items.option }}</div>
</div>
</li>
</template>
......@@ -90,8 +119,7 @@ import action from '@action'
import Bus from '@/components/common/bus.js'
import _ from 'lodash'
export default {
components: {
},
components: {},
props: {
contentHeight: { type: Number, default: () => {} },
questionParams: { type: Object, default: () => {} }
......@@ -107,13 +135,12 @@ export default {
beforeDestroy() {
clearInterval(this.setCacheTime)
},
created() {
},
created() {},
mounted() {
clearInterval(this.setCacheTime)
this.setCacheTime = setInterval(() => {
this.setCache()
}, 3000)
}, 10000)
this.dataCombined()
},
methods: {
......@@ -122,7 +149,9 @@ export default {
this.questionParams.question.question_items.map((item, index) => {
if (parseInt(item.question_item_type) === 5) {
item.question_list.map(cItem => {
const currentItem = cItem.list.find(items => { return items.q_order === this.questionParams.questionIndex + 1 })
const currentItem = cItem.list.find(items => {
return items.q_order === this.questionParams.questionIndex + 1
})
if (currentItem) {
this.questionData = {}
this.questionData.common_content = cItem.common_content
......@@ -146,14 +175,17 @@ export default {
}
})
} else {
const currentItem = item.question_list.find(items => { return items.q_order === this.questionParams.questionIndex + 1 })
const currentItem = item.question_list.find(items => {
return items.q_order === this.questionParams.questionIndex + 1
})
if (currentItem) {
this.questionData = currentItem
const key = ['question_item_id', 'question_item_title', 'question_item_type']
key.map(k => {
this.questionData[k] = item[k]
})
typeof this.questionData.options === 'string' && (this.questionData.options = JSON.parse(currentItem.options))
typeof this.questionData.options === 'string' &&
(this.questionData.options = JSON.parse(currentItem.options))
const pId = this.questionData.question_item_id
const cId = this.questionData.id
console.log(this.questionData.question_item_id, this.questionData.id, '321++')
......@@ -174,56 +206,58 @@ export default {
QAChange(pId, cId) {
this.questionParams.answerRecord[pId]
? this.questionParams.answerRecord[pId][cId]
? this.questionParams.answerRecord[pId][cId].answer = [this.questionData.textContent]
: this.questionParams.answerRecord[pId][cId] = {
answer: [this.questionData.textContent],
sign: false
}
: this.questionParams.answerRecord[pId] = {
[cId]: {
answer: [this.questionData.textContent],
sign: false
}
}
? (this.questionParams.answerRecord[pId][cId].answer = [this.questionData.textContent])
: (this.questionParams.answerRecord[pId][cId] = {
answer: [this.questionData.textContent],
sign: false
})
: (this.questionParams.answerRecord[pId] = {
[cId]: {
answer: [this.questionData.textContent],
sign: false
}
})
this.$forceUpdate()
},
// 选项选择
changeOptions: _.debounce(function(type, pId, cId, optId) {
changeOptions: _.debounce(function (type, pId, cId, optId) {
if (parseInt(type) !== 2) {
this.questionParams.answerRecord[pId]
? this.questionParams.answerRecord[pId][cId]
? this.questionParams.answerRecord[pId][cId].answer = [optId]
: this.questionParams.answerRecord[pId][cId] = {
answer: [optId],
sign: false
}
: this.questionParams.answerRecord[pId] = {
[cId]: {
answer: [optId],
sign: false
}
}
? (this.questionParams.answerRecord[pId][cId].answer = [optId])
: (this.questionParams.answerRecord[pId][cId] = {
answer: [optId],
sign: false
})
: (this.questionParams.answerRecord[pId] = {
[cId]: {
answer: [optId],
sign: false
}
})
} else {
this.questionParams.answerRecord[pId]
? this.questionParams.answerRecord[pId][cId]
? (() => {
const optChack = this.questionParams.answerRecord[pId][cId].answer.findIndex(item => { return item === optId })
if (optChack === -1) {
this.questionParams.answerRecord[pId][cId].answer.push(optId)
} else {
this.questionParams.answerRecord[pId][cId].answer.splice(optChack, 1)
const optChack = this.questionParams.answerRecord[pId][cId].answer.findIndex(item => {
return item === optId
})
if (optChack === -1) {
this.questionParams.answerRecord[pId][cId].answer.push(optId)
} else {
this.questionParams.answerRecord[pId][cId].answer.splice(optChack, 1)
}
})()
: (this.questionParams.answerRecord[pId][cId] = {
answer: [optId],
sign: false
})
: (this.questionParams.answerRecord[pId] = {
[cId]: {
answer: [optId],
sign: false
}
})()
: this.questionParams.answerRecord[pId][cId] = {
answer: [optId],
sign: false
}
: this.questionParams.answerRecord[pId] = {
[cId]: {
answer: [optId],
sign: false
}
}
})
}
Bus.$emit('monitoringChanges')
this.$forceUpdate()
......@@ -232,26 +266,29 @@ export default {
const param = {
answer: JSON.stringify(this.questionParams.answerRecord)
}
action.Exam.setCache(this.$route.params.examId, param).then(res => {
}).catch(err => {
if (err.message.indexOf('error') !== -1) {
this.$confirm('网络异常,请保持网络通畅', '提示', {
confirmButtonText: '退出考试',
cancelButtonText: '重新提交',
type: 'warning'
}).then(() => {
this.$router.replace({
path: `/login/${JSON.parse(window.localStorage.getItem('examInfo')).exam_id}`
action.Exam.setCache(this.$route.params.examId, param)
.then(res => {})
.catch(err => {
if (err.message.indexOf('error') !== -1) {
this.$confirm('网络异常,请保持网络通畅', '提示', {
confirmButtonText: '退出考试',
cancelButtonText: '重新提交',
type: 'warning'
})
}).catch(() => {
this.endExamRequest()
})
} else {
this.$alert(err.message, {
callback: action => {}
})
}
})
.then(() => {
this.$router.replace({
path: `/login/${JSON.parse(window.localStorage.getItem('examInfo')).exam_id}`
})
})
.catch(() => {
this.endExamRequest()
})
} else {
this.$alert(err.message, {
callback: action => {}
})
}
})
},
// 标记
onSignHandle() {
......@@ -260,18 +297,18 @@ export default {
this.questionParams.answerRecord[pId]
? this.questionParams.answerRecord[pId][cId]
? this.questionParams.answerRecord[pId][cId].sign
? this.questionParams.answerRecord[pId][cId].sign = false
: this.questionParams.answerRecord[pId][cId].sign = true
: this.questionParams.answerRecord[pId][cId] = {
sign: true,
answer: []
}
: this.questionParams.answerRecord[pId] = {
[cId]: {
sign: true,
answer: []
}
}
? (this.questionParams.answerRecord[pId][cId].sign = false)
: (this.questionParams.answerRecord[pId][cId].sign = true)
: (this.questionParams.answerRecord[pId][cId] = {
sign: true,
answer: []
})
: (this.questionParams.answerRecord[pId] = {
[cId]: {
sign: true,
answer: []
}
})
this.signCallback()
},
signCallback() {
......@@ -280,9 +317,9 @@ export default {
let isSign = false
this.questionParams.answerRecord[pId]
? this.questionParams.answerRecord[pId][cId]
? isSign = this.questionParams.answerRecord[pId][cId].sign
: isSign = false
: isSign = false
? (isSign = this.questionParams.answerRecord[pId][cId].sign)
: (isSign = false)
: (isSign = false)
this.$emit('isSign', isSign)
Bus.$emit('monitoringChanges')
},
......@@ -327,60 +364,61 @@ export default {
}
</script>
<style lang="scss" scoped>
::v-deep{
.el-textarea__inner{
::v-deep {
.el-textarea__inner {
height: 150px;
}
}
.title-type{
.title-type {
width: 100%;
height: 45px;
border-bottom:1px solid #ccc;
border-bottom: 1px solid #ccc;
display: flex;
align-items: center;
.type{
.type {
font-size: 18px;
color: #222222;
}
.num{
.num {
margin-left: auto;
font-size: 18px;
color: #222222;
}
}
.title{
.title {
font-size: 18px;
font-weight: bold;
color: #222222;
line-height: 25px;
display: flex;
.num{
.num {
font-size: 32px;
font-weight: bold;
color: #222222;
line-height: 45px;
margin-top: 5px;
}
.des{
.des {
margin-left: 5px;
padding-top: 18px;
&::v-deep p{
&::v-deep p {
margin: 0;
}
}
}
.describe{
.describe {
font-size: 18px;
color: #222222;
line-height: 25px;
margin-top: 20px;
}
.radio-option,.check-option{
.radio-option,
.check-option {
padding: 24px 0 0 0;
margin: 0;
list-style: none;
li{
li {
// cursor: pointer;
margin-bottom: 20px;
// display: flex;
......@@ -389,7 +427,7 @@ export default {
div {
float: left;
cursor: pointer;
.icon{
.icon {
width: 18px;
height: 18px;
border: 1px solid #999999;
......@@ -397,14 +435,14 @@ export default {
margin-top: 3px;
float: left;
}
.txt{
.txt {
max-width: 95%;
font-size: 18px;
color: #222222;
line-height: 28px;
margin-left: 10px;
float: left;
&::v-deep p{
&::v-deep p {
margin: 0;
}
}
......@@ -423,30 +461,30 @@ export default {
// line-height: 28px;
// margin-left: 10px;
// }
&.active{
.icon{
&.active {
.icon {
width: 8px;
height: 8px;
border: 6px solid #C01540;
border: 6px solid #c01540;
}
}
}
}
.check-option{
.icon{
.check-option {
.icon {
border-radius: 3px !important;
}
}
.case-que{
.case-que {
display: flex;
.stem{
.stem {
flex: 1;
font-size: 14px;
font-weight: bold;
color: #222222;
line-height: 28px;
}
.topics{
.topics {
flex: 1;
margin: 0;
padding: 0 0 0 20px;
......@@ -456,13 +494,13 @@ export default {
&::-webkit-scrollbar {
display: none;
}
li{
.title{
li {
.title {
font-size: 18px;
font-weight: bold;
color: #222222;
line-height: 25px;
span{
span {
font-size: 32px;
font-weight: bold;
color: #222222;
......
......@@ -316,7 +316,6 @@ export default {
})
},
switchQuestion() {
console.log(1111)
this.refreshBscroll()
},
getTopic() {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论