添加学院/专业对比年级多选功能

This commit is contained in:
Cool 2024-04-16 21:56:54 +08:00
parent ea441d3126
commit b5e4153350
1 changed files with 151 additions and 66 deletions

View File

@ -1,14 +1,63 @@
<template> <template>
<div style="background: #ececec; padding: 15px"> <div style="background: #ececec; padding: 15px">
<a-card :bordered="false">
<div>
<a-button type="primary" @click="visible = true">打开筛选项</a-button>
</div>
<a-drawer placement="right" :visible="visible" width="90%" :closable="false">
<template slot="title">
<span>CET查询筛选项</span>
</template>
<a-descriptions bordered>
<a-descriptions-item label="学院" :span="3">
<a-checkbox :disabled="showBox" @change="checkAll">
全校
</a-checkbox>
<a-checkbox-group v-model="checkedOptions" :options="collegeOptions" :disabled="showGroup"
@change="checkOne"></a-checkbox-group>
</a-descriptions-item>
<a-descriptions-item label="年级" :span="3" v-if="showGroup">
<a-radio-group v-model:value="oneentrydate" :options="entrydateOptions" @change="checkoneentrydate" />
</a-descriptions-item>
<a-descriptions-item label="年级" :span="3" v-if="showBox">
<a-checkbox-group v-model:value="entrydate" :options="entrydateOptions" />
</a-descriptions-item>
</a-descriptions>
<div class="buttons">
<a-button type="primary" style="margin-right: 5px;" @click="visible = false"><a-icon
type="close" />取消</a-button>
<a-button type="primary" @click="query"><a-icon type="search" />查询</a-button>
</div>
</a-drawer>
</a-card>
<a-card title="按学院 / 专业分析" :loading="loading" :bordered="false"> <a-card title="按学院 / 专业分析" :loading="loading" :bordered="false">
<template #extra> <template #extra>
<a-select v-model:value="college" style="width: 300px" mode="multiple" :max-tag-count="2" <!-- <a-select v-model:value="college" style="width: 300px" mode="multiple" :max-tag-count="2"
:options="collegeOptions" @change="onCollegeMajorChange"></a-select> :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="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="level" style="margin-left: 10px;width: 120px" :options="levelOptions"></a-select> -->
<a-select v-model:value="entrydate" style="margin-left: 10px;width: 150px" <!-- <a-select v-model:value="entrydate" style="margin-left: 10px;width: 150px"
:options="entrydateOptions"></a-select> :options="entrydateOptions"></a-select>
<a-button style="margin-left: 10px;" type="primary" @click="query">查询</a-button> <a-button style="margin-left: 10px;" type="primary" @click="query">查询</a-button> -->
</template> </template>
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :xl="24" :style="{ marginBottom: '24px' }"> <a-col :xl="24" :style="{ marginBottom: '24px' }">
@ -24,11 +73,17 @@
<script> <script>
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import bar from '/@/components/Scrollbar/src/bar';
import { message } from 'ant-design-vue';
export default { export default {
name: "Analysis", name: "Analysis",
data() { data() {
return { return {
showBox: false,
showGroup: false,
oneentrydate: null,
checkedOptions: [],
Url: { Url: {
getBatch: '/cet/getBatch', getBatch: '/cet/getBatch',
getEntrydate: '/cet/getEntrydate', getEntrydate: '/cet/getEntrydate',
@ -42,27 +97,53 @@ export default {
{ value: 'cet4', label: '英语四级' }, { value: 'cet4', label: '英语四级' },
{ value: 'cet6', label: '英语六级' } { value: 'cet6', label: '英语六级' }
], ],
visible: false,
level: null, level: null,
college: null, college: [],
batch: null, batch: null,
entrydateOptions: [], entrydateOptions: [],
entrydate: null, entrydate: [],
}; };
}, },
methods: { methods: {
//
checkAll(e) {
this.college = ['全校']
this.showGroup = !this.showGroup;
},
//
checkOne(e) {
console.log(e)
this.college = e;
this.showBox = true;
if (e.length == 0) {
this.showBox = false;
}
},
//
checkoneentrydate(e) {
console.log(e.target.value, "e")
this.entrydate = [e.target.value];
},
getCollegeOptions() { getCollegeOptions() {
defHttp.get({ url: this.Url.getCollege }).then(res => { defHttp.get({ url: this.Url.getCollege }).then(res => {
this.collegeOptions = res.colleges; this.collegeOptions = res.colleges;
// //
this.collegeOptions.unshift({ value: '全校', label: '全校' });
this.collegeOptions.forEach(option => {
if (option.value !== '全校') {
option.disabled = true;
}
}); //this.collegeOptions.unshift({ value: '', label: '' });
this.college = ['全校']; // this.collegeOptions.forEach(option => {
// if (option.value !== '') {
// option.disabled = true;
//}
// });
// this.college = [''];
console.log(this.collegeOptions, "collegeOptions");
}); });
}, },
onCollegeMajorChange(value) { onCollegeMajorChange(value) {
@ -85,16 +166,47 @@ export default {
} }
console.log(value); console.log(value);
}, },
dataChart(data) { dataChart(data, isAll) {
let seriesData = [];
let xData = []; let xData = [];
let yData = []; let colors = ['#5370c5', '#91CC75', '#fac858', '#ee6666', '#73c0de', '#FF6A6A', '#FFA500', '#EE2C2C', '#90EE90', '#008B8B', '#FFC0CB', '#FFDAB9', '#FFDEAD', '#FFE4B5', '#FFE4C4', '#FFE4E1', '#FFEBCD', '#FFEFD5', '#FFFAF0', '#FFFAFA', '#FFFFE0', '#FFFFF0', '#FFFFFF', '#F0F8FF', '#FAEBD7', '#FAF0E6', '#FAFAD2', '#F5FFFA', '#F8F8FF', '#F0FFF0', '#F0FFFF', '#F0E68C', '#F0F8FF', '#F0FFF0', '#F0FFFF', '#F4A460', '#F5DEB3', '#F5F5DC', '#F5F5F5', '#F5FFFA', '#F8F8FF', '#F9EBEA', '#FAD7A0', '#FAF0E6', '#FAFAD2', '#FAF0E6 ']
for (let key in data) { let j = 0;
xData.push(data[key].college);
// % for (let i in data) {
yData.push(data[key].passRate);
xData = [];
let yData = [];
for (let key in data[i]) {
xData.push(data[i][key].college);
// %
yData.push(data[i][key].passRate);
}
xData = xData.map(label => label.split("").join("\n"));//x
seriesData.push({
name: i + '级累计总通过率',
type: 'bar',
// barWidth: '30%',
data: yData,
//
itemStyle: {
normal: {
label: {
show: true,//
position: 'top',//
formatter: '{c}%',
textStyle: { //
color: 'black',
fontSize: 13
},
},
color: colors[j++]
}
}
}
);
} }
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 myChart = echarts.init(document.getElementById("map1"));
// //
let option = { let option = {
@ -107,11 +219,12 @@ export default {
type: 'shadow' type: 'shadow'
}, },
formatter: function (params) { formatter: function (params) {
return params[0].name + '<br/>' + //tooltip,
'<table>' + let result = params[0].name + '<br>';
'<tr><td>' + params[0].marker + params[0].seriesName + '</td><td style="font-weight: bold;">' + '&nbsp;&nbsp;&nbsp;&nbsp;' + params[0].value + '%' + '</td></tr>' + for (let i = 0; i < params.length; i++) {
'<tr><td>' + params[1].marker + params[1].seriesName + '</td><td style="font-weight: bold;">' + '&nbsp;&nbsp;&nbsp;&nbsp;' + params[1].value + '</td></tr>' + result += params[i].marker + params[i].seriesName + ' : ' + params[i].value + '%' + '<br>';
'</table>'; }
return result;
} }
}, },
toolbox: { toolbox: {
@ -153,39 +266,7 @@ export default {
show: false, show: false,
} }
], ],
series: [ series: seriesData
{
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); myChart.setOption(option);
@ -201,19 +282,23 @@ export default {
async getEntrydate() { async getEntrydate() {
const getEntrydate = await defHttp.get({ url: this.Url.getEntrydate }); const getEntrydate = await defHttp.get({ url: this.Url.getEntrydate });
this.entrydateOptions = getEntrydate.entrydates; this.entrydateOptions = getEntrydate.entrydates;
this.entrydate = this.entrydateOptions[0].value; // this.entrydate.push (this.entrydateOptions[0].value);
}, },
// //
async query() { async query() {
this.visible = false;
let result = null; let result = null;
console.log(this.college, this.entrydate); console.log(this.college, this.entrydate);
//this.collegethis.batchnull //this.collegethis.batchnull
if (this.college === null || this.college.length === 0) { if (this.college === null || this.college.length === 0) {
this.college = ['全校']; this.college = ['全校'];
} }
if (!this.entrydate) {
this.entrydate = '2017';
if (!this.entrydate || this.entrydate.length === 0) {
this.entrydate = ['2017'];
} }
try { try {
this.loading = true; this.loading = true;
console.log(this.college, this.entrydate) console.log(this.college, this.entrydate)
@ -225,9 +310,9 @@ export default {
console.log(params.college, "college") console.log(params.college, "college")
result = await defHttp.post({ url: this.Url.getRate, params }); result = await defHttp.post({ url: this.Url.getRate, params });
//使passRate //使passRate
result.data.sort((a, b) => { // result.data.sort((a, b) => {
return b.passRate - a.passRate; // return b.passRate - a.passRate;
}); // });
console.log("data", result.data); console.log("data", result.data);
} finally { } finally {
this.loading = false; this.loading = false;