index.js 2.02 KB
import rules from './rules';
import jump from './jump';
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}`;

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

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

        if (rule.auth && !this.app.getUid()) {
            return jump.navigateTo(rules.login.path);
        }

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

        return jumpFn(rule.path, qs);
    },
    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)}`
            });
        }

        let openBy = JSON.parse(qs['openby:yohobuy'] || {});

        if (openBy.action) {
            const GO_LIST = 'go.list';
            const GO_DETAIL = 'go.productDetail';

            switch (openBy.action) {
                case GO_LIST:
                    this.go('productList', openBy.params);
                    break;
                case GO_DETAIL:
                    this.go('productDetail', {productSkn: openBy.params.product_skn});
                    break;
            }
        }
    }
};