import { defineComponent, onMounted, reactive, ref } from 'vue'; import styles from './index.module.less'; import { List, Popup, DatePicker, Popover } from 'vant'; import MSticky from '@/components/m-sticky'; import personIcon from './images/personIcon.png'; import homeIcon from './images/icon-class.png'; import memberIcon from './images/memberIcon.png'; import memberRateIcon from './images/memberRateIcon.png'; // import sanIcon from './images/san.png'; import iconArrow from './images/icon-arrow.png'; import iconArrowActive from './images/icon-arrow-active.png'; import request from '@/helpers/request'; import topDot from './images/topDot.png'; import { useRoute, useRouter } from 'vue-router'; // import { moneyFormat, numberFormat } from '@/helpers/utils'; import OFullRefresh from '@/components/m-full-refresh'; import OEmpty from '@/components/m-empty'; // import arrowIcon from './images/arrowIcon.png'; // import OHeader from '@/components/m-header'; import OSearch from '@/components/m-search'; import numeral from 'numeral'; // import MQrcode from '@/components/m-qrcode'; // import html2canvas from 'html2canvas'; import MWxTip from '@/components/m-wx-tip'; export default defineComponent({ name: 'tenant-apply-data', setup() { const route = useRoute(); const router = useRouter(); const tabName = ref('all'); const forms = reactive({ keyword: '', id: route.query.id, // id: '1687275949971763202', yearStatus: false, schoolId: null, year: [new Date().getFullYear()] as any, yearName: new Date().getFullYear(), classList: [] as any, statObj: { registerNum: 0, classNum: 0, registerMemberShipNum: 0 } as any, perponStatus: false, sortKey: 'CLASS' as 'CLASS' | 'MEMBER' | 'GRADEYEAR', sortId: 'desc', sortName: '报名人数降序', sortType: 'desc', sortList: [ { value: 'desc', text: '报名人数降序' }, { value: 'asc', text: '报名人数升序' }, { value: 'mdesc', text: '会员人数降序' }, { value: 'masc', text: '会员人数升序' }, { value: 'gdesc', text: '按学年降序' }, { value: 'gasc', text: '按学年升序' } ] as any, page: 1, rows: 20, isClick: false }); const refreshing = ref(false); const loading = ref(true); const finished = ref(false); const showContact = ref(false); const list = ref([]); // const getSchoolList = async () => { // try { // const { data } = await request.get('/edu-app/open/school/list', { // params: { // tenantId: forms.id // } // }); // const temp = [ // { // value: '', // text: '全部学校' // } // ]; // if (Array.isArray(data)) { // data.forEach((item: any) => { // temp.push({ // value: item.id, // text: item.name // }); // }); // forms.classList = temp; // } // } catch { // // // } // }; const getList = async () => { if (forms.isClick) { return; } forms.isClick = true; if (refreshing.value) { list.value = []; forms.page = 1; refreshing.value = false; } try { const res = await request.post( '/edu-app/open/school/schoolRegisterClassPage', { data: { schoolId: forms.id, page: forms.page, rows: forms.rows, // year: forms.yearName, keyword: forms.keyword, sort: forms.sortId, sortKey: forms.sortKey } } ); if (list.value.length > 0 && res.data.current === 1) { return; } list.value = list.value.concat(res.data.rows || []); forms.page = res.data.current + 1; showContact.value = list.value.length > 0; loading.value = false; finished.value = res.data.current >= res.data.pages; } catch { showContact.value = false; finished.value = true; } finally { loading.value = false; } forms.isClick = false; }; const onRefresh = () => { finished.value = false; // 重新加载数据 // 将 loading 设置为 true,表示处于加载状态 loading.value = true; getList(); }; const imgs = reactive({ saveLoading: false, image: null as any, shareLoading: false }); // 计算会员占比 const formatMemberRate = (studentNum: any, memberNum: any) => { if (studentNum <= 0 || memberNum <= 0) { return 0; } // console.log(studentNum, memberNum); return Math.round((memberNum / studentNum) * 1000) / 10; }; onMounted(async () => { if (route.query.name) { document.title = route.query.name + '报名统计'; } else { document.title = '学生报名统计'; } await getStat(); await getList(); }); const getStat = async () => { try { const { data } = await request.post( '/edu-app/open/school/schoolRegisterStat', { data: { schoolId: forms.id // year: forms.yearName } } ); forms.statObj = data; } catch { // } }; return () => (
{/* */}
汇总数据
{/*
{ forms.yearStatus = true; }}> {forms.yearName}年{' '}
*/}
{numeral(forms.statObj.registerNum).format('0,0')}
报名人数
{numeral(forms.statObj.classNum).format('0,0')}
班级数量
{numeral(forms.statObj.registerMemberShipNum).format('0,0')}
数字化人数
{numeral( formatMemberRate( forms.statObj.registerNum || 0, forms.statObj.registerMemberShipNum || 0 ) ).format('0.0')} %
数字化普及率
{ forms.keyword = val; forms.page = 1; refreshing.value = true; getList(); }}>
{/*
(forms.perponStatus = true)}> {forms.sortName}{' '}
*/} {{ reference: () => (
(forms.perponStatus = true)} > {forms.sortName}
), default: () => (
{forms.sortList.map((item: any, index: number) => (
{ const selectedOption = item; if ( selectedOption.value === 'desc' || selectedOption.value === 'asc' ) { forms.sortId = selectedOption.value; forms.sortKey = 'CLASS'; } if (selectedOption.value === 'mdesc') { forms.sortId = 'desc'; forms.sortKey = 'MEMBER'; } if (selectedOption.value === 'masc') { forms.sortId = 'asc'; forms.sortKey = 'MEMBER'; } if (selectedOption.value === 'gdesc') { forms.sortId = 'desc'; forms.sortKey = 'GRADEYEAR'; } if (selectedOption.value === 'gasc') { forms.sortId = 'asc'; forms.sortKey = 'GRADEYEAR'; } forms.sortType = selectedOption.value; forms.sortName = selectedOption.text; refreshing.value = true; getList(); forms.perponStatus = false; }}> {item.text}
))}
) }}
{showContact.value ? ( {list.value.map((item: any) => (
{/*

学校名称

*/}

{item.classGroupName} {item.gradeYear && ({item.gradeYear}学年)}

{numeral(item.registerNum || 0).format('0,0')} {/* {item.registerNum || 0} */}

报名人数

{numeral(item.registerMemberShipNum || 0).format( '0,0' )} {/* {item.registerMemberShipNum || 0} */}

数字化人数

{numeral( formatMemberRate( item.registerNum || 0, item.registerMemberShipNum || 0 ) ).format('0.0')} %

数字化普及率

{/* */}
))}
) : null} {!showContact.value && !loading.value && ( )}
(forms.yearStatus = false)} onConfirm={(val: any) => { console.log(val); // const selectedOption = val.selectedOptions[0]; // console.log(selectedOption, 'selectedOption'); // forms.schoolId = selectedOption.value; // // forms.schoolName = selectedOption.text; forms.year = [val.selectedValues[0]]; forms.yearName = val.selectedValues[0]; forms.page = 1; refreshing.value = true; getStat(); getList(); forms.yearStatus = false; }} /> {/* (forms.perponStatus = false)} onConfirm={(val: any) => { const selectedOption = val.selectedOptions[0]; if ( selectedOption.value === 'desc' || selectedOption.value === 'asc' ) { forms.sortId = selectedOption.value; forms.sortKey = 'CLASS'; } if (selectedOption.value === 'mdesc') { forms.sortId = 'desc'; forms.sortKey = 'MEMBER'; } if (selectedOption.value === 'masc') { forms.sortId = 'asc'; forms.sortKey = 'MEMBER'; } forms.sortName = selectedOption.text; refreshing.value = true; getList(); forms.perponStatus = false; }} /> */}
); } });