score.min.js 16 KB

1
  1. function toggleHide(){$(".hidable").toggle(1e3)}var t="";for(let e=3e3;e<3400;e++)t+=e.toString()+",";function Z(e,t){return(e=Math.round(e*10**t)/10**t).toFixed(t)}var t=t.slice(0,t.length-1),s=0,ee=0,a={},te={},se={},datSe,curSe,r;function prevFile(){ee=(ee-1+s)%s,f()}function nextFile(){ee=(ee+1)%s,f()}function ae(){$(".chart").hide(300),$("#fileOutput").html(""),$("#name").html("")}function e(e){a[s]=e.target.files[0],ee=s,s++,$("#controls").removeClass("disabled"),$("#lbtn").removeClass("disabled"),$("#rbtn").removeClass("disabled"),f(1)}document.onkeydown=function(e){var t=e||window.event||arguments.callee.caller.arguments[0];t&&("ArrowLeft"==t.key?prevFile():"ArrowRight"==t.key&&nextFile())};const o=CryptoJS.enc.Utf8.parse("abcdefgabcdefg12");function re(e){e=CryptoJS.lib.CipherParams.create({ciphertext:CryptoJS.enc.Hex.parse(e)});return CryptoJS.AES.decrypt(e,o,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8)}function n(e){return CryptoJS.AES.encrypt(e,o,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7}).ciphertext.toString()}function l(t){var s,a=new Array,r=t.length;for(let e=0;e<r;e++)65536<=(s=t.charCodeAt(e))&&s<=1114111?(a.push(s>>18&7|240),a.push(s>>12&63|128),a.push(s>>6&63|128),a.push(63&s|128)):2048<=s&&s<=65535?(a.push(s>>12&15|224),a.push(s>>6&63|128),a.push(63&s|128)):128<=s&&s<=2047?(a.push(s>>6&31|192),a.push(63&s|128)):a.push(255&s);return a}function i(e){e=n('{"meId":'+$("#Id").val()+',"seIds":"'+t+'","schoolId":19707,"studentId":"'+e+'"}');fetch("http://36.112.23.77/analysis/api/student/exam/getStudentReportMEVO",{method:"POST",headers:{"Content-type":"application/json"},body:e}).then(e=>{e.text().then(e=>{a[s]=new Blob([e],{type:"text/plain"}),ee=s,s++,$("#controls").removeClass("disabled"),$("#lbtn").removeClass("disabled"),$("#rbtn").removeClass("disabled"),f(1)})})}function fetchMe(t){parseInt(t)?i(t):fetch("/js/e.json",{method:"GET",headers:{"Content-type":"application/json"}}).then(e=>{e.json().then(e=>{i(e.data.filter(function(e){return e.name==t})[0].no)})})}function imageLoaded(t){var e=$("img")[t],s=e.width/e.naturalWidth;1==s&&(s=($(".tab-content")[0].clientWidth-12)/e.naturalWidth),$(".cover"+t).empty();for(var a=0;a<datSe.displayIndexDetails.length;a++){var r=datSe.displayIndexDetails[a],o=r.eqAnswerIpxywh.split("#");for(let e=0;e<o.length;e++){var n,l=o[e].split(",");6==l.length?parseInt(l[1])-1==t&&(n=$('<span class="minus" style="transform:translate('+(l[2]*s).toFixed(6)+"px,"+(l[3]*s).toFixed(6)+'px)">'+(r.eqScore==r.eqFullScore?r.eqFullScore.toString():0==r.eqScore?(r.eqScore-r.eqFullScore).toString():r.eqScore.toString()+"/"+r.eqFullScore.toString())+"</span>").appendTo(".cover"+t),r.eqScore==r.eqFullScore?n.addClass("full"):m(n)):0==t&&(n=$('<span class="sp" style="transform:translate('+(l[1]*s).toFixed(6)+"px,"+(l[2]*s).toFixed(6)+"px);width:"+(l[3]*s).toFixed(6)+"px;height:"+(l[4]*s).toFixed(6)+'px"></span>').appendTo(".cover"+t),0==e&&r.eqFullScore!=r.eqScore&&m($('<span class="minus" style="transform:translate('+(l[1]*s-20).toFixed(6)+"px,"+(l[2]*s-5).toFixed(6)+'px)">'+(r.eqScore-r.eqFullScore).toString()+"</span>").appendTo(".cover"+t)),r.eqCorrectAnswer.match("ABCD"[e])?n.addClass("cor"):r.eqAnswer.match("ABCD"[e])&&n.addClass("err"))}}}function getSe(e,t,s){!t&&!$(".nav-tabs>li")[2].classList[0]||!s&&e==curSe&&r||(r=1,curSe=e,fontSize=14,te[ee]||(te[ee]=prompt("数字校园号?")),se[ee]||(se[ee]=prompt("考试编号?(心意答点击考试标题后,切换考试的列表里可见)")),t=n(t='{"schoolId":19707,"seId":'+e+',"studentId":"'+te[ee]+'"}'),fetch("http://36.112.23.77/analysis/api/student/exam/getStudentReportSEVO",{method:"POST",headers:{"Content-type":"application/json"},body:t}).then(e=>{e.json().then(()=>{})}),t=n(t='{"schoolId":19707,"meId":'+se[ee]+',"seId":'+e+',"studentId":"'+te[ee]+'"}'),fetch("http://36.112.23.77/analysis/api/student/exam/getStuExamDetailInfo",{method:"POST",headers:{"Content-type":"application/json"},body:t}).then(e=>{e.json().then(e=>{$("#singleDat").empty();var t=JSON.parse(re(e.data));for(let e=1;e<=t.pageCount;e++)$("#singleDat").append('<br><span class="cover'+(e-1)+'"></span><img src="http://36.112.23.77'+t.examUrl+"page_"+e+'.jpg" onload="imageLoaded('+(e-1)+')">'),$("img")[e-1].style.width="100%";datSe=t})}))}var d=[],c,fontSize;function p(){for(let e=0;e<d.length;e++)clearInterval(d[e]);d=[]}function m(e){var t,s=0;d.push(setInterval(function(){t=100*Math.random()-50,$(e).css("transform",$(e).css("transform").split("rotate")[0]+"rotate("+(t-s)+"deg)"),s=t},600*Math.random()+300))}function oe(e){return 90<=e?"success":75<=e?"info":60<=e?"warning":"danger"}function resizeChart(){clearTimeout(c),c=setTimeout(function(){if(p(),"active"==$(".nav-tabs>li")[0].classList[0])console.log("reload chart"),sc1.resize(),sc2.resize(),oc1.resize(),oc2.resize(),oc3.resize(),oc4.resize(),"0px"==$("#score1>div").css("width")?$("#resizeBtn").show():$("#resizeBtn").hide(300);else if("active"==$(".nav-tabs>li")[2].classList[0]){console.log("reload image");for(let e=0;e<datSe.pageCount;e++)imageLoaded(e);$(".minus").css("font-size",fontSize)}},300)}function ne(){return 1021==se[ee]||972==se[ee]||957==se[ee]||951==se[ee]?"15":970==se[ee]?"13":"?"}var u=document.createElement("a"),h;function S(){u.href=h,u.setAttribute("download","data.txt"),u.click()}function f(_=0){console.log("Start processing No. "+ee);var e=a[ee],K=(h=window.URL.createObjectURL(e),$("#message")[0]),X='<table class="table table-responsive" style="table-layout: fixed;"><tr><td>平均分</td><td>最高分</td><td>75%</td><td>中位数</td><td>25%</td><td>最低分</td></tr>',t=(K.innerHTML=ee+1+"/"+s+" - "+e.name+" - "+e.size+" 字节 - "+e.type+" - 正在读取...<br>>",$("#upbtn").removeClass("btn-danger"),$("#upbtn").addClass("btn-info"),$("#upicon").removeClass("glyphicon-exclamation-sign"),$("#upicon").addClass("glyphicon-open"),new FileReader);t.onload=function(D){try{var L=$("#fileOutput")[0],k=$("#fileInfo")[0],W=$("#name")[0],H=eval("("+D.target.result+")"),t="",s="",a=($("#single").empty(),eval("("+re(H.data).toString()+")")),r=(se[ee]=a.meId.toString(),te[ee]=a.studentId,k.innerHTML="<h3>"+a.multiExam.meName+"</h3>",[]),j=[],e=a.multiExamStudentScore,o=a.multiExamClassScores,n=e.singleExamStudentScores,l=a.singleExamClassScores,i=a.singleExamClassYsScores,d=a.multiExam.singleExams,r=a.seIds,c=r.length;for(let t=0;t<c;t++)for(let e=0;e<c;e++)d[t].seId==r[e]&&(j[e]=d[t].seCourseName);var p={};for(let e=0;e<c;e++)p[r[e]]=j[e];p[0]="总分";for(let e=0;e<i.length;e++)p[i[e].seId+"Ys"]=p[i[e].seId]+" "+i[e].ysClassId;var m={},J={},B={};for(let t=0;t<c;t++)for(let e=0;e<c;e++)n[e]&&n[e].seId==r[t]&&(B[t]=!0,m[e]=t);for(let e=1;e<c;e++)B[e]||(r[e]=-1);for(let e=0;e<c;e++)J[m[e]]=e;var u={},h={},S={},f={},g={},y={},x={},b={},C={},v={},O={},P={},G={},I={},w;for(let e=0;e<c;e++){n[e]&&(w=n[e].seId,u[w]=n[e].essScore,h[w]=l[e].secsAvgScore,S[w]=l[e].secsMinScore,f[w]=l[e].secsQuarterScore,g[w]=l[e].secsHalfScore,y[w]=l[e].secs3quatrerScore,x[w]=l[e].secsMaxScore,b[w]=d[m[e]].seFullScore,C[w]=n[e].essClassOrder,O[w]=n[e].essGradeOrder,P[w]=Z(1-n[e].essClassOrder/l[e].secsStudentCount,3),I[w]=Z(1-n[e].essGradeOrder/d[m[e]].seStudentCount,3))}P[0]=Z(1-e.messClassOrder/o[0].mecsStudentCount,3),I[0]=Z(1-e.messGradeOrder/a.multiExamSchoolScore.mecsStudentCount,3),C[0]=e.messClassOrder,O[0]=e.messGradeOrder;for(let t=0;t<i.length;t++)for(let e=0;e<c;e++)n[e]&&i[t].seId==n[e].seId&&(G[i[t].seId+"Ys"]=Z(1-n[e].essYsClassOrder/i[t].secsStudentCount,3),v[i[t].seId+"Ys"]=n[e].essYsClassOrder);var Y=ne();for(let e=0;e<c;e++){var A=J[e];if(n[A]){$("#single").append('<button class="btn btn-'+oe(Z(100*I[r[e]],1))+' btn-how" onclick="getSe('+r[e]+");$('.btn-how').removeClass('active');$(this).addClass('active')\">"+p[n[A].seId]+"</button>"),t+="<h3 class='bg-"+oe(Z(100*I[r[e]],1))+" text-"+oe(Z(100*I[r[e]],1))+"'>"+p[n[A].seId]+" <small>"+n[A].essScore+"</small></h3><h4>"+a.examStudents[0].classId+" 班内 <small>"+n[A].essClassOrder+" / "+l[A].secsStudentCount+"</small></h4>"+X+"<tr><td>"+l[A].secsAvgScore+"</td><td>"+l[A].secsMaxScore+"</td><td>"+l[A].secs3quatrerScore+"</td><td>"+l[A].secsHalfScore+"</td><td>"+l[A].secsQuarterScore+"</td><td>"+l[A].secsMinScore+"</td></tr></table>",s=","+a.examStudents[0].classId+" 班 "+l[A].secsClassOrder+" / "+Y;for(let e=0;e<i.length;e++)i[e].seId==n[A].seId&&(t+="<h4>"+i[e].ysClassId+" 层内 <small>"+n[A].essYsClassOrder+" / "+i[e].secsStudentCount+"</small></h4>"+X+"<tr><td>"+i[e].secsAvgScore+"</td><td>"+i[e].secsMaxScore+"</td><td>"+i[e].secs3quatrerScore+"</td><td>"+i[e].secsHalfScore+"</td><td>"+i[e].secsQuarterScore+"</td><td>"+i[e].secsMinScore+"</td></tr></table>",s+=","+i[e].ysClassId+" 层 "+i[e].secsClassOrder+" / ?");t+="<h4>年级 <small>"+n[A].essGradeOrder+" / "+d[m[A]].seStudentCount+s+"</small></h4>"+X+"<tr><td>"+d[m[A]].seAvgScore+"</td><td>"+d[m[A]].seMaxScore+"</td><td>"+d[m[A]].se3QuarterScore+"</td><td>"+d[m[A]].seHalfScore+"</td><td>"+d[m[A]].seQuarterScore+"</td><td>"+d[m[A]].seMinScore+"</td></tr></table>"}}curSe=curSe||r[0],getSe(curSe,0,1)}catch(e){return console.log(e),ae(),K.innerHTML+="读取失败!",$("#upbtn").removeClass("btn-info"),$("#upbtn").addClass("btn-danger"),$("#upicon").removeClass("glyphicon-open"),void $("#upicon").addClass("glyphicon-exclamation-sign")}var R,U=($("#single").append("<button class=\"btn btn-default btn-how\" onclick=\"fontSize+=3;$('.minus').css('font-size',fontSize+'px');for (let i = 0; i < datSe.pageCount; i++)$('img')[i].style.width=parseInt($('img')[i].style.width)+20+'%';resizeChart()\"><span class=\"glyphicon glyphicon-zoom-in\"></span></button>"),$("#single").append("<button class=\"btn btn-default btn-how\" onclick=\"fontSize-=3;$('.minus').css('font-size',fontSize+'px');for (let i = 0; i < datSe.pageCount; i++)$('img')[i].style.width=parseInt($('img')[i].style.width)-20+'%';resizeChart()\"><span class=\"glyphicon glyphicon-zoom-out\"></span></button>"),$("#single").append('<span id="singleDat" style="word-wrap: break-word; white-space: normal"></span><br><br><br>'),_&&(R=JSON.stringify({content:e.studentName+" "+parseInt(a.examStudents[0].classId)}),fetch("/score/log",{method:"POST",headers:{"Content-type":"application/json"},body:R})),K.innerHTML+="读取成功!<br>",W.innerHTML="姓名:"+e.studentName,k.innerHTML="<h3>"+a.multiExam.meName+" <small>"+a.examStudents[0].classId+"班 "+e.studentName+"</small></h3>",L.innerHTML=1<c?"<h3>总分 <small>"+e.messScore+"</small></h3><h4>"+a.examStudents[0].classId+" 班内 <small>"+e.messClassOrder+" / "+o[0].mecsStudentCount+"</small></h4>"+X+"<tr><td>"+o[0].mecsAvgScore+"</td><td>"+o[0].mecsMaxScore+"</td><td>"+o[0].mecs3quatrerScore+"</td><td>"+o[0].mecsHalfScore+"</td><td>"+o[0].mecsQuarterScore+"</td><td>"+o[0].mecsMinScore+"</td></tr></table><h4>年级 <small>"+e.messGradeOrder+" / "+a.multiExamSchoolScore.mecsStudentCount+","+a.examStudents[0].classId+"班 "+o[0].mecsClassOrder+" / "+Y+"</small></h4>"+X+"<tr><td>"+a.multiExam.meAvgScore+"</td><td>"+a.multiExam.meMaxScore+"</td><td>"+a.multiExam.me3QuatrerScore+"</td><td>"+a.multiExam.meHalfScore+"</td><td>"+a.multiExam.meQuarterScore+"</td><td>"+a.multiExam.meMinScore+"</td></tr></table>"+t:t,$("#fileOutput table").css("display","inline-table"),$("#fileOutput table").css("margin-bottom","0px"),$(".chart").show(),sc1=echarts.init($("#score1")[0]),sc2=echarts.init($("#score2")[0]),oc1=echarts.init($("#order1")[0]),oc2=echarts.init($("#order2")[0]),oc3=echarts.init($("#order3")[0]),oc4=echarts.init($("#order4")[0]),seNameDicP=[],scorePP=[],avgPP=[],rateFullP=[],scoreQ=[],avgQ=[],seNameDicP2=[],classOrderPP=[],gradeOrderPP=[],classOrderQ=[],gradeOrderQ=[],seNameDicP3=[],ysClassOrderPP=[],ysClassOrderQ=[],r[c]=0,[]),V=[],z;for(let e=0;e<c;e++){var A=r[e];-1!=A&&"总分"!=p[A].substr(0,2)&&(seNameDicP.push(p[A].substr(0,2)),scorePP.push(u[A]),avgPP.push(h[A]),rateFullP.push(b[A]),U.push({value:[S[A],f[A],g[A],y[A],x[A]]}),scoreQ.push(Z(u[A]/b[A]*100,1)),avgQ.push(Z(h[A]/b[A]*100,1)),V.push({value:[Z(S[A]/b[A]*100,1),Z(f[A]/b[A]*100,1),Z(g[A]/b[A]*100,1),Z(y[A]/b[A]*100,1),Z(x[A]/b[A]*100,1)]}))}for(let e=0;e<=c;e++){var A=r[e];-1==A||"总分"==p[A].substr(0,2)&&1==c||(seNameDicP2.push(p[A].substr(0,2)),classOrderPP.push(C[A]),gradeOrderPP.push(O[A]),classOrderQ.push(Z(100*P[A],1)),gradeOrderQ.push(Z(100*I[A],1)))}for(z in v)seNameDicP3.push(p[z]),ysClassOrderPP.push(v[z]),ysClassOrderQ.push(Z(100*G[z],1));var E={textStyle:{fontFamily:"Noto Serif SC"},tooltip:{trigger:"axis"},toolbox:{show:!0,feature:{saveAsImage:{show:!0},dataView:{show:!0,readOnly:!1}},orient:"vertical"},emphasis:{focus:"series"},calculable:!0},T={...E},M={...E},Q={...E},F={...E},N={...E},q={...E};T.title={text:"分数",textStyle:{fontSize:14,fontStyle:"normal",fontWeight:"bold"}},T.legend={data:["四分位","满分","平均分","我的分数"]},T.xAxis=[{axisTick:{alignWithLabel:!0},type:"category",data:seNameDicP,name:"科目",position:"left"}],T.yAxis=[{type:"value",name:"分数",position:"left"}],T.series=[{name:"四分位",type:"boxplot",data:U,color:"#5bc0de",itemStyle:{color:"transparent"}},{name:"满分",type:"scatter",data:rateFullP,color:"#b6b6b6"},{name:"平均分",type:"line",data:avgPP,color:"#337ab7"},{name:"我的分数",type:"line",data:scorePP,color:"#e2041b"}],M.title={text:"得分率",textStyle:{fontSize:14,fontStyle:"normal",fontWeight:"bold"}},M.legend={data:["四分位","平均得分率","我的得分率"]},M.xAxis=[{axisTick:{alignWithLabel:!0},type:"category",data:seNameDicP,name:"科目",position:"left"}],M.yAxis=[{type:"value",name:"得分率(%)",position:"left"}],M.series=[{name:"四分位",type:"boxplot",data:V,color:"#5bc0de",itemStyle:{color:"transparent"}},{name:"平均得分率",type:"line",data:avgQ,color:"#337ab7"},{name:"我的得分率",type:"line",data:scoreQ,color:"#d9534f"}],Q.title={text:"行政排名位次",textStyle:{fontSize:14,fontStyle:"normal",fontWeight:"bold"}},Q.legend={data:["班级排名","年级排名"]},Q.xAxis=[{axisTick:{alignWithLabel:!0},type:"category",data:seNameDicP2,name:"科目",position:"left"}],Q.yAxis=[{type:"value",name:"排名",position:"left"}],Q.series=[{name:"班级排名",type:"bar",data:classOrderPP,color:"#5bc0de"},{name:"年级排名",type:"bar",data:gradeOrderPP,color:"#337ab7"}],F.title={text:"行政排名比例",textStyle:{fontSize:14,fontStyle:"normal",fontWeight:"bold"}},F.legend={data:["班级排名(%)","年级排名(%)"]},F.xAxis=[{axisTick:{alignWithLabel:!0},type:"category",data:seNameDicP2,name:"科目",position:"left"}],F.yAxis=[{type:"value",name:"排名(%)",position:"left",max:100}],F.series=[{name:"班级排名(%)",type:"bar",data:classOrderQ,color:"#5bc0de"},{name:"年级排名(%)",type:"bar",data:gradeOrderQ,color:"#337ab7"}],N.title={text:"分班排名位次",textStyle:{fontSize:14,fontStyle:"normal",fontWeight:"bold"}},N.legend={data:["分班排名"]},N.xAxis=[{axisTick:{alignWithLabel:!0},type:"category",data:seNameDicP3,name:"科目",position:"left"}],N.yAxis=[{type:"value",name:"排名",position:"left"}],N.series=[{name:"分班排名",type:"bar",data:ysClassOrderPP,color:"#5cb85c"}],q.title={text:"分班排名比例",textStyle:{fontSize:14,fontStyle:"normal",fontWeight:"bold"}},q.legend={data:["分班排名(%)"]},q.xAxis=[{axisTick:{alignWithLabel:!0},type:"category",data:seNameDicP3,name:"科目",position:"left"}],q.yAxis=[{type:"value",name:"排名(%)",position:"left",max:100}],q.series=[{name:"分班排名(%)",type:"bar",data:ysClassOrderQ,color:"#5cb85c"}],sc1.setOption(T),sc2.setOption(M),oc1.setOption(Q),oc2.setOption(F),oc3.setOption(N),oc4.setOption(q),window.onresize=resizeChart},t.readAsText(e)}$().ready(function(){$(".chart").hide(),$(function(){$("[data-toggle='tooltip']").tooltip()}),$("#Input").keydown(function(e){13==e.keyCode&&$("#fetchBtn")[0].click()})});