/*
 * 路由对象
 * 中心思想：需要路由鉴权,由于uni-app没有vue中的全局钩子函数，所以封装了Router对象。
 * 说明：应用中的路由跳转尽量使用该Router的方法，并配合config中的路由表对象进行跳转。
 *
 * 示例：this.$mRouter.push({route:this.$mRoutesConfig.main,query:{a:1}})
 *
 */
class Router {
	constructor() {
		this.callBack = () => {
		};
	}

	beforeEach(callBack) {
		if (callBack instanceof Function) this.callBack = callBack;
	}

	// 保留当前页面，跳转到应用内的某个页面
	push(to) {
		this.callBack('navigateTo', to);
	}

	// 关闭当前页面，跳转到应用内的某个页面
	redirectTo(to) {
		this.callBack('redirectTo', to);
	}

	// 关闭所有页面，打开到应用内的某个页面
	reLaunch(to) {
		this.callBack('reLaunch', to);
	}

	// 用于跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面，只可以跳转tabbar页面，其他页面不支持
	switchTab(to) {
		this.callBack('switchTab', to);
	}

	// 用于关闭当前页面，返回上一页面或多级页面。
	back(delta) {
		uni.navigateBack({
			delta
		});
	}
}

export default new Router();
