points.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { defineComponent, reactive } from 'vue'
  2. import styles from './point.module.less'
  3. import iconMulv from '../image/icon-mulv.svg'
  4. import iconArrow from '../image/icon-arrow.svg'
  5. import { Collapse, CollapseItem } from 'vant'
  6. export default defineComponent({
  7. name: 'points',
  8. props: {
  9. data: {
  10. type: Array,
  11. default: () => []
  12. },
  13. tabActive: {
  14. type: String,
  15. default: ''
  16. },
  17. itemActive: {
  18. type: String,
  19. default: ''
  20. }
  21. },
  22. emits: ['handleSelect'],
  23. setup(props, { emit }) {
  24. const pointData = reactive({
  25. active: props.tabActive || '1610827376354500609' || ''
  26. })
  27. return () => (
  28. <div class={styles.container}>
  29. <div>
  30. <div class={styles.pointHead}>
  31. <img src={iconMulv} />
  32. 课程目录
  33. </div>
  34. <Collapse
  35. class={styles.collapse}
  36. modelValue={pointData.active}
  37. onUpdate:modelValue={(val: any) => {
  38. pointData.active = val
  39. }}
  40. accordion
  41. >
  42. {props.data.map((item: any) => {
  43. return (
  44. <CollapseItem center border={false} isLink={false} title={item.name} name={item.id}>
  45. {{
  46. default: () => (
  47. <>
  48. {Array.isArray(item?.materialList) &&
  49. item.materialList.map((n: any) => {
  50. return <div class={[styles.item, props.itemActive == n.id ? styles.itemActive : '']} onClick={() => {
  51. emit('handleSelect', {itemActive: n.id, tabActive: item.id})
  52. }}>{n.name}</div>
  53. })}
  54. </>
  55. ),
  56. icon: () => <img class={styles.arrow} src={iconArrow} />
  57. }}
  58. </CollapseItem>
  59. )
  60. })}
  61. </Collapse>
  62. </div>
  63. </div>
  64. )
  65. }
  66. })