activeDetail.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <template>
  2. <div class="activeDetail">
  3. <van-cell-group class="van-cell-group--inset" v-if="vipGroup.name">
  4. <van-cell :title="vipGroup.name" class="titleContent" title-class="titleStyle" label-class="labelStyle">
  5. <template #label>
  6. <p>{{ vipGroup.description }}</p>
  7. </template>
  8. </van-cell>
  9. </van-cell-group>
  10. <h2 class="van-block__title">详细规则</h2>
  11. <van-row class="active-row">
  12. <van-col span="10">排课时间范围</van-col>
  13. <van-col span="14" v-if="vipGroup.coursesStartTime && vipGroup.coursesEndTime">{{ vipGroup.coursesStartTime }} 至 {{ vipGroup.coursesEndTime }}</van-col>
  14. <van-col span="14" v-else>--</van-col>
  15. <van-col span="10">是否扣减课程余额</van-col>
  16. <van-col span="14">{{ vipGroup.payToBalance ? '是' : '否' }}</van-col>
  17. </van-row>
  18. <h2 class="van-block__title">付费课程</h2>
  19. <div class="active-row">
  20. <van-row>
  21. <van-col span="8">课程类型</van-col>
  22. <van-col span="16">{{ vipGroup.courseType | coursesType }}&nbsp;</van-col>
  23. <van-col span="8" v-if="vipGroup.courseType == 'VIP'">课程形式</van-col>
  24. <van-col span="16" v-if="vipGroup.courseType == 'VIP'">{{ vipGroup.vipGroupCategoryNames }}&nbsp;</van-col>
  25. <van-col span="8">上课模式</van-col>
  26. <van-col span="16" v-if="vipGroup.courseType == 'PRACTICE'">线上&nbsp;</van-col>
  27. <van-col span="16" v-else>{{ vipGroup.giveTeachMode | formatTeachModel }}&nbsp;</van-col>
  28. <van-col span="8">单课时时长</van-col>
  29. <van-col span="16">{{ vipGroup.singleCourseTime }}分钟</van-col>
  30. <van-col span="8">课时数</van-col>
  31. <van-col span="16">{{ vipGroup.avgCourseNum }}&nbsp;</van-col>
  32. </van-row>
  33. <van-cell is-link class="teaching" :clickable="false">
  34. <template #title>
  35. 剩余 <span style="color: #01C1B5">
  36. {{vipGroup.courseType == 'VIP' ? vipDetail.vipNum : null}}
  37. {{vipGroup.courseType == 'PRACTICE' ? vipDetail.practiceNum : null}}
  38. </span> 名学员未排课
  39. </template>
  40. <template #default>
  41. <span v-if="vipGroup.courseType == 'VIP' && vipDetail.vipNum || vipGroup.courseType == 'PRACTICE' && vipDetail.practiceNum" style="color: #01C1B5" @click="onProgram('pay')">立即排课</span>
  42. <span v-else style="color: #c0c0c0">立即排课</span>
  43. </template>
  44. </van-cell>
  45. </div>
  46. <!-- 赠送课程类型,只有VIP和网管课的时候才有赠送课程 -->
  47. <template v-if="vipGroup.giveCourseType != 'MEMBER'">
  48. <h2 class="van-block__title">赠送课程</h2>
  49. <div class="active-row">
  50. <van-row>
  51. <van-col span="8">课程类型</van-col>
  52. <van-col span="16">{{ vipGroup.giveCourseType | coursesType }}&nbsp;</van-col>
  53. <van-col span="8" v-if="vipGroup.giveCourseType == 'VIP'">课程形式</van-col>
  54. <van-col span="16" v-if="vipGroup.giveCourseType == 'VIP'">{{ vipGroup.giveCategoryName }}&nbsp;</van-col>
  55. <van-col span="8">上课模式</van-col>
  56. <van-col span="16" v-if="vipGroup.giveCourseType == 'PRACTICE'">线上&nbsp;</van-col>
  57. <van-col span="16" v-else>{{ vipGroup.giveTeachMode | formatTeachModel }}&nbsp;</van-col>
  58. <van-col span="8">单课时时长</van-col>
  59. <van-col span="16">{{ vipGroup.giveSingleCourseTime }}分钟</van-col>
  60. <van-col span="8">课时数</van-col>
  61. <van-col span="16">{{ vipGroup.giveCourseNum }}课时</van-col>
  62. </van-row>
  63. <van-cell is-link class="teaching" :clickable="false">
  64. <template #title>
  65. 剩余 <span style="color: #01C1B5">
  66. {{vipGroup.giveCourseType == 'VIP' ? vipDetail.giveVipNum : null}}
  67. {{vipGroup.giveCourseType == 'PRACTICE' ? vipDetail.givePracticeNum : null}}
  68. </span> 名学员未排课
  69. </template>
  70. <template #default>
  71. <span v-if="vipGroup.giveCourseType == 'VIP' && vipDetail.giveVipNum || vipGroup.giveCourseType == 'PRACTICE' && vipDetail.givePracticeNum" style="color: #01C1B5" @click="onProgram('give')">立即排课</span>
  72. <span v-else style="color: #c0c0c0">立即排课</span>
  73. </template>
  74. </van-cell>
  75. </div>
  76. </template>
  77. <!-- <m-empty v-if="!vipDetail.giveVipNum && !vipDetail.givePracticeNum && !vipDetail.vipNum && !vipDetail.practiceNum" msg="暂无排课内容" /> -->
  78. </div>
  79. </template>
  80. <script>
  81. import { getActivityWaitCourseStudentNum } from './api'
  82. import MEmpty from '@/components/MEmpty'
  83. import dayjs from 'dayjs'
  84. export default {
  85. components: {
  86. MEmpty
  87. },
  88. data() {
  89. const query = this.$route.query
  90. return {
  91. activityId: query.activityId,
  92. vipDetail: {},
  93. vipGroup: {}
  94. }
  95. },
  96. mounted() {
  97. document.title = '活动详情'
  98. this.__init()
  99. },
  100. methods: {
  101. async __init() {
  102. try {
  103. let res = await getActivityWaitCourseStudentNum({ activityId: this.activityId })
  104. this.vipDetail = res.data
  105. let vipGroup = res.data.vipGroupActivity
  106. vipGroup.coursesStartTime = vipGroup.coursesStartTime ? dayjs(vipGroup.coursesStartTime).format('YYYY-MM-DD') : null
  107. vipGroup.coursesEndTime = vipGroup.coursesEndTime ? dayjs(vipGroup.coursesEndTime).format('YYYY-MM-DD') : null
  108. if(vipGroup.minCourseNum > 0) {
  109. if(vipGroup.minCourseNum != vipGroup.maxCourseNum) {
  110. vipGroup.avgCourseNum = vipGroup.minCourseNum + '课时 ~ ' + vipGroup.maxCourseNum + '课时'
  111. } else {
  112. vipGroup.avgCourseNum = vipGroup.maxCourseNum + '课时'
  113. }
  114. } else {
  115. vipGroup.avgCourseNum = '自定义'
  116. }
  117. this.vipGroup = vipGroup
  118. } catch {
  119. //
  120. }
  121. },
  122. onProgram(type) {
  123. // type pay 付费课 give 赠送课
  124. this.$router.push({
  125. path: '/program',
  126. query: {
  127. activityId: this.activityId,
  128. type: type
  129. }
  130. })
  131. }
  132. },
  133. filters: {
  134. formatTeachModel(val) {
  135. if(val === -1) {
  136. return '线上,线下'
  137. } else if(val === 0) {
  138. return '线上'
  139. } else if(val === 1) {
  140. return '线下'
  141. }
  142. }
  143. }
  144. }
  145. </script>
  146. <style lang="less" scoped>
  147. .activeDetail {
  148. background-color: #F5F5F5;
  149. min-height: 97vh;
  150. overflow: hidden;
  151. padding-bottom: 3vh;
  152. }
  153. .van-cell-group--inset {
  154. margin: .12rem .12rem 0;
  155. overflow: hidden;
  156. border-radius: 8px;
  157. .titleContent {
  158. padding: .14rem .16rem;
  159. }
  160. .titleStyle {
  161. font-size: .2rem;
  162. color: #333333;
  163. font-size: 500;
  164. }
  165. .labelStyle {
  166. padding-top: .08rem;
  167. color: #666666;
  168. font-size: .13rem;
  169. line-height: .2rem;
  170. }
  171. }
  172. .van-block__title {
  173. padding: .12rem .14rem .06rem;
  174. color: #808080;
  175. font-size: .14rem;
  176. line-height: .2rem;
  177. }
  178. .active-row {
  179. padding: .15rem .14rem;
  180. background: #FFF;
  181. font-size: .14rem;
  182. color: #1A1A1A;
  183. .van-col {
  184. border: 1px solid #E5E5E5;
  185. padding: .09rem .08rem;
  186. margin-bottom: -1px;
  187. }
  188. .van-col--8, .van-col--10 {
  189. margin-right: -1px;
  190. padding-left: .14rem;
  191. background: #F8F8F8;
  192. font-weight: 500;
  193. }
  194. .teaching {
  195. margin-top: .2rem;
  196. padding: 0;
  197. font-size: .16rem;
  198. color: #1A1A1A;
  199. }
  200. }
  201. </style>