/**
* @file 路由守卫接口
* @description 定义路由守卫的接口和上下文
* @author JunBin.Yang
*/
import { Unknown } from "@core/common";
/**
* 路由上下文
* 包含导航相关的信息
*/
export interface RouteContext {
/**
* 目标路由名称
*/
targetRoute: string;
/**
* 导航参数
*/
params?: Unknown;
/**
* 来源路由名称
*/
fromRoute?: string;
/**
* 额外数据(可用于守卫间传递信息)
*/
extra?: Record<string, Unknown>;
}
/**
* 守卫执行结果
*/
export interface GuardResult {
/**
* 是否允许导航
*/
canActivate: boolean;
/**
* 重定向路由(可选)
*/
redirectTo?: string;
/**
* 重定向参数(可选)
*/
redirectParams?: Unknown;
/**
* 拒绝原因(可选)
*/
reason?: string;
}
/**
* 路由守卫接口
* 用于在导航前进行拦截和校验
*/
export interface RouteGuard {
/**
* 守卫名称(用于调试)
*/
name?: string;
/**
* 守卫优先级,数字越小越先执行
* 默认为 100
*/
priority?: number;
/**
* 判断是否允许导航
* @param context 路由上下文
* @returns 是否允许导航,或 GuardResult 对象
*/
canActivate(context: RouteContext): Promise<boolean | GuardResult> | boolean | GuardResult;
/**
* 导航被拒绝时的回调(可选)
* @param context 路由上下文
* @param result 守卫结果
*/
onReject?(context: RouteContext, result: GuardResult): void;
}
/**
* 简化的守卫配置
* 用于快速创建守卫
*/
export interface GuardConfig {
/**
* 守卫名称
*/
name?: string;
/**
* 守卫优先级
*/
priority?: number;
/**
* 需要拦截的路由列表
*/
routes?: string[];
/**
* 校验函数
*/
check: () => boolean | Promise<boolean>;
/**
* 校验失败时的重定向路由
*/
redirectTo?: string;
/**
* 校验失败时的回调
*/
onFail?: (context: RouteContext) => void;
}