index.js 3.6 KB
import rules from './rules';
import jump from './jump';
import {parse, stringify} from '../vendors/query-stringify';
import jumpToMiniapp from './jump-to-miniapp';
import Promise from '../vendors/es6-promise';
import config from '../common/config';

// 跳转到小程序内
// router.goUrl('https://miniapp.yohobuy.com/pages/index/index?xxxx=ghh&ytty=444');

// 跳转到小程序外
// router.goUrl('https://miniapp.yohobuy.com/pages/index/index?app=yohobuy&xxxx=ghh&ytty=444');

const OPEN_BY_TYPE = {
  GO_LIST: 'go.list',
  GO_BRAND: 'go.brand',
  GO_SHOP: 'go.shop',
  GO_POOL_LIST: 'go.poollist',
  GO_DETAIL: 'go.productDetail'
};

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(`路由规则未匹配到: ${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);
  },
  goUrl(url) { // 打开其他小程序或者外部H5
    if (!url) {
      return Promise.reject('function goUrl(url) has error url!');
    }

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

    if (uri.includes(config.MINI_APP_DOMAIN)) {
      const path = uri.split(config.MINI_APP_DOMAIN)[1];
      const qs = parse(search);

      if (!path) {
        return Promise.reject('function goUrl(url) has error path');
      }

      if (qs.app) {
        return jumpToMiniapp({
          app: qs.app,
          path: `${path}?${stringify(qs)}`
        });
      } else {
        if (pageNameMap[path]) {
          return this.go(pageNameMap[path], qs);
        } else {
          return wx.navigateTo({
            url: `${path}?${stringify(qs)}`
          });
        }
      }
    } else {
      return wx.navigateTo({
        url: `/pages/webview/webview?url=${encodeURIComponent(url)}`
      });
    }


    /* 此处暂时用不到,是配置的资源位链接转换成 小程序内部
        let openBy = JSON.parse(qs['openby:yohobuy'] || {});

        if (openBy.action) {
            switch (openBy.action) {
                case OPEN_BY_TYPE.GO_BRAND:
                    openBy.params.brand = openBy.params.brand_id;
                    delete openBy.params.brand_id;
                    this.go('productList', openBy.params);
                    break;
                case OPEN_BY_TYPE.GO_SHOP:
                    this.go('productShop', openBy.params);
                    break;
                case OPEN_BY_TYPE.GO_POOL_LIST:
                    this.go('productList', openBy.params);
                    break;
                case OPEN_BY_TYPE.GO_LIST:
                    this.go('productList', openBy.params);
                    break;
                case OPEN_BY_TYPE.GO_DETAIL:
                    this.go('productDetail', {productSkn: openBy.params.product_skn});
                    break;
                default:
                    break;
            }
        }
        */
  }
};