classRecord.tsx 4.7 KB

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