|
@@ -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; */
|
|
|
}
|