kecheng-mulu.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <template>
  2. <view class="kecheng-mulu-box">
  3. <myCollapseCardVue v-for="zhang in chapterArr" :title="zhang.name" @click.stop="handleZhangClick(zhang)"
  4. :open="zhang.open">
  5. <myCollapseCardVue v-for="jie in zhang.jieList" :title="jie.name" @click.stop="handleJieClick(jie, zhang)"
  6. :open="jie.open">
  7. <view class="kejian-item" v-for="item in jie.kejianList" @click.stop="handleKejianClick(item)">
  8. <icon class="kejian-item-icon"></icon>
  9. <text>{{item.name}}</text>
  10. <text v-if="isHasProgress">进度{{item.curProcess}}</text>
  11. </view>
  12. </myCollapseCardVue>
  13. </myCollapseCardVue>
  14. </view>
  15. </template>
  16. <script setup>
  17. import myCollapseCardVue from '../myCollapseCard/myCollapseCard.vue';
  18. import {
  19. ref
  20. } from 'vue';
  21. const props = defineProps({
  22. chapterArr: {
  23. type: Array
  24. },
  25. isHasProgress: {
  26. type: Boolean
  27. }
  28. })
  29. const emits = defineEmits(['play'])
  30. function handleZhangClick(item) {
  31. if (item.open) {
  32. // 展开 -》 关闭
  33. props.chapterArr.forEach(zhang => {
  34. zhang.open = false;
  35. zhang.jieList.forEach(jie => {
  36. jie.open = false;
  37. })
  38. })
  39. } else {
  40. // 关闭 -》 展开
  41. props.chapterArr.forEach(zhang => {
  42. zhang.open = false;
  43. zhang.jieList.forEach(jie => {
  44. jie.open = false;
  45. })
  46. })
  47. item.open = true;
  48. }
  49. }
  50. function handleJieClick(item, zhang) {
  51. if (item.open) {
  52. // 展开 -》 关闭
  53. zhang.jieList.forEach(jie => {
  54. jie.open = false;
  55. })
  56. } else {
  57. // 关闭 -》 展开
  58. zhang.jieList.forEach(jie => {
  59. jie.open = false;
  60. })
  61. item.open = true;
  62. }
  63. }
  64. function handleKejianClick(item) {
  65. emits('play', item)
  66. }
  67. </script>