| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 | 
							- import $store from '@/sheep/store';
 
- import { showAuthModal, showShareModal } from '@/sheep/hooks/useModal';
 
- import { isNumber, isString, isEmpty, startsWith, isObject, isNil, clone } from 'lodash-es';
 
- import throttle from '@/sheep/helper/throttle';
 
- const _go = (
 
-   path,
 
-   params = {},
 
-   options = {
 
-     redirect: false,
 
-   },
 
- ) => {
 
-   let page = ''; // 跳转页面
 
-   let query = ''; // 页面参数
 
-   let url = ''; // 跳转页面完整路径
 
-   if (isString(path)) {
 
-     // 判断跳转类型是 path | 还是http
 
-     if (startsWith(path, 'http')) {
 
-       // #ifdef H5
 
-       window.location = path;
 
-       return;
 
-       // #endif
 
-       // #ifndef H5
 
-       page = `/pages/public/webview`;
 
-       query = `url=${encodeURIComponent(path)}`;
 
-       // #endif
 
-     } else if (startsWith(path, 'action:')) {
 
-       handleAction(path);
 
-       return;
 
-     } else {
 
-       [page, query] = path.split('?');
 
-     }
 
-     if (!isEmpty(params)) {
 
-       let query2 = paramsToQuery(params);
 
-       if (isEmpty(query)) {
 
-         query = query2;
 
-       } else {
 
-         query += '&' + query2;
 
-       }
 
-     }
 
-   }
 
-   if (isObject(path)) {
 
-     page = path.url;
 
-     if (!isNil(path.params)) {
 
-       query = paramsToQuery(path.params);
 
-     }
 
-   }
 
-   const nextRoute = ROUTES_MAP[page];
 
-   // 未找到指定跳转页面
 
-   // mark: 跳转404页
 
-   if (!nextRoute) {
 
-     console.log(`%c跳转路径参数错误<${page || 'EMPTY'}>`, 'color:red;background:yellow');
 
-     return;
 
-   }
 
-   // 页面登录拦截
 
-   if (nextRoute.meta?.auth && !$store('user').isLogin) {
 
-     showAuthModal();
 
-     return;
 
-   }
 
-   url = page;
 
-   if (!isEmpty(query)) {
 
-     url += `?${query}`;
 
-   }
 
-   // 跳转底部导航
 
-   if (TABBAR.includes(page)) {
 
-     uni.switchTab({
 
-       url,
 
-     });
 
-     return;
 
-   }
 
-   // 使用redirect跳转
 
-   if (options.redirect) {
 
-     uni.redirectTo({
 
-       url,
 
-     });
 
-     return;
 
-   }
 
-   uni.navigateTo({
 
-     url,
 
-   });
 
- };
 
- // 限流 防止重复点击跳转
 
- function go(...args) {
 
-   throttle(() => {
 
-     _go(...args);
 
-   });
 
- }
 
- function paramsToQuery(params) {
 
-   if (isEmpty(params)) {
 
-     return '';
 
-   }
 
-   // return new URLSearchParams(Object.entries(params)).toString();
 
-   let query = [];
 
-   for (let key in params) {
 
-     query.push(key + '=' + params[key]);
 
-   }
 
-   return query.join('&');
 
- }
 
- function back() {
 
-   // #ifdef H5
 
-   history.back();
 
-   // #endif
 
-   // #ifndef H5
 
-   uni.navigateBack();
 
-   // #endif
 
- }
 
- function redirect(path, params = {}) {
 
-   go(path, params, {
 
-     redirect: true,
 
-   });
 
- }
 
- // 检测是否有浏览器历史
 
- function hasHistory() {
 
-   // #ifndef H5
 
-   const pages = getCurrentPages();
 
-   if (pages.length > 1) {
 
-     return true;
 
-   }
 
-   return false;
 
-   // #endif
 
-   // #ifdef H5
 
-   return !!history.state.back;
 
-   // #endif
 
- }
 
- function getCurrentRoute(field = '') {
 
-   let currentPage = getCurrentPage();
 
-   // #ifdef MP
 
-   currentPage.$page['route'] = currentPage.route;
 
-   currentPage.$page['options'] = currentPage.options;
 
-   // #endif
 
-   if (field !== '') {
 
-     return currentPage.$page[field];
 
-   } else {
 
-     return currentPage.$page;
 
-   }
 
- }
 
- function getCurrentPage() {
 
-   let pages = getCurrentPages();
 
-   return pages[pages.length - 1];
 
- }
 
- function handleAction(path) {
 
-   const action = path.split(':');
 
-   switch (action[1]) {
 
-     case 'showShareModal':
 
-       showShareModal();
 
-       break;
 
-   }
 
- }
 
- function error(errCode, errMsg = '') {
 
-   redirect('/pages/public/error', {
 
-     errCode,
 
-     errMsg,
 
-   });
 
- }
 
- export default {
 
-   go,
 
-   back,
 
-   hasHistory,
 
-   redirect,
 
-   getCurrentPage,
 
-   getCurrentRoute,
 
-   error,
 
- };
 
 
  |