index.tsx 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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. coursewareStatus: false
  15. });
  16. const getLessonCourseware = async () => {
  17. try {
  18. const { data } = await lessonCoursewarePage({
  19. page: 1,
  20. rows: 1,
  21. type: 'COURSEWARE',
  22. enableFlag: 1
  23. });
  24. if (data.rows.length > 0) {
  25. prepareStore.setBaseCourseware(data.rows[0]);
  26. }
  27. } catch {
  28. //
  29. }
  30. };
  31. const getLessonCoursewareDetail = async () => {
  32. try {
  33. const baseCourseware: any = prepareStore.getBaseCourseware;
  34. if (!baseCourseware.id) return;
  35. const { data } = await lessonCoursewareDetail({
  36. id: baseCourseware.id
  37. });
  38. const tempList: any = data.lessonList || [];
  39. tempList.forEach((item: any, index: number) => {
  40. item.selected = false;
  41. if (index === 0) {
  42. item.selected = true;
  43. const temp = item['knowledgeList'][0];
  44. prepareStore.setSelectKey(temp?.id);
  45. prepareStore.setLessonCoursewareId(temp?.lessonCoursewareId);
  46. prepareStore.setLessonCoursewareDetailId(
  47. temp?.lessonCoursewareDetailId
  48. );
  49. }
  50. });
  51. prepareStore.setTreeList(tempList);
  52. } catch {
  53. //
  54. }
  55. };
  56. onMounted(async () => {
  57. show.value = true;
  58. await getLessonCourseware();
  59. await getLessonCoursewareDetail();
  60. show.value = false;
  61. });
  62. return () => (
  63. <div class={styles.directoryList}>
  64. {prepareStore.getBaseCourseware.id && (
  65. <div
  66. class={styles['select-directory']}
  67. onClick={() => (forms.coursewareStatus = true)}>
  68. <span
  69. class={['cr-ellipsis']}
  70. title={prepareStore.getBaseCourseware.name}>
  71. {prepareStore.getBaseCourseware.name}
  72. </span>
  73. <NIcon class={styles.iconArrow}>
  74. <svg
  75. width="11px"
  76. height="15px"
  77. viewBox="0 0 11 15"
  78. version="1.1"
  79. xmlns="http://www.w3.org/2000/svg">
  80. <g
  81. stroke="none"
  82. stroke-width="1"
  83. fill="none"
  84. fill-rule="evenodd"
  85. opacity="0.699999988">
  86. <g
  87. transform="translate(-445.000000, -137.000000)"
  88. fill="#131415">
  89. <g transform="translate(152.000000, 120.000000)">
  90. <path
  91. 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"
  92. id="三角形"
  93. transform="translate(298.500000, 24.500000) rotate(-270.000000) translate(-298.500000, -24.500000) "></path>
  94. </g>
  95. </g>
  96. </g>
  97. </svg>
  98. </NIcon>
  99. </div>
  100. )}
  101. <NScrollbar class={styles.scrollBar}>
  102. <NSpin show={show.value}>
  103. <div
  104. class={[
  105. styles.listSection,
  106. !show.value && prepareStore.getTreeList.length <= 0
  107. ? styles.emptySection
  108. : ''
  109. ]}>
  110. {prepareStore.getTreeList.map((item: any, index: number) => (
  111. <div class={styles.treeParent} key={'parent' + index}>
  112. <div
  113. class={[styles.treeItem, styles.parentItem]}
  114. onClick={() => {
  115. prepareStore.getTreeList.forEach((child: any) => {
  116. if (item.id !== child.id) {
  117. child.selected = false;
  118. }
  119. });
  120. item.selected = item.selected ? false : true;
  121. }}>
  122. {item.knowledgeList && item.knowledgeList.length > 0 && (
  123. <span
  124. class={[
  125. styles.arrow,
  126. item.selected ? styles.arrowSelect : ''
  127. ]}></span>
  128. )}
  129. <p
  130. class={[
  131. styles.title,
  132. item.selected ? styles.titleSelect : ''
  133. ]}>
  134. {item.name}
  135. </p>
  136. </div>
  137. {item.selected &&
  138. item.knowledgeList &&
  139. item.knowledgeList.map((child: any, j: number) => (
  140. <div
  141. key={'child' + j}
  142. class={[
  143. styles.treeItem,
  144. styles.childItem,
  145. styles.animation,
  146. prepareStore.getSelectKey === child.id
  147. ? styles.childSelect
  148. : ''
  149. ]}
  150. onClick={() => {
  151. prepareStore.setSelectKey(child.id);
  152. prepareStore.setLessonCoursewareId(
  153. child.lessonCoursewareId
  154. );
  155. prepareStore.setLessonCoursewareDetailId(
  156. child.lessonCoursewareDetailId
  157. );
  158. }}>
  159. <span class={styles.childArrow}></span>
  160. <p class={styles.title}>{child.name}</p>
  161. </div>
  162. ))}
  163. </div>
  164. ))}
  165. </div>
  166. {!show.value && prepareStore.getTreeList.length <= 0 && (
  167. <TheEmpty />
  168. )}
  169. </NSpin>
  170. </NScrollbar>
  171. {/* 选择教材 */}
  172. <NModal
  173. v-model:show={forms.coursewareStatus}
  174. preset="card"
  175. showIcon={false}
  176. class={['modalTitle background', styles.coursewareModal]}
  177. title={'选择教材'}
  178. blockScroll={false}>
  179. <SelectLessonware
  180. onClose={() => (forms.coursewareStatus = false)}
  181. onConfirm={(item: any) => {
  182. prepareStore.setBaseCourseware(item);
  183. getLessonCoursewareDetail();
  184. }}
  185. />
  186. </NModal>
  187. </div>
  188. );
  189. }
  190. });