|
@@ -170,7 +170,7 @@
|
|
|
<div
|
|
|
class="title"
|
|
|
:class="{ isClick: courseType == 0 }"
|
|
|
- @click="courseType = 0"
|
|
|
+ @click="courseType = 0;rankLoading = false"
|
|
|
style="cursor: pointer; padding: 0 0 5px 0"
|
|
|
>
|
|
|
学生行为分布
|
|
@@ -183,6 +183,14 @@
|
|
|
>
|
|
|
学生协同情况
|
|
|
</div> -->
|
|
|
+ <div
|
|
|
+ class="title"
|
|
|
+ :class="{ isClick: courseType == 2 }"
|
|
|
+ @click="checkRank()"
|
|
|
+ style="cursor: pointer; padding: 0 0 5px 0"
|
|
|
+ >
|
|
|
+ 学生排行榜
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div
|
|
|
style="
|
|
@@ -198,8 +206,21 @@
|
|
|
<el-option label="作业数量" value="worksNum"></el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
+ <div
|
|
|
+ style="
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ flex-wrap: nowrap;
|
|
|
+ align-items: center;
|
|
|
+ "
|
|
|
+ v-if="courseType == 2"
|
|
|
+ >
|
|
|
+ <el-select v-model="cTypeRank" class="selectBox" style="width: 130px" @change="checkRank">
|
|
|
+ <el-option :label="item.name" :value="item.id" v-for="(item,index) in classList" :key="index"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="dataBox">
|
|
|
+ <div class="dataBox" v-loading="rankLoading">
|
|
|
<studentInfo
|
|
|
v-if="courseType == 0 && cType2 == 'onlineTime'"
|
|
|
style="height: calc(100%)"
|
|
@@ -214,6 +235,7 @@
|
|
|
v-if="courseType == 1"
|
|
|
style="height: calc(100%)"
|
|
|
></courseNum>
|
|
|
+ <cateRank v-if="courseType == 2" :rankData="rankData"></cateRank>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="bottom">
|
|
@@ -531,6 +553,7 @@ import toolUser2 from "./toolUser2";
|
|
|
import bar from "./bar";
|
|
|
import bar2 from "./bar2";
|
|
|
import courseNum from "./courseNum";
|
|
|
+import cateRank from "./cateRank";
|
|
|
export default {
|
|
|
props: {
|
|
|
oid: {
|
|
@@ -554,6 +577,7 @@ export default {
|
|
|
bar,
|
|
|
bar2,
|
|
|
courseNum,
|
|
|
+ cateRank
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
@@ -603,6 +627,9 @@ export default {
|
|
|
courseArray: [],
|
|
|
scourseArray: [],
|
|
|
EworksNumArray: [],
|
|
|
+ rankLoading: false,
|
|
|
+ cTypeRank: '',
|
|
|
+ rankData:[],
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
@@ -727,8 +754,8 @@ export default {
|
|
|
this.loginTime = parseInt(res.data[7][0].time) / 60 / 60;
|
|
|
let _loginTimeArray = res.data[9]; //在线时间
|
|
|
let _classList = res.data[8]; //班级
|
|
|
- this.classList = _classList;
|
|
|
-
|
|
|
+ this.classList = _classList.filter(el => {return el.studentCount > 0});
|
|
|
+ this.cTypeRank = _classList[0].id
|
|
|
let _EloginTimeArray = [];
|
|
|
for (let i = 0; i < _classList.length; i++) {
|
|
|
_EloginTimeArray.push({
|
|
@@ -943,6 +970,90 @@ export default {
|
|
|
console.error(err);
|
|
|
});
|
|
|
},
|
|
|
+ checkRank(){
|
|
|
+ this.rankLoading = true;
|
|
|
+ let params = [
|
|
|
+ {
|
|
|
+ oid: this.oid,
|
|
|
+ org: this.org,
|
|
|
+ cid: this.cTypeRank
|
|
|
+ },
|
|
|
+ ];
|
|
|
+ this.ajax
|
|
|
+ .post(this.$store.state.api + "selectDataboardStudentRank", params)
|
|
|
+ .then((res) => {
|
|
|
+ this.rankLoading = false;
|
|
|
+ this.courseType = 2
|
|
|
+ let rankData = []
|
|
|
+ let students = res.data[0]
|
|
|
+ let courses = res.data[1]
|
|
|
+ let scourses = res.data[2]
|
|
|
+ let works = res.data[3]
|
|
|
+ let exchanges = res.data[4]
|
|
|
+
|
|
|
+ for (let i = 0; i < students.length; i++) {
|
|
|
+ rankData.push({
|
|
|
+ name: students[i].name,
|
|
|
+ userid: students[i].userid,
|
|
|
+ classid: students[i].classid,
|
|
|
+ courseCount:0,
|
|
|
+ scourseCount: 0,
|
|
|
+ worksCount: 0,
|
|
|
+ exchangeCount: 0,
|
|
|
+ rateCount: 0,
|
|
|
+ rate: 0,
|
|
|
+ score:0,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ for(var j = 0; j < rankData.length; j++){
|
|
|
+ for(var i = 0; i < courses.length; i++){
|
|
|
+ if(courses[i].userid == rankData[j].userid){
|
|
|
+ rankData[j].courseCount++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for(var i = 0; i < scourses.length; i++){
|
|
|
+ if(scourses[i].userid == rankData[j].userid){
|
|
|
+ rankData[j].scourseCount++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for(var i = 0; i < works.length; i++){
|
|
|
+ if(works[i].userid == rankData[j].userid){
|
|
|
+ rankData[j].worksCount++;
|
|
|
+ if(works[i].score){
|
|
|
+ try {
|
|
|
+ let rate = JSON.parse(works[i].score)
|
|
|
+ rankData[j].rateCount += rate.wScore
|
|
|
+ rankData[j].rate++
|
|
|
+ } catch (error) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ rankData[j].rateCount = rankData[j].rateCount > 0 ? (rankData[j].rateCount / rankData[j].rate).toFixed(0) : 0
|
|
|
+
|
|
|
+ for(var i = 0; i < exchanges.length; i++){
|
|
|
+ if(exchanges[i].likesId == rankData[j].userid){
|
|
|
+ rankData[j].exchangeCount++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ rankData[j].score = ((rankData[j].rateCount * 0.5) + (rankData[j].exchangeCount * 0.1) + (rankData[j].worksCount * 0.2) + (rankData[j].scourseCount * 0.1) + (rankData[j].courseCount * 0.1)).toFixed(0);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.rankData = rankData;
|
|
|
+ this.$forceUpdate();
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.rankLoading = false;
|
|
|
+ console.error(err);
|
|
|
+ });
|
|
|
+ },
|
|
|
classChange() {
|
|
|
let _courseNumArray = this.courseNumArray; //参与课程数
|
|
|
let _scourseNumArray = this.scourseNumArray; //参与项目数
|