206 lines
5.5 KiB
JavaScript
206 lines
5.5 KiB
JavaScript
import * as apis from '@/services/apis'
|
|
import { orderBy } from 'lodash'
|
|
import moment from "moment";
|
|
import {generateUUID} from "ant-design-vue/lib/vc-select/util";
|
|
|
|
const colors = [
|
|
'#00FEF6',
|
|
'#FF9811',
|
|
'#FF4D11',
|
|
'#529a58',
|
|
'#D58FFF',
|
|
'#0395F6',
|
|
'#d5b11e',
|
|
'#03f634',
|
|
'#d5391e',
|
|
'#f6ce03'
|
|
]
|
|
export default {
|
|
created() {
|
|
this.getData()
|
|
if (this.timer) {
|
|
clearInterval(this.timer)
|
|
this.timer = null
|
|
}
|
|
this.timer = setInterval(() => {
|
|
this.getData()
|
|
}, 5000)
|
|
},
|
|
beforeDestroy() {
|
|
if (this.timer) {
|
|
clearInterval(this.timer)
|
|
this.timer = null
|
|
}
|
|
},
|
|
data () {
|
|
return {
|
|
resourcesStatistics: {},
|
|
studentGradStatistics: [],
|
|
deviceStatistics: {},
|
|
accessStatistics: {},
|
|
classBrandStatistics: {},
|
|
studentAttendanceStatistics: {},
|
|
studentAttendanceStatisticsPie: [],
|
|
leaveStatistics: [],
|
|
gradeStatistics: [],
|
|
gradeStatisticsData: [],
|
|
accessInfo: [],
|
|
studentSexStatistics: {
|
|
men: {
|
|
total: 0,
|
|
percent: 0
|
|
},
|
|
women: {
|
|
total: 0,
|
|
percent: 0
|
|
}
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
getData () {
|
|
this.getResourcesStatistics()
|
|
this.getStudentGradStatistics()
|
|
this.getStudentSexStatistics()
|
|
this.getDeviceStatistics()
|
|
this.getAccessStatistics()
|
|
this.getClassBrandStatistics()
|
|
this.getAccessInfo()
|
|
this.getStudentAttendanceStatistics()
|
|
this.getGradeStatistics()
|
|
this.getLeaveStatistics()
|
|
},
|
|
|
|
getPercent (num, total) {
|
|
if (num === 0) return 0
|
|
if (total === 0) return 100
|
|
return (num * 100 / total).toFixed(2)
|
|
},
|
|
// 获取教育资源
|
|
async getResourcesStatistics () {
|
|
const { data } = await apis.getResourcesStatistics()
|
|
this.resourcesStatistics = data || {}
|
|
},
|
|
// 各年级学生分布信息
|
|
async getStudentGradStatistics () {
|
|
const {data} = await apis.getStudentGradStatistics()
|
|
|
|
this.studentGradStatistics = (data || []).map((item, index) => {
|
|
return {
|
|
attr: '年级分布',
|
|
name: `${item.gradeIndex}年级`,
|
|
value: item.studentNumber,
|
|
color: colors[index]
|
|
}
|
|
})
|
|
|
|
},
|
|
// 性别分布
|
|
async getStudentSexStatistics () {
|
|
const { data } = await apis.getStudentSexStatistics()
|
|
const total = (data || []).reduce((a, b) => a + b.studentNumber || 0, 0)
|
|
const men = (data || []).filter(item => `${item.studentSex}` === '1').reduce((a, b) => a + b.studentNumber || 0, 0)
|
|
const women = (data || []).filter(item => `${item.studentSex}` === '2').reduce((a, b) => a + b.studentNumber || 0, 0)
|
|
this.studentSexStatistics = {
|
|
men: {
|
|
total: men,
|
|
percent: this.getPercent(men, total)
|
|
},
|
|
women: {
|
|
total: women,
|
|
percent: this.getPercent(women, total)
|
|
}
|
|
}
|
|
},
|
|
// 电子班牌概况
|
|
async getDeviceStatistics () {
|
|
const { data } = await apis.getDeviceStatistics()
|
|
this.deviceStatistics = data || {}
|
|
},
|
|
// 门禁出入人数
|
|
async getAccessStatistics () {
|
|
const { data } = await apis.getAccessStatistics()
|
|
this.accessStatistics = data || {}
|
|
},
|
|
|
|
async getClassBrandStatistics () {
|
|
const { data } = await apis.getClassBrandStatistics()
|
|
this.classBrandStatistics = data || {}
|
|
},
|
|
|
|
|
|
async getAccessInfo () {
|
|
const { data } = await apis.getAccessInfo()
|
|
this.accessInfo = (data || []).map(item => ({
|
|
...item,
|
|
uuid: generateUUID()
|
|
}))
|
|
},
|
|
|
|
async getStudentAttendanceStatistics () {
|
|
const { data } = await apis.getStudentAttendanceStatistics()
|
|
const _data = data || {}
|
|
this.studentAttendanceStatistics =_data
|
|
this.studentAttendanceStatisticsPie = [
|
|
{
|
|
attr: '考勤',
|
|
name: '出勤',
|
|
value: _data.studentAttendanceNumber || 0,
|
|
color: colors[0]
|
|
},
|
|
{
|
|
attr: '考勤',
|
|
name: '迟到',
|
|
value: _data.studentAttendanceLaterNumber || 0,
|
|
color: colors[1]
|
|
},
|
|
{
|
|
attr: '考勤',
|
|
name: '缺勤',
|
|
value: _data.studentAttendanceLossNumber || 0,
|
|
color: colors[2]
|
|
},
|
|
{
|
|
attr: '考勤',
|
|
name: '请假',
|
|
value: _data.studentAttendanceLeaveNumber || 0,
|
|
color: colors[3]
|
|
}
|
|
]
|
|
},
|
|
|
|
async getGradeStatistics () {
|
|
const { data } = await apis.getGradeStatistics()
|
|
this.gradeStatisticsData = data || []
|
|
this.getGradeStatisticsPieData()
|
|
},
|
|
getGradeStatisticsPieData () {
|
|
const item = this.gradeStatisticsData.find(item => `${item && item.gradeIndex}` === `${this.cls}`) || {}
|
|
this.gradeStatistics = orderBy((item.classStatisticsList || []).map((item, index) => ({
|
|
attr: '班级',
|
|
name: `${item.className }`,
|
|
value: item.studentNumber || 0,
|
|
color: colors[index]
|
|
})), ['name'], ['asc'])
|
|
},
|
|
|
|
async getLeaveStatistics () {
|
|
const { data } = await apis.getLeaveStatistics()
|
|
this.leaveStatistics = (data || []).map(item => {
|
|
return [
|
|
{
|
|
attr: '事假',
|
|
name: moment(item.leaveDate).format('MM/DD'),
|
|
value: item.businessLeavee || 0
|
|
},
|
|
{
|
|
attr: '病假',
|
|
name: moment(item.leaveDate).format('MM/DD'),
|
|
value: item.sickLeaveNumber || 0
|
|
}
|
|
]
|
|
}).flat(Infinity)
|
|
}
|
|
}
|
|
}
|