index.tsx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import { PropType, defineComponent, onMounted, reactive } from 'vue';
  2. import styles from './index.module.less';
  3. import { teacherChapterLessonCoursewareList } from '/src/views/prepare-lessons/api';
  4. import { NCascader, NInput, NScrollbar, NSelect, NSpin } from 'naive-ui';
  5. import CoursewareType from '/src/views/prepare-lessons/model/courseware-type';
  6. import TheEmpty from '/src/components/TheEmpty';
  7. export default defineComponent({
  8. name: 'select-class',
  9. props: {
  10. courseId: {
  11. type: String as PropType<'' | null>,
  12. default: ''
  13. },
  14. instrumentId: {
  15. type: String,
  16. default: ''
  17. },
  18. lessonCoursewareSubjectList: {
  19. type: Array,
  20. default: () => []
  21. },
  22. classId: {
  23. type: String,
  24. default: ''
  25. }
  26. },
  27. emits: ['confirm', 'close'],
  28. setup(props, { emit }) {
  29. const forms = reactive({
  30. loading: false,
  31. instrumentId: props.instrumentId ? Number(props.instrumentId) : '',
  32. tableList: [] as any
  33. });
  34. const getDetail = async () => {
  35. forms.loading = true;
  36. try {
  37. // 如果是上课则查询班级声部,预览查询全部
  38. // console.log(props.classId, props.instrumentId);
  39. const { data } = await teacherChapterLessonCoursewareList({
  40. coursewareDetailKnowledgeId: props.courseId,
  41. instrumentId: props.classId ? forms.instrumentId : null
  42. });
  43. if (!Array.isArray(data)) {
  44. return;
  45. }
  46. const tempList: any = [];
  47. data.forEach((item: any) => {
  48. const firstItem: any =
  49. item.chapterKnowledgeList[0]?.chapterKnowledgeMaterialList[0];
  50. tempList.push({
  51. id: item.id,
  52. openFlag: item.openFlag,
  53. openFlagEnable: item.openFlagEnable,
  54. subjectNames: item.subjectNames,
  55. fromChapterLessonCoursewareId: item.fromChapterLessonCoursewareId,
  56. name: item.name,
  57. coverImg: firstItem?.bizInfo.coverImg,
  58. type: firstItem?.bizInfo.type,
  59. updateTime: item.updateTime,
  60. coursewareType: item.coursewareType
  61. });
  62. });
  63. forms.tableList = tempList;
  64. } catch {
  65. //
  66. }
  67. forms.loading = false;
  68. };
  69. onMounted(() => {
  70. console.log(
  71. props.instrumentId,
  72. props.lessonCoursewareSubjectList,
  73. 'props.lessonCoursewareSubjectList'
  74. );
  75. if (props.instrumentId) {
  76. const s = Number(props.instrumentId);
  77. let isE = false;
  78. props.lessonCoursewareSubjectList.forEach((item: any) => {
  79. if (item.id === s) {
  80. isE = true;
  81. }
  82. });
  83. if (!isE) {
  84. forms.instrumentId = '';
  85. }
  86. }
  87. getDetail();
  88. });
  89. return () => (
  90. <div class={styles.selectClass}>
  91. {props.classId && (
  92. <div class={styles.searchGroup}>
  93. <NSelect
  94. options={[
  95. { id: '', name: '全部乐器' },
  96. ...(props.lessonCoursewareSubjectList as any)
  97. ]}
  98. valueField="id"
  99. labelField="name"
  100. style={{ width: '220px' }}
  101. placeholder={'请选择乐器'}
  102. v-model:value={forms.instrumentId}
  103. onUpdate:value={() => {
  104. getDetail();
  105. }}
  106. />
  107. {/* <NCascader
  108. options={[
  109. { id: '', name: '全部声部' },
  110. ...(props.lessonCoursewareSubjectList as any)
  111. ]}
  112. valueField="id"
  113. labelField="name"
  114. style={{ width: '220px' }}
  115. placeholder={'请选择声部'}
  116. v-model:value={forms.instrumentId}
  117. onUpdate:value={() => {
  118. getDetail();
  119. }}
  120. checkStrategy="child"
  121. showPath
  122. childrenField="instruments"
  123. expandTrigger="hover"
  124. clearable
  125. filterable
  126. /> */}
  127. </div>
  128. )}
  129. <NSpin show={forms.loading}>
  130. <NScrollbar class={styles.selectClassScroll}>
  131. <div
  132. class={[
  133. styles.list,
  134. !forms.loading &&
  135. forms.tableList.length <= 0 &&
  136. styles.listEmpty
  137. ]}>
  138. {forms.tableList.map((item: any) => (
  139. <div class={[styles.itemWrap, styles.itemBlock, 'row-nav']}>
  140. <div class={styles.itemWrapBox}>
  141. <CoursewareType
  142. isShowPreviewBtn
  143. isShowOpenFlag={false}
  144. item={item}
  145. onClick={() => {
  146. emit('confirm', {
  147. itemActive: props.courseId,
  148. chapterId: item.id
  149. });
  150. }}
  151. />
  152. </div>
  153. </div>
  154. ))}
  155. {!forms.loading && forms.tableList.length <= 0 && <TheEmpty />}
  156. </div>
  157. </NScrollbar>
  158. </NSpin>
  159. </div>
  160. );
  161. }
  162. });