|
@@ -12,23 +12,42 @@ import {
|
|
import SearchInput from '@/components/searchInput';
|
|
import SearchInput from '@/components/searchInput';
|
|
import CSelect from '@/components/CSelect';
|
|
import CSelect from '@/components/CSelect';
|
|
import Pagination from '@/components/pagination';
|
|
import Pagination from '@/components/pagination';
|
|
-import { getStudentList } from '../api';
|
|
|
|
|
|
+import { getWorkDetail, getTrainingStudentList } from '../api';
|
|
import add from './images/add.png';
|
|
import add from './images/add.png';
|
|
import { useRoute } from 'vue-router';
|
|
import { useRoute } from 'vue-router';
|
|
import CBreadcrumb from '/src/components/CBreadcrumb';
|
|
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 dayjs from 'dayjs';
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
name: 'student-studentList',
|
|
name: 'student-studentList',
|
|
setup(props, { emit }) {
|
|
setup(props, { emit }) {
|
|
const state = reactive({
|
|
const state = reactive({
|
|
- searchForm: { keyword: '', status: null as any },
|
|
|
|
|
|
+ searchForm: { keyword: '', trainingStatus: null as any },
|
|
loading: false,
|
|
loading: false,
|
|
pagination: {
|
|
pagination: {
|
|
page: 1,
|
|
page: 1,
|
|
rows: 10,
|
|
rows: 10,
|
|
pageTotal: 4
|
|
pageTotal: 4
|
|
},
|
|
},
|
|
- tableList: [] as any
|
|
|
|
|
|
+ tableList: [] as any,
|
|
|
|
+ workInfo: {
|
|
|
|
+ createTime: '',
|
|
|
|
+ expireDate: '',
|
|
|
|
+ teacherAvatar: '',
|
|
|
|
+ teacherName: ''
|
|
|
|
+ }
|
|
});
|
|
});
|
|
|
|
+ const timer = ref<[number, number]>([
|
|
|
|
+ getNowDateAndMonday(new Date().getTime()),
|
|
|
|
+ getNowDateAndSunday(new Date().getTime())
|
|
|
|
+ ]);
|
|
const route = useRoute();
|
|
const route = useRoute();
|
|
const routerList = ref([
|
|
const routerList = ref([
|
|
{ name: '班级管理', path: '/classList' },
|
|
{ name: '班级管理', path: '/classList' },
|
|
@@ -43,16 +62,21 @@ export default defineComponent({
|
|
};
|
|
};
|
|
|
|
|
|
const onReset = () => {
|
|
const onReset = () => {
|
|
- state.searchForm = { keyword: '', status: null as any };
|
|
|
|
|
|
+ state.searchForm = { keyword: '', trainingStatus: null as any };
|
|
|
|
+ timer.value = [
|
|
|
|
+ getNowDateAndMonday(new Date().getTime()),
|
|
|
|
+ getNowDateAndSunday(new Date().getTime())
|
|
|
|
+ ];
|
|
search();
|
|
search();
|
|
};
|
|
};
|
|
const getList = async () => {
|
|
const getList = async () => {
|
|
state.loading = true;
|
|
state.loading = true;
|
|
try {
|
|
try {
|
|
- const res = await getStudentList({
|
|
|
|
- classGroupId: route.query.id,
|
|
|
|
|
|
+ const res = await getTrainingStudentList({
|
|
|
|
+ trainingId: route.query.trainingId,
|
|
...state.searchForm,
|
|
...state.searchForm,
|
|
- ...state.pagination
|
|
|
|
|
|
+ ...state.pagination,
|
|
|
|
+ ...getTimes(timer.value, ['startTime', 'endTime'], 'YYYY-MM-DD')
|
|
});
|
|
});
|
|
|
|
|
|
state.tableList = res.data.rows;
|
|
state.tableList = res.data.rows;
|
|
@@ -64,34 +88,53 @@ export default defineComponent({
|
|
console.log(e);
|
|
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);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
|
+ getWorkInfo();
|
|
getList();
|
|
getList();
|
|
});
|
|
});
|
|
const columns = () => {
|
|
const columns = () => {
|
|
return [
|
|
return [
|
|
{
|
|
{
|
|
title: '学生姓名',
|
|
title: '学生姓名',
|
|
- key: 'nickname'
|
|
|
|
|
|
+ key: 'studentName'
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- title: '手机号',
|
|
|
|
- key: 'phone'
|
|
|
|
|
|
+ title: '最后提交时间',
|
|
|
|
+ key: 'submitTime',
|
|
|
|
+ render(row: any) {
|
|
|
|
+ return row.submitTime
|
|
|
|
+ ? dayjs(row.submitTime).format('YYYY-MM-DD')
|
|
|
|
+ : '--';
|
|
|
|
+ }
|
|
},
|
|
},
|
|
{
|
|
{
|
|
- title: '性别',
|
|
|
|
|
|
+ title: '训练状态',
|
|
key: 'sex',
|
|
key: 'sex',
|
|
render(row: any) {
|
|
render(row: any) {
|
|
- return <>{row.sex == '0' ? '女' : '男'}</>;
|
|
|
|
|
|
+ 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: 'studentType',
|
|
|
|
- // render(row: any) {
|
|
|
|
- // return <>{row.studentType == 'member' ? '会员' : '普通'}</>;
|
|
|
|
- // }
|
|
|
|
- // },
|
|
|
|
{
|
|
{
|
|
title: '操作',
|
|
title: '操作',
|
|
key: 'id',
|
|
key: 'id',
|
|
@@ -109,7 +152,31 @@ export default defineComponent({
|
|
<div>
|
|
<div>
|
|
<CBreadcrumb list={routerList.value}></CBreadcrumb>
|
|
<CBreadcrumb list={routerList.value}></CBreadcrumb>
|
|
<div class={styles.listWrap}>
|
|
<div class={styles.listWrap}>
|
|
- <div class={styles.teacherList}>{/* <div class={}> </div> */}</div>
|
|
|
|
|
|
+ <div class={styles.teacherList}>
|
|
|
|
+ <div class={styles.teacherHeader}>
|
|
|
|
+ <div class={styles.teacherHeaderBorder}>
|
|
|
|
+ <NImage
|
|
|
|
+ class={styles.teacherHeaderImg}
|
|
|
|
+ src={
|
|
|
|
+ state.workInfo.teacherAvatar
|
|
|
|
+ ? state.workInfo.teacherAvatar
|
|
|
|
+ : defultHeade
|
|
|
|
+ }
|
|
|
|
+ previewDisabled></NImage>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class={styles.workafterInfo}>
|
|
|
|
+ <h4>{state.workInfo.teacherName}</h4>
|
|
|
|
+ <p>
|
|
|
|
+ 布置时间:
|
|
|
|
+ {dayjs(state.workInfo.createTime).format('YYYY-MM-DD')} |{' '}
|
|
|
|
+ <span>
|
|
|
|
+ 截止时间:
|
|
|
|
+ {dayjs(state.workInfo.expireDate).format('YYYY-MM-DD')}
|
|
|
|
+ </span>
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
<div class={styles.searchList}>
|
|
<div class={styles.searchList}>
|
|
<NForm label-placement="left" inline>
|
|
<NForm label-placement="left" inline>
|
|
<NFormItem>
|
|
<NFormItem>
|
|
@@ -130,20 +197,20 @@ export default defineComponent({
|
|
label: '训练状态',
|
|
label: '训练状态',
|
|
value: null
|
|
value: null
|
|
},
|
|
},
|
|
- {
|
|
|
|
- label: '已结束',
|
|
|
|
- value: 1
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- label: '进行中',
|
|
|
|
- value: 0
|
|
|
|
- }
|
|
|
|
|
|
+ ...trainingStatusArray
|
|
],
|
|
],
|
|
placeholder: '训练状态',
|
|
placeholder: '训练状态',
|
|
clearable: true,
|
|
clearable: true,
|
|
inline: true
|
|
inline: true
|
|
} as any)}
|
|
} as any)}
|
|
- v-model:value={state.searchForm.status}></CSelect>
|
|
|
|
|
|
+ v-model:value={state.searchForm.trainingStatus}></CSelect>
|
|
|
|
+ </NFormItem>
|
|
|
|
+ <NFormItem>
|
|
|
|
+ <CDatePicker
|
|
|
|
+ v-model:value={timer.value}
|
|
|
|
+ separator={'至'}
|
|
|
|
+ type="daterange"
|
|
|
|
+ timerValue={timer.value}></CDatePicker>
|
|
</NFormItem>
|
|
</NFormItem>
|
|
|
|
|
|
<NFormItem>
|
|
<NFormItem>
|