2
0
Files
fe.wfc.user/src/typings/app.d.ts
2024-12-03 11:45:58 +08:00

319 lines
8.7 KiB
TypeScript

/** The global namespace for the app */
declare namespace App {
/** Theme namespace */
namespace Theme {
type ColorPaletteNumber = import('@sa/color-palette').ColorPaletteNumber;
/** Theme token */
type ThemeToken = {
colors: ThemeTokenColor;
boxShadow: {
header: string;
sider: string;
tab: string;
};
};
/** Theme setting */
interface ThemeSetting {
/** Theme scheme */
themeScheme: UnionKey.ThemeScheme;
/** Theme color */
themeColor: string;
/** Other color */
otherColor: OtherColor;
/** Whether info color is followed by the primary color */
isInfoFollowPrimary: boolean;
/** Layout */
layout: {
/** Layout mode */
mode: UnionKey.ThemeLayoutMode;
/** Scroll mode */
scrollMode: UnionKey.ThemeScrollMode;
};
/** Page */
page: {
/** Whether to show the page transition */
animate: boolean;
/** Page animate mode */
animateMode: UnionKey.ThemePageAnimateMode;
};
/** Header */
header: {
/** Header height */
height: number;
/** Header breadcrumb */
breadcrumb: {
/** Whether to show the breadcrumb */
visible: boolean;
/** Whether to show the breadcrumb icon */
showIcon: boolean;
};
};
/** Tab */
tab: {
/** Whether to show the tab */
visible: boolean;
/**
* Whether to cache the tab
*
* If cache, the tabs will get from the local storage when the page is refreshed
*/
cache: boolean;
/** Tab height */
height: number;
/** Tab mode */
mode: UnionKey.ThemeTabMode;
};
/** Fixed header and tab */
fixedHeaderAndTab: boolean;
/** Sider */
sider: {
/** Inverted sider */
inverted: boolean;
/** Sider width */
width: number;
/** Collapsed sider width */
collapsedWidth: number;
/** Sider width when the layout is 'vertical-mix' or 'horizontal-mix' */
mixWidth: number;
/** Collapsed sider width when the layout is 'vertical-mix' or 'horizontal-mix' */
mixCollapsedWidth: number;
/** Child menu width when the layout is 'vertical-mix' or 'horizontal-mix' */
mixChildMenuWidth: number;
};
/** Footer */
footer: {
/** Whether to show the footer */
visible: boolean;
/** Whether fixed the footer */
fixed: boolean;
/** Footer height */
height: number;
/** Whether float the footer to the right when the layout is 'horizontal-mix' */
right: boolean;
};
}
interface OtherColor {
info: string;
success: string;
warning: string;
error: string;
}
interface ThemeColor extends OtherColor {
primary: string;
}
type ThemeColorKey = keyof ThemeColor;
type ThemePaletteColor = {
[key in ThemeColorKey | `${ThemeColorKey}-${ColorPaletteNumber}`]: string;
};
type BaseToken = Record<string, Record<string, string>>;
interface ThemeTokenColor extends ThemePaletteColor {
nprogress: string;
container: string;
layout: string;
inverted: string;
base_text: string;
[key: string]: string;
}
}
/** Global namespace */
namespace Global {
type VNode = import('vue').VNode;
type RouteLocationNormalizedLoaded = import('vue-router').RouteLocationNormalizedLoaded;
type RouteKey = import('@elegant-router/types').RouteKey;
type RouteMap = import('@elegant-router/types').RouteMap;
type RoutePath = import('@elegant-router/types').RoutePath;
type LastLevelRouteKey = import('@elegant-router/types').LastLevelRouteKey;
/** The global header props */
interface HeaderProps {
/** Whether to show the logo */
showLogo?: boolean;
/** Whether to show the menu toggler */
showMenuToggler?: boolean;
/** Whether to show the menu */
showMenu?: boolean;
}
/** The global menu */
interface Menu {
/**
* The menu key
*
* Equal to the route key
*/
key: string;
/** The menu label */
label: string;
/** The menu i18n key */
i18nKey?: I18n.I18nKey;
/** The route key */
routeKey: RouteKey;
/** The route path */
routePath: RoutePath;
/** The menu icon */
icon?: () => VNode;
/** The tooltip title */
title?: string;
/** The menu children */
children?: Menu[];
}
/** Tab route */
type TabRoute = Pick<RouteLocationNormalizedLoaded, 'name' | 'path' | 'meta'> &
Partial<Pick<RouteLocationNormalizedLoaded, 'fullPath' | 'query' | 'matched'>>;
/** The global tab */
type Tab = {
/** The tab id */
id: string;
/** The tab label */
label: string;
/**
* The new tab label
*
* If set, the tab label will be replaced by this value
*/
newLabel?: string;
/**
* The old tab label
*
* when reset the tab label, the tab label will be replaced by this value
*/
oldLabel?: string;
/** The tab route key */
routeKey: LastLevelRouteKey;
/** The tab route path */
routePath: RouteMap[LastLevelRouteKey];
/** The tab route full path */
fullPath: string;
/** The tab fixed index */
fixedIndex?: number;
/**
* Tab icon
*
* Iconify icon
*/
icon?: string;
/**
* Tab local icon
*
* Local icon
*/
localIcon?: string;
/** I18n key */
i18nKey?: I18n.I18nKey;
};
/** Form rule */
type FormRule = import('ant-design-vue/es/form/interface.d.ts').Rule;
/** The global dropdown key */
type DropdownKey = 'closeCurrent' | 'closeOther' | 'closeLeft' | 'closeRight' | 'closeAll';
}
/**
* I18n namespace
*
* Locales type
*/
namespace I18n {
type RouteKey = import('@elegant-router/types').RouteKey;
type LangType = 'en-US' | 'zh-CN';
type LangOption = {
label: string;
key: LangType;
};
type I18nRouteKey = Exclude<RouteKey, 'root' | 'not-found'>;
type FormMsg = {
required: string;
invalid: string;
};
type Schema = {
[key: string]: string;
};
type GetI18nKey<T extends Record<string, unknown>, K extends keyof T = keyof T> = K extends string
? T[K] extends Record<string, unknown>
? `${K}.${GetI18nKey<T[K]>}`
: K
: never;
type I18nKey = GetI18nKey<Schema>;
type TranslateOptions<Locales extends string> = import('vue-i18n').TranslateOptions<Locales>;
interface $T {
(key: I18nKey): string;
(key: I18nKey, plural: number, options?: TranslateOptions<LangType>): string;
(key: I18nKey, defaultMsg: string, options?: TranslateOptions<LangType>): string;
(key: I18nKey, list: unknown[], options?: TranslateOptions<LangType>): string;
(key: I18nKey, list: unknown[], plural: number): string;
(key: I18nKey, list: unknown[], defaultMsg: string): string;
(key: I18nKey, named: Record<string, unknown>, options?: TranslateOptions<LangType>): string;
(key: I18nKey, named: Record<string, unknown>, plural: number): string;
(key: I18nKey, named: Record<string, unknown>, defaultMsg: string): string;
}
}
/** Service namespace */
namespace Service {
/** Other baseURL key */
type OtherBaseURLKey = 'demo';
interface ServiceConfigItem {
/** The backend service base url */
baseURL: string;
/** The proxy pattern of the backend service base url */
proxyPattern: string;
}
interface OtherServiceConfigItem extends ServiceConfigItem {
key: OtherBaseURLKey;
}
/** The backend service config */
interface ServiceConfig extends ServiceConfigItem {
/** Other backend service config */
other: OtherServiceConfigItem[];
}
interface SimpleServiceConfig extends Pick<ServiceConfigItem, 'baseURL'> {
other: Record<OtherBaseURLKey, string>;
}
/** The backend service response data */
type Response<T = unknown> = {
/** The backend service response code */
code: string;
/** The backend service response message */
msg: string;
/** The backend service response data */
data: T;
};
/** The demo backend service response data */
type DemoResponse<T = unknown> = {
/** The backend service response code */
status: string;
/** The backend service response message */
message: string;
/** The backend service response data */
result: T;
};
}
}