CET-vue-3.0/src/views/cet/cet-ana-1.vue

265 lines
7.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div style="background: #ececec; padding: 15px">
<a-card title="按学院 / 专业分析" :loading="loading" :bordered="false">
<template #extra>
<a-select v-model:value="college" style="width: 300px" mode="multiple" :max-tag-count="2"
:options="collegeOptions" @change="onCollegeMajorChange"></a-select>
<!-- <a-select v-model:value="batch" style="margin-left: 10px;width: 120px" :options="batchOptions"></a-select> -->
<!-- <a-select v-model:value="level" style="margin-left: 10px;width: 120px" :options="levelOptions"></a-select> -->
<a-select v-model:value="entrydate" style="margin-left: 10px;width: 150px"
:options="entrydateOptions"></a-select>
<a-button style="margin-left: 10px;" type="primary" @click="query">查询</a-button>
</template>
<a-row :gutter="24">
<a-col :xl="24" :style="{ marginBottom: '24px' }">
<div class="container">
<div id="map1" style="width: 100%; height: 400px;"></div>
</div>
</a-col>
</a-row>
</a-card>
</div>
</template>
<script>
import { defHttp } from '/@/utils/http/axios';
import * as echarts from 'echarts';
export default {
name: "Analysis",
data() {
return {
Url: {
getBatch: '/cet/getBatch',
getEntrydate: '/cet/getEntrydate',
getCollege: '/cet/getCollege',
getRate: '/cet/getRateByCollege'
},
loading: false,
collegeOptions: [],
batchOptions: [],
levelOptions: [
{ value: 'cet4', label: '英语四级' },
{ value: 'cet6', label: '英语六级' }
],
level: null,
college: null,
batch: null,
entrydateOptions: [],
entrydate: null,
};
},
methods: {
getCollegeOptions() {
defHttp.get({ url: this.Url.getCollege }).then(res => {
this.collegeOptions = res.colleges;
// 手动添加一个全校字段
this.collegeOptions.unshift({ value: '全校', label: '全校' });
this.collegeOptions.forEach(option => {
if (option.value !== '全校') {
option.disabled = true;
}
});
this.college = ['全校'];
});
},
onCollegeMajorChange(value) {
if (value.includes('全校')) {
this.collegeOptions.forEach(option => {
if (option.value !== '全校') {
option.disabled = true;
}
});
} else {
this.collegeOptions.forEach(option => {
option.disabled = false;
if (value !== '全校' && option.value === '全校') {
option.disabled = true;
}
if (value.length === 0) {
option.disabled = false;
}
});
}
console.log(value);
},
dataChart(data) {
let xData = [];
let yData = [];
for (let key in data) {
xData.push(data[key].college);
// 将数据转换为百分比(加上%
yData.push(data[key].passRate);
}
let rankData = yData.slice().sort((a, b) => b - a).map((value) => yData.indexOf(value) + 1);
xData = xData.map(label => label.split("").join("\n"));//将x轴竖着展示
let myChart = echarts.init(document.getElementById("map1"));
// 指定图表的配置项和数据
let option = {
title: {
text: "本批次学院通过率排名",
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
},
formatter: function (params) {
return params[0].name + '<br/>' +
'<table>' +
'<tr><td>' + params[0].marker + params[0].seriesName + '</td><td style="font-weight: bold;">' + '&nbsp;&nbsp;&nbsp;&nbsp;' + params[0].value + '%' + '</td></tr>' +
'<tr><td>' + params[1].marker + params[1].seriesName + '</td><td style="font-weight: bold;">' + '&nbsp;&nbsp;&nbsp;&nbsp;' + params[1].value + '</td></tr>' +
'</table>';
}
},
toolbox: {
show: true,
feature: {
magicType: { show: true, type: ['line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: xData,
axisLabel: {
interval: 0,//代表显示所有x轴标签显示
rotate: 0,//代表倾斜0度显示
}
}
],
yAxis: [
{
type: 'value',
name: '通过率',
axisLabel: {
formatter: '{value} %'
}
},
{
type: 'value',
name: '排名',
show: false,
}
],
series: [
{
name: '累计总通过率',
type: 'bar',
barWidth: '60%',
data: yData,
itemStyle: {
normal: {
label: {
show: true, //开启显示
position: 'top', //在上方显示
textStyle: { //数值样式
color: 'black',
fontSize: 13
},
formatter: '{c}%'
}
}
},
yAxisIndex: 0,
},
{
name: '排名',
type: 'bar',
data: rankData,
label: {
show: false,
position: 'inside',
formatter: '{c}',
},
yAxisIndex: 1,
},
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
},
// 获取批次数据
async getBatch() {
const getBatch = await defHttp.get({ url: this.Url.getBatch });
this.batchOptions = getBatch.batches;
this.batch = this.batchOptions[0].value;
this.level = this.levelOptions[0].value;
},
//获取年级数据
async getEntrydate() {
const getEntrydate = await defHttp.get({ url: this.Url.getEntrydate });
this.entrydateOptions = getEntrydate.entrydates;
this.entrydate = this.entrydateOptions[0].value;
},
// 查询数据
async query() {
let result = null;
console.log(this.college, this.entrydate);
//如果this.college和this.batch为null则先赋静态值
if (this.college === null || this.college.length === 0) {
this.college = ['全校'];
}
if (!this.entrydate) {
this.entrydate = '2017';
}
try {
this.loading = true;
console.log(this.college, this.entrydate)
let params = {
college: this.college,
entrydate: this.entrydate,
level: 'cet4'
}
console.log(params.college, "college")
result = await defHttp.post({ url: this.Url.getRate, params });
//使数据按照passRate从大到小排序
result.data.sort((a, b) => {
return b.passRate - a.passRate;
});
console.log("data", result.data);
} finally {
this.loading = false;
this.$nextTick(() => {
this.dataChart(result.data);
})
}
}
},
mounted() {
this.getCollegeOptions();
// this.getBatch();
this.getEntrydate();
this.query();
}
}
</script>
<style lang="less" scoped>
.container {
display: flex;
background-color: #fff;
padding: 15px;
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.09);
}
.title {
font-size: 34px;
color: rgb(8, 8, 8);
font-weight: bold;
}
</style>