zengyicheng 1 vuosi sitten
vanhempi
commit
474c394375

+ 102 - 0
src/components/pages/dataBoardNew/teacher/chartList/cateRank.vue

@@ -0,0 +1,102 @@
+<template>
+  <div class="data_body">
+    <div style="width: 100%;height: calc(100% - 15px);overflow: auto;">
+      <el-table :data="tableData" style="width: 100%" :header-cell-style="{ background: '#E0EAFB',color: '#000' }"
+        :row-class-name="tableRowClassName" class="tableClass">
+        <el-table-column label="排行" min-width="50" align="center">
+          <template slot-scope="scope">{{ scope.$index + 1 }}</template>
+        </el-table-column>
+        <el-table-column prop="name" label="姓名" min-width="80" align="center">
+        </el-table-column>
+        <el-table-column prop="loginTime" label="登录时长" min-width="90" align="center">
+        </el-table-column>
+        <el-table-column prop="loginCount" label="登录频次" min-width="90" align="center">
+        </el-table-column>
+        <el-table-column prop="courses" label="参与课程数" min-width="90" align="center">
+        </el-table-column>
+        <el-table-column prop="projects" label="参与项目数" min-width="80" align="center">
+        </el-table-column>
+        <el-table-column prop="courseWorks" label="平台实施程度" min-width="80" align="center">
+        </el-table-column>
+        <el-table-column prop="worksRate" label="平台使用深度" min-width="80" align="center">
+        </el-table-column>
+        <el-table-column prop="score" label="综合指数" min-width="80" align="center">
+        </el-table-column>
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    rankData: {
+      type: Array,
+    },
+  },
+  data() {
+    return {
+      tableData: [
+        // { rank: "1", name: "一年级", sum: "2356" },
+        // { rank: "2", name: "二年级", sum: "2256" },
+        // { rank: "3", name: "三年级", sum: "2156" },
+        // { rank: "4", name: "四年级", sum: "1356" },
+        // { rank: "5", name: "五年级", sum: "1256" },
+        // { rank: "6", name: "六年级", sum: "1056" },
+      ],
+    };
+  },
+  methods: {
+    tableRowClassName({ row, rowIndex }) {
+      if ((rowIndex + 1) % 2 === 0) {
+        return "even_row";
+      } else {
+        return "";
+      }
+    },
+    setArray(array){
+      this.tableData = JSON.parse(JSON.stringify(array))
+
+      this.tableData = this.tableData.sort(function(a,b){
+        return b.score - a.score;
+      })
+    }
+  },
+  watch: {
+    rankData: {
+      immediate: true,
+      deep: true,
+      handler(newValue, oldValue) {
+        this.setArray(newValue)
+        this.$forceUpdate();
+      },
+    },
+  },
+  mounted() {
+    this.setArray(this.rankData)
+  },
+};
+</script>
+
+<style scoped>
+.el-table>>>.even_row {
+  background-color: #f2f7ff !important;
+}
+
+.data_body {
+  height: 100%;
+  /* display: flex; */
+  position: relative;
+  border-radius: 5px;
+  /* border: 1px solid #eee; */
+  margin: 0 auto;
+  box-sizing: border-box;
+  padding: 0;
+  width: 95%;
+  background: #fff;
+}
+
+.tableClass >>> td, .tableClass >>> th{
+  padding: 5px 0;
+}
+</style>

+ 484 - 166
src/components/pages/dataBoardNew/teacher/index.vue

