classRecord.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { defineComponent, onMounted, reactive } from 'vue';
  2. import { NAvatar, NButton, NForm, NFormItem, NSpace, NTag } from 'naive-ui';
  3. import Pagination from '@/components/pagination';
  4. import { courseSchedulePage } from '../api';
  5. import { useRoute } from 'vue-router';
  6. import CDatePicker from '/src/components/CDatePicker';
  7. import styles from './classRecord.module.less';
  8. import teacherIcon from '@components/layout/images/teacherIcon.png';
  9. import dayjs from 'dayjs';
  10. import { getTimes } from '/src/utils';
  11. export default defineComponent({
  12. name: 'class-record',
  13. setup() {
  14. const nowTime = dayjs().format('YYYY-MM-DD');
  15. const state = reactive({
  16. searchForm: {
  17. createTimer: [
  18. dayjs(nowTime).subtract(1, 'month').valueOf(),
  19. dayjs(nowTime).valueOf()
  20. ] as any
  21. },
  22. loading: false,
  23. pagination: {
  24. page: 1,
  25. rows: 10,
  26. pageTotal: 0
  27. },
  28. tableList: [] as any
  29. });
  30. const route = useRoute();
  31. const search = () => {
  32. state.pagination.page = 1;
  33. getList();
  34. };
  35. const onReset = () => {
  36. state.searchForm = { createTimer: null as any };
  37. search();
  38. };
  39. const getList = async () => {
  40. state.loading = true;
  41. try {
  42. const res = await courseSchedulePage({
  43. classGroupId: route.query.id,
  44. ...getTimes(
  45. state.searchForm.createTimer,
  46. ['startTime', 'endTime'],
  47. 'YYYY-MM-DD'
  48. ),
  49. ...state.pagination
  50. });
  51. state.tableList = res.data.rows;
  52. state.pagination.pageTotal = res.data.total;
  53. state.loading = false;
  54. } catch (e) {
  55. state.loading = false;
  56. console.log(e);
  57. }
  58. };
  59. onMounted(() => {
  60. getList();
  61. });
  62. return () => (
  63. <div>
  64. <div class={styles.searchList}>
  65. <NForm label-placement="left" inline>
  66. <NFormItem>
  67. <CDatePicker
  68. v-model:timerValue={state.searchForm.createTimer}
  69. separator={'-'}
  70. type="daterange"></CDatePicker>
  71. </NFormItem>
  72. <NFormItem>
  73. <NSpace justify="end">
  74. <NButton type="primary" class="searchBtn" onClick={search}>
  75. 搜索
  76. </NButton>
  77. <NButton
  78. type="primary"
  79. ghost
  80. class="resetBtn"
  81. onClick={onReset}>
  82. 重置
  83. </NButton>
  84. </NSpace>
  85. </NFormItem>
  86. </NForm>
  87. </div>
  88. <div class={styles.tableWrap}>
  89. <NSpace>
  90. {state.tableList.map((item: any) => (
  91. <div class={styles.tableContainer}>
  92. <div class={styles.header}>
  93. <div class={styles.time}>
  94. {dayjs(item.classDate).format('YYYY-MM-DD')}
  95. </div>
  96. <NTag type="primary" class={styles.ntag} strong>
  97. 三年二班
  98. </NTag>
  99. </div>
  100. <div class={styles.content}>
  101. <NAvatar
  102. class={styles.navatar}
  103. round
  104. src={item.teacherAvatar || teacherIcon}
  105. />
  106. <div class={styles.userInfo}>
  107. <h2>{item.teacherName}</h2>
  108. <p>
  109. 人教版二年级上册 | 第二十一单元
  110. |【歌表演】我和我的祖国一刻也不能分割
  111. </p>
  112. </div>
  113. </div>
  114. </div>
  115. ))}
  116. </NSpace>
  117. <Pagination
  118. v-model:page={state.pagination.page}
  119. v-model:pageSize={state.pagination.rows}
  120. v-model:pageTotal={state.pagination.pageTotal}
  121. onList={getList}
  122. sync
  123. saveKey="classRecord-key"
  124. />
  125. </div>
  126. </div>
  127. );
  128. }
  129. });