courseModule.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <template>
  2. <view style="margin: 20rpx 0;">
  3. <view class="title" @click="openModule(menuItem)">
  4. <image src="/static/icon/up1.png" class="icon_up" v-if="down"></image>
  5. <image src="/static/icon/down1.png" class="icon_up" v-if="!down"></image>
  6. <text style="margin-left: 10rpx;">{{menuItem.name}}</text>
  7. </view>
  8. <view v-show="!down">
  9. <view v-for="(itemM,indexM) in list" :key="indexM">
  10. <courseChapter :orderGoodsId="orderGoodsId" :preItem="list[indexM - 1] || preItem" :sectionMaxNum="sectionMaxNum" :needOpen="needOpen" @playEnd="playEnd($event)" @toDo="toDo($event)" :courseId="courseId" :learningOrder="learningOrder" :goodsId="goodsId" :isBuy="isBuy" :gradeId="gradeId" :isRebuild="isRebuild" :menuItem="itemM" :levelId="levelId+'-'+itemM.chapterId"></courseChapter>
  11. <u-line v-if="indexM<list.length-1"></u-line>
  12. </view>
  13. </view>
  14. </view>
  15. </template>
  16. <script>
  17. import { mapGetters } from 'vuex';
  18. import courseChapter from '@/components/course/courseChapter.vue';
  19. export default {
  20. name: 'courseModule',
  21. props: {
  22. orderGoodsId:{
  23. default:0
  24. },
  25. preItem:{
  26. default:undefined
  27. },
  28. learningOrder:{ //是否设置学习顺序 1 章节顺序 0不设置 2从头学到尾顺序
  29. type:Number,
  30. defaule:0
  31. },
  32. needOpen:{ //是否默认展开
  33. type:Boolean,
  34. default:false,
  35. },
  36. menuItem: {
  37. type: Object,
  38. default: {}
  39. },
  40. goodsId: {
  41. type: Number,
  42. default: 0
  43. },
  44. courseId: {
  45. type: Number,
  46. default: 0
  47. },
  48. isBuy: { //是否是已购买商品
  49. type: Boolean,
  50. default: false
  51. },
  52. levelId: {
  53. type: String,
  54. default: ""
  55. },
  56. isRebuild: { //是否重修目录
  57. type: Boolean,
  58. default: false
  59. },
  60. gradeId: { //重修需要班级ID
  61. type: Number,
  62. default: 0
  63. },
  64. sectionMaxNum:{
  65. default:undefined
  66. }
  67. },
  68. components: {
  69. courseChapter
  70. },
  71. data() {
  72. return {
  73. down:true,
  74. list:[],
  75. };
  76. },
  77. onLoad() {},
  78. created() {
  79. },
  80. mounted() {
  81. if(this.needOpen && this.chapterOpen) {
  82. this.openModule(this.menuItem)
  83. }
  84. },
  85. methods: {
  86. playEnd(isRebuild) {
  87. this.$emit('playEnd',{isRebuild:isRebuild.isRebuild})
  88. },
  89. toDo(item) {
  90. this.$emit('toDo',item)
  91. },
  92. openModule(item){
  93. this.down = !this.down
  94. if(!this.down&&this.list.length==0){
  95. if(this.isBuy){
  96. if(this.isRebuild){
  97. this.getReChapterList(item.id,item.courseId)
  98. }else{
  99. this.getBuyChapterList(item.id,item.courseId) //已购买目录
  100. }
  101. }else{
  102. this.getChapterList(item.id) //未购买目录
  103. }
  104. }
  105. },
  106. getChapterList(moduleId) {
  107. let self = this
  108. this.$api.chapterList(moduleId).then(res => {
  109. if(res.data.code==200){
  110. for(let i=0;i<res.data.data.length;i++){
  111. let item = res.data.data[i]
  112. item.id = item.chapterId
  113. item.menuType = 2;
  114. }
  115. self.list = res.data.data
  116. }
  117. });
  118. },
  119. getReChapterList(moduleId,courseId) {
  120. let self = this
  121. this.$api.reChapterList({moduleId:moduleId,gradeId:this.gradeId,courseId:courseId,rebuild:1}).then(res => {
  122. if(res.data.code==200){
  123. for(let i=0;i<res.data.data.length;i++){
  124. let item = res.data.data[i]
  125. item.id = item.chapterId
  126. }
  127. self.list = res.data.data
  128. }
  129. });
  130. },
  131. getBuyChapterList(moduleId,courseId) {
  132. let self = this
  133. this.$api.reChapterList({moduleId:moduleId,gradeId:this.gradeId,courseId:courseId}).then(res => {
  134. if(res.data.code==200){
  135. for(let i=0;i<res.data.data.length;i++){
  136. let item = res.data.data[i]
  137. item.id = item.chapterId
  138. item.menuType = 2;
  139. }
  140. self.list = res.data.data
  141. }
  142. });
  143. },
  144. },computed: { ...mapGetters(['chapterOpen']) },
  145. };
  146. </script>
  147. <style scoped>
  148. .icon_up{
  149. width: 24rpx;
  150. height: 24rpx;
  151. }
  152. .title{
  153. font-size: 30rpx;
  154. font-family: PingFang SC;
  155. font-weight: bold;
  156. color: #333333;
  157. white-space:nowrap;
  158. overflow:hidden;
  159. text-overflow:ellipsis;
  160. margin-bottom:30rpx;
  161. }
  162. </style>