classRecord.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. import TheEmpty from '/src/components/TheEmpty';
  12. export default defineComponent({
  13. name: 'class-record',
  14. setup() {
  15. const route = useRoute();
  16. const nowTime = dayjs().format('YYYY-MM-DD');
  17. const state = reactive({
  18. searchForm: {
  19. createTimer: [
  20. dayjs(nowTime).subtract(1, 'month').valueOf(),
  21. dayjs(nowTime).valueOf()
  22. ] as any
  23. },
  24. loading: false,
  25. pagination: {
  26. page: 1,
  27. rows: 10,
  28. pageTotal: 0
  29. },
  30. tableList: [] as any
  31. });
  32. const search = () => {
  33. state.pagination.page = 1;
  34. getList();
  35. };
  36. const onReset = () => {
  37. state.searchForm = { createTimer: null as any };
  38. search();
  39. };
  40. const getList = async () => {
  41. state.loading = true;
  42. try {
  43. console.log(
  44. state.searchForm.createTimer,
  45. 'state.searchForm.createTimer'
  46. );
  47. const { data } = await courseSchedulePage({
  48. classGroupId: route.query.id,
  49. ...getTimes(
  50. state.searchForm.createTimer,
  51. ['startTime', 'endTime'],
  52. 'YYYY-MM-DD'
  53. ),
  54. ...state.pagination
  55. });
  56. const rows = data.rows || [];
  57. rows.forEach((row: any) => {
  58. row.lessonCourseware = row.lessonCoursewareJson
  59. ? JSON.parse(row.lessonCoursewareJson)
  60. : {};
  61. });
  62. state.tableList = rows;
  63. state.pagination.pageTotal = data.total;
  64. state.loading = false;
  65. } catch (e) {
  66. state.loading = false;
  67. }
  68. };
  69. onMounted(() => {
  70. getList();
  71. });
  72. return () => (
  73. <div>
  74. <div class={styles.searchList}>
  75. <NForm label-placement="left" inline>
  76. <NFormItem>
  77. <CDatePicker
  78. v-model:value={state.searchForm.createTimer}
  79. timerValue={state.searchForm.createTimer}
  80. separator={'至'}
  81. type="daterange"></CDatePicker>
  82. </NFormItem>
  83. <NFormItem>
  84. <NSpace justify="end">
  85. <NButton type="primary" class="searchBtn" onClick={search}>
  86. 搜索
  87. </NButton>
  88. <NButton
  89. type="primary"
  90. ghost
  91. class="resetBtn"
  92. onClick={onReset}>
  93. 重置
  94. </NButton>
  95. </NSpace>
  96. </NFormItem>
  97. </NForm>
  98. </div>
  99. <div class={styles.tableWrap}>
  100. <NSpace>
  101. {state.tableList.map((item: any) => (
  102. <div class={styles.tableContainer}>
  103. <div class={styles.header}>
  104. <div class={styles.time}>
  105. {dayjs(item.startTime).format('YYYY-MM-DD HH:mm')}
  106. </div>
  107. {route.query.name && (
  108. <NTag type="primary" class={styles.ntag} strong>
  109. {route.query.name}
  110. </NTag>
  111. )}
  112. </div>
  113. <div class={styles.content}>
  114. <NAvatar
  115. class={styles.navatar}
  116. round
  117. src={item.teacherAvatar || teacherIcon}
  118. />
  119. <div class={styles.userInfo}>
  120. <h2>{item.teacherName}</h2>
  121. <p>
  122. {item.lessonCourseware.lessonCoursewareName} |{' '}
  123. {item.lessonCourseware.lessonCoursewareDetailName}|{' '}
  124. {
  125. item.lessonCourseware
  126. .lessonCoursewareKnowledgeDetailName
  127. }
  128. </p>
  129. </div>
  130. </div>
  131. </div>
  132. ))}
  133. </NSpace>
  134. {state.tableList.length <= 0 && <TheEmpty />}
  135. <Pagination
  136. v-model:page={state.pagination.page}
  137. v-model:pageSize={state.pagination.rows}
  138. v-model:pageTotal={state.pagination.pageTotal}
  139. onList={getList}
  140. sync
  141. saveKey="classRecord-key"
  142. />
  143. </div>
  144. </div>
  145. );
  146. }
  147. });