123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import { appPlatform } from './util';
- import { methods, H5FnTypeToggle, Global } from './config';
- import { transitionTo } from '../appRouter/hooks';
- import { appletsTransitionTo, backCallHook } from '../appletsRouter/hooks';
- import uniPushTo from '../appRouter/uniNav';
- import appletsUniPushTo from '../appletsRouter/appletsNav';
- import { err, warn } from './warn';
- import H5PushTo from '../vueRouter/routerNav';
- import * as compile from './compile';
- /**
- * 返回api 触发的公共函数
- * @param {Object/String} rule 当前跳转规则
- * @param {String} fnType 跳转页面的类型方法
- *
- * this 为当前 Router 实例
- */
- const isBcakNav = function ({
- backLayer,
- delta,
- H5PATCH,
- }) {
- compile.H5(() => {
- H5PATCH.on('historyBack', {
- backLayer,
- delta,
- });
- });
- compile.APP(() => {
- Global.backLayerC = backLayer; // 告诉路由需要返回几层
- uni.navigateBack({
- delta: backLayer,
- complete: () => {
- Global.LockStatus = false; // 跳转完成解锁状态
- },
- });
- });
- compile.mp(() => {
- backCallHook.call(this, backLayer, () => {
- uni.navigateBack({
- delta: backLayer,
- });
- });
- });
- };
- /**
- * 非 返回api 触发的公共函数
- * @param {Object/String} rule 当前跳转规则
- * @param {String} fnType 跳转页面的类型方法
- *
- * this 为当前 Router 实例
- */
- const notBackNav = function (rule, fnType) {
- if (rule == null) {
- return err('跳转规则为空,不允许这样操作');
- }
- if (rule.constructor === String) { // 单独 path 的情况 允许?拼接参数
- const ruleArray = rule.split('?');
- if (ruleArray.length > 1) {
- rule = {
- path: ruleArray[0],
- query: Global.$parseQuery.parse(ruleArray[1]),
- };
- }
- }
- switch (appPlatform(true)) {
- case 'H5':
- return H5PushTo.call(this, H5FnTypeToggle[fnType], rule, methods[fnType]);
- case 'APP':
- Global.LockStatus = true; // 设置为锁住状态
- return transitionTo.call(this, rule, fnType, uniPushTo);
- case 'APPLETS':
- Global.LockStatus = true; // 设置为锁住状态
- return appletsTransitionTo.call(this, rule, fnType, appletsUniPushTo);
- default:
- err('糟糕!!!还有其他的执行环境???没听说过啊。一脸懵逼???加QQ群问问:769241495');
- break;
- }
- };
- /**
- * 处理正在跳转的公共api
- * @param {Object/String} rule 当前跳转规则
- * @param {String} fnType 跳转页面的类型方法
- * @param {Boolean} isBack 是否通过 back() api 调用的 默认为false
- * @param {Boolean} enforce 是否强制越过跳转加锁检查 默认false 目前只有back() api 传递了
- *
- * this 为当前 Router 实例
- */
- const navjump = function (rule, fnType, isBack = false, enforce = false) {
- if (Global.LockStatus && !enforce) { // 正在跳转的状态下 给出提示正在跳转
- return warn('当前页面正在处于跳转状态,请稍后再进行跳转....');
- }
- if (isBack) { // 是返回api触发的
- return isBcakNav.call(this, rule, fnType);
- }
- return notBackNav.call(this, rule, fnType);
- };
- export default navjump;
|