|
@@ -1,16 +1,45 @@
|
|
|
<template>
|
|
|
<div id="FiveEduIndex" ref="appRef">
|
|
|
<div class="bg">
|
|
|
- <dv-loading v-if="loading">{{ $t('researchCenter.dashboard.loading') }}</dv-loading>
|
|
|
+ <dv-loading v-if="loading">{{
|
|
|
+ $t("researchCenter.dashboard.loading")
|
|
|
+ }}</dv-loading>
|
|
|
<div v-else-if="isAll" class="host-body all-student">
|
|
|
<div class="tools">
|
|
|
- <Cascader :data="targetData" v-model="targetValue" change-on-select :clearable="false" @on-change="onTargetChange" />
|
|
|
- <span class="time-text">{{ dateYear }} <span style="display: inline-block; margin: 0 5px;color: #0fa2fe;">{{ dateDay }}</span> </span>
|
|
|
- <span class="icon iconfont icon-tuichuquanping" style="font-size: 22px;" :title="$t('researchCenter.dashboard.quit')" @click="goBack"></span>
|
|
|
+ <Select
|
|
|
+ v-model="semesterValue"
|
|
|
+ @on-change="onSemesterChange"
|
|
|
+ style="width: 160px"
|
|
|
+ >
|
|
|
+ <Option v-for="(item, index) in semesterData" :value="index">{{
|
|
|
+ item
|
|
|
+ }}</Option>
|
|
|
+ </Select>
|
|
|
+ <Cascader
|
|
|
+ :data="targetData"
|
|
|
+ v-model="targetValue"
|
|
|
+ change-on-select
|
|
|
+ :clearable="false"
|
|
|
+ @on-change="onTargetChange"
|
|
|
+ />
|
|
|
+ <span
|
|
|
+ class="icon iconfont icon-tuichuquanping"
|
|
|
+ style="font-size: 22px"
|
|
|
+ :title="$t('researchCenter.dashboard.quit')"
|
|
|
+ @click="goBack"
|
|
|
+ ></span>
|
|
|
</div>
|
|
|
<div class="school-info">
|
|
|
- <div class="dash-menus" style="display:flex;">
|
|
|
- <div :class="['menu-item', activeMenuId === menu.id ? 'menu-item-active' : '']" v-for="(menu,menuIndex) in menus" :key="menuIndex" @click="onMenuClick(menu)">
|
|
|
+ <div class="dash-menus" style="display: flex">
|
|
|
+ <div
|
|
|
+ :class="[
|
|
|
+ 'menu-item',
|
|
|
+ activeMenuId === menu.id ? 'menu-item-active' : '',
|
|
|
+ ]"
|
|
|
+ v-for="(menu, menuIndex) in menus"
|
|
|
+ :key="menuIndex"
|
|
|
+ @click="onMenuClick(menu)"
|
|
|
+ >
|
|
|
<span>{{ menu.name }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -21,9 +50,17 @@
|
|
|
<dv-decoration-8 class="dv-dec-8" :color="['#568aea', '#000000']" />
|
|
|
<div class="title">
|
|
|
<span class="dash-title-text">学生五育大数据看板</span>
|
|
|
- <dv-decoration-6 class="dv-dec-6" :reverse="true" :color="['#50e3c2', '#67a1e5']" />
|
|
|
+ <dv-decoration-6
|
|
|
+ class="dv-dec-6"
|
|
|
+ :reverse="true"
|
|
|
+ :color="['#50e3c2', '#67a1e5']"
|
|
|
+ />
|
|
|
</div>
|
|
|
- <dv-decoration-8 class="dv-dec-8" :reverse="true" :color="['#568aea', '#000000']" />
|
|
|
+ <dv-decoration-8
|
|
|
+ class="dv-dec-8"
|
|
|
+ :reverse="true"
|
|
|
+ :color="['#568aea', '#000000']"
|
|
|
+ />
|
|
|
</div>
|
|
|
<dv-decoration-10 class="dv-dec-10-s" />
|
|
|
</div>
|
|
@@ -36,10 +73,19 @@
|
|
|
<div class="dashboard-block">
|
|
|
<div class="block-content">
|
|
|
<div class="static-wrap">
|
|
|
- <div class="item" v-for="(item,index) in staticArr">
|
|
|
- <span class="num" :style="{color:item.color}">
|
|
|
- <countTo :startVal='0' :endVal='item.val' :duration='1000' class="count-num"></countTo>
|
|
|
- <span v-show="index > 3" style="font-size: 30px;margin-left:-10px">%</span>
|
|
|
+ <div class="item" v-for="(item, index) in staticArr">
|
|
|
+ <span class="num" :style="{ color: item.color }">
|
|
|
+ <countTo
|
|
|
+ :startVal="0"
|
|
|
+ :endVal="item.val"
|
|
|
+ :duration="1000"
|
|
|
+ class="count-num"
|
|
|
+ ></countTo>
|
|
|
+ <span
|
|
|
+ v-show="index > 3"
|
|
|
+ style="font-size: 30px; margin-left: -10px"
|
|
|
+ >%</span
|
|
|
+ >
|
|
|
</span>
|
|
|
<span class="label">{{ item.label }}</span>
|
|
|
</div>
|
|
@@ -54,23 +100,23 @@
|
|
|
<dv-border-box-13>
|
|
|
<div class="dashboard-block">
|
|
|
<div class="block-title">
|
|
|
- <span>近三次评测统计图</span>
|
|
|
- <dv-decoration-1 style="width:150px;height:20px;" />
|
|
|
+ <span>班级综合排名</span>
|
|
|
+ <dv-decoration-1 style="width: 80px; height: 20px" />
|
|
|
</div>
|
|
|
- <div class="block-content">
|
|
|
- <!-- <BaseWordCloud></BaseWordCloud> -->
|
|
|
- <BaseExamLine></BaseExamLine>
|
|
|
+ <div class="block-content" style="padding-top: 0">
|
|
|
+ <dv-scroll-board :config="classRankConfig" />
|
|
|
</div>
|
|
|
</div>
|
|
|
</dv-border-box-13>
|
|
|
<dv-border-box-13>
|
|
|
<div class="dashboard-block">
|
|
|
<div class="block-title">
|
|
|
- <span>智育稳定度统计分布</span>
|
|
|
- <dv-decoration-1 style="width:150px;height:20px;" />
|
|
|
+ <span>个人综合排名</span>
|
|
|
+ <dv-decoration-1 style="width: 80px; height: 20px" />
|
|
|
+ <BaseDashSelect></BaseDashSelect>
|
|
|
</div>
|
|
|
<div class="block-content">
|
|
|
- <BaseScoreBar></BaseScoreBar>
|
|
|
+ <BaseStuRankList @stu-click="goStudent"></BaseStuRankList>
|
|
|
</div>
|
|
|
</div>
|
|
|
</dv-border-box-13>
|
|
@@ -79,22 +125,12 @@
|
|
|
<div class="bottom">
|
|
|
<dv-border-box-13>
|
|
|
<div class="dashboard-block">
|
|
|
-
|
|
|
<div class="block-title">
|
|
|
<span>学生德育风采</span>
|
|
|
- <dv-decoration-1 style="width:150px;height:20px;" />
|
|
|
+ <dv-decoration-1 style="width: 80px; height: 20px" />
|
|
|
</div>
|
|
|
<div class="block-content">
|
|
|
<BaseCarousel></BaseCarousel>
|
|
|
- <!-- <div class="honor-avatar">
|
|
|
- <div class="honor-item" v-for="(item,index) in stuTopArr" :key="index">
|
|
|
- <img class="img-avatar" @click="goStudent()" src="https://paas-admin.xydqq.cn/img/avatar.647bbbfe.png" alt="" width="80">
|
|
|
- <img class="img-crown" src="@/assets/dashboard/student/icon_crown.png" alt="" v-show="index === 0">
|
|
|
- <img class="img-crown" src="@/assets/dashboard/student/icon_crown2.png" alt="" v-show="index === 1">
|
|
|
- <img class="img-crown" src="@/assets/dashboard/student/icon_crown3.png" alt="" v-show="index === 2">
|
|
|
- <span>学生姓名{{ index + 1 }}</span>
|
|
|
- </div>
|
|
|
- </div> -->
|
|
|
</div>
|
|
|
</div>
|
|
|
</dv-border-box-13>
|
|
@@ -103,38 +139,16 @@
|
|
|
<dv-border-box-13>
|
|
|
<div class="dashboard-block">
|
|
|
<div class="block-title">
|
|
|
- <span>班级综合排名</span>
|
|
|
- <dv-decoration-1 style="width:150px;height:20px;" />
|
|
|
- <BasePaging></BasePaging>
|
|
|
+ <span>学生学习表现统计图</span>
|
|
|
+ <dv-decoration-1 style="width: 80px; height: 20px" />
|
|
|
+ <BaseDashTab
|
|
|
+ :tabs="['评测活动表现', '课堂学习表现']"
|
|
|
+ @tab-change="onLineBarTabChange"
|
|
|
+ ></BaseDashTab>
|
|
|
</div>
|
|
|
<div class="block-content">
|
|
|
- <dv-scroll-board :config="classRankConfig" />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </dv-border-box-13>
|
|
|
- <dv-border-box-13>
|
|
|
- <div class="dashboard-block">
|
|
|
- <div class="block-title">
|
|
|
- <span>个人综合排名</span>
|
|
|
- <dv-decoration-1 style="width:150px;height:20px;" v-if="!inClassView" />
|
|
|
- <BasePaging></BasePaging>
|
|
|
- </div>
|
|
|
- <div class="block-content">
|
|
|
- <div class="stu-search-wrap" v-if="inClassView">
|
|
|
- <Select filterable v-model="curStuIndex" style="width:200px" @on-change="onStuSelect">
|
|
|
- <Option v-for="(item,index) in stuList" :value="index" :key="item.id">{{ item.name }}({{ item.id }})</Option>
|
|
|
- </Select>
|
|
|
- </div>
|
|
|
- <!-- <dv-scroll-board :config="gradeRankConfig" /> -->
|
|
|
- <div class="honor-avatar" v-if="homeData">
|
|
|
- <div class="honor-item" v-for="(item,index) in stuTopArr" :key="index">
|
|
|
- <img class="img-avatar" @click="goStudent(item)" :src="item.picture || require('../stu_avatar.png')" alt="" width="68">
|
|
|
- <img class="img-crown" src="@/assets/dashboard/student/icon_crown.png" alt="" v-show="index === 0">
|
|
|
- <img class="img-crown" src="@/assets/dashboard/student/icon_crown2.png" alt="" v-show="index === 1">
|
|
|
- <img class="img-crown" src="@/assets/dashboard/student/icon_crown3.png" alt="" v-show="index === 2">
|
|
|
- <span>{{ item.name }}</span>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
+ <BaseLineBar v-if="lineBarType === 'exam'"></BaseLineBar>
|
|
|
+ <BaseStudyLineBar v-else></BaseStudyLineBar>
|
|
|
</div>
|
|
|
</div>
|
|
|
</dv-border-box-13>
|
|
@@ -149,11 +163,37 @@
|
|
|
<div class="dashboard-block">
|
|
|
<div class="block-title">
|
|
|
<span>体育优秀达标数据</span>
|
|
|
- <dv-decoration-1 style="width:150px;height:20px;" />
|
|
|
+ <dv-decoration-1 style="width: 80px; height: 20px" />
|
|
|
</div>
|
|
|
<div class="block-content" v-if="homeData">
|
|
|
- <BaseCircle circleId="sportGoodCircle" chatName="优秀率" :percent="homeData.sports_count ? +((homeData.sports_count90 / homeData.sports_count) * 100).toFixed(1) : 0" :subTitle="homeData.sports_count90 + '人'"></BaseCircle>
|
|
|
- <BaseCircle circleId="sportNormalCircle" chatName="达标率" :percent="homeData.sports_count ? +((homeData.sports_count60 / homeData.sports_count) * 100).toFixed(1): 0" :subTitle="homeData.sports_count60 + '人'"></BaseCircle>
|
|
|
+ <BaseCircle
|
|
|
+ circleId="sportGoodCircle"
|
|
|
+ chatName="优秀率"
|
|
|
+ :percent="
|
|
|
+ homeData.sports_count
|
|
|
+ ? +(
|
|
|
+ (homeData.sports_count90 /
|
|
|
+ homeData.sports_count) *
|
|
|
+ 100
|
|
|
+ ).toFixed(1)
|
|
|
+ : 0
|
|
|
+ "
|
|
|
+ :subTitle="homeData.sports_count90 + '人'"
|
|
|
+ ></BaseCircle>
|
|
|
+ <BaseCircle
|
|
|
+ circleId="sportNormalCircle"
|
|
|
+ chatName="达标率"
|
|
|
+ :percent="
|
|
|
+ homeData.sports_count
|
|
|
+ ? +(
|
|
|
+ (homeData.sports_count60 /
|
|
|
+ homeData.sports_count) *
|
|
|
+ 100
|
|
|
+ ).toFixed(1)
|
|
|
+ : 0
|
|
|
+ "
|
|
|
+ :subTitle="homeData.sports_count60 + '人'"
|
|
|
+ ></BaseCircle>
|
|
|
</div>
|
|
|
</div>
|
|
|
</dv-border-box-13>
|
|
@@ -163,11 +203,22 @@
|
|
|
<div class="dashboard-block">
|
|
|
<div class="block-title">
|
|
|
<span>艺术优秀达标数据</span>
|
|
|
- <dv-decoration-1 style="width:150px;height:20px;" />
|
|
|
+ <dv-decoration-1 style="width: 80px; height: 20px" />
|
|
|
+ <BaseDashTab :tabs="['音乐', '美术']"></BaseDashTab>
|
|
|
</div>
|
|
|
<div class="block-content">
|
|
|
- <BaseCircle circleId="artGoodCircle" chatName="优秀率" :percent="42" subTitle="66人"></BaseCircle>
|
|
|
- <BaseCircle circleId="artNormalCircle" chatName="达标率" :percent="83" subTitle="1284人"></BaseCircle>
|
|
|
+ <BaseCircle
|
|
|
+ circleId="artGoodCircle"
|
|
|
+ chatName="优秀率"
|
|
|
+ :percent="42"
|
|
|
+ subTitle="66人"
|
|
|
+ ></BaseCircle>
|
|
|
+ <BaseCircle
|
|
|
+ circleId="artNormalCircle"
|
|
|
+ chatName="达标率"
|
|
|
+ :percent="83"
|
|
|
+ subTitle="1284人"
|
|
|
+ ></BaseCircle>
|
|
|
</div>
|
|
|
</div>
|
|
|
</dv-border-box-13>
|
|
@@ -177,11 +228,21 @@
|
|
|
<div class="dashboard-block">
|
|
|
<div class="block-title">
|
|
|
<span>劳动实践常用任务</span>
|
|
|
- <dv-decoration-1 style="width:150px;height:20px;" />
|
|
|
+ <dv-decoration-1 style="width: 80px; height: 20px" />
|
|
|
</div>
|
|
|
<div class="block-content">
|
|
|
- <BaseCircle circleId="workGoodCircle" chatName="优秀率" :percent="87" subTitle="207人"></BaseCircle>
|
|
|
- <BaseCircle circleId="workNormalCircle" chatName="达标率" :percent="92" subTitle="1666人"></BaseCircle>
|
|
|
+ <BaseCircle
|
|
|
+ circleId="workGoodCircle"
|
|
|
+ chatName="优秀率"
|
|
|
+ :percent="87"
|
|
|
+ subTitle="207人"
|
|
|
+ ></BaseCircle>
|
|
|
+ <BaseCircle
|
|
|
+ circleId="workNormalCircle"
|
|
|
+ chatName="达标率"
|
|
|
+ :percent="92"
|
|
|
+ subTitle="1666人"
|
|
|
+ ></BaseCircle>
|
|
|
<!-- <BaseProgressBar></BaseProgressBar> -->
|
|
|
<!-- <BaseScoreBar></BaseScoreBar> -->
|
|
|
</div>
|
|
@@ -193,79 +254,89 @@
|
|
|
|
|
|
<StudyDash v-else-if="activeMenuId === 'study'"></StudyDash>
|
|
|
<MoralDash v-else-if="activeMenuId === 'moral'"></MoralDash>
|
|
|
- <!-- <ArtDash v-else-if="activeMenuId === 'art'"></ArtDash> -->
|
|
|
- <!-- <div class="sport-box" style="width:100%;height:90vh;padding-top:25px;" v-show="activeMenuId === 'sport'">
|
|
|
- <iframe src="https://ydztshow.cdwalker.com/app-health-100/smart-course" width="100%" height="100%" frameborder="0"></iframe>
|
|
|
- </div> -->
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
<Modal v-model="noAuthModal" footer-hide :transfer="false">
|
|
|
<!-- <p style="color: #5b60a5;text-align:center;font-weight: bold;font-size:18px;margin">温馨提示</p> -->
|
|
|
- <p style=" color: #fff;font-weight: bold;margin:20px;font-size:18px">您当前所在学校尚未购买【{{ noAuthName }}】大数据模块,无法查看,详请联系学校管理员</p>
|
|
|
+ <p style="color: #fff; font-weight: bold; margin: 20px; font-size: 18px">
|
|
|
+ 您当前所在学校尚未购买【{{
|
|
|
+ noAuthName
|
|
|
+ }}】大数据模块,无法查看,详请联系学校管理员
|
|
|
+ </p>
|
|
|
</Modal>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import countTo from 'vue-count-to'
|
|
|
-import BaseRateLine from '@/components/dashboard/studentAll/BaseRateLine'
|
|
|
-import BaseWordCloud from '@/components/dashboard/studentAll/BaseWordCloud'
|
|
|
-import BaseScoreBar from '@/components/dashboard/studentAll/BaseScoreBar'
|
|
|
-import BaseGenderPie from '@/components/dashboard/studentAll/BaseGenderPie'
|
|
|
-import BaseArtCircle from '@/components/dashboard/student/BaseArtCircle'
|
|
|
-import BaseMusicCircle from '@/components/dashboard/student/BaseMusicCircle'
|
|
|
-import BaseCircle from '@/components/dashboard/student/BaseCircle'
|
|
|
-import StudentDetails from '../Student'
|
|
|
-import BaseProgressBar from '@/components/dashboard/student/BaseProgressBar'
|
|
|
-import StudyDash from '../study/StudyDash'
|
|
|
-import BaseExamLine from '../study/BaseExamLine'
|
|
|
-import MoralDash from '../moral/MoralDash'
|
|
|
-import ArtDash from '../Art.vue'
|
|
|
-import BaseCarousel from '../moral/BaseCarousel'
|
|
|
+import autofit from "autofit.js";
|
|
|
+import countTo from "vue-count-to";
|
|
|
+import BaseLineBar from "@/components/dashboard/studentAll/BaseLineBar";
|
|
|
+import BaseStudyLineBar from "@/components/dashboard/studentAll/BaseStudyLineBar";
|
|
|
+import BaseRateLine from "@/components/dashboard/studentAll/BaseRateLine";
|
|
|
+import BaseWordCloud from "@/components/dashboard/studentAll/BaseWordCloud";
|
|
|
+import BaseScoreBar from "@/components/dashboard/studentAll/BaseScoreBar";
|
|
|
+import BaseGenderPie from "@/components/dashboard/studentAll/BaseGenderPie";
|
|
|
+import BaseArtCircle from "@/components/dashboard/student/BaseArtCircle";
|
|
|
+import BaseMusicCircle from "@/components/dashboard/student/BaseMusicCircle";
|
|
|
+import BaseStuRankList from "@/components/dashboard/student/BaseStuRankList";
|
|
|
+import BaseCircle from "@/components/dashboard/student/BaseCircle";
|
|
|
+import StudentDetails from "../Student";
|
|
|
+import BaseProgressBar from "@/components/dashboard/student/BaseProgressBar";
|
|
|
+import StudyDash from "../study/StudyDash";
|
|
|
+import MoralDash from "../moral/MoralDash";
|
|
|
+import ArtDash from "../Art.vue";
|
|
|
+import BaseCarousel from "../moral/BaseCarousel";
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
- noAuthName: '劳动教育',
|
|
|
+ lineBarType:'exam',
|
|
|
+ noAuthName: "劳动教育",
|
|
|
noAuthModal: false,
|
|
|
curStuIndex: -1,
|
|
|
stuList: [],
|
|
|
stuTopArr: new Array(8),
|
|
|
targetValue: [],
|
|
|
targetData: [],
|
|
|
+ semesterData: [
|
|
|
+ "2023年上学期",
|
|
|
+ "2023年下学期",
|
|
|
+ "2022年上学期",
|
|
|
+ "2022年下学期",
|
|
|
+ ],
|
|
|
+ semesterValue: 0,
|
|
|
homeData: null,
|
|
|
menus: [
|
|
|
{
|
|
|
- id: 'all',
|
|
|
- name: '总览',
|
|
|
+ id: "all",
|
|
|
+ name: "总览",
|
|
|
},
|
|
|
{
|
|
|
- id: 'moral',
|
|
|
- name: '德'
|
|
|
+ id: "moral",
|
|
|
+ name: "德",
|
|
|
},
|
|
|
{
|
|
|
- id: 'study',
|
|
|
- name: '智'
|
|
|
+ id: "study",
|
|
|
+ name: "智",
|
|
|
},
|
|
|
{
|
|
|
- id: 'sport',
|
|
|
- name: '体'
|
|
|
+ id: "sport",
|
|
|
+ name: "体",
|
|
|
},
|
|
|
{
|
|
|
- id: 'art',
|
|
|
- name: '艺'
|
|
|
+ id: "art",
|
|
|
+ name: "艺",
|
|
|
},
|
|
|
{
|
|
|
- id: 'work',
|
|
|
- name: '劳'
|
|
|
- }
|
|
|
+ id: "work",
|
|
|
+ name: "劳",
|
|
|
+ },
|
|
|
],
|
|
|
- activeMenuId: 'all',
|
|
|
+ activeMenuId: "all",
|
|
|
isFull: false,
|
|
|
isAll: true,
|
|
|
activeClassIndex: -1,
|
|
|
activeGradeIndex: 0,
|
|
|
- activeMenu: 'music',
|
|
|
+ activeMenu: "music",
|
|
|
timing: null,
|
|
|
loading: true,
|
|
|
dateDay: null,
|
|
@@ -275,46 +346,52 @@ export default {
|
|
|
selectClassIds: [],
|
|
|
staticArr: [
|
|
|
{
|
|
|
- label: '学生总数',
|
|
|
- color: '#7ec4ff',
|
|
|
- val: 0
|
|
|
+ label: "学生总数",
|
|
|
+ color: "#7ec4ff",
|
|
|
+ val: 0,
|
|
|
},
|
|
|
{
|
|
|
- label: '年级数',
|
|
|
- color: '#7ec4ff',
|
|
|
- val: 0
|
|
|
- }, {
|
|
|
- label: '班级数',
|
|
|
- color: '#7ec4ff',
|
|
|
- val: 0
|
|
|
+ label: "年级数",
|
|
|
+ color: "#7ec4ff",
|
|
|
+ val: 0,
|
|
|
},
|
|
|
{
|
|
|
- label: '活动数',
|
|
|
- color: '#7ec4ff',
|
|
|
- val: 0
|
|
|
+ label: "班级数",
|
|
|
+ color: "#7ec4ff",
|
|
|
+ val: 0,
|
|
|
},
|
|
|
{
|
|
|
- label: '优秀率',
|
|
|
- color: '#20d99d',
|
|
|
- val: 0
|
|
|
+ label: "活动数",
|
|
|
+ color: "#7ec4ff",
|
|
|
+ val: 0,
|
|
|
},
|
|
|
{
|
|
|
- label: '及格率',
|
|
|
- color: '#ff8e2e',
|
|
|
- val: 0
|
|
|
- }
|
|
|
+ label: "优秀率",
|
|
|
+ color: "#20d99d",
|
|
|
+ val: 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: "及格率",
|
|
|
+ color: "#ff8e2e",
|
|
|
+ val: 0,
|
|
|
+ },
|
|
|
],
|
|
|
- classes: ['1班', '2班', '3班', '4班', '5班', '6班'],
|
|
|
- grades: ['五年级', '六年级'],
|
|
|
+ classes: ["1班", "2班", "3班", "4班", "5班", "6班"],
|
|
|
+ grades: ["五年级", "六年级"],
|
|
|
gradeRankConfig: {
|
|
|
- header: ['<span style="color:#32c5e9;font-weight: bold;">年级</span>', '<span style="color:#32c5e9;font-weight: bold;">最高分</span>', '<span style="color:#32c5e9;font-weight: bold;">最低分</span>', '<span style="color:#32c5e9;font-weight: bold;">综合平均分</span>'],
|
|
|
+ header: [
|
|
|
+ '<span style="color:#32c5e9;font-weight: bold;">年级</span>',
|
|
|
+ '<span style="color:#32c5e9;font-weight: bold;">最高分</span>',
|
|
|
+ '<span style="color:#32c5e9;font-weight: bold;">最低分</span>',
|
|
|
+ '<span style="color:#32c5e9;font-weight: bold;">综合平均分</span>',
|
|
|
+ ],
|
|
|
data: [
|
|
|
- ['大一年级', '84.3 分', '52.1 分', '74.3 分'],
|
|
|
- ['大二年级', '82.6 分', '54.3 分', '72.3 分'],
|
|
|
- ['大三年级', '76.0 分', '43.8 分', '68.1 分'],
|
|
|
- ['大四年级', '74.1 分', '40.2 分', '61.8 分'],
|
|
|
+ ["大一年级", "84.3 分", "52.1 分", "74.3 分"],
|
|
|
+ ["大二年级", "82.6 分", "54.3 分", "72.3 分"],
|
|
|
+ ["大三年级", "76.0 分", "43.8 分", "68.1 分"],
|
|
|
+ ["大四年级", "74.1 分", "40.2 分", "61.8 分"],
|
|
|
],
|
|
|
- align: ['center'],
|
|
|
+ align: ["center"],
|
|
|
rowNum: 5,
|
|
|
headerHeight: 50,
|
|
|
headerBGC: "transparent", //表头
|
|
@@ -322,58 +399,68 @@ export default {
|
|
|
evenRowBGC: "transparent", //偶数行
|
|
|
},
|
|
|
classRankConfig: {
|
|
|
- header: ['<span style="color:#32c5e9;font-weight: bold;">班级</span>', '<span style="color:#32c5e9;font-weight: bold;">最高分</span>', '<span style="color:#32c5e9;font-weight: bold;">最低分</span>', '<span style="color:#32c5e9;font-weight: bold;">综合平均分</span>'],
|
|
|
+ header: [
|
|
|
+ '<span style="color:#7ec4ff;font-weight: 200;font-size:12px">班级</span>',
|
|
|
+ '<span style="color:#7ec4ff;font-weight: 200;font-size:12px">最高分</span>',
|
|
|
+ '<span style="color:#7ec4ff;font-weight: 200;font-size:12px">最低分</span>',
|
|
|
+ '<span style="color:#7ec4ff;font-weight: 200;font-size:12px">平均分</span>',
|
|
|
+ ],
|
|
|
data: [
|
|
|
- ['大一年级1班', '84.3 分', '65.7 分', '74.8 分'],
|
|
|
- ['大一年级2班', '82.6 分', '64.3 分', '72.3 分'],
|
|
|
- ['大一年级3班', '76.0 分', '60.9 分', '69.9 分'],
|
|
|
- ['大一年级4班', '74.1 分', '52.6 分', '65.3 分'],
|
|
|
- ['大一年级5班', '65.8 分', '48.7 分', '56.8 分'],
|
|
|
+ ["1班", "84.3", "65.7", "74.8"],
|
|
|
+ ["2班", "82.6", "64.3", "72.3"],
|
|
|
+ ["3班", "76.0", "60.9", "69.9"],
|
|
|
+ ["4班", "74.1", "52.6", "65.3"],
|
|
|
+ ["5班", "65.8", "48.7", "56.8"],
|
|
|
+ ["6班", "76.0", "60.9", "69.9"],
|
|
|
+ ["7班", "74.1", "52.6", "65.3"],
|
|
|
+ ["8班", "65.8", "48.7", "56.8"],
|
|
|
],
|
|
|
- align: ['center'],
|
|
|
- rowNum: 5,
|
|
|
- headerHeight: 50,
|
|
|
+ align: ["center", "center", "center", "center"],
|
|
|
+ rowNum: 6,
|
|
|
+ headerHeight: 40,
|
|
|
headerBGC: "transparent", //表头
|
|
|
oddRowBGC: "transparent", //奇数行
|
|
|
- evenRowBGC: "transparent", //偶数行
|
|
|
+ evenRowBGC: "#07427f52",
|
|
|
},
|
|
|
sportConfig: {
|
|
|
data: [
|
|
|
{
|
|
|
- name: '篮球',
|
|
|
- value: 55
|
|
|
+ name: "篮球",
|
|
|
+ value: 55,
|
|
|
},
|
|
|
{
|
|
|
- name: '足球',
|
|
|
- value: 120
|
|
|
+ name: "足球",
|
|
|
+ value: 120,
|
|
|
},
|
|
|
{
|
|
|
- name: '排球',
|
|
|
- value: 71
|
|
|
+ name: "排球",
|
|
|
+ value: 71,
|
|
|
},
|
|
|
{
|
|
|
- name: '羽毛球',
|
|
|
- value: 66
|
|
|
+ name: "羽毛球",
|
|
|
+ value: 66,
|
|
|
},
|
|
|
{
|
|
|
- name: '网球',
|
|
|
- value: 80
|
|
|
+ name: "网球",
|
|
|
+ value: 80,
|
|
|
},
|
|
|
],
|
|
|
img: [
|
|
|
- require('@/assets/dashboard/student/sport2.png'),
|
|
|
- require('@/assets/dashboard/student/sport5.png'),
|
|
|
- require('@/assets/dashboard/student/sport3.png'),
|
|
|
- require('@/assets/dashboard/student/sport4.png'),
|
|
|
- require('@/assets/dashboard/student/sport1.png'),
|
|
|
+ require("@/assets/dashboard/student/sport2.png"),
|
|
|
+ require("@/assets/dashboard/student/sport5.png"),
|
|
|
+ require("@/assets/dashboard/student/sport3.png"),
|
|
|
+ require("@/assets/dashboard/student/sport4.png"),
|
|
|
+ require("@/assets/dashboard/student/sport1.png"),
|
|
|
],
|
|
|
imgSideLength: 20,
|
|
|
- showValue: true
|
|
|
- }
|
|
|
- }
|
|
|
+ showValue: true,
|
|
|
+ },
|
|
|
+ };
|
|
|
},
|
|
|
components: {
|
|
|
- BaseExamLine,
|
|
|
+ BaseStudyLineBar,
|
|
|
+ BaseStuRankList,
|
|
|
+ BaseLineBar,
|
|
|
StudyDash,
|
|
|
ArtDash,
|
|
|
MoralDash,
|
|
@@ -387,109 +474,124 @@ export default {
|
|
|
BaseMusicCircle,
|
|
|
BaseCircle,
|
|
|
BaseProgressBar,
|
|
|
- BaseCarousel
|
|
|
+ BaseCarousel,
|
|
|
},
|
|
|
mounted() {
|
|
|
+ autofit.init({
|
|
|
+ designHeight: 980,
|
|
|
+ designWidth: 1920,
|
|
|
+ renderDom: "#FiveEduIndex",
|
|
|
+ resize: true,
|
|
|
+ });
|
|
|
if (!this.isFull) {
|
|
|
setTimeout(() => {
|
|
|
- this.$tools.fullScreen(document.getElementById('FiveEduIndex'))
|
|
|
- this.isFull = true
|
|
|
- }, 100)
|
|
|
+ this.$tools.fullScreen(document.getElementById("FiveEduIndex"));
|
|
|
+ this.isFull = true;
|
|
|
+ }, 100);
|
|
|
}
|
|
|
- this.timeFn()
|
|
|
+ this.timeFn();
|
|
|
// this.cancelLoading()
|
|
|
},
|
|
|
beforeDestroy() {
|
|
|
- clearInterval(this.timing)
|
|
|
+ clearInterval(this.timing);
|
|
|
},
|
|
|
created() {
|
|
|
if (!this.isTestView) {
|
|
|
- this.activeMenuId = 'study'
|
|
|
+ this.activeMenuId = "study";
|
|
|
}
|
|
|
- this.curPeriod = this.$store.state.user.curPeriod
|
|
|
- this.findTargets()
|
|
|
-
|
|
|
+ this.curPeriod = this.$store.state.user.curPeriod;
|
|
|
+ this.findTargets();
|
|
|
},
|
|
|
methods: {
|
|
|
+ onLineBarTabChange(val){
|
|
|
+ this.lineBarType = val === 0 ? 'exam' : 'study'
|
|
|
+ },
|
|
|
findHomeData(target) {
|
|
|
- let curSemester = this.$tools.getCurSemester()
|
|
|
+ let curSemester = this.$tools.getCurSemester();
|
|
|
let params = {
|
|
|
- "school": this.$store.state.userInfo.schoolCode,
|
|
|
- "periodId": this.curPeriod.id,
|
|
|
- "semesterId": curSemester.id,
|
|
|
- "year": 2021,
|
|
|
- "grades": [Number(target[0])]
|
|
|
- }
|
|
|
+ school: this.$store.state.userInfo.schoolCode,
|
|
|
+ periodId: this.curPeriod.id,
|
|
|
+ semesterId: curSemester.id,
|
|
|
+ year: 2021,
|
|
|
+ grades: [Number(target[0])],
|
|
|
+ };
|
|
|
if (target.length > 1) {
|
|
|
- params.classIds = [target[1]]
|
|
|
+ params.classIds = [target[1]];
|
|
|
}
|
|
|
- this.$api.dashboard.findFiveEduData(params).then(res => {
|
|
|
- this.homeData = res
|
|
|
- this.staticArr[0].val = res.studentCount
|
|
|
- this.staticArr[1].val = res.gradeCount
|
|
|
- this.staticArr[2].val = res.classCount
|
|
|
- this.staticArr[3].val = res.activityCount
|
|
|
- this.staticArr[4].val = +(res.rate90 * 100).toFixed(2)
|
|
|
- this.staticArr[5].val = +(res.rate60 * 100).toFixed(2)
|
|
|
- this.stuTopArr = res.ranking.length ? res.ranking.slice(0, 8) : this.stuList.slice(0, 8)
|
|
|
+ this.$api.dashboard.findFiveEduData(params).then((res) => {
|
|
|
+ this.homeData = res;
|
|
|
+ this.staticArr[0].val = res.studentCount;
|
|
|
+ this.staticArr[1].val = res.gradeCount;
|
|
|
+ this.staticArr[2].val = res.classCount;
|
|
|
+ this.staticArr[3].val = res.activityCount;
|
|
|
+ this.staticArr[4].val = +(res.rate90 * 100).toFixed(2);
|
|
|
+ this.staticArr[5].val = +(res.rate60 * 100).toFixed(2);
|
|
|
+ this.stuTopArr = res.ranking.length
|
|
|
+ ? res.ranking.slice(0, 8)
|
|
|
+ : this.stuList.slice(0, 8);
|
|
|
if (res.classDatas.length) {
|
|
|
- this.classRankConfig.data = res.classDatas.map(i => {
|
|
|
- return [i.className, i.best.toFixed(2) + '分', i.last.toFixed(2) + '分', i.avg.toFixed(2) + '分']
|
|
|
- })
|
|
|
+ this.classRankConfig.data = res.classDatas.map((i) => {
|
|
|
+ return [
|
|
|
+ i.className,
|
|
|
+ i.best.toFixed(2) + "分",
|
|
|
+ i.last.toFixed(2) + "分",
|
|
|
+ i.avg.toFixed(2) + "分",
|
|
|
+ ];
|
|
|
+ });
|
|
|
}
|
|
|
- this.cancelLoading()
|
|
|
- })
|
|
|
+ this.cancelLoading();
|
|
|
+ });
|
|
|
},
|
|
|
onStuSelect(val) {
|
|
|
- this.goStudent(this.stuList[val])
|
|
|
+ this.goStudent(this.stuList[val]);
|
|
|
},
|
|
|
onMenuClick(menu) {
|
|
|
switch (menu.id) {
|
|
|
- case 'all':
|
|
|
+ case "all":
|
|
|
if (this.isTestView) {
|
|
|
- this.activeMenuId = menu.id
|
|
|
+ this.activeMenuId = menu.id;
|
|
|
} else {
|
|
|
- this.noAuthModal = true
|
|
|
- this.noAuthName = '大数据总览看板'
|
|
|
+ this.noAuthModal = true;
|
|
|
+ this.noAuthName = "大数据总览看板";
|
|
|
}
|
|
|
break;
|
|
|
- case 'moral':
|
|
|
+ case "moral":
|
|
|
// if (this.isTestView) {
|
|
|
// this.activeMenuId = menu.id
|
|
|
// } else {
|
|
|
// this.noAuthModal = true
|
|
|
// this.noAuthName = '德育看板'
|
|
|
// }
|
|
|
- this.noAuthModal = true
|
|
|
- this.noAuthName = '德育看板'
|
|
|
+ this.noAuthModal = true;
|
|
|
+ this.noAuthName = "德育看板";
|
|
|
break;
|
|
|
- case 'study':
|
|
|
- this.activeMenuId = menu.id
|
|
|
+ case "study":
|
|
|
+ this.activeMenuId = menu.id;
|
|
|
break;
|
|
|
- case 'sport':
|
|
|
+ case "sport":
|
|
|
if (this.isTestView) {
|
|
|
// window.open('https://ydztshow.cdwalker.com/app-health-100/smart-course')
|
|
|
- this.activeMenuId = menu.id
|
|
|
- this.$router.push('/sportDashboard')
|
|
|
+ this.activeMenuId = menu.id;
|
|
|
+ this.$router.push("/sportDashboard");
|
|
|
} else {
|
|
|
- this.noAuthModal = true
|
|
|
- this.noAuthName = '体育看板'
|
|
|
+ this.noAuthModal = true;
|
|
|
+ this.noAuthName = "体育看板";
|
|
|
}
|
|
|
break;
|
|
|
- case 'art':
|
|
|
+ case "art":
|
|
|
// this.$tools.exitFullscreen()
|
|
|
if (this.hasArtAuth) {
|
|
|
- this.$router.push('/artDashboard')
|
|
|
- this.activeMenuId = menu.id
|
|
|
+ this.$router.push("/artDashboard");
|
|
|
+ this.activeMenuId = menu.id;
|
|
|
} else {
|
|
|
- this.noAuthModal = true
|
|
|
- this.noAuthName = '艺术测评'
|
|
|
+ this.noAuthModal = true;
|
|
|
+ this.noAuthName = "艺术测评";
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
- case 'work':
|
|
|
- this.noAuthModal = true
|
|
|
- this.noAuthName = '劳动教育看板'
|
|
|
+ case "work":
|
|
|
+ this.noAuthModal = true;
|
|
|
+ this.noAuthName = "劳动教育看板";
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
@@ -500,105 +602,117 @@ export default {
|
|
|
let params = {
|
|
|
schoolId: this.$store.state.userInfo.schoolCode,
|
|
|
periodId: this.curPeriod.id,
|
|
|
- opt: 'manage',
|
|
|
- type: ['class']
|
|
|
- }
|
|
|
+ opt: "manage",
|
|
|
+ type: ["class"],
|
|
|
+ };
|
|
|
this.$api.common.getActivityTarget(params).then(
|
|
|
- res => {
|
|
|
- let grades = this.curPeriod.grades
|
|
|
+ (res) => {
|
|
|
+ let grades = this.curPeriod.grades;
|
|
|
this.targetData = grades.map((i, index) => {
|
|
|
return {
|
|
|
label: i,
|
|
|
- value: index + 1 + ''
|
|
|
- }
|
|
|
- })
|
|
|
- let curYear = new Date().getFullYear()
|
|
|
+ value: index + 1 + "",
|
|
|
+ };
|
|
|
+ });
|
|
|
+ let curYear = new Date().getFullYear();
|
|
|
this.targetData.forEach((grade, gradeIndex) => {
|
|
|
- grade.children = res.groupLists.filter(i => i.year == curYear - gradeIndex).map(classItem => {
|
|
|
- return {
|
|
|
- label: classItem.name,
|
|
|
- value: classItem.id
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- this.targetValue = ['1']
|
|
|
- this.findHomeData(this.targetValue)
|
|
|
+ grade.children = res.groupLists
|
|
|
+ .filter((i) => i.year == curYear - gradeIndex)
|
|
|
+ .map((classItem) => {
|
|
|
+ return {
|
|
|
+ label: classItem.name,
|
|
|
+ value: classItem.id,
|
|
|
+ };
|
|
|
+ });
|
|
|
+ });
|
|
|
+ this.targetValue = ["1"];
|
|
|
+ this.findHomeData(this.targetValue);
|
|
|
},
|
|
|
- err => {
|
|
|
- this.$Messag.error('查询发布对象失败')
|
|
|
+ (err) => {
|
|
|
+ this.$Messag.error("查询发布对象失败");
|
|
|
}
|
|
|
- )
|
|
|
+ );
|
|
|
},
|
|
|
+ onSemesterChange(val) {},
|
|
|
/* 切换对象 */
|
|
|
onTargetChange(val) {
|
|
|
- this.curStuIndex = -1
|
|
|
+ this.curStuIndex = -1;
|
|
|
// 选中年级
|
|
|
if (val.length === 1) {
|
|
|
- this.inClassView = false
|
|
|
- this.selectClassIds = this.targetData[+val[0] - 1].children.map(i => i.value)
|
|
|
- this.findHomeData(val)
|
|
|
+ this.inClassView = false;
|
|
|
+ this.selectClassIds = this.targetData[+val[0] - 1].children.map(
|
|
|
+ (i) => i.value
|
|
|
+ );
|
|
|
+ this.findHomeData(val);
|
|
|
} else {
|
|
|
// 选中某个班级
|
|
|
- this.inClassView = true
|
|
|
- this.selectClassIds = [val[val.length - 1]]
|
|
|
- this.$api.common.getGroupListByIds({
|
|
|
- schoolId: this.$store.state.userInfo.schoolCode,
|
|
|
- ids: this.selectClassIds
|
|
|
- }).then(res => {
|
|
|
- this.stuList = res.members
|
|
|
- })
|
|
|
- this.findHomeData(val)
|
|
|
+ this.inClassView = true;
|
|
|
+ this.selectClassIds = [val[val.length - 1]];
|
|
|
+ this.$api.common
|
|
|
+ .getGroupListByIds({
|
|
|
+ schoolId: this.$store.state.userInfo.schoolCode,
|
|
|
+ ids: this.selectClassIds,
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ this.stuList = res.members;
|
|
|
+ });
|
|
|
+ this.findHomeData(val);
|
|
|
}
|
|
|
-
|
|
|
},
|
|
|
|
|
|
goStudent(stuInfo) {
|
|
|
- sessionStorage.setItem('dash_stu_info', JSON.stringify(stuInfo))
|
|
|
- this.$tools.exitFullscreen()
|
|
|
- this.$router.push('/stuDetails')
|
|
|
+ sessionStorage.setItem("dash_stu_info", JSON.stringify(stuInfo));
|
|
|
+ this.$tools.exitFullscreen();
|
|
|
+ this.$router.push("/stuDetails");
|
|
|
},
|
|
|
goBack() {
|
|
|
- this.$tools.exitFullscreen()
|
|
|
- this.$router.push('/home/homePage')
|
|
|
+ this.$tools.exitFullscreen();
|
|
|
+ this.$router.push("/home/homePage");
|
|
|
},
|
|
|
timeFn() {
|
|
|
this.timing = setInterval(() => {
|
|
|
- this.dateDay = this.$tools.formatTime(new Date(), 'hh:mm:ss')
|
|
|
- this.dateYear = this.$tools.formatTime(new Date(), 'yyyy-MM-dd')
|
|
|
- }, 1000)
|
|
|
+ this.dateDay = this.$tools.formatTime(new Date(), "hh:mm:ss");
|
|
|
+ this.dateYear = this.$tools.formatTime(new Date(), "yyyy-MM-dd");
|
|
|
+ }, 1000);
|
|
|
},
|
|
|
cancelLoading() {
|
|
|
setTimeout(() => {
|
|
|
- this.loading = false
|
|
|
- }, 1000)
|
|
|
+ this.loading = false;
|
|
|
+ }, 1000);
|
|
|
},
|
|
|
},
|
|
|
computed: {
|
|
|
schoolInfo() {
|
|
|
- let store_user = this.$store.state.user
|
|
|
- let semesterRange = this.$tools.getSemesterTimeRange()
|
|
|
+ let store_user = this.$store.state.user;
|
|
|
+ let semesterRange = this.$tools.getSemesterTimeRange();
|
|
|
return {
|
|
|
schoolName: store_user.schoolProfile.school_base.name,
|
|
|
schoolLogo: store_user.schoolProfile.school_base.picture,
|
|
|
periodName: store_user.curPeriod.name,
|
|
|
- curSemester: semesterRange.name
|
|
|
- }
|
|
|
+ curSemester: semesterRange.name,
|
|
|
+ };
|
|
|
},
|
|
|
/* 判断是否为测试站 */
|
|
|
isTestSite() {
|
|
|
- return window.location.host.includes('test.teammodel')
|
|
|
+ return window.location.host.includes("test.teammodel");
|
|
|
},
|
|
|
/* 醍摩豆学校和研发学校才开放查阅的DEMO页面 */
|
|
|
isTestView() {
|
|
|
- return ['habook', 'ydzt', 'cdydzt', 'hbcn'].includes(this.$store.state.userInfo.schoolCode)
|
|
|
+ return ["habook", "ydzt", "cdydzt", "hbcn"].includes(
|
|
|
+ this.$store.state.userInfo.schoolCode
|
|
|
+ );
|
|
|
},
|
|
|
/* 判断是否购买艺术评测 */
|
|
|
hasArtAuth() {
|
|
|
- let schoolProfile = JSON.parse(decodeURIComponent(localStorage.school_profile || '{}', "utf-8"))
|
|
|
- return schoolProfile.schoolShows?.find(item => item.status === 1 && item.type === 'art')
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+ let schoolProfile = JSON.parse(
|
|
|
+ decodeURIComponent(localStorage.school_profile || "{}", "utf-8")
|
|
|
+ );
|
|
|
+ return schoolProfile.schoolShows?.find(
|
|
|
+ (item) => item.status === 1 && item.type === "art"
|
|
|
+ );
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style lang="less">
|
|
@@ -610,4 +724,3 @@ export default {
|
|
|
background-color: #2fa0efe0;
|
|
|
}
|
|
|
</style>
|
|
|
-
|