You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
remotebelongstous/src/components/charts/scorePart.vue

123 lines
3.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
* 考试成绩统计
*
* @Author: ShanZhu
* @Date: 2023-11-23
-->
<template>
<div class="part" >
<div class="box" ref="box"></div>
<div v-if="isNull">
<span>该门考试还没人参考哦,请提醒学生参加考试</span>
</div>
</div>
</template>
<script>
export default {
data() {
return {
isNull: false, //是否有成绩标志位
name: null,
category: { //保存分数段
'90分及以上': 0,
'80-89分': 0,
'70-79分': 0,
'60-69分': 0,
'60分以下': 0,
}
}
},
created() {
this.getScoreInfo()
},
methods: {
getScoreInfo() {
let examCode = this.$route.query.examCode
this.name = this.$route.query.source
this.$axios(`/api/scores/${examCode}`).then(res => {
let data = res.data.data
if(data.length > 0) {
let box = this.$refs['box']
let charts = this.$echarts.init(box)
data.forEach(element => {
switch(element.etScore / 10) {
case 10:
case 9:
this.category["90分及以上"]++
break
case 8:
this.category['80-89分']++
break
case 7:
this.category["70-79分"]++
break
case 6:
this.category['60-69分']++
break
default:
this.category['60分以下']++
}
});
let option = {
title : {
text: `${this.name}分数段图`,
subtext: '分数段饼图',
x:'center'
},
tooltip : {
trigger: 'item',
formatter: "{a}{b} <br/> {c}人 ({d}%)"
},
legend: {
orient: 'vertical',
left: 'left',
data: ['90分及以上','80-89分','70-79分','60-69分','60分以下']
},
series : [
{
name: '分数段',
type: 'pie',
radius : '35%',
center: ['50%', '35%'],
data:[
{value:this.category['90分及以上'], name:'90分及以上'},
{value:this.category['80-89分'], name:'80-89分'},
{value:this.category['70-79分'], name:'70-79分'},
{value:this.category['60-69分'], name:'60-69分'},
{value:this.category['60分以下'], name:'60分以下'}
],
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
charts.setOption(option)
}else {
this.isNull = true
}
})
}
},
}
</script>
<style lang="less" scoped>
.part {
.box {
width: 800px;
height: 800px;
margin-left: 40px;
}
}
</style>