index.tsx 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. import { defineComponent, onMounted, reactive, ref } from 'vue';
  2. import styles from './index.module.less';
  3. import { NIcon, NSpin, NScrollbar, NModal } from 'naive-ui';
  4. import { lessonCoursewareDetail, lessonCoursewarePage } from '../../api';
  5. import SelectLessonware from './select-lessonware';
  6. import TheEmpty from '/src/components/TheEmpty';
  7. import { usePrepareStore } from '/src/store/modules/prepareLessons';
  8. export default defineComponent({
  9. name: 'directory-main',
  10. setup() {
  11. const prepareStore = usePrepareStore();
  12. const show = ref(true);
  13. const forms = reactive({
  14. showSelectBookStatus: false,
  15. coursewareStatus: false
  16. });
  17. const getLessonCourseware = async () => {
  18. try {
  19. const { data } = await lessonCoursewarePage({
  20. page: 1,
  21. rows: 1,
  22. type: 'COURSEWARE',
  23. enableFlag: 1
  24. });
  25. if (data.rows.length > 0) {
  26. prepareStore.setBaseCourseware(data.rows[0]);
  27. }
  28. forms.showSelectBookStatus = true;
  29. } catch {
  30. //
  31. }
  32. };
  33. const getLessonCoursewareDetail = async () => {
  34. try {
  35. const baseCourseware: any = prepareStore.getBaseCourseware;
  36. if (!baseCourseware.id) return;
  37. const { data } = await lessonCoursewareDetail({
  38. id: baseCourseware.id
  39. });
  40. const tempList: any = data.lessonList || [];
  41. tempList.forEach((item: any, index: number) => {
  42. item.selected = false;
  43. if (index === 0) {
  44. item.selected = true;
  45. const temp = item['knowledgeList'][0];
  46. prepareStore.setSelectKey(temp?.id);
  47. prepareStore.setLessonCoursewareId(temp?.lessonCoursewareId);
  48. prepareStore.setLessonCoursewareDetailId(
  49. temp?.lessonCoursewareDetailId
  50. );
  51. }
  52. });
  53. prepareStore.setTreeList(tempList);
  54. } catch {
  55. //
  56. }
  57. };
  58. onMounted(async () => {
  59. show.value = true;
  60. await getLessonCourseware();
  61. await getLessonCoursewareDetail();
  62. show.value = false;
  63. });
  64. return () => (
  65. <div class={styles.directoryList}>
  66. {forms.showSelectBookStatus && (
  67. <div
  68. class={styles['select-directory']}
  69. onClick={() => (forms.coursewareStatus = true)}>
  70. <span
  71. class={['cr-ellipsis']}
  72. title={prepareStore.getBaseCourseware.name}>
  73. {prepareStore.getBaseCourseware.name || '请选择教材'}
  74. </span>
  75. <NIcon class={styles.iconArrow}>
  76. <svg
  77. width="11px"
  78. height="15px"
  79. viewBox="0 0 11 15"
  80. version="1.1"
  81. xmlns="http://www.w3.org/2000/svg">
  82. <g
  83. stroke="none"
  84. stroke-width="1"
  85. fill="none"
  86. fill-rule="evenodd"
  87. opacity="0.699999988">
  88. <g
  89. transform="translate(-445.000000, -137.000000)"
  90. fill="#131415">
  91. <g transform="translate(152.000000, 120.000000)">
  92. <path
  93. d="M299.326227,20.2118001 L304.934089,28.4366632 C305.245211,28.8929759 305.127511,29.515105 304.671198,29.8262273 C304.505147,29.9394437 304.308836,30 304.107861,30 L292.892139,30 C292.339854,30 291.892139,29.5522847 291.892139,29 C291.892139,28.7990254 291.952695,28.6027139 292.065911,28.4366632 L297.673773,20.2118001 C297.984895,19.7554873 298.607024,19.6377872 299.063337,19.9489096 C299.16663,20.0193364 299.255801,20.1085074 299.326227,20.2118001 Z"
  94. id="三角形"
  95. transform="translate(298.500000, 24.500000) rotate(-270.000000) translate(-298.500000, -24.500000) "></path>
  96. </g>
  97. </g>
  98. </g>
  99. </svg>
  100. </NIcon>
  101. </div>
  102. )}
  103. <NScrollbar class={styles.scrollBar}>
  104. <NSpin show={show.value}>
  105. <div
  106. class={[
  107. styles.listSection,
  108. !show.value && prepareStore.getTreeList.length <= 0
  109. ? styles.emptySection
  110. : ''
  111. ]}>
  112. {prepareStore.getTreeList.map((item: any, index: number) => (
  113. <div class={styles.treeParent} key={'parent' + index}>
  114. <div
  115. class={[styles.treeItem, styles.parentItem]}
  116. onClick={() => {
  117. prepareStore.getTreeList.forEach((child: any) => {
  118. if (item.id !== child.id) {
  119. child.selected = false;
  120. }
  121. });
  122. item.selected = item.selected ? false : true;
  123. }}>
  124. {item.knowledgeList && item.knowledgeList.length > 0 && (
  125. <span
  126. class={[
  127. styles.arrow,
  128. item.selected ? styles.arrowSelect : ''
  129. ]}></span>
  130. )}
  131. <p
  132. class={[
  133. styles.title,
  134. item.selected ? styles.titleSelect : ''
  135. ]}>
  136. {item.name}
  137. </p>
  138. </div>
  139. {item.selected &&
  140. item.knowledgeList &&
  141. item.knowledgeList.map((child: any, j: number) => (
  142. <div
  143. key={'child' + j}
  144. class={[
  145. styles.treeItem,
  146. styles.childItem,
  147. styles.animation,
  148. prepareStore.getSelectKey === child.id
  149. ? styles.childSelect
  150. : ''
  151. ]}
  152. onClick={() => {
  153. prepareStore.setSelectKey(child.id);
  154. prepareStore.setLessonCoursewareId(
  155. child.lessonCoursewareId
  156. );
  157. prepareStore.setLessonCoursewareDetailId(
  158. child.lessonCoursewareDetailId
  159. );
  160. }}>
  161. <span class={styles.childArrow}></span>
  162. <p class={styles.title}>{child.name}</p>
  163. </div>
  164. ))}
  165. </div>
  166. ))}
  167. </div>
  168. {!show.value && prepareStore.getTreeList.length <= 0 && (
  169. <TheEmpty />
  170. )}
  171. </NSpin>
  172. </NScrollbar>
  173. {/* 选择教材 */}
  174. <NModal
  175. v-model:show={forms.coursewareStatus}
  176. preset="card"
  177. showIcon={false}
  178. class={['modalTitle background', styles.coursewareModal]}
  179. title={'选择教材'}
  180. blockScroll={false}>
  181. <SelectLessonware
  182. onClose={() => (forms.coursewareStatus = false)}
  183. onConfirm={(item: any) => {
  184. prepareStore.setBaseCourseware(item);
  185. getLessonCoursewareDetail();
  186. }}
  187. />
  188. </NModal>
  189. </div>
  190. );
  191. }
  192. });