chapter.tsx 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import { defineComponent, reactive, toRefs } from 'vue';
  2. import styles from './chapter.module.less';
  3. import iconMenuChapter from '../image/icon-menu-chapter.svg';
  4. import { Collapse, CollapseItem, Icon, Image, showToast } from 'vant';
  5. import chapterDown from '../image/chapter-down-arrow.svg';
  6. import chapterDefault from '../image/chapter-default-arrow.svg';
  7. import chapterVideo from '../image/chapter-video.svg';
  8. export default defineComponent({
  9. name: 'chapter',
  10. props: {
  11. detail: {
  12. type: Object,
  13. default: () => []
  14. },
  15. itemActive: {
  16. type: String,
  17. default: ''
  18. }
  19. },
  20. emits: ['handleSelect'],
  21. setup(props, { emit }) {
  22. const { detail, itemActive } = toRefs(props);
  23. const pointData = reactive({
  24. active: ''
  25. });
  26. return () => (
  27. <div class={styles.container}>
  28. <div class={styles.pointHead}>
  29. <img src={iconMenuChapter} />
  30. 切换章节
  31. </div>
  32. <div class={styles.content}>
  33. <Collapse
  34. class={styles.collapse}
  35. modelValue={pointData.active}
  36. onUpdate:modelValue={(val: any) => {
  37. pointData.active = val;
  38. }}
  39. border={false}
  40. accordion>
  41. {detail.value.map((item: any) => (
  42. <CollapseItem
  43. center
  44. class={[
  45. styles.collapseItem,
  46. pointData.active === item.id ? styles.activeItem : ''
  47. ]}
  48. border={false}
  49. isLink={false}
  50. title={item.name}
  51. titleClass={'van-ellipsis'}
  52. titleStyle={{ width: '80%' }}
  53. name={item.id}>
  54. {{
  55. default: () => (
  56. <>
  57. {item.knowledgeList.map((know: any) => (
  58. <div
  59. class={[
  60. styles.item,
  61. itemActive.value == know.id ? styles.itemActive : ''
  62. ]}
  63. onClick={() => {
  64. if (!know.containMaterial) {
  65. showToast('暂无课件,不法切换');
  66. return;
  67. }
  68. emit('handleSelect', {
  69. itemActive: know.id,
  70. tabActive: item.id,
  71. tabName: item.name
  72. });
  73. }}>
  74. <Image src={chapterVideo} class={styles.itemImage} />
  75. <span style={{ width: '80%' }} class="van-ellipsis">
  76. {know.name}
  77. </span>
  78. </div>
  79. ))}
  80. </>
  81. ),
  82. icon: () => (
  83. <img
  84. class={styles.arrow}
  85. src={
  86. pointData.active === item.id
  87. ? chapterDown
  88. : chapterDefault
  89. }
  90. />
  91. )
  92. }}
  93. </CollapseItem>
  94. ))}
  95. </Collapse>
  96. </div>
  97. </div>
  98. );
  99. }
  100. });