Authored by 陈峰

Merge branch 'feature/have-gain-miniprogram' into 'release/6.8.2'

Feature/have gain miniprogram



See merge request !1597
@@ -15,14 +15,14 @@ @@ -15,14 +15,14 @@
15 <span class="people">获得优惠券</span> 15 <span class="people">获得优惠券</span>
16 </div> 16 </div>
17 <div class="eps"> 17 <div class="eps">
18 - <div class="accede-btn"><a href="{{url}}">了解详情</a></div> 18 + <div class="accede-btn" data-url="{{url}}">了解详情</div>
19 </div> 19 </div>
20 {{else}} 20 {{else}}
21 <div class="eps"> 21 <div class="eps">
22 邀请好友购物返现金 22 邀请好友购物返现金
23 </div> 23 </div>
24 <div class="eps"> 24 <div class="eps">
25 - <div class="accede-btn"><a href="{{url}}">立即加入</a></div> 25 + <div class="accede-btn" data-url="{{url}}">立即加入</div>
26 </div> 26 </div>
27 {{/if}} 27 {{/if}}
28 </div> 28 </div>
@@ -8,6 +8,7 @@ import yoho from 'js/yoho-app'; @@ -8,6 +8,7 @@ import yoho from 'js/yoho-app';
8 import parse from 'yoho-qs/parse'; 8 import parse from 'yoho-qs/parse';
9 import Clipboard from 'clipboard'; 9 import Clipboard from 'clipboard';
10 import cookie from 'yoho-cookie'; 10 import cookie from 'yoho-cookie';
  11 +import linkTo from '../../../utils/linkTo';
11 12
12 class HaveGainApplyPage extends Page { 13 class HaveGainApplyPage extends Page {
13 constructor() { 14 constructor() {
@@ -200,11 +201,25 @@ class HaveGainApplyPage extends Page { @@ -200,11 +201,25 @@ class HaveGainApplyPage extends Page {
200 201
201 $event.hasClass('activate') ? $event.removeClass('activate') : $event.addClass('activate'); 202 $event.hasClass('activate') ? $event.removeClass('activate') : $event.addClass('activate');
202 } 203 }
  204 + clickFun() {
  205 + let env = linkTo.getEnv();
203 206
  207 + if (env === 'miniprogram') {
  208 + window.wx.miniProgram.switchTab({url: '/pages/index/index'});
  209 + } else {
  210 + let btn = !!document.getElementById('yoho-verify');
  211 +
  212 + if (!btn) {
  213 + btn = linkTo.createLinkButton('http://m.yohobuy.com/activity/have-gain/verify', 'yoho-verify');
  214 + }
  215 + btn.click();
  216 + }
  217 + }
204 apply() { 218 apply() {
205 let errStatus = this.changeBtnStatus(); 219 let errStatus = this.changeBtnStatus();
206 let socialMediaList = []; 220 let socialMediaList = [];
207 - let union = {}; 221 +
  222 + let union = linkTo.getQueryObj();
208 223
209 if (errStatus === 1) { 224 if (errStatus === 1) {
210 tip.show('请输入姓名'); 225 tip.show('请输入姓名');
@@ -270,11 +285,7 @@ class HaveGainApplyPage extends Page { @@ -270,11 +285,7 @@ class HaveGainApplyPage extends Page {
270 leftBtnText: '取消', 285 leftBtnText: '取消',
271 rightBtnText: '确定' 286 rightBtnText: '确定'
272 } 287 }
273 - }, function() {  
274 - window.location.href = '//m.yohobuy.com/activity/have-gain/verify';  
275 - }, function() {  
276 - window.location.href = '//m.yohobuy.com/activity/have-gain/verify';  
277 - }); 288 + }, this.clickFun, this.clickFun);
278 }).catch(() => { 289 }).catch(() => {
279 this.selector.isFlag = false; 290 this.selector.isFlag = false;
280 }); 291 });
1 import 'scss/activity/have-gain-index.page.scss'; 1 import 'scss/activity/have-gain-index.page.scss';
  2 +import linkTo from '../../../utils/linkTo';
  3 +import $ from 'yoho-jquery';
  4 +import Page from 'js/yoho-page';
  5 +
  6 +class HaveGainIndexyPage extends Page {
  7 + constructor() {
  8 + super();
  9 + this.selector = {
  10 + $accedeBtn: $('.accede-btn'),
  11 + };
  12 + this.init();
  13 + }
  14 +
  15 + init() {
  16 + this.selector.$accedeBtn.click(function() {
  17 + const $this = $(this);
  18 + let url = $this.data('url');
  19 +
  20 + if (linkTo.getEnv() === 'miniprogram') {
  21 + linkTo.linkToMiniApp(url);
  22 + } else {
  23 + let btn = !!document.getElementById('yoho-apply');
  24 +
  25 + if (!btn) {
  26 + btn = linkTo.createLinkButton(url, 'yoho-apply');
  27 + }
  28 + btn.click();
  29 +
  30 + }
  31 + });
  32 + }
  33 +}
  34 +
  35 +$(() => {
  36 + new HaveGainIndexyPage();
  37 +});
