健康同学微信公众号h5项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

225 lines
6.6KB

  1. <!-- 训练营 -->
  2. <template>
  3. <div class="trainingcamp">
  4. <!-- 训练营 -->
  5. <van-nav-bar title="52场专家课" :border="true" :left-arrow="true" @click-left="onNavBack" left-text="返回">
  6. <template #left>
  7. <van-icon name="arrow-left" size="24" style="padding: 0" />
  8. <span>返回</span>
  9. </template>
  10. </van-nav-bar>
  11. <div class="main">
  12. <ul>
  13. <li :class="active == 'brief' ? 'active' : ''" @click="switchNav('brief')">简介</li>
  14. <li :class="active == 'content' ? 'active' : ''" @click="switchNav('content')">内容</li>
  15. <li :class="active == 'evaluate' ? 'active' : ''" @click="switchNav('evaluate')">评价</li>
  16. <!-- <li :class="active == 'recommend' ? 'active' : ''" @click="switchNav('recommend')">推荐</li> -->
  17. </ul>
  18. <!-- 简介 -->
  19. <div class="brief-box" v-show="active == 'brief'">
  20. <!-- <img :src="info.introduce" alt="" /> -->
  21. <div class="con">
  22. <!-- banner -->
  23. <div class="banner">
  24. <img :src="camp.introductionImg" alt="">
  25. </div>
  26. <div class="article"></div>
  27. </div>
  28. <div class="bottom">
  29. <div class="customer">
  30. <img :src="customerImg" />
  31. </div>
  32. <div class="price">
  33. <div class="left">
  34. <span>¥{{ camp.vipPrice }}</span>
  35. </div>
  36. <div class="right">
  37. <span>会员免费</span>
  38. </div>
  39. </div>
  40. </div>
  41. </div>
  42. <!-- 内容 -->
  43. <div class="content-box" v-show="active == 'content'">
  44. <div class="list">
  45. <div class="list-item" v-for="(item, index) in info.videoList" :key="index" @click="onRoterTo(item)">
  46. <p>{{ item.title }}</p>
  47. <!-- <span><i v-if="item.isFree == 0">免费</i>{{ item.duration }} | {{ item.playBack }}次播放</span>
  48. <img v-if="item.isFree == 0" src="@/assets/optimize/icons/play.png" alt="" />
  49. <img v-else src="@/assets/optimize/icons/lock.png" alt="" /> -->
  50. </div>
  51. </div>
  52. </div>
  53. <div class="evaluate-box" v-show="active == 'evaluate'">
  54. <div class="list">
  55. <div class="list-item" v-for="(item, index) in info.evaluate" :key="index">
  56. <div class="top">
  57. <img src="@/assets/optimize/icons/3_55.png" alt="" />
  58. <div>
  59. <p>{{ item.nickName || '匿名' }}</p>
  60. <span>{{ item.createdAt }} {{ item.address }}</span>
  61. </div>
  62. </div>
  63. <p>{{ item.content }}</p>
  64. <span>{{ item.title }}</span>
  65. </div>
  66. </div>
  67. </div>
  68. <div class="recommend-box" v-show="active == 'recommend'">
  69. <ul>
  70. <li v-for="(item, index) in campList" :key="index">
  71. <h4>{{ item.name }}</h4>
  72. <p>{{ item.summary }}</p>
  73. <span>播放</span>
  74. <img src="@/assets/optimize/images/3_48.png" alt="" />
  75. </li>
  76. </ul>
  77. </div>
  78. </div>
  79. <!-- 底部导航 -->
  80. <TabBar />
  81. </div>
  82. </template>
  83. <script>
  84. import TabBar from '@/components/TabBar';
  85. import APIOptimize from '@/api/optimize';
  86. export default {
  87. components: {
  88. TabBar
  89. },
  90. data() {
  91. return {
  92. active: 'brief',
  93. campList: [],
  94. customerImg: require('@/assets/optimize/images/3_88.png'),
  95. info: {
  96. videoList: [
  97. /* {
  98. "lessonId": 1,
  99. "title": "《心理健康—依靠爱的支撑》",
  100. "isFree": false,
  101. "createdAt": "2024-01-26 18:14:19",
  102. "readCount": null
  103. },
  104. {
  105. "lessonId": 2,
  106. "title": "《心理健康—亲和力》",
  107. "isFree": false,
  108. "createdAt": "2024-02-21 15:16:58",
  109. "readCount": null
  110. },
  111. {
  112. "lessonId": 3,
  113. "title": "《心理健康—推动内驱力、树立人格美》",
  114. "isFree": false,
  115. "createdAt": "2024-02-21 15:16:58",
  116. "readCount": null
  117. } */
  118. ],
  119. evaluate: [
  120. {
  121. "commentId": 1,
  122. "avatar": "https://ai.ssjlai.com/fastdfs/group1/M00/00/89/rBMqKGWiUrmAJUReAAMG6aq1a-4091.png",
  123. "nickName": '张杰妈妈',
  124. "content": "买了好多课,这个是最值得的!!",
  125. "createdAt": "2024-01-29 16:34:27",
  126. "address": "佛山",
  127. "title": "心理健康—依靠爱的支撑》"
  128. },
  129. {
  130. "commentId": 1,
  131. "avatar": "https://ai.ssjlai.com/fastdfs/group1/M00/00/89/rBMqKGWiUrmAJUReAAMG6aq1a-4091.png",
  132. "nickName": '张杰妈妈',
  133. "content": "买了好多课,这个是最值得的!!",
  134. "createdAt": "2024-01-29 16:34:27",
  135. "address": "佛山",
  136. "title": "心理健康—依靠爱的支撑》"
  137. },
  138. ]
  139. },
  140. bannerImg: '',
  141. camp: {}
  142. };
  143. },
  144. watch: {
  145. active(val) {
  146. if (val == 'content') {
  147. this.getTrainingCampDetail();
  148. } else if (val == 'evaluate') {
  149. this.getTrainingCampDetailComment()
  150. }
  151. }
  152. },
  153. created() {
  154. },
  155. mounted() {
  156. this.$nextTick(() => {
  157. this.getCampList();
  158. })
  159. },
  160. methods: {
  161. getCampList() {
  162. APIOptimize.getCampList().then(res => {
  163. let data = res.data.data;
  164. const campObj = data.filter(f => {
  165. return this.$store.getters.campId == f.id
  166. })[0];
  167. this.camp = { ...campObj }
  168. })
  169. },
  170. getTrainingCampDetail() {
  171. let reqParams = {
  172. courseId: Number(this.$store.getters.campId)
  173. };
  174. APIOptimize.getTrainingCampDetail(reqParams).then(res => {
  175. let data = res.data.data;
  176. this.info.videoList = data.lessonList
  177. })
  178. },
  179. getTrainingCampDetailComment() {
  180. let reqParams = {
  181. courseId: Number(this.$store.getters.campId)
  182. };
  183. APIOptimize.getTrainingCampDetailComment(reqParams).then(res => {
  184. let data = res.data.data;
  185. console.log("data", data);
  186. this.info.evaluate = data;
  187. })
  188. },
  189. // 返回
  190. onNavBack() {
  191. this.$router.push({
  192. name: 'Optimize'
  193. });
  194. },
  195. // 切换
  196. switchNav(e) {
  197. this.active = e;
  198. },
  199. onRoterTo(item) {
  200. console.log(item);
  201. this.$router.push({
  202. name: 'expertChat',
  203. query: {
  204. title: item.title.replace("《", '').replace("》", ''),
  205. lessonId: item.lessonId
  206. }
  207. })
  208. }
  209. },
  210. };
  211. </script>
  212. <style scoped lang="scss">
  213. @import './scss/trainingcamp.scss';
  214. </style>