index.html 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. {extend name="public/container"}
  2. {block name="title"}活动报名{/block}
  3. {block name="head_top"}
  4. <style>
  5. body {
  6. padding-bottom: 1rem;
  7. background-color: #f2f2f2;
  8. }
  9. .link .cont{display:inline-block;vertical-align:middle;font-weight:400;font-size:.18rem;line-height:.36rem;color:#666;}
  10. .link .cont img{width:0.4rem;height:0.4rem;margin:auto;display: block;}
  11. </style>
  12. {/block}
  13. {block name="content"}
  14. <div v-cloak id="app">
  15. <div class="activity">
  16. <div class="header">
  17. <div class="image">
  18. <img class="img" :src="activity.image">
  19. </div>
  20. <div class="text">
  21. <div class="name" v-text="activity.title"></div>
  22. <div class="group">
  23. <div class="money" >¥<span class="num" v-text="activity.price"></span>
  24. <span class="vip-price" style="color: #0A0A0A;">¥{{ activity.member_price }}</span>
  25. <img class="vip-price-icon" src="{__WAP_PATH}zsff/images/vip.png">
  26. </div>
  27. <div>已报名:{{activity.count}} 剩余:{{activity.surplus}}</div>
  28. </div>
  29. </div>
  30. <div class="info">
  31. <div class="item">
  32. <div class="knowledge iconshijian2"></div>
  33. <div class="cont">报名时间:{{activity.signup_start_time}}至{{activity.signup_end_time}}</div>
  34. </div>
  35. <div class="item">
  36. <div class="knowledge iconshijian2"></div>
  37. <div class="cont">活动时间:{{activity.start_time}}至{{activity.end_time}}</div>
  38. </div>
  39. <div class="item">
  40. <div class="knowledge icondidian"></div>
  41. <div class="cont">活动地址:{{activity.province}}{{activity.city}}{{activity.district}}{{activity.detail}}
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. <div class="chat" v-if="is_pay">
  47. <div class="text">赶紧加入活动群聊吧~</div>
  48. <div class="btn" @click=" open = true ">加入群聊</div>
  49. </div>
  50. <div class="main">
  51. <div class="nav-bar">
  52. <div :class="{ on: navOn === 1 }" class="item" @click="navOn = 1">活动详情</div>
  53. <div :class="{ on: navOn === 2 }" class="item" @click="navOn = 2">活动规则</div>
  54. </div>
  55. <div class="nav-cont">
  56. <!-- 详情 -->
  57. <div v-show="navOn === 1" class="section">{$content}</div>
  58. <!-- 规则 -->
  59. <div v-show="navOn === 2" class="section">{$activity_rules}</div>
  60. </div>
  61. </div>
  62. <div class="footer">
  63. <a class="link" href="{:url('wap/index/index')}">
  64. <div class="cont">
  65. <img src="{__WAP_PATH}zsff/images/special01.png">
  66. <div>首页</div>
  67. </div>
  68. </a>
  69. <button class="button" type="button" v-if="activity.status==0" >未开始</button>
  70. <button class="button" type="button" v-else-if="activity.status==1" @click="activityPopupShow">报名</button>
  71. <button class="button" type="button" v-else-if="activity.status==2" >报名结束</button>
  72. <button class="button" type="button" v-else-if="activity.status==3" >活动中</button>
  73. <button class="button" type="button" v-else >活动结束</button>
  74. </div>
  75. <div class="groupCode" v-show="open" v-cloak="">
  76. <div class="code"><img :src="activity.qrcode_img"></div>
  77. <div class="codeTip">长按扫一扫<br>加进群哦</div>
  78. </div>
  79. <div :class="{ mask: open }" @click="open = false"></div>
  80. <div :class="{ mask: popupShow }" @click="popupShow = false"></div>
  81. <div :class="{ on: popupShow }" class="popup" >
  82. <div class="head"><button class="knowledge iconguanbi2" type="button"
  83. @click="popupShow = false"></button>报名信息
  84. </div>
  85. <div class="cont" v-if="is_fill">
  86. <div class="label-group" >
  87. <label class="label">
  88. <span class="name">姓名*</span>
  89. <input v-model.trim="signs.name" class="input" placeholder="请填写您的姓名">
  90. </label>
  91. <label class="label">
  92. <span class="name">手机号*</span>
  93. <input v-model="signs.phone" class="input" type="tel" placeholder="请填写您的手机号" maxlength="11">
  94. </label>
  95. <label class="label">
  96. <span class="name">性别*</span>
  97. <input type="radio" name="sex" style="-webkit-appearance: radio;" v-model="signs.sex" value="1" title="男">&nbsp;男
  98. <input type="radio" name="sex" style="-webkit-appearance: radio;margin-left: 2px;" v-model="signs.sex" value="2" title="女">&nbsp;女
  99. <input type="radio" name="sex" style="-webkit-appearance: radio;margin-left: 2px;" v-model="signs.sex" value="0" title="女">&nbsp;保密
  100. </label>
  101. <label class="label">
  102. <span class="name">年龄</span>
  103. <input v-model="signs.age" type="number" class="input" placeholder="请填写您的年龄">
  104. </label>
  105. <label class="label">
  106. <span class="name">公司</span>
  107. <input v-model.trim="signs.company" class="input" placeholder="请填写您的公司">
  108. </label>
  109. <label class="label">
  110. <span class="name">备注</span>
  111. <input v-model.trim="signs.remarks" class="input" placeholder="请填写备注">
  112. </label>
  113. </div>
  114. <div class="button-group">
  115. <button class="button" type="button" @click="submit">提交</button>
  116. </div>
  117. </div>
  118. </div>
  119. </div>
  120. <payment @change="changeVal" :payment="payment" :signs="signs" :money="money" :isYue="is_yue" :now_money="now_money" :isAlipay="is_alipay" :special_id="id" :iswechat="isWechat" :pay_type_num="pay_type_num" ></payment>
  121. <enter :appear="appear" @change="changeVal" :url="url" :site_name="site_name"></enter>
  122. </div>
  123. <script>
  124. var activity={$activity},uid={$userInfo['uid'] ? $userInfo['uid']:0};
  125. var site_name = '{$Auth_site_name}';
  126. var isWechat={$isWechat ? 'true' : 'false'},is_yue={$is_yue ? 'true' : 'false'},isMember={$is_member},now_money={$now_money},
  127. is_fill={$is_fill ? 'true' : 'false'},is_alipay={$is_alipay ? 'true' : 'false'};
  128. require(['vue', 'store', 'helper', 'reg-verify','{__WAP_PATH}zsff/js/payment.js', '{__WAP_PATH}zsff/js/enter.js', '{__WAP_PATH}zsff/js/shortcut.js'], function (Vue, store, $h, $reg) {
  129. var app = new Vue({
  130. el: '#app',
  131. data: {
  132. navOn: 1,
  133. is_restrictions: 0,
  134. popupShow: false,
  135. is_fill: is_fill,
  136. signs:{
  137. name: '',
  138. phone: '',
  139. sex: 0,
  140. age: '',
  141. company: '',
  142. remarks: '',
  143. },
  144. open:false,
  145. activity:activity,
  146. site_name: site_name,
  147. is_pay:0,
  148. isMember:isMember,
  149. appear: true,
  150. url:isWechat ? $h.U({c:'index',a:'login'}):$h.U({c:'login',a:'phone_check'}),
  151. payment:true,
  152. id:0,
  153. money:0,
  154. isWechat:isWechat,
  155. pay_type_num:20,
  156. is_alipay: is_alipay, //支付宝是否开启
  157. now_money: now_money, //余额
  158. is_yue:is_yue //余额是否开启
  159. },
  160. mounted: function () {
  161. var that = this;
  162. that.activityType();
  163. this.$nextTick(function () {
  164. mapleWx($jssdk(), function () {
  165. this.onMenuShareAll({
  166. title: that.activity.title,
  167. desc: that.activity.province + that.activity.city + that.activity.district + that.activity.detail,
  168. imgUrl: that.activity.image,
  169. link: location.href.indexOf('?') == -1 ? location.href + '?spread_uid=' + uid : location.href + '&spread_uid=' + uid,
  170. });
  171. });
  172. });
  173. },
  174. methods: {
  175. activityType:function()
  176. {
  177. var that=this;
  178. store.baseGet($h.U({c:'special',a:'activityType',q:{id:that.activity.id}}),function (res) {
  179. that.is_pay=res.data.data.is_pay;
  180. that.is_restrictions=res.data.data.is_restrictions;
  181. });
  182. },
  183. activityPopupShow:function(){
  184. store.baseGet($h.U({c:'index',a:'user_login'}),function (res) {
  185. this.appear=true;
  186. if(this.is_restrictions){
  187. $h.pushMsgOnce('您的活动报名已超过限额');
  188. }else {
  189. if(this.is_fill){
  190. this.popupShow = true;
  191. }else{
  192. if(this.isMember){
  193. this.money=this.activity.member_pay_type ? this.activity.member_price :0;
  194. }else{
  195. this.money=this.activity.price;
  196. }
  197. this.id=this.activity.id;
  198. this.payment=false;
  199. }
  200. }
  201. }.bind(this),function (res) {
  202. this.appear=false;
  203. return false;
  204. }.bind(this));
  205. },
  206. submit: function () {
  207. if (!this.signs.name && this.is_fill) {
  208. return $h.pushMsgOnce('请填写您的姓名');
  209. }
  210. if (!$reg.isPhone(this.signs.phone) && this.is_fill) {
  211. return $h.pushMsgOnce('请填写您的手机号');
  212. }
  213. if(this.isMember){
  214. this.money=this.activity.member_pay_type ? this.activity.member_price :0;
  215. }else{
  216. this.money=this.activity.price;
  217. }
  218. this.id=this.activity.id;
  219. this.payment=false;
  220. this.popupShow=false;
  221. },
  222. pay_order:function(data){
  223. this.orderId=data.result.orderId || '';
  224. switch (data.status){
  225. case "PAY_ERROR":case 'ORDER_EXIST':case 'ORDER_ERROR':
  226. this.extendOrder(data.msg);
  227. break;
  228. case 'WECHAT_PAY':
  229. this.wechatPay(data.result.jsConfig);
  230. break;
  231. case 'SUCCESS':
  232. this.successOrder(data.msg);
  233. break;
  234. case 'ZHIFUBAO_PAY':
  235. window.location.href=$h.U({c:'Alipay',a:'index',q:{info:data.result,params:'signup'}});
  236. break;
  237. }
  238. },
  239. wechatPay:function(config){
  240. var that = this;
  241. mapleWx($jssdk(),function(){
  242. this.chooseWXPay(config,function(){
  243. that.successOrder();
  244. },{
  245. fail:that.extendOrder,
  246. cancel:that.extendOrder
  247. });
  248. });
  249. },
  250. successOrder:function(msg){
  251. $h.showMsg({
  252. title:msg ? msg :'支付成功',
  253. icon:'success',
  254. success:function (){
  255. location.reload();
  256. }
  257. });
  258. },
  259. extendOrder:function(msg){
  260. var msg = msg ? msg : '支付失败';
  261. $h.showMsg({
  262. title: typeof msg == 'object' ? '支付失败' : msg,
  263. success: function () {
  264. location.reload();
  265. }
  266. })
  267. },
  268. //关闭支付
  269. payClose:function(value){
  270. this.payment=value;
  271. },
  272. enter: function () {
  273. this.appear = false;
  274. },
  275. //关闭登录
  276. loginClose:function(value){
  277. this.appear=value;
  278. },
  279. //登录完成回调事件
  280. logComplete:function(){
  281. var that=this;
  282. that.activityType();
  283. that.appear = true;
  284. store.baseGet($h.U({ c: 'special', a: 'isMember' }), function (res) {
  285. that.isMember=res.data.data.is_member;
  286. that.now_money=res.data.data.now_money;
  287. });
  288. },
  289. //所有插件回调处理事件
  290. changeVal: function (opt) {
  291. if (typeof opt != 'object') opt = {};
  292. var action = opt.action || '';
  293. var value = opt.value || '';
  294. this[action] && this[action](value);
  295. }
  296. }
  297. });
  298. });
  299. </script>
  300. {/block}