|
@@ -0,0 +1,358 @@
|
|
|
+import { defineComponent, reactive, onMounted, ref } from 'vue';
|
|
|
+import styles from './index.module.less';
|
|
|
+import {
|
|
|
+ NAvatar,
|
|
|
+ NButton,
|
|
|
+ NDivider,
|
|
|
+ NForm,
|
|
|
+ NFormItem,
|
|
|
+ NImage,
|
|
|
+ NModal,
|
|
|
+ NSpace,
|
|
|
+ useMessage
|
|
|
+} from 'naive-ui';
|
|
|
+import SearchInput from '@/components/searchInput';
|
|
|
+import CDatePicker from '/src/components/CDatePicker';
|
|
|
+import CSelect from '@/components/CSelect';
|
|
|
+import add from '@/views/studentList/images/add.png';
|
|
|
+import { useRoute, useRouter } from 'vue-router';
|
|
|
+import { getGradeLevelList, getGradeYearList } from '../home/api';
|
|
|
+import { initCache, setCache } from '/src/hooks/use-async';
|
|
|
+import { classArray, getgradeNumList } from '../classList/contants';
|
|
|
+import teacherIcon from '@components/layout/images/teacherIcon.png';
|
|
|
+import Pagination from '/src/components/pagination';
|
|
|
+export default defineComponent({
|
|
|
+ name: 'homework-record',
|
|
|
+ setup() {
|
|
|
+ const state = reactive({
|
|
|
+ searchForm: {
|
|
|
+ keyword: null as any,
|
|
|
+ currentClass: '',
|
|
|
+ currentGradeNum: '',
|
|
|
+ subjectId: '',
|
|
|
+ gradeYear: '',
|
|
|
+ gradeLevel: ''
|
|
|
+ },
|
|
|
+ loading: false,
|
|
|
+ pagination: {
|
|
|
+ page: 1,
|
|
|
+ rows: 10,
|
|
|
+ pageTotal: 6
|
|
|
+ },
|
|
|
+ gradeNumList: [] as any,
|
|
|
+ tableList: [] as any,
|
|
|
+ studentVisible: false,
|
|
|
+ activeRow: null as any,
|
|
|
+ showaddClass: false,
|
|
|
+ popSelectYearList: [] as any,
|
|
|
+ popSelectLevelList: [] as any
|
|
|
+ });
|
|
|
+ const formRef = ref();
|
|
|
+ const message = useMessage();
|
|
|
+ const router = useRouter();
|
|
|
+ const route = useRoute();
|
|
|
+ const search = () => {
|
|
|
+ state.pagination.page = 1;
|
|
|
+ // getList();
|
|
|
+ setCache({ current: state.searchForm, saveKey: route.path });
|
|
|
+ };
|
|
|
+ state.gradeNumList = getgradeNumList();
|
|
|
+ const onReset = () => {
|
|
|
+ state.searchForm = {
|
|
|
+ keyword: null as any,
|
|
|
+ currentClass: '' as any,
|
|
|
+ currentGradeNum: '' as any,
|
|
|
+ subjectId: '' as any,
|
|
|
+ gradeYear: '' as any,
|
|
|
+ gradeLevel: ''
|
|
|
+ };
|
|
|
+ if (state.popSelectYearList.length > 0) {
|
|
|
+ state.searchForm.gradeYear = state.popSelectYearList[1].id;
|
|
|
+ }
|
|
|
+ // getList();
|
|
|
+ setCache({ current: state.searchForm, saveKey: route.path });
|
|
|
+ };
|
|
|
+
|
|
|
+ const getList = async () => {
|
|
|
+ // // classGroupList
|
|
|
+ // state.loading = true;
|
|
|
+ // try {
|
|
|
+ // const res = await classGroupList({
|
|
|
+ // ...state.searchForm,
|
|
|
+ // ...state.pagination
|
|
|
+ // });
|
|
|
+ // state.tableList = res.data.rows;
|
|
|
+ // state.pagination.pageTotal = res.data.total;
|
|
|
+ // state.loading = false;
|
|
|
+ // setTimeout(() => {
|
|
|
+ // if (state.tableList.length > 0) {
|
|
|
+ // showGuide.value = true;
|
|
|
+ // }
|
|
|
+ // }, 500);
|
|
|
+ // } catch (e) {
|
|
|
+ // state.loading = false;
|
|
|
+ // console.log(e);
|
|
|
+ // }
|
|
|
+ // console.log('getList');
|
|
|
+ };
|
|
|
+
|
|
|
+ // 获取学年
|
|
|
+ const getYearList = async () => {
|
|
|
+ try {
|
|
|
+ const { data } = await getGradeYearList();
|
|
|
+ const temp = data || [];
|
|
|
+ temp.forEach((i: any) => {
|
|
|
+ i.name = i.name + '学年';
|
|
|
+ });
|
|
|
+ temp.unshift({
|
|
|
+ id: '',
|
|
|
+ name: '全部学年'
|
|
|
+ });
|
|
|
+ state.popSelectYearList = temp || [];
|
|
|
+ if (temp.length > 0 && !state.searchForm.gradeYear) {
|
|
|
+ state.searchForm.gradeYear = temp[1].id;
|
|
|
+ }
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ };
|
|
|
+ // 获取学级
|
|
|
+ const getLevelList = async () => {
|
|
|
+ try {
|
|
|
+ const { data } = await getGradeLevelList();
|
|
|
+ const temp = data || [];
|
|
|
+ temp.forEach((i: any) => {
|
|
|
+ i.name = i.name + '级';
|
|
|
+ });
|
|
|
+ temp.unshift({
|
|
|
+ id: '',
|
|
|
+ name: '全部学级'
|
|
|
+ });
|
|
|
+ state.popSelectLevelList = temp || [];
|
|
|
+ if (temp.length > 0 && !state.searchForm.gradeLevel) {
|
|
|
+ state.searchForm.gradeLevel = temp[0].id;
|
|
|
+ }
|
|
|
+ } catch {
|
|
|
+ //
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ initCache({
|
|
|
+ current: state.searchForm,
|
|
|
+ callBack: (active: any) => {
|
|
|
+ state.searchForm = active;
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ onMounted(async () => {
|
|
|
+ state.loading = true;
|
|
|
+ await getYearList();
|
|
|
+ await getLevelList();
|
|
|
+ state.loading = false;
|
|
|
+ });
|
|
|
+ return () => (
|
|
|
+ <div class={styles.listWrap}>
|
|
|
+ <div class={styles.searchList}>
|
|
|
+ <NForm label-placement="left" inline ref={formRef}>
|
|
|
+ <NFormItem>
|
|
|
+ <SearchInput
|
|
|
+ {...{ placeholder: '请输入作业标题关键词' }}
|
|
|
+ class={styles.searchInput}
|
|
|
+ searchWord={state.searchForm.keyword}
|
|
|
+ onChangeValue={(val: string) =>
|
|
|
+ (state.searchForm.keyword = val)
|
|
|
+ }></SearchInput>
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem>
|
|
|
+ <CSelect
|
|
|
+ {...({
|
|
|
+ options: state.popSelectYearList,
|
|
|
+ placeholder: '选择学年',
|
|
|
+ clearable: true,
|
|
|
+ inline: true,
|
|
|
+ labelField: 'name',
|
|
|
+ valueField: 'id'
|
|
|
+ } as any)}
|
|
|
+ v-model:value={state.searchForm.gradeYear}></CSelect>
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem>
|
|
|
+ <CSelect
|
|
|
+ {...({
|
|
|
+ options: state.popSelectLevelList,
|
|
|
+ placeholder: '选择学级',
|
|
|
+ clearable: true,
|
|
|
+ inline: true,
|
|
|
+ labelField: 'name',
|
|
|
+ valueField: 'id'
|
|
|
+ } as any)}
|
|
|
+ v-model:value={state.searchForm.gradeLevel}></CSelect>
|
|
|
+ </NFormItem>
|
|
|
+
|
|
|
+ <NFormItem>
|
|
|
+ <CSelect
|
|
|
+ {...({
|
|
|
+ options: state.gradeNumList,
|
|
|
+ placeholder: '选择年级',
|
|
|
+ clearable: true,
|
|
|
+ inline: true
|
|
|
+ } as any)}
|
|
|
+ v-model:value={state.searchForm.currentGradeNum}></CSelect>
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem>
|
|
|
+ <CSelect
|
|
|
+ {...({
|
|
|
+ options: classArray,
|
|
|
+ placeholder: '选择班级',
|
|
|
+ clearable: true,
|
|
|
+ inline: true
|
|
|
+ } as any)}
|
|
|
+ v-model:value={state.searchForm.currentClass}></CSelect>
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem>
|
|
|
+ <CSelect
|
|
|
+ {...({
|
|
|
+ // options: state.subjectList,
|
|
|
+ placeholder: '选择状态',
|
|
|
+ clearable: true,
|
|
|
+ inline: true
|
|
|
+ } as any)}
|
|
|
+ v-model:value={state.searchForm.subjectId}></CSelect>
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem>
|
|
|
+ <CDatePicker
|
|
|
+ class={styles.CDatePickerItem}
|
|
|
+ separator={'-'}
|
|
|
+ type="daterange"
|
|
|
+ // timerValue={timer.value}
|
|
|
+ ></CDatePicker>
|
|
|
+ </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>
|
|
|
+ <NButton
|
|
|
+ class={styles.addBtn}
|
|
|
+ type="primary"
|
|
|
+ onClick={() => (state.showaddClass = true)}
|
|
|
+ v-slots={{
|
|
|
+ icon: () => (
|
|
|
+ <>
|
|
|
+ <NImage
|
|
|
+ class={styles.addBtnIcon}
|
|
|
+ previewDisabled
|
|
|
+ src={add}></NImage>
|
|
|
+ </>
|
|
|
+ )
|
|
|
+ }}>
|
|
|
+ 布置作业
|
|
|
+ </NButton>
|
|
|
+ <div class={styles.tableWrap}>
|
|
|
+ <div class={styles.listSection}>
|
|
|
+ {[1, 2, 3].map(() => (
|
|
|
+ <div class={styles.item}>
|
|
|
+ <div class={styles.header}>
|
|
|
+ <NAvatar class={styles.navatar} round src={teacherIcon} />
|
|
|
+ <div class={styles.userInfo}>
|
|
|
+ <h2>孙忆枫</h2>
|
|
|
+ <p>
|
|
|
+ 布置时间:2022-10-08<span>|</span>
|
|
|
+ <span>截止时间:2022-10-09</span>
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ <div class={styles.ing}>进行中</div>
|
|
|
+ </div>
|
|
|
+ <div class={styles.content}>
|
|
|
+ <div>
|
|
|
+ <div class={styles.homeTitle}>2024年01月17日-课后作业</div>
|
|
|
+ <div class={styles.homeContent}>
|
|
|
+ <span class={styles.title}>作业对象:</span>
|
|
|
+ <span class={styles.text}>一年级1班、一年级2班</span>
|
|
|
+ </div>
|
|
|
+ <div class={[styles.homeContent, styles.homeworkText]}>
|
|
|
+ <span class={styles.title}>作业内容:</span>
|
|
|
+ <div class={styles.pSection}>
|
|
|
+ <p class={[styles.text, styles.p1]}>
|
|
|
+ 练习曲目《小星星》、《我和我的祖国》、《千与千寻》-课后作业
|
|
|
+ 练习曲目《小星星》、《我和我的祖国》、《千与千寻》-课后作业
|
|
|
+ </p>
|
|
|
+ <p class={[styles.text, styles.p2]}>
|
|
|
+ 练习曲目《小星星》、《我和我的祖国》、《千与千寻》-课后作业
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class={styles.homeSubmit}>
|
|
|
+ <span class={styles.title}>已提交:</span>
|
|
|
+ <span class={styles.text}>0/50人</span>
|
|
|
+ <NDivider vertical />
|
|
|
+ <span class={styles.title}>提交率:</span>
|
|
|
+ <span class={styles.text}>60%</span>
|
|
|
+ <NDivider vertical />
|
|
|
+ <span class={styles.title}>合格人数:</span>
|
|
|
+ <span class={styles.text}>20人</span>
|
|
|
+ <NDivider vertical />
|
|
|
+ <span class={styles.title}>合格率:</span>
|
|
|
+ <span class={styles.text}>80%</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <NButton class={styles.errorBtn} type="error" color="#F94D50">
|
|
|
+ 撤回
|
|
|
+ </NButton>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ {/* <NDataTable
|
|
|
+ v-slots={{
|
|
|
+ empty: () => <TheEmpty></TheEmpty>
|
|
|
+ }}
|
|
|
+ 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>
|
|
|
+
|
|
|
+ {/* <NModal
|
|
|
+ v-model:show={state.removeVisiable}
|
|
|
+ preset="card"
|
|
|
+ class={['modalTitle', styles.removeVisiable]}
|
|
|
+ title={'删除班级'}>
|
|
|
+ <div class={styles.studentRemove}>
|
|
|
+ <p>
|
|
|
+ 确定要删除班级么?
|
|
|
+ <span>删除班级信息将会清空</span>。
|
|
|
+ </p>
|
|
|
+
|
|
|
+ <NSpace class={styles.btnGroup} justify="center">
|
|
|
+ <NButton round type="primary" onClick={removeClass}>
|
|
|
+ 确定
|
|
|
+ </NButton>
|
|
|
+ <NButton round onClick={() => (state.removeVisiable = false)}>
|
|
|
+ 取消
|
|
|
+ </NButton>
|
|
|
+ </NSpace>
|
|
|
+ </div>
|
|
|
+ </NModal> */}
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }
|
|
|
+});
|