|  | @@ -0,0 +1,284 @@
 | 
	
		
			
				|  |  | +import { defineComponent, onMounted, reactive, ref } from 'vue';
 | 
	
		
			
				|  |  | +import styles from '../index.module.less';
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  NButton,
 | 
	
		
			
				|  |  | +  NDataTable,
 | 
	
		
			
				|  |  | +  NForm,
 | 
	
		
			
				|  |  | +  NFormItem,
 | 
	
		
			
				|  |  | +  NImage,
 | 
	
		
			
				|  |  | +  NModal,
 | 
	
		
			
				|  |  | +  NSelect,
 | 
	
		
			
				|  |  | +  NSpace
 | 
	
		
			
				|  |  | +} from 'naive-ui';
 | 
	
		
			
				|  |  | +import SearchInput from '@/components/searchInput';
 | 
	
		
			
				|  |  | +import CSelect from '@/components/CSelect';
 | 
	
		
			
				|  |  | +import Pagination from '@/components/pagination';
 | 
	
		
			
				|  |  | +import { getStudentAfterWork } from '../api';
 | 
	
		
			
				|  |  | +import add from './images/add.png';
 | 
	
		
			
				|  |  | +import { useRoute } from 'vue-router';
 | 
	
		
			
				|  |  | +import CBreadcrumb from '/src/components/CBreadcrumb';
 | 
	
		
			
				|  |  | +import CDatePicker from '/src/components/CDatePicker';
 | 
	
		
			
				|  |  | +import defultHeade from '@/components/layout/images/teacherIcon.png';
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  getNowDateAndMonday,
 | 
	
		
			
				|  |  | +  getNowDateAndSunday,
 | 
	
		
			
				|  |  | +  getTimes
 | 
	
		
			
				|  |  | +} from '/src/utils/dateFormat';
 | 
	
		
			
				|  |  | +import { trainingStatusArray } from '@/utils/searchArray';
 | 
	
		
			
				|  |  | +import StudentTraomomhDetails from '../modals/studentTraomomhDetails'
 | 
	
		
			
				|  |  | +import dayjs from 'dayjs';
 | 
	
		
			
				|  |  | +import { lookup } from 'dns';
 | 
	
		
			
				|  |  | +export default defineComponent({
 | 
	
		
			
				|  |  | +  name: 'student-studentList',
 | 
	
		
			
				|  |  | +  setup(props, { emit }) {
 | 
	
		
			
				|  |  | +    const state = reactive({
 | 
	
		
			
				|  |  | +      searchForm: { keyword: '', trainingStatus: null as any },
 | 
	
		
			
				|  |  | +      loading: false,
 | 
	
		
			
				|  |  | +      pagination: {
 | 
	
		
			
				|  |  | +        page: 1,
 | 
	
		
			
				|  |  | +        rows: 10,
 | 
	
		
			
				|  |  | +        pageTotal: 4
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      tableList: [] as any,
 | 
	
		
			
				|  |  | +      workInfo: {
 | 
	
		
			
				|  |  | +        createTime: '',
 | 
	
		
			
				|  |  | +        expireDate: '',
 | 
	
		
			
				|  |  | +        teacherAvatar: '',
 | 
	
		
			
				|  |  | +        teacherName: ''
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      detailVisiable: false,
 | 
	
		
			
				|  |  | +      activeRow: null as any,
 | 
	
		
			
				|  |  | +      index: 0
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const timer = ref<[number, number]>([
 | 
	
		
			
				|  |  | +      getNowDateAndMonday(new Date().getTime()),
 | 
	
		
			
				|  |  | +      getNowDateAndSunday(new Date().getTime())
 | 
	
		
			
				|  |  | +    ]);
 | 
	
		
			
				|  |  | +    const TrainingDetailsRef = ref();
 | 
	
		
			
				|  |  | +    const route = useRoute();
 | 
	
		
			
				|  |  | +    const routerList = ref([
 | 
	
		
			
				|  |  | +      { name: '班级管理', path: '/classList' },
 | 
	
		
			
				|  |  | +      { name: route.query.name, path: '/classDetail' },
 | 
	
		
			
				|  |  | +      { name: route.query.teacherName, path: '/afterWorkDetail' }
 | 
	
		
			
				|  |  | +    ] as any);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const search = () => {
 | 
	
		
			
				|  |  | +      state.pagination.page = 1;
 | 
	
		
			
				|  |  | +      getList();
 | 
	
		
			
				|  |  | +      console.log('search', state);
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const onReset = () => {
 | 
	
		
			
				|  |  | +      state.searchForm = { keyword: '', trainingStatus: null as any };
 | 
	
		
			
				|  |  | +      timer.value = [
 | 
	
		
			
				|  |  | +        getNowDateAndMonday(new Date().getTime()),
 | 
	
		
			
				|  |  | +        getNowDateAndSunday(new Date().getTime())
 | 
	
		
			
				|  |  | +      ];
 | 
	
		
			
				|  |  | +      search();
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const getList = async () => {
 | 
	
		
			
				|  |  | +      state.loading = true;
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        const res = await getStudentAfterWork({
 | 
	
		
			
				|  |  | +          studentId: route.query.studentId,
 | 
	
		
			
				|  |  | +          ...state.searchForm,
 | 
	
		
			
				|  |  | +          ...state.pagination,
 | 
	
		
			
				|  |  | +          ...getTimes(timer.value, ['startTime', 'endTime'], 'YYYY-MM-DD')
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        state.tableList = res.data.rows;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        state.pagination.pageTotal = res.data.total;
 | 
	
		
			
				|  |  | +        state.loading = false;
 | 
	
		
			
				|  |  | +      } catch (e) {
 | 
	
		
			
				|  |  | +        state.loading = false;
 | 
	
		
			
				|  |  | +        console.log(e);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    // const getWorkInfo = async () => {
 | 
	
		
			
				|  |  | +    //   console.log(route.query);
 | 
	
		
			
				|  |  | +    //   try {
 | 
	
		
			
				|  |  | +    //     const res = await getWorkDetail({ trainingId: route.query.trainingId });
 | 
	
		
			
				|  |  | +    //     state.workInfo = { ...res.data };
 | 
	
		
			
				|  |  | +    //   } catch (e) {
 | 
	
		
			
				|  |  | +    //     console.log(e);
 | 
	
		
			
				|  |  | +    //   }
 | 
	
		
			
				|  |  | +    // };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const lookDetail = (row: any, index: number) => {
 | 
	
		
			
				|  |  | +      console.log(index, 'index');
 | 
	
		
			
				|  |  | +      state.index = index + 1;
 | 
	
		
			
				|  |  | +      state.activeRow = row;
 | 
	
		
			
				|  |  | +      state.detailVisiable = true;
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    onMounted(() => {
 | 
	
		
			
				|  |  | +      // getWorkInfo();
 | 
	
		
			
				|  |  | +      getList();
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    const columns = () => {
 | 
	
		
			
				|  |  | +      return [
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          title: '布置老师',
 | 
	
		
			
				|  |  | +          key: 'teacherName'
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          title: '布置时间',
 | 
	
		
			
				|  |  | +          key: 'createTime',
 | 
	
		
			
				|  |  | +          render(row: any) {
 | 
	
		
			
				|  |  | +            return row.createTime
 | 
	
		
			
				|  |  | +              ? dayjs(row.createTime).format('YYYY-MM-DD')
 | 
	
		
			
				|  |  | +              : '--';
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          title: '截止时间',
 | 
	
		
			
				|  |  | +          key: 'expireDate',
 | 
	
		
			
				|  |  | +          render(row: any) {
 | 
	
		
			
				|  |  | +            return row.expireDate
 | 
	
		
			
				|  |  | +              ? dayjs(row.expireDate).format('YYYY-MM-DD')
 | 
	
		
			
				|  |  | +              : '--';
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          title: '最后提交时间',
 | 
	
		
			
				|  |  | +          key: 'submitTime',
 | 
	
		
			
				|  |  | +          render(row: any) {
 | 
	
		
			
				|  |  | +            return row.submitTime
 | 
	
		
			
				|  |  | +              ? dayjs(row.submitTime).format('YYYY-MM-DD')
 | 
	
		
			
				|  |  | +              : '--';
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          title: '提交状态',
 | 
	
		
			
				|  |  | +          key: 'sex',
 | 
	
		
			
				|  |  | +          render(row: any) {
 | 
	
		
			
				|  |  | +            return (
 | 
	
		
			
				|  |  | +              <div>
 | 
	
		
			
				|  |  | +                {row.trainingStatus == 'UNSUBMITTED' ? (
 | 
	
		
			
				|  |  | +                  <p class={styles.nosub}>未提交</p>
 | 
	
		
			
				|  |  | +                ) : null}
 | 
	
		
			
				|  |  | +                {row.trainingStatus == 'SUBMITTED' ? (
 | 
	
		
			
				|  |  | +                  <p class={styles.ison}>不合格</p>
 | 
	
		
			
				|  |  | +                ) : null}
 | 
	
		
			
				|  |  | +                {row.trainingStatus == 'TARGET' ? (
 | 
	
		
			
				|  |  | +                  <p class={styles.isok}>合格</p>
 | 
	
		
			
				|  |  | +                ) : null}
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            );
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          title: '操作',
 | 
	
		
			
				|  |  | +          key: 'id',
 | 
	
		
			
				|  |  | +          render(row: any, index: number) {
 | 
	
		
			
				|  |  | +            return (
 | 
	
		
			
				|  |  | +              <NButton
 | 
	
		
			
				|  |  | +                text
 | 
	
		
			
				|  |  | +                type="primary"
 | 
	
		
			
				|  |  | +                onClick={() => {
 | 
	
		
			
				|  |  | +                  lookDetail(row, index);
 | 
	
		
			
				|  |  | +                }}>
 | 
	
		
			
				|  |  | +                详情
 | 
	
		
			
				|  |  | +              </NButton>
 | 
	
		
			
				|  |  | +            );
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      ];
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const goToNext = () => {
 | 
	
		
			
				|  |  | +      ++state.index;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      state.activeRow = state.tableList[state.index - 1];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      TrainingDetailsRef.value.getTrainingDetail(
 | 
	
		
			
				|  |  | +        state.activeRow.studentLessonTrainingId
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    const gotoPre = () => {
 | 
	
		
			
				|  |  | +      --state.index;
 | 
	
		
			
				|  |  | +      state.activeRow = state.tableList[state.index - 1];
 | 
	
		
			
				|  |  | +      TrainingDetailsRef.value.getTrainingDetail(
 | 
	
		
			
				|  |  | +        state.activeRow.studentLessonTrainingId
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    return () => (
 | 
	
		
			
				|  |  | +      <div>
 | 
	
		
			
				|  |  | +        <div >
 | 
	
		
			
				|  |  | +          <div class={styles.searchList}>
 | 
	
		
			
				|  |  | +            <NForm label-placement="left" inline>
 | 
	
		
			
				|  |  | +                       <NFormItem>
 | 
	
		
			
				|  |  | +                <CDatePicker
 | 
	
		
			
				|  |  | +                  v-model:value={timer.value}
 | 
	
		
			
				|  |  | +                  separator={'至'}
 | 
	
		
			
				|  |  | +                  type="daterange"
 | 
	
		
			
				|  |  | +                  timerValue={timer.value}></CDatePicker>
 | 
	
		
			
				|  |  | +              </NFormItem>
 | 
	
		
			
				|  |  | +              <NFormItem>
 | 
	
		
			
				|  |  | +                <CSelect
 | 
	
		
			
				|  |  | +                  {...({
 | 
	
		
			
				|  |  | +                    options: [
 | 
	
		
			
				|  |  | +                      {
 | 
	
		
			
				|  |  | +                        label: '提交状态',
 | 
	
		
			
				|  |  | +                        value: null
 | 
	
		
			
				|  |  | +                      },
 | 
	
		
			
				|  |  | +                      ...trainingStatusArray
 | 
	
		
			
				|  |  | +                    ],
 | 
	
		
			
				|  |  | +                    placeholder: '提交状态',
 | 
	
		
			
				|  |  | +                    clearable: true,
 | 
	
		
			
				|  |  | +                    inline: true
 | 
	
		
			
				|  |  | +                  } as any)}
 | 
	
		
			
				|  |  | +                  v-model:value={state.searchForm.trainingStatus}></CSelect>
 | 
	
		
			
				|  |  | +              </NFormItem>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              <NFormItem>
 | 
	
		
			
				|  |  | +                <NSpace justify="end">
 | 
	
		
			
				|  |  | +                  <NButton type="primary" class="searchBtn" onClick={search}>
 | 
	
		
			
				|  |  | +                    搜索
 | 
	
		
			
				|  |  | +                  </NButton>
 | 
	
		
			
				|  |  | +                  <NButton
 | 
	
		
			
				|  |  | +                    type="primary"
 | 
	
		
			
				|  |  | +                    ghost
 | 
	
		
			
				|  |  | +                    class="resetBtn"
 | 
	
		
			
				|  |  | +                    onClick={onReset}>
 | 
	
		
			
				|  |  | +                    重置
 | 
	
		
			
				|  |  | +                  </NButton>
 | 
	
		
			
				|  |  | +                </NSpace>
 | 
	
		
			
				|  |  | +              </NFormItem>
 | 
	
		
			
				|  |  | +            </NForm>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +          <div >
 | 
	
		
			
				|  |  | +            <NDataTable
 | 
	
		
			
				|  |  | +              class={styles.classTable}
 | 
	
		
			
				|  |  | +              loading={state.loading}
 | 
	
		
			
				|  |  | +              columns={columns()}
 | 
	
		
			
				|  |  | +              data={state.tableList}></NDataTable>
 | 
	
		
			
				|  |  | +            <Pagination
 | 
	
		
			
				|  |  | +              v-model:page={state.pagination.page}
 | 
	
		
			
				|  |  | +              v-model:pageSize={state.pagination.rows}
 | 
	
		
			
				|  |  | +              v-model:pageTotal={state.pagination.pageTotal}
 | 
	
		
			
				|  |  | +              onList={getList}
 | 
	
		
			
				|  |  | +              sync
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            />
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <NModal
 | 
	
		
			
				|  |  | +          v-model:show={state.detailVisiable}
 | 
	
		
			
				|  |  | +          preset="card"
 | 
	
		
			
				|  |  | +          class={['modalTitle background', styles.wordDetailModel]}
 | 
	
		
			
				|  |  | +          title={'训练详情'}>
 | 
	
		
			
				|  |  | +          <StudentTraomomhDetails
 | 
	
		
			
				|  |  | +            // onNext={() => goToNext()}
 | 
	
		
			
				|  |  | +            // onPre={() => gotoPre()}
 | 
	
		
			
				|  |  | +            ref={TrainingDetailsRef}
 | 
	
		
			
				|  |  | +            onClose={() => (state.detailVisiable = false)}
 | 
	
		
			
				|  |  | +            total={state.tableList.length}
 | 
	
		
			
				|  |  | +            current={state.index}
 | 
	
		
			
				|  |  | +            activeRow={state.activeRow}></StudentTraomomhDetails>
 | 
	
		
			
				|  |  | +        </NModal>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +});
 |