This commit is contained in:
xbx 2024-04-17 21:44:39 +08:00
commit 59d3f54666
1 changed files with 234 additions and 65 deletions

View File

@ -1,14 +1,65 @@
<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 v-model="allCollege" :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" style="margin-right: 5px;"><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 +75,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 {
allCollege:[],
showBox: false,
showGroup: false,
oneentrydate: null,
checkedOptions: [],
Url: { Url: {
getBatch: '/cet/getBatch', getBatch: '/cet/getBatch',
getEntrydate: '/cet/getEntrydate', getEntrydate: '/cet/getEntrydate',
@ -42,27 +99,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,18 +168,87 @@ export default {
} }
console.log(value); console.log(value);
}, },
// deleteData() {
// console.log("delete")
// //
// this.college = [];
// this.entrydate = [];
// this.oneentrydate = null;
// this.checkedOptions = [];
// this.allCollege = [];
// },
dataChart(data) { dataChart(data) {
let seriesData = [];
let xData = []; let xData = [];
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 ']
let j = 0;
for (let i in data) {
xData = [];
let yData = []; let yData = [];
for (let key in data) { for (let key in data[i]) {
xData.push(data[key].college); xData.push(data[i][key].college);
// % // %
yData.push(data[key].passRate); yData.push(data[i][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 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);
//
if (this.college.includes('全校')) {
seriesData.push({
name: i + '级累计总通过率排名',
type: 'line',
yAxisIndex: 1,
data: rankData,
bar: {},
show: false,
itemStyle: {
normal: {
label: {
show: false,//
position: 'top',//
formatter: '{c}',
textStyle: { //
color: 'black',
fontSize: 13
},
},
color: colors[j++]
}
}
});
}
}
let myChart = echarts.init(document.getElementById("map1")); let myChart = echarts.init(document.getElementById("map1"));
// //
const college1 = this.college;
let option = { let option = {
title: { title: {
text: "本批次学院通过率排名", text: "本批次学院通过率排名",
@ -110,12 +262,20 @@ export default {
type: 'shadow' type: 'shadow'
}, },
formatter: function (params) { formatter: function (params) {
return params[0].name + '<br/>' + //tooltip,
let result = params[0].name + '<br>';
for (let i = 0; i < params.length; i++) {
result += params[i].marker + params[i].seriesName + ' : ' + params[i].value + '%' + '<br>';
}
if (college1.includes('全校')) {
result = params[0].name + '<br/>' +
'<table>' + '<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[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>' + '<tr><td>' + params[1].marker + params[1].seriesName + '</td><td style="font-weight: bold;">' + '&nbsp;&nbsp;&nbsp;&nbsp;' + params[1].value + '</td></tr>' +
'</table>'; '</table>';
} }
return result;
}
}, },
toolbox: { toolbox: {
show: true, show: true,
@ -156,40 +316,45 @@ export default {
show: false, show: false,
} }
], ],
series: [ series: seriesData
{ };
if (this.college.includes('全校')) {
option.series = [{
name: '累计总通过率', name: '累计总通过率',
type: 'bar', type: 'bar',
data: seriesData[0].data,
barWidth: '60%', barWidth: '60%',
data: yData,
itemStyle: { itemStyle: {
normal: { normal: {
label: { label: {
show: true, // show: true,//
position: 'top', // position: 'top',//
formatter: '{c}%',
textStyle: { // textStyle: { //
color: 'black', color: 'black',
fontSize: 13 fontSize: 13
}, },
formatter: '{c}%'
}
}
}, },
yAxisIndex: 0, color: colors[0]
}
}
}, },
{ {
name: '排名', name: '排名',
type: 'bar', type: 'bar',
data: rankData, data: seriesData[1].data,
label: { label: {
show: false, show: false,
position: 'inside', position: 'inside',
formatter: '{c}', formatter: '{c}',
}, },
yAxisIndex: 1, yAxisIndex: 1,
color: colors[1]
}, },
] ]
}; }
// 使 // 使
myChart.setOption(option); myChart.setOption(option);
}, },
@ -204,19 +369,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)
@ -228,9 +397,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;