@@ -3,11 +3,11 @@ import 'scss/activity/have-gain-promodetail.page.scss'; @@ -3,11 +3,11 @@ import 'scss/activity/have-gain-promodetail.page.scss';
3 import $ from 'yoho-jquery'; 3 import $ from 'yoho-jquery';
4 const tip = require('js/plugin/tip'); 4 const tip = require('js/plugin/tip');
5 const yoho = require('../yoho-app'); 5 const yoho = require('../yoho-app');
6 - 6 +const linkTo = require('../../../utils/linkTo');
7 const $promoStatus = $('.promo-status.js-submit'); 7 const $promoStatus = $('.promo-status.js-submit');
8 8
9 function joinActivity(id) { 9 function joinActivity(id) {
10 - return $.post(`/activity/have-gain/promo/${id}`); 10 + return $.post(`/activity/have-gain/promo/${id}`, linkTo.getQueryObj());
11 } 11 }
12 12
13 function click(url) { 13 function click(url) {
  1 +
  2 +const getQueryObj = function(link) {
  3 + let loc = decodeURIComponent(document.location.href);
  4 +
  5 + if (link) {
  6 + loc = decodeURIComponent(link);
  7 + }
  8 + let letiables = '';
  9 + let letiableArr = [];
  10 + let finalArr = [];
  11 +
  12 + if (loc.indexOf('?') > 0) {
  13 + letiables = loc.split('?')[1];
  14 + }
  15 +
  16 + if (letiables.length > 0) {
  17 + letiableArr = letiables.split('#')[0].split('&');
  18 + }
  19 +
  20 + for (let i = 0; i < letiableArr.length; i++) {
  21 + let obj = {};
  22 +
  23 + obj.name = letiableArr[i].split('=')[0];
  24 + obj.value = letiableArr[i].split('=')[1];
  25 + if (letiableArr[i].split('=').length > 2) {
  26 + for (let j = 2; j < letiableArr[i].split('=').length; j++) {
  27 + obj.value += '=' + letiableArr[i].split('=')[j];
  28 + }
  29 + }
  30 + finalArr.push(obj);
  31 + }
  32 +
  33 + let query_obj = {};
  34 +
  35 + for (let i = 0; i < finalArr.length; i++) {
  36 + query_obj[finalArr[i].name] = finalArr[i].value;
  37 + }
  38 +
  39 + return query_obj;
  40 +};
  41 +
  42 +const linkToMiniApp = function(goUrl, type) {
  43 +
  44 + let url = goUrl || '';
  45 +
  46 + if (url && url.indexOf('http') < 0 && type === 'other') {
  47 + url = document.location.protocol + '//' + document.location.host + url;
  48 + }
  49 + if (url) {
  50 + let scene;
  51 +
  52 + if (type === 'product' || type === 'brand') {
  53 + scene = url;
  54 + } else {
  55 + let base_url = decodeURIComponent(url).split('?')[0];
  56 + let params = getQueryObj(url);
  57 + let paramStr = '';
  58 +
  59 + Object.keys(params).forEach(function(key) {
  60 + paramStr += paramStr === '' ? '?' + key + '=' + params[key] : '&' + key + '=' + params[key];
  61 + });
  62 + scene = '/pages/webview/webview?url=' + base_url + encodeURIComponent(paramStr);
  63 + }
  64 + window.wx.miniProgram.navigateTo({url: scene});
  65 + return false;
  66 + } else {
  67 + return true;
  68 + }
  69 +};
  70 +
  71 +const createLinkButton = function(url, id) {
  72 + let a = document.createElement('a');
  73 +
  74 + a.style.position = 'fixed';
  75 + a.style.top = 0;
  76 + a.style.left = 0;
  77 + a.style.border = 'none';
  78 + a.style.outline = 'none';
  79 + a.style.resize = 'none';
  80 + a.style.background = 'transparent';
  81 + a.style.color = 'transparent';
  82 + a.setAttribute('id', id);
  83 + a.setAttribute('href', url);
  84 + document.body.appendChild(a);
  85 + return a;
  86 +};
  87 +let env = '';
  88 +const getEnv = function() {
  89 + let envFlag = window.__wxjs_environment;
  90 +
  91 + if (!envFlag && navigator.userAgent.match(/yohobuy/i)) {
  92 + env = 'app';
  93 + document.addEventListener('deviceready', function() {
  94 + });
  95 + } else if ((!envFlag && navigator.userAgent.match(/miniProgram/i)) || (envFlag === 'miniprogram')) {
  96 + env = 'miniprogram';
  97 + } else if (location.origin === 'https://www.yohobuy.com') {
  98 + env = 'pc';
  99 + } else {
  100 + env = 'h5';
  101 + }
  102 + return env;
  103 +};
  104 +
  105 +module.exports = {
  106 + getQueryObj,
  107 + linkToMiniApp,
  108 + createLinkButton,
  109 + getEnv
  110 +};