123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import { Cell, Icon, Image, Popup } from 'vant';
- import { PropType, defineComponent, onMounted, reactive } from 'vue';
- import styles from './component.module.less';
- import iconStudent from '@/common/images/icon-student-default.png';
- import iconMember from '../images/icon-member.png';
- import DetailModal from '../detail-modal';
- import request from '@/helpers/request';
- import SkeletonComponentModal from './skeleton-component-modal';
- export default defineComponent({
- name: 'practice-list',
- props: {
- courseId: {
- type: String as PropType<any>,
- default: null
- }
- },
- setup(props) {
- // schoolStudentHomework/findCourseStudentsPublic/v2
- const forms = reactive({
- showPopup: false,
- list: [] as any[],
- dataShow: true,
- detail: {} as any,
- loading: true
- });
- const getList = async () => {
- try {
- const { data } = await request.post(
- '/api-web/schoolStudentHomework/findCourseStudentsPublic/v2',
- {
- data: {
- courseScheduleId: props.courseId,
- type: 'HOMEWORK'
- }
- }
- );
- forms.list = data || [];
- } catch {
- //
- } finally {
- forms.dataShow = forms.list.length ? true : false;
- forms.loading = false;
- }
- };
- const onDetail = async (item: any) => {
- try {
- forms.detail = {
- avatar: item.avatar,
- memberFlag: item.vipFlag,
- username: item.userName,
- subjectName: item.subjectName,
- finishFlag: item.finishFlag,
- list: item.studentLessonTrainingDetail || []
- };
- forms.showPopup = true;
- } catch {
- //
- }
- };
- onMounted(() => {
- getList();
- });
- return () => (
- <div class={styles['practice-list']}>
- <SkeletonComponentModal v-model:loading={forms.loading}>
- {forms.list.map((item: any) => (
- <Cell center isLink onClick={() => onDetail(item)}>
- {{
- icon: () => (
- <div class={styles.iconGroup}>
- <Image
- src={item.avatar || iconStudent}
- class={styles.iconStudent}
- fit="contain"
- />
- <Icon name={iconMember} class={styles.iconMember} />
- </div>
- ),
- title: () => (
- <div class={styles.userInfo}>
- <p class={styles.name}>{item.userName}</p>
- <span>{item.subjectName}</span>
- </div>
- ),
- value: () => (
- <div
- class={[
- styles.after,
- item.finishFlag ? styles.success : styles.error
- ]}>
- {item.finishFlag ? '完成' : '未完成'}
- </div>
- )
- }}
- </Cell>
- ))}
- </SkeletonComponentModal>
- <Popup
- v-model:show={forms.showPopup}
- position="bottom"
- round
- closeable
- class={styles.popup}>
- <DetailModal detail={forms.detail} />
- </Popup>
- </div>
- );
- }
- });
|