|
@@ -1,6 +1,7 @@
|
|
|
<template>
|
|
|
<div class="area-data-container">
|
|
|
<vuescroll ref="art-dasboard">
|
|
|
+ <Loading v-show="isLoading"></Loading>
|
|
|
<back-to-top @on-to-top="backToTop"></back-to-top>
|
|
|
<div class="tab-box" style="padding:0px 20px 5px 20px;">
|
|
|
<span class="pane" style="line-height:30px;padding:2px;margin-right:30px" @click="tabClick('primary')" :class="{ active: periodId === 'primary' }">
|
|
@@ -85,19 +86,19 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 课程被挤占情况 -->
|
|
|
- <div class="online-train-wrap">
|
|
|
+ <!-- <div class="online-train-wrap">
|
|
|
<h4 class="block-title">课程被挤占情况(音乐)</h4>
|
|
|
<div class="chart-data-wrap">
|
|
|
<OccupyCourse :schools="musicOcc"></OccupyCourse>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div> -->
|
|
|
<!-- 课程被挤占情况 -->
|
|
|
- <div class="online-train-wrap">
|
|
|
+ <!-- <div class="online-train-wrap">
|
|
|
<h4 class="block-title">课程被挤占情况(美术)</h4>
|
|
|
<div class="chart-data-wrap">
|
|
|
<OccupyCourse :schools="drawOcc"></OccupyCourse>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </div> -->
|
|
|
<!-- 学校列表 -->
|
|
|
<div class="online-train-wrap">
|
|
|
<div style="height:30px">
|
|
@@ -109,10 +110,10 @@
|
|
|
<img class="school-img" :src="item.picture || defImg">
|
|
|
<div style="margin-left:10px;height:fit-content;">
|
|
|
<p class="school-name" :title="item.name">{{item.name}}</p>
|
|
|
- <p class="school-value">
|
|
|
+ <!-- <p class="school-value">
|
|
|
<span>学生人数:</span>
|
|
|
<span>{{item.stuNum}}人</span>
|
|
|
- </p>
|
|
|
+ </p> -->
|
|
|
<p class="school-value">
|
|
|
<span>音乐及格率:</span>
|
|
|
<span>{{item.musicPass || 0}}%</span>
|
|
@@ -148,10 +149,12 @@ export default {
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
+ isLoading: false,
|
|
|
keyword: '',
|
|
|
primaryData: {},
|
|
|
middleData: {},
|
|
|
periodId: 'primary',
|
|
|
+ allData: {}
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
@@ -162,35 +165,50 @@ export default {
|
|
|
return this.middleData
|
|
|
}
|
|
|
},
|
|
|
+ curPeriodData() {
|
|
|
+ let data = {}
|
|
|
+ if (this.periodId == 'primary') {
|
|
|
+ data.periodInfo = this.allData.pSchool || {}
|
|
|
+ data.overall = this.allData.psubject || []
|
|
|
+ data.knData = this.allData.allBlock?.find(item => item.school == '小学') || {}
|
|
|
+ data.examData = this.allData.pschoolScore || []
|
|
|
+ } else {
|
|
|
+ data.periodInfo = this.allData.hSchool || {}
|
|
|
+ data.overall = this.allData.hsubject || []
|
|
|
+ data.knData = this.allData.allBlock?.find(item => item.school == '初中') || {}
|
|
|
+ data.examData = this.allData.hschoolScore || []
|
|
|
+ }
|
|
|
+ return data
|
|
|
+ },
|
|
|
// 头部统计数据
|
|
|
topData() {
|
|
|
- let { schoolNum, classNum, studentNum, subjectNum } = this.curData.periodInfo
|
|
|
+ let { scCount, classCount, stuCount, subjectCount } = this.curPeriodData.periodInfo
|
|
|
let topData = [
|
|
|
{
|
|
|
icon: 'ios-people',
|
|
|
color: '#2d8cf0',
|
|
|
- number: schoolNum,
|
|
|
+ number: scCount || 0,
|
|
|
text: '学校数量',
|
|
|
type: 'num'
|
|
|
},
|
|
|
{
|
|
|
icon: 'md-cube',
|
|
|
color: '#2db7f5',
|
|
|
- number: classNum,
|
|
|
+ number: classCount || 0,
|
|
|
text: '班级数量',
|
|
|
type: 'num'
|
|
|
},
|
|
|
{
|
|
|
icon: 'md-thumbs-up',
|
|
|
color: '#ff9900',
|
|
|
- number: subjectNum,
|
|
|
+ number: subjectCount || 0,
|
|
|
text: '学科数',
|
|
|
type: 'num'
|
|
|
},
|
|
|
{
|
|
|
icon: 'md-bookmark',
|
|
|
color: '#5cadff',
|
|
|
- number: studentNum,
|
|
|
+ number: stuCount || 0,
|
|
|
text: '学生人数',
|
|
|
type: 'num'
|
|
|
},
|
|
@@ -206,23 +224,35 @@ export default {
|
|
|
},
|
|
|
//总览数据
|
|
|
overallData() {
|
|
|
- return this.curData.overall
|
|
|
+ return this.curPeriodData.overall
|
|
|
},
|
|
|
// 音乐知识点数据
|
|
|
musicKn() {
|
|
|
- return this.curData.musicKn
|
|
|
+ let musicKn = this.curPeriodData.knData.sub?.find(item => item.key === 'subject_music')
|
|
|
+ let formatData = []
|
|
|
+ if (musicKn && musicKn.sl) {
|
|
|
+ formatData = this.formatKnData(musicKn)
|
|
|
+ }
|
|
|
+ return formatData
|
|
|
},
|
|
|
//美术知识点数据
|
|
|
drawKn() {
|
|
|
- return this.curData.drawKn
|
|
|
+ let drawKn = this.curPeriodData.knData.sub?.find(item => item.key === 'subject_painting')
|
|
|
+ let formatData = []
|
|
|
+ if (drawKn && drawKn.sl) {
|
|
|
+ formatData = this.formatKnData(drawKn)
|
|
|
+ }
|
|
|
+ return formatData
|
|
|
},
|
|
|
//音乐评测数据
|
|
|
musicExam() {
|
|
|
- return this.curData.musicExam
|
|
|
+ let examData = this.curPeriodData.examData
|
|
|
+ return this.formatExamData(examData, 'subject_music')
|
|
|
},
|
|
|
//音乐评测数据
|
|
|
drawExam() {
|
|
|
- return this.curData.drawExam
|
|
|
+ let examData = this.curPeriodData.examData
|
|
|
+ return this.formatExamData(examData, 'subject_painting')
|
|
|
},
|
|
|
//课程被挤占情况
|
|
|
musicOcc() {
|
|
@@ -239,12 +269,16 @@ export default {
|
|
|
return this.curData.drawAward
|
|
|
},
|
|
|
schoolList() {
|
|
|
- let data = this.curData.musicExam.map((item, index) => {
|
|
|
+ let data = this.curPeriodData.examData.map((item, index) => {
|
|
|
+ let music = item.scores.find(s=>s.subjectId == 'subject_music')
|
|
|
+ let musicPass = music ? music.pass : 0
|
|
|
+ let draw = item.scores.find(s=>s.subjectId == 'subject_painting')
|
|
|
+ let drawPass = draw ? draw.pass : 0
|
|
|
return {
|
|
|
name: item.name,
|
|
|
- stuNum: item.stuNum,
|
|
|
- musicPass: item.passRate,
|
|
|
- drawPass: this.curData.drawExam[index].passRate
|
|
|
+ code:item.code,
|
|
|
+ musicPass: musicPass,
|
|
|
+ drawPass: drawPass
|
|
|
}
|
|
|
})
|
|
|
return data
|
|
@@ -261,13 +295,61 @@ export default {
|
|
|
this.defImg = require('@/assets/image/def-school-img.png')
|
|
|
this.primaryData = require('./data/primary.json')
|
|
|
this.middleData = require('./data/middle.json')
|
|
|
+ this.getAreaArtAnalysis()
|
|
|
},
|
|
|
methods: {
|
|
|
+ formatExamData(examData, subject) {
|
|
|
+ if(examData && examData.length){
|
|
|
+ let data = examData.map(school=>{
|
|
|
+ let item = {
|
|
|
+ name:school.name
|
|
|
+ }
|
|
|
+ let resource = school.scores.find(i=>i.subjectId === subject) || {}
|
|
|
+ console.log('333',resource)
|
|
|
+ return Object.assign(item,resource)
|
|
|
+ })
|
|
|
+ console.log(2222,data)
|
|
|
+ return data
|
|
|
+ }
|
|
|
+ return []
|
|
|
+ },
|
|
|
+ formatKnData(data) {
|
|
|
+ return data.sl.map(item => {
|
|
|
+ let level2 = item.kno?.length ? item.kno[0] : ''
|
|
|
+ let level1 = ''
|
|
|
+ if (level2) {
|
|
|
+ let d = data.blk.find(dim => dim.name === level2)
|
|
|
+ level1 = d?.dim.length ? d.dim[0] : ''
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ "name": item.key,
|
|
|
+ "level1": level1,
|
|
|
+ "level2": level2,
|
|
|
+ "val": item.scores
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ //获取区级艺术统计数据
|
|
|
+ getAreaArtAnalysis() {
|
|
|
+ this.isLoading = true
|
|
|
+ this.$api.areaArt.areaArtAna({
|
|
|
+ id: sessionStorage.getItem('areaId')
|
|
|
+ }).then(
|
|
|
+ res => {
|
|
|
+ if (res) {
|
|
|
+ this.allData = res
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ).finally(() => {
|
|
|
+ this.isLoading = false
|
|
|
+ })
|
|
|
+ },
|
|
|
toSchoolDetail(school) {
|
|
|
+ let schoolInfo = this.schoolList.find(item=>item.code == school.code)
|
|
|
this.$router.push({
|
|
|
- name: 'schoolArt',
|
|
|
+ name: 'artDashboard',
|
|
|
params: {
|
|
|
- schoolInfo: school
|
|
|
+ schoolInfo: schoolInfo
|
|
|
}
|
|
|
})
|
|
|
},
|