|
@@ -33,6 +33,7 @@
|
|
|
try {
|
|
|
|
|
|
var output = document.getElementById("fileOutput");
|
|
|
+ var info = document.getElementById("fileInfo");
|
|
|
var object = eval("(" + event.target.result + ")");
|
|
|
var classText = "", gradingText = "";
|
|
|
|
|
@@ -61,13 +62,18 @@
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- var scoreP = {}, avgP = {};
|
|
|
+ var scoreP = {}, avgP = {}, rate0 = {}, rate25 = {}, rate50 = {}, rate75 = {}, rate100 = {}, rateFull = {};//表1用
|
|
|
for (var i = 0; i < seIds.length; i++) {
|
|
|
scoreP[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = object.data.multiExamStudentScore.singleExamStudentScores[i].essScore;
|
|
|
- }
|
|
|
- for (var i = 0; i < seIds.length; i++) {
|
|
|
avgP[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = object.data.singleExamClassScores[i].secsAvgScore;
|
|
|
+ rate0[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = object.data.singleExamClassScores[i].secsMinScore;
|
|
|
+ rate25[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = object.data.singleExamClassScores[i].secsQuarterScore;
|
|
|
+ rate50[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = object.data.singleExamClassScores[i].secsHalfScore;
|
|
|
+ rate75[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = object.data.singleExamClassScores[i].secs3quatrerScore;
|
|
|
+ rate100[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = object.data.singleExamClassScores[i].secsMaxScore;
|
|
|
+ rateFull[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = object.data.multiExam.singleExams[seIdDic[i]].seFullScore;
|
|
|
}
|
|
|
+ console.log("rat");
|
|
|
var scoreRate = {};
|
|
|
for (var i = 0; i < seIds.length; i++) {
|
|
|
scoreRate[object.data.multiExamStudentScore.singleExamStudentScores[i].seId] = decimal(object.data.multiExamStudentScore.singleExamStudentScores[i].essScore / object.data.multiExam.singleExams[seIdDic[i]].seFullScore, 3);
|
|
@@ -168,6 +174,7 @@
|
|
|
gradingText += "</tr></table><br><br>";
|
|
|
}
|
|
|
} catch (e) {
|
|
|
+ console.log(e);
|
|
|
message.innerHTML += "<br>读取失败!";
|
|
|
output.innerHTML = "";
|
|
|
var charts = document.getElementsByClassName("chart");
|
|
@@ -185,10 +192,11 @@
|
|
|
// sheetOutput("各科分层班级排名一览表", ysClassOrder);
|
|
|
// sheetOutput("各科年级排名一览表", gradeOrder);
|
|
|
message.innerHTML += "<br>读取成功!"
|
|
|
- output.innerHTML = "<br>注:实验中学 74 桌出品,我略作修改并加上了图表功能<del>,完成作者遗愿</del>。<br><br>"
|
|
|
+ info.innerHTML = "<br>注:实验中学 74 桌出品,因 2025 届高一开始大量使用,为防止原作者被追责,我便搬运下来略作修改并加上了图表功能。<br><br>"
|
|
|
+ "行政班级:" + object.data.examStudents[0].classId + "<br>"
|
|
|
+ "姓名:" + object.data.multiExamStudentScore.studentName + "<br>"
|
|
|
- + "<br><h4>总分</h4>"
|
|
|
+ + "<br><h4>班内一览表</h4>";
|
|
|
+ output.innerHTML = "<br><h4>总分</h4>"
|
|
|
+ "全科分数:" + object.data.multiExamStudentScore.messScore + "<br><br>"
|
|
|
+ "全科分数班级排名:" + object.data.multiExamStudentScore.messClassOrder + "<br>"
|
|
|
+ "全科班级参考人数:" + object.data.multiExamClassScores[0].mecsStudentCount + "<br>"
|
|
@@ -203,7 +211,7 @@
|
|
|
+ "<tr><td>" + object.data.multiExam.meAvgScore + "</td><td>" + object.data.multiExam.meMaxScore + "</td><td>" + object.data.multiExam.me3QuatrerScore + "</td><td>" + object.data.multiExam.meHalfScore + "</td><td>" + object.data.multiExam.meQuarterScore + "</td><td>" + object.data.multiExam.meMinScore + "</td></tr></table><br><br>"
|
|
|
+ classText
|
|
|
+ gradingText
|
|
|
- + "<h4>汇总</h4>";
|
|
|
+ + "<h4>排名汇总</h4>";
|
|
|
|
|
|
|
|
|
$("#fileOutput table").css("display", "inline-table");
|
|
@@ -213,14 +221,16 @@
|
|
|
var charts = document.getElementsByClassName("chart");
|
|
|
for (i = 0; i < charts.length; i++)charts[i].style.display = '';
|
|
|
|
|
|
- sChart = echarts.init(document.getElementById("score"));
|
|
|
+ sChart1 = echarts.init(document.getElementById("score1"));
|
|
|
+ sChart2 = echarts.init(document.getElementById("score2"));
|
|
|
oChart1 = echarts.init(document.getElementById("order1"));
|
|
|
oChart2 = echarts.init(document.getElementById("order2"));
|
|
|
oChart3 = echarts.init(document.getElementById("order3"));
|
|
|
oChart4 = echarts.init(document.getElementById("order4"));
|
|
|
|
|
|
|
|
|
- seNameDicP = []; scorePP = []; avgPP = [];
|
|
|
+ seNameDicP = []; scorePP = []; avgPP = []; rate0P = []; rate25P = []; rate50P = []; rate75P = []; rate100P = []; rateFullP = [];
|
|
|
+ scoreQ = []; avgQ = []; rate0Q = []; rate25Q = []; rate50Q = []; rate75Q = []; rate100Q = [];
|
|
|
seNameDicP2 = []; classOrderPP = []; gradeOrderPP = []; classOrderQ = []; gradeOrderQ = [];
|
|
|
seNameDicP3 = []; ysClassOrderPP = []; ysClassOrderQ = [];
|
|
|
for (var i in scoreP) {
|
|
@@ -228,6 +238,19 @@
|
|
|
seNameDicP.push(seNameDic[i].substr(0, 2));
|
|
|
scorePP.push(scoreP[i]);
|
|
|
avgPP.push(avgP[i]);
|
|
|
+ rate0P.push(rate0[i]);
|
|
|
+ rate25P.push(rate25[i]);
|
|
|
+ rate50P.push(rate50[i]);
|
|
|
+ rate75P.push(rate75[i]);
|
|
|
+ rate100P.push(rate100[i]);
|
|
|
+ rateFullP.push(rateFull[i]);
|
|
|
+ scoreQ.push(decimal(scoreP[i] / rateFull[i] * 100, 1));
|
|
|
+ avgQ.push(decimal(avgP[i] / rateFull[i] * 100, 1));
|
|
|
+ rate0Q.push(decimal(rate0[i] / rateFull[i] * 100, 1));
|
|
|
+ rate25Q.push(decimal(rate25[i] / rateFull[i] * 100, 1));
|
|
|
+ rate50Q.push(decimal(rate50[i] / rateFull[i] * 100, 1));
|
|
|
+ rate75Q.push(decimal(rate75[i] / rateFull[i] * 100, 1));
|
|
|
+ rate100Q.push(decimal(rate100[i] / rateFull[i] * 100, 1));
|
|
|
}
|
|
|
for (var i in classOrderP) {
|
|
|
seNameDicP2.push(seNameDic[i].substr(0, 2));
|
|
@@ -241,12 +264,12 @@
|
|
|
ysClassOrderPP.push(ysClassOrderP[i]);
|
|
|
ysClassOrderQ.push(decimal(ysClassOrder[i] * 100, 1));
|
|
|
}
|
|
|
- var sOp = { //具体细节的描述
|
|
|
+ var sOp1 = { //具体细节的描述
|
|
|
textStyle: {
|
|
|
fontFamily: 'Noto Serif SC'
|
|
|
},
|
|
|
title: {
|
|
|
- text: '成绩与平均分',
|
|
|
+ text: '分数(点击图例可隐藏内容)',
|
|
|
textStyle: { //主标题文本样式{"fontSize": 18,"fontWeight": "bolder","color": "#333"}
|
|
|
fontSize: 14,
|
|
|
fontStyle: 'normal',
|
|
@@ -257,7 +280,7 @@
|
|
|
trigger: 'axis'
|
|
|
},
|
|
|
legend: {
|
|
|
- data: ['成绩', '平均分']
|
|
|
+ data: ['0%', '25%', '50%', '75%', '100%', '满分', '平均分', '我的分数']
|
|
|
},
|
|
|
toolbox: { //可以选择具体数据,柱状图,折线图,还原,保存图片的的切换选择
|
|
|
show: true,
|
|
@@ -292,17 +315,136 @@
|
|
|
position: 'left'
|
|
|
}],
|
|
|
series: [{
|
|
|
- name: '成绩',
|
|
|
- type: 'bar',// bar
|
|
|
- data: scorePP,
|
|
|
- color: '#fb7756'
|
|
|
- },
|
|
|
- {
|
|
|
+ name: '0%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate0P,
|
|
|
+ color: '#99ab4e'
|
|
|
+ }, {
|
|
|
+ name: '25%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate25P,
|
|
|
+ color: '#c7dc68'
|
|
|
+ }, {
|
|
|
+ name: '50%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate50P,
|
|
|
+ color: '#c7dc68'
|
|
|
+ }, {
|
|
|
+ name: '75%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate75P,
|
|
|
+ color: '#c7dc68'
|
|
|
+ }, {
|
|
|
+ name: '100%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate100P,
|
|
|
+ color: '#99ab4e'
|
|
|
+ }, {
|
|
|
+ name: '满分',
|
|
|
+ type: 'line',
|
|
|
+ data: rateFullP,
|
|
|
+ color: '#783c1d'
|
|
|
+ }, {
|
|
|
name: '平均分',
|
|
|
- type: 'bar',//bar
|
|
|
+ type: 'line',
|
|
|
data: avgPP,
|
|
|
- color: '#facd60'
|
|
|
+ color: '#2792c3'
|
|
|
+ }, {
|
|
|
+ name: '我的分数',
|
|
|
+ type: 'line',
|
|
|
+ data: scorePP,
|
|
|
+ color: '#e2041b'
|
|
|
+ }
|
|
|
+
|
|
|
+ ]
|
|
|
+ };
|
|
|
+ var sOp2 = { //具体细节的描述
|
|
|
+ textStyle: {
|
|
|
+ fontFamily: 'Noto Serif SC'
|
|
|
+ },
|
|
|
+ title: {
|
|
|
+ text: '得分率',
|
|
|
+ textStyle: { //主标题文本样式{"fontSize": 18,"fontWeight": "bolder","color": "#333"}
|
|
|
+ fontSize: 14,
|
|
|
+ fontStyle: 'normal',
|
|
|
+ fontWeight: 'bold',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ trigger: 'axis'
|
|
|
+ },
|
|
|
+ legend: {
|
|
|
+ data: ['0%', '25%', '50%', '75%', '100%', '平均得分率', '我的得分率']
|
|
|
+ },
|
|
|
+ toolbox: { //可以选择具体数据,柱状图,折线图,还原,保存图片的的切换选择
|
|
|
+ show: true,
|
|
|
+ feature: {
|
|
|
+ dataView: {
|
|
|
+ show: true,
|
|
|
+ readOnly: false
|
|
|
+ },
|
|
|
+ magicType: {
|
|
|
+ show: true,
|
|
|
+ type: ['line', 'bar'] //可选折线图和柱状图
|
|
|
+ },
|
|
|
+ restore: {
|
|
|
+ show: true //恢复默认
|
|
|
+ },
|
|
|
+ saveAsImage: {
|
|
|
+ show: true // 存储为图片的功能
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ calculable: true,
|
|
|
+ xAxis: [{
|
|
|
+ type: 'category',
|
|
|
+ //name: 'min_sup(%)'
|
|
|
+ data: seNameDicP,
|
|
|
+ name: '科目',
|
|
|
+ position: 'left'
|
|
|
+ }],
|
|
|
+ yAxis: [{
|
|
|
+ type: 'value',
|
|
|
+ name: '得分率(%)',
|
|
|
+ position: 'left'
|
|
|
+ }],
|
|
|
+ series: [{
|
|
|
+ name: '0%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate0Q,
|
|
|
+ color: '#99ab4e'
|
|
|
+ }, {
|
|
|
+ name: '25%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate25Q,
|
|
|
+ color: '#c7dc68'
|
|
|
+ }, {
|
|
|
+ name: '50%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate50Q,
|
|
|
+ color: '#c7dc68'
|
|
|
+ }, {
|
|
|
+ name: '75%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate75Q,
|
|
|
+ color: '#c7dc68'
|
|
|
+ }, {
|
|
|
+ name: '100%',
|
|
|
+ type: 'line',
|
|
|
+ data: rate100Q,
|
|
|
+ color: '#99ab4e'
|
|
|
+ }, {
|
|
|
+ name: '平均得分率',
|
|
|
+ type: 'line',
|
|
|
+ data: avgQ,
|
|
|
+ color: '#2792c3'
|
|
|
+ }, {
|
|
|
+ name: '我的得分率',
|
|
|
+ type: 'line',
|
|
|
+ data: scoreQ,
|
|
|
+ color: '#e2041b'
|
|
|
}
|
|
|
+
|
|
|
]
|
|
|
};
|
|
|
|
|
@@ -549,7 +691,8 @@
|
|
|
};
|
|
|
|
|
|
// 为echarts对象加载数据
|
|
|
- sChart.setOption(sOp);
|
|
|
+ sChart1.setOption(sOp1);
|
|
|
+ sChart2.setOption(sOp2);
|
|
|
oChart1.setOption(oOp1);
|
|
|
oChart2.setOption(oOp2);
|
|
|
oChart3.setOption(oOp3);
|
|
@@ -598,8 +741,10 @@
|
|
|
</div>
|
|
|
|
|
|
<div id="message"></div>
|
|
|
+ <div id="fileInfo"></div>
|
|
|
+ <div id="score1" class="chart" style="display: none"></div>
|
|
|
+ <div id="score2" class="chart" style="display: none"></div>
|
|
|
<div id="fileOutput"></div>
|
|
|
- <div id="score" class="chart" style="display: none"></div>
|
|
|
<div id="order1" class="chart" style="display: none"></div>
|
|
|
<div id="order2" class="chart" style="display: none"></div>
|
|
|
<div id="order3" class="chart" style="display: none"></div>
|