index.html 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <!-- +---------------------------------------------------------------------- -->
  2. <!-- | CRMEB [ CRMEB赋能开发者,助力企业发展 ] -->
  3. <!-- +---------------------------------------------------------------------- -->
  4. <!-- | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved. -->
  5. <!-- +---------------------------------------------------------------------- -->
  6. <!-- | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权 -->
  7. <!-- +---------------------------------------------------------------------- -->
  8. <!-- | Author: CRMEB Team <admin@crmeb.com> -->
  9. <!-- +---------------------------------------------------------------------- -->
  10. {extend name="public/container"}
  11. {block name="title"}训练营{/block}
  12. {block name="head_top"}
  13. <style>
  14. body {
  15. padding-bottom: 1rem;
  16. padding-bottom: calc(1rem + constant(safe-area-inset-bottom));
  17. padding-bottom: calc(1rem + env(safe-area-inset-bottom));
  18. background-color: #f5f5f5;
  19. }
  20. .link .cont{display:inline-block;vertical-align:middle;font-weight:400;font-size:.18rem;line-height:.36rem;color:#666;}
  21. .link .cont img{width:0.4rem;height:0.4rem;margin:auto;display: block;}
  22. .picker .picker-panel .picker-choose .cancel, .picker .picker-panel .picker-choose .confirm{top:0 !important;}
  23. .picker .picker-panel .picker-choose .confirm{color:#191C6E !important;}
  24. .picker .picker-panel .wheel-wrapper .wheel{font-size:.3rem !important;}
  25. .picker .picker-panel .picker-choose{font-size:.3rem !important;}
  26. </style>
  27. {/block}
  28. {block name="content"}
  29. <div v-cloak id="app">
  30. <div class="activity">
  31. <div class="header">
  32. <div class="image">
  33. <img class="img" :src="activity.image">
  34. </div>
  35. <div class="text">
  36. <div class="name" v-text="activity.title"></div>
  37. <div class="group">
  38. <div class="money" >¥<span class="num" v-text="activity.price"></span>
  39. <!-- <span class="vip-price" style="color: #0A0A0A;">¥{{ activity.member_price }}</span>
  40. <img class="vip-price-icon" src="{__WAP_PATH}zsff/images/vip.png"> -->
  41. </div>
  42. <div>{{ activity.count }}人已报名</div>
  43. </div>
  44. </div>
  45. <div class="info">
  46. <div class="item">
  47. <div class="iconfont iconshijian2"></div>
  48. <div class="cont">报名时间:{{activity.signup_start_time}}至{{activity.signup_end_time}}</div>
  49. </div>
  50. <div class="item">
  51. <div class="iconfont iconshijian2"></div>
  52. <div class="cont">活动时间:{{activity.start_time}}至{{activity.end_time}}</div>
  53. </div>
  54. <div class="item">
  55. <div class="iconfont icondidian"></div>
  56. <div class="cont">活动地址:{{activity.province}}{{activity.city}}{{activity.district}}{{activity.detail}}
  57. </div>
  58. </div>
  59. </div>
  60. </div>
  61. <div class="chat" v-if="isPay">
  62. <div class="text">赶紧加入活动群聊吧~</div>
  63. <div class="btn" @click=" open = true ">加入群聊</div>
  64. </div>
  65. <!-- 相关讲师 -->
  66. <related-lecturer v-if="lecturer" :lecturer="lecturer"></related-lecturer>
  67. <div class="main">
  68. <div class="nav-bar">
  69. <div :class="{ on: navOn === 1 }" class="item" @click="navOn = 1">详情</div>
  70. <div :class="{ on: navOn === 2 }" class="item" @click="navOn = 2">规则</div>
  71. </div>
  72. <div class="nav-cont">
  73. <!-- 详情 -->
  74. <div v-show="navOn === 1" class="section">{$content}</div>
  75. <!-- 规则 -->
  76. <div v-show="navOn === 2" class="section">{$activity_rules}</div>
  77. </div>
  78. </div>
  79. <div class="footer">
  80. <a class="link" href="{:url('wap/index/index')}">
  81. <div class="cont">
  82. <img src="{__WAP_PATH}zsff/images/special01.png">
  83. <div>首页</div>
  84. </div>
  85. </a>
  86. <button class="button" type="button" v-if="activity.statu === 0" disabled>未开始报名</button>
  87. <template v-else-if="activity.statu === 1">
  88. <button class="button" type="button" v-if="activity.number > activity.count" @click="activitySign">去报名</button>
  89. <button class="button" type="button" v-else disabled>报名结束</button>
  90. </template>
  91. <button class="button" type="button" v-else-if="activity.statu === 2 || activity.statu === 3" disabled>报名结束</button>
  92. <button class="button" type="button" v-else disabled>活动结束</button>
  93. </div>
  94. <div class="groupCode" v-show="open">
  95. <div class="code"><img :src="activity.qrcode_img"></div>
  96. <div class="codeTip">长按扫一扫<br>加进群哦</div>
  97. </div>
  98. <div :class="{ mask: open }" @click="open = false"></div>
  99. </div>
  100. <base-login :login-show="loginShow" :site-name="siteName" @login-close="loginClose"></base-login>
  101. </div>
  102. {/block}
  103. {block name="foot"}
  104. <script>
  105. require(['vue', 'store', 'components/base-login/index', 'components/related-lecturer/index',], function (Vue, store, BaseLogin, RelatedLecturer) {
  106. var uid = "{$uid}" || 0;
  107. var activity = {$activity};
  108. var siteName = '{$Auth_site_name}';
  109. var isWeChat = '{$isWechat}';
  110. var isMember = {$is_member};
  111. new Vue({
  112. el: '#app',
  113. components: {
  114. 'base-login': BaseLogin,
  115. 'related-lecturer': RelatedLecturer
  116. },
  117. data: {
  118. navOn: 1,
  119. isRestrictions: 0,
  120. open: false,
  121. activity: activity,
  122. siteName: siteName,
  123. isPay: 0,
  124. isMember: isMember,
  125. loginShow: false,
  126. specialEvent: '',
  127. lecturer: null
  128. },
  129. created: function () {
  130. var vm = this;
  131. this.activityType();
  132. this.getLecturer();
  133. this.specialEvent = $h.U({
  134. c: 'special',
  135. a: 'event',
  136. q: {
  137. id: this.activity.id
  138. }
  139. });
  140. if (isWeChat) {
  141. mapleWx($jssdk(), function () {
  142. this.onMenuShareAll({
  143. title: vm.activity.title,
  144. desc: (vm.activity.province === vm.activity.city ? '' : vm.activity.province) + vm.activity.city + vm.activity.district + vm.activity.detail,
  145. imgUrl: vm.activity.image,
  146. link: window.location.href + (window.location.search ? '&' : '?') + 'spread_uid=' + uid
  147. });
  148. });
  149. }
  150. },
  151. methods: {
  152. activityType: function () {
  153. var vm = this;
  154. store.baseGet($h.U({
  155. c: 'special',
  156. a: 'activityType',
  157. q: {
  158. id: this.activity.id
  159. }
  160. }), function (res) {
  161. var data = res.data.data;
  162. vm.isPay = data.is_pay;
  163. vm.isRestrictions = data.is_restrictions;
  164. });
  165. },
  166. activitySign: function () {
  167. var vm = this;
  168. store.baseGet($h.U({
  169. c: 'index',
  170. a: 'user_login'
  171. }), function () {
  172. if (vm.isRestrictions) {
  173. $h.pushMsg('您的报名已超过限额');
  174. } else {
  175. window.location.assign(vm.specialEvent);
  176. }
  177. }, function () {
  178. vm.loginShow = true;
  179. });
  180. },
  181. // 关闭登录弹窗
  182. loginClose: function (data) {
  183. this.loginShow = false;
  184. if (data) {
  185. window.location.assign(this.specialEvent);
  186. }
  187. },
  188. // 相关讲师
  189. getLecturer: function () {
  190. var vm = this;
  191. store.baseGet($h.U({
  192. c: 'auth_api',
  193. a: 'getLecturer',
  194. q: {
  195. mer_id: this.activity.mer_id
  196. }
  197. }), function (res) {
  198. vm.lecturer = res.data.data;
  199. });
  200. }
  201. }
  202. });
  203. });
  204. </script>
  205. {/block}