提交 845c6c01 authored 作者: pengxiaohui's avatar pengxiaohui

feat: 修改成绩报告展示

上级 9c3bcef2
...@@ -8,11 +8,23 @@ ...@@ -8,11 +8,23 @@
</span> </span>
</div> </div>
<div class="chart-box"> <div class="chart-box">
<chart :accuracy="accuracy" :accuracScore="accuracScore"> <!-- <chart :accuracy="accuracy" :accuracScore="accuracScore">
<template v-slot:tips> <template v-slot:tips>
<div class="num">{{ accuracText }}%</div> <div class="num">{{ accuracText }}%</div>
<div class="t">正确率</div> <div class="t">正确率</div>
</template> </template>
</chart> -->
<chart :accuracy="objectQuestionScore" :accuracScore="objectQuestionTotal">
<template v-slot:tips>
<div class="num">{{ objectQuestionScore || '-' }}</div>
<div class="t">客观题</div>
</template>
</chart>
<chart style="margin-left:60px;" :accuracy="subjectQuestionScore" :accuracScore="subjectQuestionTotal">
<template v-slot:tips>
<div class="num">{{ subjectQuestionScore || '-' }}</div>
<div class="t">主观题</div>
</template>
</chart> </chart>
</div> </div>
<div class="assess">测试评估</div> <div class="assess">测试评估</div>
...@@ -23,9 +35,24 @@ ...@@ -23,9 +35,24 @@
</div> </div>
<div class="icon"></div> <div class="icon"></div>
</div> </div>
<div class="text" v-if="accuracText < 100"> <!-- <div class="text" v-if="accuracText < 100">
{{ accuracText < 80 ? '您离成功还有一段距离,继续努力!' : '成功近在眼前,再接再厉!' }} {{ accuracText < 80 ? '您离成功还有一段距离,继续努力!' : '成功近在眼前,再接再厉!' }}
</div> </div> -->
<template v-if="subjectQuestionScore === 0">
<p class="text">请等待老师评分~</p></template>
<template v-else>
<p class="text" v-if="percent < 0.8">
您离成功还有一段距离,继续努力!
</p>
<div v-else class="chart-box">
<chart :accuracy="subjectQuestionScore+objectQuestionScore" :accuracScore="subjectQuestionTotal + objectQuestionTotal">
<template v-slot:tips>
<div class="num">{{ subjectQuestionScore+objectQuestionScore || '-' }}</div>
<div class="t">总分</div>
</template>
</chart>
</div>
</template>
<!-- <div class="btn">全部考试服务</div> --> <!-- <div class="btn">全部考试服务</div> -->
</div> </div>
</div> </div>
...@@ -55,7 +82,11 @@ export default { ...@@ -55,7 +82,11 @@ export default {
data: {}, data: {},
accuracy: 0, accuracy: 0,
accuracScore: 0, accuracScore: 0,
accuracText: 0 accuracText: 0,
subjectQuestionTotal: 0,
subjectQuestionScore: 0,
objectQuestionTotal: 0,
objectQuestionScore: 0
} }
}, },
created() { created() {
...@@ -65,8 +96,11 @@ export default { ...@@ -65,8 +96,11 @@ export default {
examId() { examId() {
return this.$route.query.exam_id return this.$route.query.exam_id
}, },
percent() {
return (this.subjectQuestionScore + this.objectQuestionScore) / (this.subjectQuestionTotal + this.objectQuestionTotal)
},
setStyle() { setStyle() {
return `width: ${this.accuracText}%` return `width: ${100 * this.percent}%`
} }
}, },
methods: { methods: {
...@@ -115,6 +149,35 @@ export default { ...@@ -115,6 +149,35 @@ export default {
} }
this.data = data this.data = data
this.accuracScore = parseInt(totalNum) this.accuracScore = parseInt(totalNum)
let subjectQuestionTotal = 0
let subjectQuestionScore = 0
let objectQuestionTotal = 0
let objectQuestionScore = 0
data.sheet.questions.question_items.forEach(item => {
item.question_list = item.question_list.reduce((a, b) => {
return a.concat(b)
}, [])
const currentQuestionScore = data.sheet.score_items[item.question_item_id]
// console.log(item)
item.question_list.forEach(it => {
const currentItem = currentQuestionScore[it.id]
if (Array.isArray(it.question_options) && it.question_options.length) {
if (currentItem.is_right) objectQuestionScore += currentItem.score
objectQuestionTotal += it.score
} else {
if (currentItem.is_right) subjectQuestionScore += currentItem.score
subjectQuestionTotal += it.score
}
})
})
this.subjectQuestionTotal = subjectQuestionTotal
this.subjectQuestionScore = subjectQuestionScore
console.log(subjectQuestionTotal)
this.subjectQuestionScore = 7
this.objectQuestionTotal = objectQuestionTotal
console.log(objectQuestionTotal)
this.objectQuestionScore = objectQuestionScore
this.objectQuestionScore = 29
}) })
} }
} }
...@@ -147,8 +210,10 @@ export default { ...@@ -147,8 +210,10 @@ export default {
margin-left: auto; margin-left: auto;
} }
.chart-box { .chart-box {
width: 148px; // width: 148px;
margin: 26px auto 0; margin: 26px 0 0;
display:flex;
justify-content:center;
} }
.assess { .assess {
font-size: 18px; font-size: 18px;
......
...@@ -8,10 +8,16 @@ ...@@ -8,10 +8,16 @@
</span> </span>
</div> </div>
<div class="chart-box"> <div class="chart-box">
<chart :accuracy="accuracy" :accuracScore="accuracScore"> <chart :accuracy="objectQuestionScore" :accuracScore="objectQuestionTotal">
<template v-slot:tips> <template v-slot:tips>
<div class="num">{{ accuracText }}%</div> <div class="num">{{ objectQuestionScore || '-' }}</div>
<div class="t">正确率</div> <div class="t">客观题</div>
</template>
</chart>
<chart style="margin-left:60px;" :accuracy="subjectQuestionScore" :accuracScore="subjectQuestionTotal">
<template v-slot:tips>
<div class="num">{{ subjectQuestionScore || '-' }}</div>
<div class="t">主观题</div>
</template> </template>
</chart> </chart>
</div> </div>
...@@ -23,9 +29,21 @@ ...@@ -23,9 +29,21 @@
</div> </div>
<div class="icon"></div> <div class="icon"></div>
</div> </div>
<div class="text" v-if="accuracText < 100"> <template v-if="subjectQuestionScore === 0">
{{ accuracText < 80 ? '您离成功还有一段距离,继续努力!' : '成功近在眼前,再接再厉!' }} <p class="text">请等待老师评分~</p></template>
</div> <template v-else>
<p class="text" v-if="subjectQuestionScore+objectQuestionScore < 80">
您离成功还有一段距离,继续努力!
</p>
<div v-else class="chart-box">
<chart :accuracy="subjectQuestionScore+objectQuestionScore" :accuracScore="subjectQuestionTotal + objectQuestionTotal">
<template v-slot:tips>
<div class="num">{{ subjectQuestionScore+objectQuestionScore || '-' }}</div>
<div class="t">总分</div>
</template>
</chart>
</div>
</template>
<!-- <div class="btn">全部考试服务</div> --> <!-- <div class="btn">全部考试服务</div> -->
</div> </div>
</div> </div>
...@@ -55,7 +73,11 @@ export default { ...@@ -55,7 +73,11 @@ export default {
data: {}, data: {},
accuracy: 0, accuracy: 0,
accuracScore: 0, accuracScore: 0,
accuracText: 0 accuracText: 0,
subjectQuestionTotal: 0,
subjectQuestionScore: 0,
objectQuestionTotal: 0,
objectQuestionScore: 0
} }
}, },
created() { created() {
...@@ -65,8 +87,11 @@ export default { ...@@ -65,8 +87,11 @@ export default {
examId() { examId() {
return this.$route.query.exam_id return this.$route.query.exam_id
}, },
percent() {
return (this.subjectQuestionScore + this.objectQuestionScore) / (this.subjectQuestionTotal + this.objectQuestionTotal)
},
setStyle() { setStyle() {
return `width: ${this.accuracText}%` return `width: ${100 * this.percent}%`
} }
}, },
methods: { methods: {
...@@ -84,33 +109,60 @@ export default { ...@@ -84,33 +109,60 @@ export default {
} }
api.getExamQuestion(param).then(response => { api.getExamQuestion(param).then(response => {
const data = JSON.parse(response.data) const data = JSON.parse(response.data)
let rightNum = 0 // let rightNum = 0
let totalNum = 0 // let totalNum = 0
data.sheet.questions.question_items.forEach(list => { // data.sheet.questions.question_items.forEach(list => {
list.question_list = list.question_list.reduce((a, b) => { // list.question_list = list.question_list.reduce((a, b) => {
// return a.concat(b)
// }, [])
// list.question_list.forEach(item => {
// const currentItem = data.sheet.score_items[list.question_item_id][item.id]
// if (currentItem.checked_flag) {
// totalNum++
// if (currentItem.is_right) rightNum++
// } else {
// if (item.question_options) {
// totalNum++
// if (currentItem.is_right) rightNum++
// }
// }
// })
// })
// this.accuracy = parseInt(rightNum)
// if (parseInt(rightNum) === 0 && parseInt(totalNum) === 0) {
// this.accuracText = '-'
// } else {
// this.accuracText = parseInt((rightNum / totalNum) * 100)
// }
this.data = data
// this.accuracScore = parseInt(totalNum)
let subjectQuestionTotal = 0
let subjectQuestionScore = 0
let objectQuestionTotal = 0
let objectQuestionScore = 0
data.sheet.questions.question_items.forEach(item => {
item.question_list = item.question_list.reduce((a, b) => {
return a.concat(b) return a.concat(b)
}, []) }, [])
list.question_list.forEach(item => { const currentQuestionScore = data.sheet.score_items[item.question_item_id]
const currentItem = data.sheet.score_items[list.question_item_id][item.id] // console.log(item)
if (currentItem.checked_flag) { item.question_list.forEach(it => {
totalNum++ const currentItem = currentQuestionScore[it.id]
if (currentItem.is_right) rightNum++ if (Array.isArray(it.question_options) && it.question_options.length) {
if (currentItem.is_right) objectQuestionScore += currentItem.score
objectQuestionTotal += it.score
} else { } else {
if (item.question_options) { if (currentItem.is_right) subjectQuestionScore += currentItem.score
totalNum++ subjectQuestionTotal += it.score
if (currentItem.is_right) rightNum++
}
} }
}) })
}) })
this.accuracy = parseInt(rightNum) this.subjectQuestionTotal = subjectQuestionTotal
if (parseInt(rightNum) === 0 && parseInt(totalNum) === 0) { this.subjectQuestionScore = subjectQuestionScore
this.accuracText = '-' // this.subjectQuestionScore = 20
} else { this.objectQuestionTotal = objectQuestionTotal
this.accuracText = parseInt((rightNum / totalNum) * 100) this.objectQuestionScore = objectQuestionScore
} // this.objectQuestionScore = 65
this.data = data
this.accuracScore = parseInt(totalNum)
}) })
} }
} }
...@@ -143,8 +195,10 @@ export default { ...@@ -143,8 +195,10 @@ export default {
margin-left: auto; margin-left: auto;
} }
.chart-box { .chart-box {
width: 148px; // width: 148px;
margin: 26px auto 0; margin: 26px 0 0;
display:flex;
justify-content:center;
} }
.assess { .assess {
font-size: 18px; font-size: 18px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论