@@ -17,9 +17,18 @@
               <span>本月登录教师环比</span>
               <!-- <span>{{ weekCount }}</span> -->
               <span v-if="teacherLoginCountMonthArray.length">{{
-                (teacherLoginCountMonthArray[teacherLoginCountMonthArray.length - 1].login) > 0 ?
-                (((teacherLoginCountMonthArray[teacherLoginCountMonthArray.length - 1].login) / teacherNum) *
-                  100).toFixed(0) + '%' : 0 }}</span>
+                teacherLoginCountMonthArray[
+                  teacherLoginCountMonthArray.length - 1
+                ].login > 0
+                  ? (
+                      (teacherLoginCountMonthArray[
+                        teacherLoginCountMonthArray.length - 1
+                      ].login /
+                        teacherNum) *
+                      100
+                    ).toFixed(0) + "%"
+                  : 0
+              }}</span>
               <!-- <span v-if="teacherLoginCountMonthArray.length">{{
                 teacherLoginCountMonthArray[
                   teacherLoginCountMonthArray.length - 1
@@ -63,17 +72,28 @@
               }}</span>
             </div>
           </div>
-          <TeaFre style="height: calc(100% - 150px)" :monthArray="teacherLoginCountMonthArray"></TeaFre>
+          <TeaFre
+            style="height: calc(100% - 150px)"
+            :monthArray="teacherLoginCountMonthArray"
+          ></TeaFre>
         </div>
       </div>
       <div class="bottom">
         <div class="titleBox">
-          <div class="title" :class="{ isClick: skType == 0 }" @click="skType = 0"
-            style="cursor: pointer; padding: 0 0 5px 0">
+          <div
+            class="title"
+            :class="{ isClick: skType == 0 }"
+            @click="skType = 0"
+            style="cursor: pointer; padding: 0 0 5px 0"
+          >
             在线时长
           </div>
-          <div class="title" :class="{ isClick: skType == 1 }" @click="skType = 1"
-            style="cursor: pointer; padding: 0 0 5px 0">
+          <div
+            class="title"
+            :class="{ isClick: skType == 1 }"
+            @click="skType = 1"
+            style="cursor: pointer; padding: 0 0 5px 0"
+          >
             登录频次
           </div>
         </div>
@@ -106,8 +126,16 @@
           </div>
         </div>
         <div class="dataBox">
-          <Bar style="height: calc(100% - 70px)" v-if="skType == 0" :workTime="workTime"></Bar>
-          <ToolUse style="height: calc(100% - 70px)" v-if="skType == 1" :yearArray="loginCountYearArray"></ToolUse>
+          <Bar
+            style="height: calc(100% - 70px)"
+            v-if="skType == 0"
+            :workTime="workTime"
+          ></Bar>
+          <ToolUse
+            style="height: calc(100% - 70px)"
+            v-if="skType == 1"
+            :yearArray="loginCountYearArray"
+          ></ToolUse>
           <!-- <div class="otherCss">
             <div v-if="!oType">切换为柱状图</div>
             <div v-if="oType">切换为热力图</div>
@@ -121,18 +149,45 @@
     <div class="center">
       <div class="top">
         <div class="titleBox" style="justify-content: space-between">
-          <div style="
+          <div
+            style="
               display: flex;
               flex-direction: row;
               flex-wrap: nowrap;
               align-items: center;
               justify-content: space-between;
               width: 100%;
-            ">
-            <div class="title" :class="{ isClick: courseType == 0 }" @click="courseType = 0"
-              style="cursor: pointer; padding: 0 0 5px 0">
-              教师行为分布
+            "
+          >
+            <div
+              style="
+                display: flex;
+                flex-direction: row;
+                flex-wrap: nowrap;
+                align-items: center;
+              "
+            >
+              <div
+                class="title"
+                :class="{ isClick: courseType == 0 }"
+                @click="
+                  courseType = 0;
+                  rankLoading = false;
+                "
+                style="cursor: pointer; padding: 0 0 5px 0"
+              >
+                教师行为分布
+              </div>
+              <div
+                class="title"
+                :class="{ isClick: courseType == 1 }"
+                @click="checkRank()"
+                style="cursor: pointer; padding: 0 0 5px 0"
+              >
+                教师排行榜
+              </div>
             </div>
+
             <!-- <div
               class="title"
               :class="{ isClick: courseType == 1 }"
@@ -141,35 +196,80 @@
             >
               教师协同情况
             </div> -->
-            <el-select v-model="cType" @change="typeChange2" class="selectBox" v-if="courseType == 0">
+            <el-select
+              v-model="cType"
+              @change="typeChange2"
+              class="selectBox"
+              v-if="courseType == 0"
+            >
               <el-option label="时长" value="0"></el-option>
               <el-option label="创建" value="1"></el-option>
               <el-option label="协同" value="2"></el-option>
               <el-option label="实施" value="3"></el-option>
               <el-option label="评价" value="4"></el-option>
             </el-select>
+            <div
+              style="
+                display: flex;
+                flex-direction: row;
+                flex-wrap: nowrap;
+                align-items: center;
+              "
+              v-if="courseType == 1"
+            >
+              <el-select
+                v-model="cTypeRank"
+                class="selectBox"
+                style="width: 130px"
+                @change="checkRank"
+              >
+                <el-option value="" label="所有"></el-option>
+                <el-option
+                  :label="item.name"
+                  :value="item.id"
+                  v-for="(item, index) in classList"
+                  :key="index"
+                ></el-option>
+              </el-select>
+            </div>
           </div>
         </div>
-        <div class="dataBox">
-          <TeaData v-if="courseType == 0 || courseType == 1" style="height: calc(100%)" :courseArray="courseArray" :cType="cType">
+        <div class="dataBox" v-loading="rankLoading">
+          <TeaData
+            v-if="courseType == 0"
+            style="height: calc(100%)"
+            :courseArray="courseArray"
+            :cType="cType"
+          >
           </TeaData>
+          <CateRank v-if="courseType == 1" :rankData="rankData"></CateRank>
           <!-- <FunPlot v-if="courseType == 1" style="height: calc(100%)"></FunPlot> -->
         </div>
       </div>
       <div class="bottom">
         <div class="titleBox" style="justify-content: space-between">
-          <div style="
+          <div
+            style="
               display: flex;
               flex-direction: row;
               flex-wrap: nowrap;
               align-items: center;
-            ">
-            <div class="title" :class="{ isClick: bType == 0 }" @click="bType = 0"
-              style="cursor: pointer; padding: 0 0 5px 0">
+            "
+          >
+            <div
+              class="title"
+              :class="{ isClick: bType == 0 }"
+              @click="bType = 0"
+              style="cursor: pointer; padding: 0 0 5px 0"
+            >
               课程参与情况
             </div>
-            <div class="title" :class="{ isClick: bType == 1 }" @click="bType = 1"
-              style="cursor: pointer; padding: 0 0 5px 0">
+            <div
+              class="title"
+              :class="{ isClick: bType == 1 }"
+              @click="bType = 1"
+              style="cursor: pointer; padding: 0 0 5px 0"
+            >
               项目参与情况
             </div>
           </div>
@@ -178,98 +278,155 @@
           <div class="allBox">
             <div class="allBox_left">
               <TeaAct v-if="bType == 0" :pusaDep="pusaDep"></TeaAct>
-              <TeaActSecond v-if="bType == 1" :pusaDep="pusaDep1"></TeaActSecond>
+              <TeaActSecond
+                v-if="bType == 1"
+                :pusaDep="pusaDep1"
+              ></TeaActSecond>
             </div>
             <div class="allBox_right" v-if="bType == 0">
               <div class="depth">
                 <span>创建课程</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson.createCourse
-                      ? parseInt(
-                        (
-                          (lightJson.createCourse / lightJson.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson.createCourse
+                        ? parseInt(
+                            (
+                              (lightJson.createCourse / lightJson.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>协同教研</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson.gCourseTeachers
-                      ? parseInt(
-                        (
-                          (lightJson.gCourseTeachers / lightJson.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson.gCourseTeachers
+                        ? parseInt(
+                            (
+                              (lightJson.gCourseTeachers / lightJson.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>使用模板</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="0" :stroke-width="5" :format="format"
-                    color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="0"
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>互动交流</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson.commentTeachers
-                      ? parseInt(
-                        (
-                          (lightJson.commentTeachers / lightJson.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson.commentTeachers
+                        ? parseInt(
+                            (
+                              (lightJson.commentTeachers / lightJson.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>使用工具</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson.useTool
-                      ? parseInt(
-                        (
-                          (lightJson.useTool / lightJson.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson.useTool
+                        ? parseInt(
+                            (
+                              (lightJson.useTool / lightJson.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>实施评价</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson.useEvalution
-                      ? parseInt(
-                        (
-                          (lightJson.useEvalution / lightJson.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson.useEvalution
+                        ? parseInt(
+                            (
+                              (lightJson.useEvalution / lightJson.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>教学评一体化</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson.evaWorksCount
-                      ? parseInt(
-                        (
-                          (lightJson.evaWorksCount / lightJson.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson.evaWorksCount
+                        ? parseInt(
+                            (
+                              (lightJson.evaWorksCount / lightJson.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
             </div>
@@ -277,58 +434,94 @@
               <div class="depth">
                 <span>创建项目</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson1.createProject
-                      ? parseInt(
-                        (
-                          (lightJson1.createProject / lightJson1.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson1.createProject
+                        ? parseInt(
+                            (
+                              (lightJson1.createProject / lightJson1.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>师生协作</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson1.gProjectTeachers
-                      ? parseInt(
-                        (
-                          (lightJson1.gProjectTeachers /
-                            lightJson1.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson1.gProjectTeachers
+                        ? parseInt(
+                            (
+                              (lightJson1.gProjectTeachers /
+                                lightJson1.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>使用模板</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="0" :stroke-width="5" :format="format"
-                    color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="0"
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>互动交流</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="0" :stroke-width="5" :format="format"
-                    color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="0"
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
               <div class="depth">
                 <span>使用工具</span>
                 <div>
-                  <el-progress :width="80" type="circle" :percentage="lightJson1.useTool
-                      ? parseInt(
-                        (
-                          (lightJson1.useTool / lightJson1.teachers) *
-                          100
-                        ).toFixed(0)
-                      )
-                      : 0
-                    " :stroke-width="5" :format="format" color="#106BFF"></el-progress>
+                  <el-progress
+                    :width="80"
+                    type="circle"
+                    :percentage="
+                      lightJson1.useTool
+                        ? parseInt(
+                            (
+                              (lightJson1.useTool / lightJson1.teachers) *
+                              100
+                            ).toFixed(0)
+                          )
+                        : 0
+                    "
+                    :stroke-width="5"
+                    :format="format"
+                    color="#106BFF"
+                  ></el-progress>
                 </div>
               </div>
             </div>
@@ -348,7 +541,10 @@
           </el-select>
         </div>
         <div class="dataBox">
-          <WorkNum style="height: calc(100% - 40px)" :courseNumberArray="courseNumberArray"></WorkNum>
+          <WorkNum
+            style="height: calc(100% - 40px)"
+            :courseNumberArray="courseNumberArray"
+          ></WorkNum>
         </div>
       </div>
       <div class="bottom">
@@ -372,7 +568,10 @@
               }}</span>
             </div>
           </div>
-          <WorkTime style="height: calc(100% - 72px)" :workNumList="workNumList"></WorkTime>
+          <WorkTime
+            style="height: calc(100% - 72px)"
+            :workNumList="workNumList"
+          ></WorkTime>
         </div>
       </div>
     </div>
@@ -389,6 +588,7 @@ import WorkTime from "./chartList/workTime.vue";
 import ToolUse from "./chartList/toolUse.vue";
 import Bar from "./chartList/bar.vue";
 import TeaActSecond from "./chartList/teaActSecond.vue";
+import CateRank from "./chartList/cateRank.vue";
 export default {
   components: {
     TeaFre,
@@ -400,6 +600,7 @@ export default {
     ToolUse,
     Bar,
     TeaActSecond,
+    CateRank,
   },
   props: {
     oid: {
@@ -471,6 +672,10 @@ export default {
         { value: 0, name: "师生协作" },
         { value: 0, name: "使用工具" },
       ],
+      rankData: [],
+      rankLoading: false,
+      cTypeRank: "",
+      classList: [],
     };
   },
   mounted() {
@@ -505,7 +710,7 @@ export default {
       let _courseArray = [];
       // _subject.push({ name: "其他" });
 
-      if(this.cType == '1'){
+      if (this.cType == "1") {
         for (var i = 0; i < _grade.length; i++) {
           _courseArray.push({
             name: _grade[i].name,
@@ -534,7 +739,7 @@ export default {
                 _course[z].typeid == _subject[j].id &&
                 _courseArray[i].courseid.indexOf(_course[z].courseid) !== -1
               ) {
-                _courseArray[i].subject[j].course++;             
+                _courseArray[i].subject[j].course++;
               }
             }
           }
@@ -547,7 +752,7 @@ export default {
           //     ? 0
           //     : _courseArray[i].courseid.length - sum;
         }
-      }else {
+      } else {
         for (var i = 0; i < _grade.length; i++) {
           _courseArray.push({
             name: _grade[i].name,
@@ -575,21 +780,23 @@ export default {
                 _course[z].typeid == _subject[j].id &&
                 _courseArray[i].courseid.indexOf(_course2[z].courseid) !== -1
               ) {
-                if(this.cType == '0'){
-                  _courseArray[i].subject[j].course+=_course2[z].text ? parseInt((parseInt(_course2[z].text) / 3600).toFixed(0)) : 0;
-                }else if(this.cType == '2'){
-                  if(_course2[z].course_teacher.split(",").length > 0){
+                if (this.cType == "0") {
+                  _courseArray[i].subject[j].course += _course2[z].text
+                    ? parseInt((parseInt(_course2[z].text) / 3600).toFixed(0))
+                    : 0;
+                } else if (this.cType == "2") {
+                  if (_course2[z].course_teacher.split(",").length > 0) {
                     _courseArray[i].subject[j].course++;
                   }
-                }else if(this.cType == '3'){
-                  if(_course2[z].worksCount > 0){
+                } else if (this.cType == "3") {
+                  if (_course2[z].worksCount > 0) {
                     _courseArray[i].subject[j].course++;
                   }
-                }else if(this.cType == '4'){
-                  if(_course2[z].evaCount > 0){
+                } else if (this.cType == "4") {
+                  if (_course2[z].evaCount > 0) {
                     _courseArray[i].subject[j].course++;
                   }
-                }     
+                }
               }
             }
           }
@@ -625,7 +832,11 @@ export default {
           this.teacherNum = res.data[3][0].count; //教师总数
           let _teacherNumYear = res.data[4]; //半年内教师数量
           let _teacherLoginYear = res.data[5]; //半年内登录教师
-
+          let _classList1 = res.data[26]; //班级
+          this.classList = _classList1.filter((el) => {
+            return el.count > 0;
+          });
+          // this.cTypeRank = _classList1[0].id
           //将数据根据time里面的月份分成多个数组
           let teacherNumCountMonthArray = [];
           let teacherLoginCountMonthArray = [];
@@ -780,7 +991,7 @@ export default {
           let _course = res.data[10]; //课程
           this._courseArray = JSON.parse(JSON.stringify(_course));
           this._course2 = res.data[25]; //查询课程
-          this.typeChange2()
+          this.typeChange2();
 
           let _gradeArray = [];
           let _subjectArray = [];
@@ -970,7 +1181,107 @@ export default {
         })
         .catch((err) => {
           this.isLoading = false;
-          this.$message.error('因加载数据量过大,服务器统计异常,请联系管理员。');
+          this.$message.error(
+            "因加载数据量过大,服务器统计异常,请联系管理员。"
+          );
+          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 + "selectDataboardTeacherRank", params)
+        .then((res) => {
+          this.rankLoading = false;
+          this.courseType = 1;
+          let rankData = [];
+          let teachers = res.data[0]; //教师总数
+          let loginTimeAll = res.data[1]; //教师总登录时长
+          let loginCountAll = res.data[2]; //教师总登录频次
+          let courses = res.data[3]; //教师创建及协同课程总数
+          let projects = res.data[4]; //教师创建及协同项目总数
+          let courseWorks = res.data[5]; //教师创建及协同有作业的课程总数
+          let evaWorks = res.data[6]; //教师创建及协同有作业有评价的课程总数
+
+          for (let i = 0; i < teachers.length; i++) {
+            rankData.push({
+              name: teachers[i].name,
+              userid: teachers[i].userid,
+              classid: teachers[i].cclassid,
+              loginTime: 0,
+              loginCount: 0,
+              courses: 0,
+              projects: 0,
+              courseWorks: 0,
+              worksRate: 0,
+              score: 0,
+            });
+          }
+
+          for (var j = 0; j < rankData.length; j++) {
+            for (var i = 0; i < loginTimeAll.length; i++) {
+              if (loginTimeAll[i].userid == rankData[j].userid) {
+                rankData[j].loginTime += parseInt(
+                  (loginTimeAll[i].text / 60 / 60).toFixed(0)
+                );
+              }
+            }
+
+            for (var i = 0; i < loginCountAll.length; i++) {
+              if (loginCountAll[i].userid == rankData[j].userid) {
+                rankData[j].loginCount++;
+              }
+            }
+
+            for (var i = 0; i < courses.length; i++) {
+              if (courses[i].userid == rankData[j].userid) {
+                rankData[j].courses++;
+              }
+            }
+
+            for (var i = 0; i < projects.length; i++) {
+              if (projects[i].userid == rankData[j].userid) {
+                rankData[j].projects++;
+              }
+            }
+
+            for (var i = 0; i < courseWorks.length; i++) {
+              if (courseWorks[i].userid == rankData[j].userid) {
+                rankData[j].courseWorks++;
+              }
+            }
+
+            for (var i = 0; i < evaWorks.length; i++) {
+              if (evaWorks[i].userid == rankData[j].userid) {
+                rankData[j].worksRate++;
+              }
+            }
+
+            rankData[j].score = (
+              rankData[j].loginTime * 0.1 +
+              rankData[j].loginCount * 0.1 +
+              rankData[j].courses * 0.1 +
+              rankData[j].projects * 0.1 +
+              rankData[j].courseWorks * 0.3 +
+              rankData[j].worksRate * 0.3
+            ).toFixed(0);
+          }
+
+          this.rankData = rankData;
+          this.$forceUpdate();
+        })
+        .catch((err) => {
+          this.rankLoading = false;
+          this.$message.error(
+            "因加载数据量过大,服务器统计异常,请联系管理员。"
+          );
           console.error(err);
         });
     },
@@ -994,7 +1305,7 @@ export default {
   height: 100%;
 }
 
-.left>.top {
+.left > .top {
   width: 100%;
   height: calc(100% / 2 - 10px);
   background: #fff;
@@ -1002,7 +1313,7 @@ export default {
   margin: 0 0 20px 0;
 }
 
-.left>.bottom {
+.left > .bottom {
   width: 100%;
   height: calc(100% / 2 - 10px);
   background: #fff;
@@ -1015,7 +1326,7 @@ export default {
   margin: 0 20px;
 }
 
-.center>.top {
+.center > .top {
   width: 100%;
   height: calc(100% / 5 * 3 - 10px);
   background: #fff;
@@ -1023,7 +1334,7 @@ export default {
   margin: 0 0 20px 0;
 }
 
-.center>.bottom {
+.center > .bottom {
   width: 100%;
   height: calc(100% / 5 * 2 - 10px);
   background: #fff;
@@ -1035,7 +1346,7 @@ export default {
   height: 100%;
 }
 
-.right>.top {
+.right > .top {
   width: 100%;
   height: calc(100% / 2 - 10px);
   background: #fff;
@@ -1043,7 +1354,7 @@ export default {
   margin: 0 0 20px 0;
 }
 
-.right>.bottom {
+.right > .bottom {
   width: 100%;
   height: calc(100% / 2 - 10px);
   background: #fff;
@@ -1101,38 +1412,44 @@ export default {
   margin: 0 0 0 15px;
 }
 
-.timeDiv>div {
+.timeDiv > div {
   margin-right: 10px;
   cursor: pointer;
 }
 
 .cNum {
-  background: linear-gradient(180deg,
-      rgb(125, 227, 174, 0.2) 0%,
-      rgb(23, 196, 105, 0.3) 100%) !important;
+  background: linear-gradient(
+    180deg,
+    rgb(125, 227, 174, 0.2) 0%,
+    rgb(23, 196, 105, 0.3) 100%
+  ) !important;
 }
 
 .tNum {
-  background: linear-gradient(180deg,
-      rgb(174, 204, 254, 0.2) 0%,
-      rgb(54, 129, 252, 0.3) 100%) !important;
+  background: linear-gradient(
+    180deg,
+    rgb(174, 204, 254, 0.2) 0%,
+    rgb(54, 129, 252, 0.3) 100%
+  ) !important;
 }
 
 .tSum {
-  background: linear-gradient(180deg,
-      rgb(125, 227, 174, 0.2) 0%,
-      rgb(23, 196, 105, 0.3) 100%) !important;
+  background: linear-gradient(
+    180deg,
+    rgb(125, 227, 174, 0.2) 0%,
+    rgb(23, 196, 105, 0.3) 100%
+  ) !important;
 }
 
-.teaLeft>div:first-child,
-.teaMiddle>div:first-child {
+.teaLeft > div:first-child,
+.teaMiddle > div:first-child {
   font-size: 12px;
   font-weight: 400;
   color: #565e6a;
 }
 
-.teaLeft>div:last-child,
-.teaMiddle>div:last-child {
+.teaLeft > div:last-child,
+.teaMiddle > div:last-child {
   font-size: 22px;
   font-weight: bold;
   color: #060e17;
@@ -1163,7 +1480,7 @@ export default {
   cursor: pointer;
 }
 
-.otherImg>img {
+.otherImg > img {
   width: 100%;
   height: 100%;
 }
@@ -1200,25 +1517,26 @@ export default {
   justify-content: center;
 }
 
-.depth>span:nth-child(1) {
+.depth > span:nth-child(1) {
   font-size: 14px;
   font-weight: 700;
   margin: 0 0 10px;
 }
 
-.depth>div:nth-child(1) {}
+.depth > div:nth-child(1) {
+}
 
 .selectBox {
   width: 80px;
   margin-left: 10px;
 }
 
-.selectBox>>>.el-input__inner {
+.selectBox >>> .el-input__inner {
   height: 30px;
   line-height: 30px;
 }
 
-.selectBox>>>.el-input__icon {
+.selectBox >>> .el-input__icon {
   line-height: 30px;
 }
 
@@ -1231,9 +1549,9 @@ export default {
   margin: 0 auto;
 }
 
-.info_box>.info2,
-.info_box>.info3,
-.info_box>.info {
+.info_box > .info2,
+.info_box > .info3,
+.info_box > .info {
   width: calc(50% - 10px);
   display: flex;
   flex-direction: row;
@@ -1247,19 +1565,19 @@ export default {
   border-radius: 5px;
 }
 
-.info_box>.info2 {
+.info_box > .info2 {
   width: calc(100% / 4 - 10px);
   /* align-items: flex-end; */
 }
 
-.info_box>.info3 {
+.info_box > .info3 {
   width: 100%;
   margin-bottom: 5px;
 }
 
-.info_box>.info2>span:nth-child(1),
-.info_box>.info3>span:nth-child(1),
-.info_box>.info>span:nth-child(1) {
+.info_box > .info2 > span:nth-child(1),
+.info_box > .info3 > span:nth-child(1),
+.info_box > .info > span:nth-child(1) {
   font-size: 12px;
   /* margin: 0 0 0 20px; */
   color: #565e6a;
@@ -1268,9 +1586,9 @@ export default {
   word-break: break-all;
 }
 
-.info_box>.info2>span:nth-child(2),
-.info_box>.info3>span:nth-child(2),
-.info_box>.info>span:nth-child(2) {
+.info_box > .info2 > span:nth-child(2),
+.info_box > .info3 > span:nth-child(2),
+.info_box > .info > span:nth-child(2) {
   font-size: 24px;
   /* font-weight: 700; */
 }