let routes = []; let authTypes; export interface Option { routes authTypes? } export const init = (option:Option) => { routes = option.routes; authTypes = option.authTypes; } /** * 是否为小程序路径 * @param path 路径名 * @param isExact 是否精确判断,即有无斜杠 * @param hasSlash 是否有斜杠 */ export const isMpPath = (path, isExact?, hasSlash?) => { const prefix = isExact ? (hasSlash ? '/pages/' : 'pages/') : 'pages/'; return isExact ? path.indexOf(prefix) === 0 : path.indexOf(prefix) > -1; } /** * 普通路径转小程序路径(带上/pages或pages) * @param path * @param hasSlash 是否带斜杠 * @returns {any} */ export const convertToMpPath = (path, hasSlash?) => { const isNormalMpPath = isMpPath(path); const isExactMpPath = isMpPath(path, true, hasSlash); // 精确匹配则直接返回 if(isExactMpPath) return path; // 普通匹配则直接追加或删除首个斜杠 if(isNormalMpPath){ return hasSlash ? `/${path}` : path.replace(/\//,''); }else{ const prefix = hasSlash ? '/pages' : 'pages'; return `${prefix}${path}`; } } // == 将小程序路径转为普通路径(去除/pages或pages) export const convertToPath = (mpPath) => { return mpPath.replace(/(\/)?pages/, ''); } // == 根据url获取路由配置 export const get = (url) => { if(typeof url === 'object') return {}; if(routes.length === 0) { console.warn('路由配置不存在,请先初始化!'); return {}; } const route = routes.find((route) => { return route.url == url || route.url == convertToPath(url); }); return route; } // == 判断是否是无授权页面 export const isNone = (path) => { const route = get(path); const auth = authTypes[route.auth] || -1; return auth == authTypes.none; } // == 判断是否是公共页面 export const isPub = (path) => { const route = get(path); const auth = authTypes[route.auth]; return auth == authTypes.pub; }