import { RouteLocation } from 'vue-router' import 'vue-router' /** * 刷新拦截器 */ export interface RefreshInterceptor { refreshBefore?: () => void refreshAfter?: () => void refreshFinally?: () => void } export interface RouteNameAndTabUK { routeName: string tabUK?: string } export interface CustomRouteMetaData { /** * 标签页是否可关闭. 默认: true */ closeAble: boolean /** * 标签页中的路由是否使用keep-alive缓存. 默认:true */ keepAlive: boolean } export interface RouteNameAndTabUKPromiseReslove extends RouteNameAndTabUK { resolve: () => void reject: (error: unknown) => void } /** * fade:淡入/淡出 * slide/slideLeft: 滑入/划出 * scale: 缩放 */ export type RouteTransitionName = | 'fade' | 'slide' | 'slideLeft' | 'scale' | 'none' export interface NewTabParam { openTabMode: OpenTabMode title?: string enableCompMutilTabMode?: boolean } export interface NewTabParamPromise extends NewTabParam, PromiseReslove { routeName: string toRouteLocation: RouteLocation & { href: string } } export interface PromiseReslove { resolve: () => void reject: (error: unknown) => void } export interface TabNameProjectPromiseReslove extends PromiseReslove { tabName: string } export interface CompNameAndRouteName extends CustomRouteMetaData { /** * 组件名(默认情况是实际的vue组件名,当前路由的query参数中newTab为true,且tabUK有值时,则组件名为DynCompName+tabUK) * * important: tabUK只能由字母和数字组成,必须确保tabUK在tab关闭前始终是唯一的。tabUK值推荐调用方使用 buildTabUk() 方法生成 */ compName: string /** * 路由名 */ routeName: string } export interface RouteTabType { routeName: string title: string } export interface InnerRouteTabType extends RouteTabType, CustomRouteMetaData { /** * 当enableCompMutilTabMode为true时,则tabName值为tabUK, 否则为 routeName */ tabName: string /** * 当前标签的模式是否为同一组件多tab模式 */ enableCompMutilTabMode: boolean fullPath: string } export interface LocalStorageRouteTabData { /** * 当前tab的路由名 */ curTab: string /** * 当前tab在tabArr中的索引位置 */ curTabIndex: number /** * 当前已打开的所有tab */ tabArr: InnerRouteTabType[] } export interface RouteTabType { routeName: string title: string } /** * 新标签打开模式: * 1. 新标签追加到最后一个 * 2. 新标签追加到当前标签的后一个 * 4. 新标签替换当前标签 */ export type OpenTabMode = 'AppendLast' | 'AppendNext' | 'ReplaceCur' declare module 'vue-router' { interface RouteMeta { // 该vue组件对应的tab是否可关闭. 默认: true closeAble?: boolean // 是否对该vue组件实例进行keep-alive缓存. 默认: true keepAlive?: boolean } }