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

feat: 修改成绩报告展示

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