|
@@ -8,6 +8,7 @@ import {
|
|
|
NGi,
|
|
|
NGrid,
|
|
|
NImage,
|
|
|
+ NModal,
|
|
|
NNumberAnimation,
|
|
|
NSelect,
|
|
|
NSpace
|
|
@@ -20,12 +21,13 @@ import {
|
|
|
getNowDateAndMonday,
|
|
|
getNowDateAndSunday,
|
|
|
getTimes,
|
|
|
- formatTime
|
|
|
+ getMinutes,
|
|
|
+ getSecend
|
|
|
} from '/src/utils/dateFormat';
|
|
|
-import { getTestList } from '../api';
|
|
|
+import { getTestList, getTrainingStat } from '../api';
|
|
|
import CDatePicker from '/src/components/CDatePicker';
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
-import { get } from 'lodash';
|
|
|
+
|
|
|
export default defineComponent({
|
|
|
name: 'student-studentList',
|
|
|
setup(props, { emit }) {
|
|
@@ -43,12 +45,14 @@ export default defineComponent({
|
|
|
rows: 10,
|
|
|
pageTotal: 4
|
|
|
},
|
|
|
- tableList: [{ studentId: '1000578', studentName: '一十四' }] as any,
|
|
|
+ tableList: [] as any,
|
|
|
memberNumber: 0,
|
|
|
testInfo: {
|
|
|
practiceDurationAvg: 0,
|
|
|
- memberCount: 0
|
|
|
- }
|
|
|
+ vipUserCount: 0,
|
|
|
+ practiceUserCount: 0
|
|
|
+ },
|
|
|
+ activeRow: null
|
|
|
});
|
|
|
const route = useRoute();
|
|
|
const router = useRouter();
|
|
@@ -78,7 +82,7 @@ export default defineComponent({
|
|
|
...getTimes(timer.value, ['startTime', 'endTime'], 'YYYY-MM-DD')
|
|
|
});
|
|
|
|
|
|
- // state.tableList = res.data.rows;
|
|
|
+ state.tableList = res.data.rows;
|
|
|
|
|
|
state.pagination.pageTotal = res.data.total;
|
|
|
state.loading = false;
|
|
@@ -87,7 +91,21 @@ export default defineComponent({
|
|
|
console.log(e);
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
+ const getInfo = async () => {
|
|
|
+ try {
|
|
|
+ const res = await getTrainingStat({
|
|
|
+ classGroupId: route.query.id,
|
|
|
+ ...getTimes(timer.value, ['startTime', 'endTime'], 'YYYY-MM-DD')
|
|
|
+ });
|
|
|
+ state.testInfo.practiceDurationAvg = res.data.practiceDurationAvg;
|
|
|
+ state.testInfo.practiceUserCount = res.data.practiceUserCount;
|
|
|
+ } catch (e) {
|
|
|
+ console.log(e);
|
|
|
+ }
|
|
|
+ };
|
|
|
onMounted(() => {
|
|
|
+ getInfo();
|
|
|
getList();
|
|
|
});
|
|
|
const gotoStudentDetail = (row: any) => {
|
|
@@ -114,7 +132,15 @@ export default defineComponent({
|
|
|
title: '性别',
|
|
|
key: 'sex',
|
|
|
render(row: any) {
|
|
|
- return <>{row.sex == '0' ? '女' : '男'}</>;
|
|
|
+ return (
|
|
|
+ <>
|
|
|
+ {row.gender + '' != 'null'
|
|
|
+ ? row.gender == '0'
|
|
|
+ ? '女'
|
|
|
+ : '男'
|
|
|
+ : '--'}
|
|
|
+ </>
|
|
|
+ );
|
|
|
}
|
|
|
},
|
|
|
{
|
|
@@ -136,7 +162,16 @@ export default defineComponent({
|
|
|
key: 'studentType',
|
|
|
render(row: any) {
|
|
|
return (
|
|
|
- <>{row.practiceDuration ? formatTime(row.practiceDuration) : 0}</>
|
|
|
+ <>
|
|
|
+ {row.practiceDuration
|
|
|
+ ? getMinutes(row.practiceDuration) > 0
|
|
|
+ ? getMinutes(row.practiceDuration) +
|
|
|
+ '分' +
|
|
|
+ getSecend(row.practiceDuration) +
|
|
|
+ '秒'
|
|
|
+ : getSecend(row.practiceDuration) + '秒'
|
|
|
+ : 0}
|
|
|
+ </>
|
|
|
);
|
|
|
}
|
|
|
},
|
|
@@ -222,14 +257,18 @@ export default defineComponent({
|
|
|
<NGrid x-gap="12" cols={8}>
|
|
|
<NGi>
|
|
|
<div class={styles.TrainDataItem}>
|
|
|
- <p class={styles.TrainDataItemTitle}>
|
|
|
- <span>
|
|
|
- <NNumberAnimation
|
|
|
- from={0}
|
|
|
- to={state.pagination.pageTotal}></NNumberAnimation>
|
|
|
- </span>
|
|
|
- 人
|
|
|
- </p>
|
|
|
+ <div>
|
|
|
+ <p class={styles.TrainDataItemTitle}>
|
|
|
+ <span>
|
|
|
+ <NNumberAnimation
|
|
|
+ from={0}
|
|
|
+ to={
|
|
|
+ state.testInfo.practiceUserCount
|
|
|
+ }></NNumberAnimation>
|
|
|
+ </span>{' '}
|
|
|
+ 人
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
<p class={styles.TrainDataItemsubTitle}>练习人数</p>
|
|
|
</div>
|
|
|
</NGi>
|
|
@@ -239,8 +278,8 @@ export default defineComponent({
|
|
|
<span>
|
|
|
<NNumberAnimation
|
|
|
from={0}
|
|
|
- to={state.testInfo.memberCount}></NNumberAnimation>
|
|
|
- </span>
|
|
|
+ to={state.testInfo.vipUserCount}></NNumberAnimation>
|
|
|
+ </span>{' '}
|
|
|
人
|
|
|
</p>
|
|
|
<p class={styles.TrainDataItemsubTitle}>会员人数</p>
|
|
@@ -249,14 +288,28 @@ export default defineComponent({
|
|
|
<NGi>
|
|
|
<div class={styles.TrainDataItem}>
|
|
|
<p class={styles.TrainDataItemTitle}>
|
|
|
- <span>
|
|
|
- <NNumberAnimation
|
|
|
- from={0}
|
|
|
- to={
|
|
|
- state.testInfo.practiceDurationAvg
|
|
|
- }></NNumberAnimation>
|
|
|
- </span>
|
|
|
- 分钟
|
|
|
+ {getMinutes(state.testInfo.practiceDurationAvg) > 0 ? (
|
|
|
+ <div>
|
|
|
+ <span>
|
|
|
+ <NNumberAnimation
|
|
|
+ from={0}
|
|
|
+ to={getMinutes(
|
|
|
+ state.testInfo.practiceDurationAvg
|
|
|
+ )}></NNumberAnimation>
|
|
|
+ </span>{' '}
|
|
|
+ 分
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+ <div>
|
|
|
+ <span>
|
|
|
+ <NNumberAnimation
|
|
|
+ from={0}
|
|
|
+ to={getSecend(
|
|
|
+ state.testInfo.practiceDurationAvg
|
|
|
+ )}></NNumberAnimation>
|
|
|
+ </span>{' '}
|
|
|
+ 秒
|
|
|
+ </div>
|
|
|
</p>
|
|
|
<p class={styles.TrainDataItemsubTitle}>平均练习时长</p>
|
|
|
</div>
|