webview.js 3.58 KB
import {
  parse,
  stringify
} from '../../vendors/query-stringify';
import config from '../../common/config';
import udid from '../../common/udid';
import event from '../../common/event';
import {
  verify
} from '../../common/api';
import {
  tapGoLogin
} from '../../common/login';
import {
  getQRCodeSource
} from '../../common/miniQRCodeRoute';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    title: '',
    url: '',
    shareUrl: ''
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    console.log(options);
    options.url = decodeURIComponent(options.url || '');

    if (options && options.scene && options.scene.length > 0) {
      let code = options.scene;

      getQRCodeSource(code).then(json => {
        console.log('json:', json);
        if (json) {
          this.generateUrl(json);
        }
      }).catch(error => {});
    } else {
      if (options.url) {
        let uid = this.getUid();

        const search = options.url.split('?')[1] || '';
        const qs = parse(search);

        if (Number(qs.needLogin) === 1 && uid === 0) {
          event.on('user-login-success', () => {
            this.generateUrl(options);
          });
          tapGoLogin();
        } else {
          this.generateUrl(options);
        }
      }
    }
  },

  /**
   * 获取 UID
   */
  getUid: function() {
    const app = getApp() || {};

    return app.globalData &&
      app.globalData.userInfo &&
      app.globalData.userInfo.uid ?
      app.globalData.userInfo.uid : 0;
  },

  /**
   * 取得URL中的参数
   */
  getQueryObj(link) {
    let loc = decodeURIComponent(link);
    let variables = '';
    let variableArr = [];
    let finalArr = [];

    if (loc.indexOf('?') > 0) {
      variables = loc.split('?')[1];
    }

    if (variables.length > 0) {
      variableArr = variables.split('#')[0].split('&');
    }

    for (let i = 0; i < variableArr.length; i++) {
      let obj = {};

      obj.name = variableArr[i].split('=')[0];
      obj.value = variableArr[i].split('=')[1];
      finalArr.push(obj);
    }

    let query_obj = {};

    for (let i = 0; i < finalArr.length; i++) {
      query_obj[finalArr[i].name] = finalArr[i].value;
    }

    return query_obj;
  },


  /**
   * 生成链接
   */
  generateUrl: function(options) {
    console.log(options);
    let isSign = true;

    if (options.url) {
      let queryObj = this.getQueryObj(options.url);

      console.log('query=', queryObj);
      if (queryObj.title) {
        this.setData({
          title: queryObj.title
        });
      }
      if (queryObj.shareURL) {
        this.setData({
          shareUrl: queryObj.shareURL
        });
      }
      if (queryObj.noSign) {
        isSign = false;
      }
    }

    console.log('option.url=', decodeURIComponent(options.url));

    const app = getApp() || {};
    let param = {
      app_version: config.apiParams.app_version,
      session_key: app.globalData && app.globalData.sessionKey || '',
      client_type: config.apiParams.client_type,
      udid: udid.get()
    };
    let uid = this.getUid();

    if (uid) {
      param.uid = uid;
    }

    let url = options.url;
    let params = verify.computeSecret(param);

    const [uri, search] = url.split('?');
    const qs = parse(search);

    url = uri + '?' + stringify(Object.assign({}, params, qs));

    console.log('webview-url:', url);

    this.setData({
      url: url
    });
  },

  bindGetMsg: function(e) {
    if (e.detail && e.detail.data && e.detail.data[0] && e.detail.data[0].title) {
      this.setData({
        title: e.detail.data[0].title,
      });
    }
  },
});