|
@@ -0,0 +1,366 @@
|
|
|
+<template>
|
|
|
+ <div class="statisticsbox">
|
|
|
+ <c-scrollbar ref="scrollbarRef" width="100%" height="88vh" trigger="hover" direction="y">
|
|
|
+ <div class="top-resource">
|
|
|
+ <div class="top-aspects" v-for="(item,index) in aspectsData" :key="index">
|
|
|
+ <div :class="[item.classname,'left-top-icon']">
|
|
|
+ <svg :class="'top-header-icon'" aria-hidden="true">
|
|
|
+ <use :xlink:href="item.icon"></use>
|
|
|
+ </svg>
|
|
|
+ </div>
|
|
|
+ <div class="right-top-text">
|
|
|
+ <p class="right-top-num">{{item.num}}</p>
|
|
|
+ <p class="right-top-title">{{item.title}}</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="leftbox">
|
|
|
+ <div class="tagbox">
|
|
|
+ <p class="tags basics"><span>基础数据</span></p>
|
|
|
+ </div>
|
|
|
+ <div :class="[items.type==='month' ? 'alonebox' :'totalalonebox']" v-for="(items,indexs) in activityData" :key="indexs">
|
|
|
+ <p :class="[items.type ==='month' ? 'alonebox-title':'total-alonebox-title']">{{items.title}}</p>
|
|
|
+ <p :class="[items.type ==='month' ? 'alonebox-content':'total-alonebox-content']">{{items.num}}</p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="rightbox">
|
|
|
+ <div class="tagbox">
|
|
|
+ <p class="tags basics"><span>基础数据</span></p>
|
|
|
+ </div>
|
|
|
+ <div class="rightbox-pie">
|
|
|
+ <CommonPie></CommonPie>
|
|
|
+ </div>
|
|
|
+ <div class="rightbox-pie">
|
|
|
+ <Test></Test>
|
|
|
+ </div>
|
|
|
+ <div class="rightbox-pie versions">
|
|
|
+ <VersionsPie></VersionsPie>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="center-resource">
|
|
|
+ <div class="center-resource-left">
|
|
|
+ <div class="tagbox ">
|
|
|
+ <p class="tags source"><span>课例数据</span></p>
|
|
|
+ </div>
|
|
|
+ <SchoolPie></SchoolPie>
|
|
|
+ </div>
|
|
|
+ <div class="center-resource-right">
|
|
|
+ <div class="tagbox">
|
|
|
+ <p class="tags dynamic"><span>课例活跃度</span></p>
|
|
|
+ </div>
|
|
|
+ <CommonLine></CommonLine>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="bottom-resource">
|
|
|
+ <div class="bottom-leftbox">
|
|
|
+ <div class="tagbox">
|
|
|
+ <p class="tags types"><span>类型占比</span></p>
|
|
|
+ </div>
|
|
|
+ <DoublePie></DoublePie>
|
|
|
+ </div>
|
|
|
+ <div class="bottom-rightbox">
|
|
|
+ <div class="tagbox">
|
|
|
+ <p class="tags interspace"><span>空间使用情况</span></p>
|
|
|
+ </div>
|
|
|
+ <div class="bottom-rightbox-left">
|
|
|
+ <PiegangedBar></PiegangedBar>
|
|
|
+ </div>
|
|
|
+ <div class="bottom-rightbox-right">
|
|
|
+ <SizePie></SizePie>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </c-scrollbar>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import { ref } from 'vue'
|
|
|
+import CommonPie from '@/components/echarts/commonPie.vue'
|
|
|
+import VersionsPie from '@/components/echarts/versionsPie.vue'
|
|
|
+import SchoolPie from '@/components/echarts/schoolPie.vue'
|
|
|
+import CommonLine from '@/components/echarts/commonLine.vue'
|
|
|
+import DoublePie from '@/components/echarts/doublePie.vue'
|
|
|
+import PiegangedBar from '@/components/echarts/PiegangedBar.vue'
|
|
|
+import SizePie from '@/components/echarts/sizePie.vue'
|
|
|
+import Test from '@/components/echarts/test.vue'
|
|
|
+import * as echarts from 'echarts'
|
|
|
+import 'echarts-liquidfill'
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ CommonPie,
|
|
|
+ VersionsPie,
|
|
|
+ SchoolPie,
|
|
|
+ CommonLine,
|
|
|
+ DoublePie,
|
|
|
+ PiegangedBar,
|
|
|
+ SizePie,
|
|
|
+ Test,
|
|
|
+ },
|
|
|
+ setup() {
|
|
|
+ let aspectsData = ref([
|
|
|
+ { id: 1, title: '区内学校', num: 0, icon: '#icon-renshixuexiao', classname: 'school' },
|
|
|
+ { id: 2, title: '区内老师', num: 0, icon: '#icon-laoshi', classname: 'teach' },
|
|
|
+ { id: 3, title: '本周数据', num: 0, icon: '#icon-benzhou', classname: 'months' },
|
|
|
+ { id: 4, title: '产出总数据', num: 0, icon: '#icon-ziyuan1', classname: 'datas' },
|
|
|
+ { id: 5, title: '空间总容量', num: 0, icon: '#icon-kongjian', classname: 'size' },
|
|
|
+ ])
|
|
|
+ let activityData = ref([
|
|
|
+ { id: 1, title: '本周课例数', num: 15, type: 'month' },
|
|
|
+ { id: 2, title: '学期课例数', num: 75, type: 'month' },
|
|
|
+ { id: 3, title: '本周活动数', num: 35, type: 'month' },
|
|
|
+ { id: 4, title: '学期活动数', num: 475, type: 'month' },
|
|
|
+ { id: 5, title: '累计课例', num: 9805, type: 'total' },
|
|
|
+ { id: 6, title: '优质课例', num: 9875, type: 'total' },
|
|
|
+ { id: 7, title: '累计资源', num: 1355, type: 'total' },
|
|
|
+ { id: 8, title: '累计活动', num: 705, type: 'total' },
|
|
|
+ ])
|
|
|
+ let eachSchool = ref({
|
|
|
+ color: ['#f53b57', '#0fbcf9', '#0be881', '#575fcf', '#ffd32a'],
|
|
|
+ data: [
|
|
|
+ { id: 1, title: '实验附小', value: 1340 },
|
|
|
+ { id: 2, title: '师大附中', value: 800 },
|
|
|
+ { id: 3, title: '成都锦江区外国语小学', value: 340 },
|
|
|
+ ],
|
|
|
+ type: 'eachschool',
|
|
|
+ })
|
|
|
+ return { aspectsData, activityData, eachSchool }
|
|
|
+ },
|
|
|
+}
|
|
|
+</script>
|
|
|
+<style scoped>
|
|
|
+.statisticsbox {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ padding: 0% 1%;
|
|
|
+ line-height: 20px;
|
|
|
+}
|
|
|
+.top-resource {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-top: 10px;
|
|
|
+ padding-right: 10px;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+.top-aspects {
|
|
|
+ width: 17%;
|
|
|
+ height: 110px;
|
|
|
+ position: relative;
|
|
|
+ border-radius: 2px;
|
|
|
+ overflow: hidden;
|
|
|
+}
|
|
|
+.left-top-icon {
|
|
|
+ float: left;
|
|
|
+ height: 100%;
|
|
|
+ display: table;
|
|
|
+ text-align: center;
|
|
|
+ background: rgb(45, 140, 240);
|
|
|
+ width: 36%;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.right-top-text {
|
|
|
+ width: 64%;
|
|
|
+ background: #fff;
|
|
|
+ float: left;
|
|
|
+ height: 100%;
|
|
|
+ display: table;
|
|
|
+ text-align: center;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.top-header-icon {
|
|
|
+ width: 45px;
|
|
|
+ height: 45px;
|
|
|
+ fill: currentColor;
|
|
|
+ overflow: hidden;
|
|
|
+ position: absolute;
|
|
|
+ top: 50%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+}
|
|
|
+.right-top-num {
|
|
|
+ position: absolute;
|
|
|
+ font-size: 48px;
|
|
|
+ top: 30%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, -50%);
|
|
|
+ color: #515a6e;
|
|
|
+}
|
|
|
+.right-top-title {
|
|
|
+ position: absolute;
|
|
|
+ font-size: 16px;
|
|
|
+ bottom: 0%;
|
|
|
+ left: 50%;
|
|
|
+ transform: translate(-50%, 0%);
|
|
|
+ color: #2c3e50;
|
|
|
+}
|
|
|
+.leftbox {
|
|
|
+ width: 48%;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ background-color: #fff;
|
|
|
+ margin-top: 2%;
|
|
|
+ padding: 15px;
|
|
|
+ position: relative;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+.rightbox {
|
|
|
+ width: 50%;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ background-color: #fff;
|
|
|
+ margin-top: 2%;
|
|
|
+ padding: 23px;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.alonebox {
|
|
|
+ width: 19%;
|
|
|
+ padding: 7px;
|
|
|
+ text-align: left;
|
|
|
+ background-color: #95afc0;
|
|
|
+ border-radius: 5px;
|
|
|
+ margin: 2% 2.5%;
|
|
|
+}
|
|
|
+.totalalonebox {
|
|
|
+ width: 19%;
|
|
|
+ padding: 7px;
|
|
|
+ text-align: left;
|
|
|
+ background-color: #60a3bc;
|
|
|
+ border-radius: 5px;
|
|
|
+ margin: 1% 2.5%;
|
|
|
+}
|
|
|
+.alonebox-title {
|
|
|
+ font-size: 16px;
|
|
|
+ color: #535c68;
|
|
|
+ font-weight: 600;
|
|
|
+}
|
|
|
+.total-alonebox-title {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #dff9fb;
|
|
|
+}
|
|
|
+.alonebox-content {
|
|
|
+ font-size: 26px;
|
|
|
+ color: #fff;
|
|
|
+ font-weight: 750;
|
|
|
+}
|
|
|
+.total-alonebox-content {
|
|
|
+ font-size: 26px;
|
|
|
+ color: #fff;
|
|
|
+ font-weight: 750;
|
|
|
+}
|
|
|
+.rightbox-pie {
|
|
|
+ width: 30%;
|
|
|
+ height: 205px;
|
|
|
+}
|
|
|
+.tagbox {
|
|
|
+ width: 100%;
|
|
|
+ height: 40px;
|
|
|
+ position: absolute;
|
|
|
+ top: 3px;
|
|
|
+ left: 1px;
|
|
|
+}
|
|
|
+.tags {
|
|
|
+ width: 100px;
|
|
|
+ height: 22px;
|
|
|
+ background: rgb(256 169 100) no-repeat center;
|
|
|
+ background-size: contain;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 400;
|
|
|
+ color: #ffffff;
|
|
|
+ text-align: center;
|
|
|
+ position: relative;
|
|
|
+ display: block;
|
|
|
+}
|
|
|
+.tags:after {
|
|
|
+ border: 12px solid #fff;
|
|
|
+ content: '';
|
|
|
+ border-top-color: transparent;
|
|
|
+ border-left-color: transparent;
|
|
|
+ border-bottom-color: transparent;
|
|
|
+ width: 0px;
|
|
|
+ height: 0px;
|
|
|
+ position: absolute;
|
|
|
+ left: calc(118px - 40px);
|
|
|
+ top: 0px;
|
|
|
+}
|
|
|
+.center-resource {
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ margin-top: 2%;
|
|
|
+}
|
|
|
+.center-resource-left {
|
|
|
+ width: 30%;
|
|
|
+ height: 300px;
|
|
|
+ position: relative;
|
|
|
+ background: #fff;
|
|
|
+ padding: 20px 10px;
|
|
|
+}
|
|
|
+.center-resource-right {
|
|
|
+ width: 67.5%;
|
|
|
+ margin-left: 2%;
|
|
|
+ height: 300px;
|
|
|
+ position: relative;
|
|
|
+ background: #fff;
|
|
|
+ padding: 25px 10px;
|
|
|
+}
|
|
|
+.versions {
|
|
|
+ width: 35% !important;
|
|
|
+}
|
|
|
+.bottom-resource {
|
|
|
+ width: 100%;
|
|
|
+ margin-top: 0px;
|
|
|
+ padding: 30px 0px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ justify-content: flex-start;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.bottom-leftbox {
|
|
|
+ width: 40%;
|
|
|
+ padding: 1%;
|
|
|
+ height: 200px;
|
|
|
+ background: #fff;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+.bottom-rightbox {
|
|
|
+ width: 57.5%;
|
|
|
+ height: 200px;
|
|
|
+ background-color: #fff;
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ position: relative;
|
|
|
+ margin-left: 2%;
|
|
|
+}
|
|
|
+.bottom-rightbox-left {
|
|
|
+ width: 30%;
|
|
|
+ height: 100%;
|
|
|
+ margin-left: 10%;
|
|
|
+}
|
|
|
+.bottom-rightbox-right {
|
|
|
+ width: 60%;
|
|
|
+ height: 100%;
|
|
|
+}
|
|
|
+.school,
|
|
|
+.basics {
|
|
|
+ background: rgb(45, 140, 240);
|
|
|
+}
|
|
|
+.teach,
|
|
|
+.types {
|
|
|
+ background: #2ecc71 !important;
|
|
|
+}
|
|
|
+.datas,
|
|
|
+.source {
|
|
|
+ background: #f1c40f !important;
|
|
|
+}
|
|
|
+.size,
|
|
|
+.interspace {
|
|
|
+ background: #7ed6df !important;
|
|
|
+}
|
|
|
+.months,
|
|
|
+.dynamic {
|
|
|
+ background: #ef5777 !important;
|
|
|
+}
|
|
|
+</style>
|