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) } } }