245 lines
7.6 KiB
TypeScript
245 lines
7.6 KiB
TypeScript
import {InstantiateConfig, LifeCycleConfig} from '../options/config';
|
||
|
||
export enum hookToggle{
|
||
'beforeHooks'='beforeEach',
|
||
'afterHooks'='afterEach',
|
||
'enterHooks'='beforeEnter'
|
||
}
|
||
export enum navtypeToggle{
|
||
'push'='navigateTo',
|
||
'replace'='redirectTo',
|
||
'replaceAll'='reLaunch',
|
||
'pushTab'='switchTab',
|
||
'back'='navigateBack'
|
||
}
|
||
export enum rewriteMethodToggle{
|
||
'navigateTo'='push',
|
||
'navigate'='push',
|
||
'redirectTo'='replace',
|
||
'reLaunch'='replaceAll',
|
||
'switchTab'='pushTab',
|
||
'navigateBack'='back',
|
||
}
|
||
export type proxyDepsRule={
|
||
resetIndex:Array<number>;
|
||
hooks: {
|
||
[key: number]:{
|
||
proxyHook:()=>void;
|
||
callHook:(enterPath:string)=>void;
|
||
resetHook: ()=>void
|
||
}
|
||
};
|
||
options: {[key: number]: Array<any>;};
|
||
};
|
||
export type backTypeRule='backbutton'|'navigateBack'
|
||
export type pageTypeRule='app'|'page'|'component';
|
||
export type vueHookNameRule='onLaunch'|'onShow'|'onHide'|'onError'|'onInit'|'onLoad'|'onReady'|'onUnload'|'onResize'|'created'|'beforeMount'|'mounted'|'beforeDestroy'|'destroyed'
|
||
export type reNavMethodRule='navigateTo'|'redirectTo'|'reLaunch'|'switchTab';
|
||
export type reNotNavMethodRule='navigateBack';
|
||
export type reloadNavRule=totalNextRoute | false | undefined|string;
|
||
export type hookListRule=Array<(router:Router, to:totalNextRoute, from: totalNextRoute, toRoute:RoutesRule,next:Function)=>void>
|
||
export type guardHookRule=(to: totalNextRoute, from: totalNextRoute, next:(rule?: navtoRule|false)=>void)=>void;
|
||
export type navRuleStatus= 0|1|2|3; //0: next(false) 1:next(unknownType) 2:加锁状态,禁止跳转 3:在获取页面栈的时候,页面栈不够level获取
|
||
export type proxyHookName='beforeHooks'|'afterHooks';
|
||
export type navMethodRule = Promise<void | undefined | navRuleStatus>;
|
||
export type objectAny={[propName: string]: any;};
|
||
export type NAVTYPE = 'push' | 'replace' | 'replaceAll' | 'pushTab'|'back';
|
||
export type startAnimationType =
|
||
| 'slide-in-right'
|
||
| 'slide-in-left'
|
||
| 'slide-in-top'
|
||
| 'slide-in-bottom'
|
||
| 'pop-in'
|
||
| 'fade-in'
|
||
| 'zoom-out'
|
||
| 'zoom-fade-out'
|
||
| 'none';
|
||
export type endAnimationType =
|
||
| 'slide-out-right'
|
||
| 'slide-out-left'
|
||
| 'slide-out-top'
|
||
| 'slide-out-bottom'
|
||
| 'pop-out'
|
||
| 'fade-out'
|
||
| 'zoom-in'
|
||
| 'zoom-fade-in'
|
||
| 'none';
|
||
|
||
export type vueOptionRule = {
|
||
[propName in vueHookNameRule]: Array<Function> | undefined;
|
||
};
|
||
|
||
// 跳转api时,传递的跳转规则
|
||
export interface navtoRule {
|
||
NAVTYPE?: NAVTYPE; // 跳转类型 v1.1.0+
|
||
path?: string; // 跳转路径 绝对路径
|
||
name?: string | undefined; // 跳转路径名称
|
||
query?: objectAny; // 跳转使用path时 query包含需要传递的参数
|
||
params?: objectAny; // 跳转使用name时 params包含需要传递的参数
|
||
animationType?: startAnimationType|endAnimationType;
|
||
animationDuration?: number;
|
||
events?: objectAny;
|
||
success?: Function;
|
||
fail?: Function;
|
||
complete?: Function;
|
||
}
|
||
// h5 next管道函数中传递的from及to对象
|
||
export interface h5NextRule {
|
||
fullPath?: string | undefined;
|
||
hash?: string | undefined;
|
||
matched?: Array<object>;
|
||
meta?: object;
|
||
name?: undefined | string;
|
||
type?: undefined | string;
|
||
}
|
||
|
||
export interface totalNextRoute extends h5NextRule, navtoRule {
|
||
path:string;
|
||
delta?:number;
|
||
[propName: string]: any;
|
||
}
|
||
export interface navRoute extends h5NextRule, navtoRule {
|
||
|
||
}
|
||
|
||
// 开始切换窗口动画 app端可用
|
||
export interface startAnimationRule {
|
||
animationType?: startAnimationType; // 窗口关闭的动画效果
|
||
animationDuration?: number; // 窗口关闭动画的持续时间
|
||
}
|
||
// 关闭窗口时的动画 app端可用
|
||
export interface endAnimationRule {
|
||
animationType?: endAnimationType; // 窗口关闭的动画效果
|
||
animationDuration?: number; // 窗口关闭动画的持续时间
|
||
}
|
||
export interface hookObjectRule {
|
||
options:Array<any>;
|
||
hook:Function;
|
||
}
|
||
|
||
// 执行路由跳转失败或者 next(false) 时走的规则
|
||
export interface navErrorRule {
|
||
type: navRuleStatus;
|
||
msg: string;
|
||
to?:totalNextRoute;
|
||
from?:totalNextRoute;
|
||
nextTo?:any;
|
||
[propName:string]:any;
|
||
}
|
||
// uni原生api跳转时的规则
|
||
export interface uniNavApiRule {
|
||
url: string;
|
||
openType?:'appLaunch',
|
||
query?:objectAny;
|
||
path?:string;
|
||
delta?:number;
|
||
detail?:{[propName:string]:any};
|
||
animationType?:startAnimationType;
|
||
animationDuration?:number;
|
||
events?:{[propName:string]:any};
|
||
success?:Function;
|
||
fail?:Function;
|
||
complete?:Function;
|
||
animation?:{
|
||
animationType?:startAnimationType;
|
||
animationDuration?:number;
|
||
}
|
||
}
|
||
|
||
export interface originMixins extends uniNavApiRule{
|
||
BACKTYPE:''|backTypeRule
|
||
}
|
||
|
||
// uni-app 原始返回api 回调参数
|
||
export interface uniBackRule{
|
||
from:backTypeRule;
|
||
}
|
||
|
||
export interface uniBackApiRule{
|
||
delta?: number;
|
||
animationDuration?: number;
|
||
animationType?:endAnimationType;
|
||
}
|
||
|
||
export type routesMapKeysRule=
|
||
'finallyPathList'|
|
||
'finallyPathMap'|
|
||
'aliasPathMap'|
|
||
'pathMap'|
|
||
'nameMap'|
|
||
'vueRouteMap';
|
||
|
||
export interface routesMapRule{
|
||
[key:string]:any;
|
||
finallyPathList: Array<string>;
|
||
finallyPathMap:RoutesRule;
|
||
aliasPathMap: RoutesRule;
|
||
pathMap: RoutesRule;
|
||
nameMap:RoutesRule,
|
||
vueRouteMap:objectAny
|
||
}
|
||
|
||
export interface routeRule{
|
||
name:string|undefined;
|
||
meta:objectAny;
|
||
path:string;
|
||
query:objectAny;
|
||
params:objectAny;
|
||
fullPath:string;
|
||
NAVTYPE:NAVTYPE|'';
|
||
BACKTYPE?:backTypeRule|''; // v2.0.5 +
|
||
[propName: string]: any;
|
||
}
|
||
|
||
|
||
export interface RoutesRule {
|
||
path: string; // pages.json中的path 必须加上 '/' 开头
|
||
component?: object; // H5端可用
|
||
name?: string; // 命名路由
|
||
components?: object; // 命名视图组件,H5端可用
|
||
redirect?: string | Function; // H5端可用
|
||
props?: boolean | object | Function; // H5端可用
|
||
aliasPath?: string; // h5端 设置一个别名路径来替换 uni-app的默认路径
|
||
alias?: string | Array<string>; // H5端可用
|
||
children?: Array<RoutesRule>; // 嵌套路由,H5端可用
|
||
beforeEnter?:guardHookRule; // 路由元守卫
|
||
meta?: any; // 其他格外参数
|
||
[propName: string]: any;
|
||
}
|
||
|
||
export interface Router {
|
||
readonly lifeCycle: LifeCycleConfig;
|
||
readonly options: InstantiateConfig;
|
||
$lockStatus:boolean;
|
||
$route: object | null;
|
||
enterPath:string;
|
||
runId:number;
|
||
Vue:any;
|
||
appMain:{
|
||
NAVTYPE:reNavMethodRule|reNotNavMethodRule,
|
||
path:string
|
||
}|{};
|
||
proxyHookDeps: proxyDepsRule;
|
||
routesMap: routesMapRule|{};
|
||
mount: Array<{app: any; el: string}>;
|
||
install(Vue: any): void;
|
||
push(to: totalNextRoute|navRoute | string,from?:totalNextRoute): void; // 动态的导航到一个新 URL 保留浏览历史
|
||
replace(to: totalNextRoute|navRoute | string,from?:totalNextRoute): void; // 动态的导航到一个新 URL 关闭当前页面,跳转到的某个页面。
|
||
replaceAll(to: totalNextRoute|navRoute | string,from?:totalNextRoute): void; // 动态的导航到一个新 URL 关闭所有页面,打开到应用内的某个页面
|
||
pushTab(to: totalNextRoute|navRoute | string,from?:totalNextRoute): void; // 动态的导航到一个新 url 关闭所有页面,打开到应用内的某个tab
|
||
back(level:number|undefined,origin?:uniBackRule|uniBackApiRule):void;
|
||
forceGuardEach(navType:NAVTYPE|undefined,forceNav:boolean):void; //强制触发当前守卫
|
||
beforeEach(userGuard:guardHookRule): void; // 添加全局前置路由守卫
|
||
afterEach(userGuard:(to: totalNextRoute, from: totalNextRoute)=>void): void; // 添加全局后置路由守卫
|
||
}
|
||
|
||
|
||
export type PromiseResolve=(value?: void | PromiseLike<void> | undefined) => void;
|
||
|
||
// @ts-ignore
|
||
declare module 'vue/types/vue' {
|
||
interface Vue {
|
||
$Router: Router;
|
||
$Route: routeRule;
|
||
}
|
||
} |