index.js 2.12 KB
import rules from './rules';
import jump from './jump';
import yohoJump from './yohoJump';
import jumpToMiniapp from './jump-to-miniapp';
import {parse, stringify} from '../vendors/query-stringify';

const MINI_APP_DOMAIN = 'miniapp.yohobuy.com';

const pageNameMap = {};

for (let i in rules) {
  if (rules.hasOwnProperty(i) && rules[i].path) {
    pageNameMap[rules[i].path] = i;
  }
}

global.router = {
  go(name, qs, type) {
    let rule = rules[name];

    if (!rule) {
      return Promise.reject(`router rules mismatch : ${name}`);
    }

    qs = qs || {};

    // 添加yas上报【fromPage】参数
    let pages = getCurrentPages();
    let currentPage = pages[pages.length - 1];
    let path = `/${currentPage.route}`;
    let options = currentPage.options;

    if (pageNameMap[path]) {
      qs.fromPage = pageNameMap[path];
      qs.fromParam = stringify(options);
    }

    // 页面登录校验
    this.app = this.app || getApp();

    if (rule.auth && !this.app.getUid()) {
      return wx.showToast({
        title: '请先完成登录/注册,再查看!',
        icon: 'none',
        duration: 2000
      });
    }

    // 跳转类型
    let jumpFn = jump[type] || rule.type || jump.navigateTo;

    return jumpFn(rule.path, qs);
  },

  // 上报url
  reportUrl(name, qs) {
    let rule = rules[name];

    if (!rule) {
      return '';
    }

    qs = qs || {};

    // 添加yas上报【fromPage】参数
    let pages = getCurrentPages();
    let currentPage = pages[pages.length - 1];
    let path = `/${currentPage.route}`;
    let options = currentPage.options;

    if (pageNameMap[path]) {
      qs.fromPage = pageNameMap[path];
      qs.fromParam = stringify(options);
    }

    return `${rule.path}?${stringify(qs, {encode: false})}`;
  },
  goUrl(url) {
    if (!url) {
      return Promise.reject('error url');
    }

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

    if (qs.app && path) {
      return jumpToMiniapp({
        app: qs.app,
        path: `${path}?${stringify(qs)}`
      });
    }

    console.log('jump url', url);
    yohoJump(url);
  }
};