mirror of
https://github.com/m-xlsea/ruoyi-plus-soybean.git
synced 2025-09-24 07:49:47 +08:00
feat(projects): 1.0 beta
This commit is contained in:
563
src/typings/app.d.ts
vendored
Normal file
563
src/typings/app.d.ts
vendored
Normal file
@ -0,0 +1,563 @@
|
||||
/**
|
||||
* 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
|
||||
* @description 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
|
||||
* @description 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 menu children
|
||||
*/
|
||||
children?: Menu[];
|
||||
}
|
||||
|
||||
type Breadcrumb = Omit<Menu, 'children'> & {
|
||||
options?: Breadcrumb[];
|
||||
};
|
||||
|
||||
/**
|
||||
* tab route
|
||||
*/
|
||||
type TabRoute = Pick<RouteLocationNormalizedLoaded, 'name' | 'path' | 'meta'> &
|
||||
Partial<Pick<RouteLocationNormalizedLoaded, 'fullPath' | 'query'>>;
|
||||
|
||||
/**
|
||||
* the global tab
|
||||
*/
|
||||
type Tab = {
|
||||
/**
|
||||
* the tab id
|
||||
*/
|
||||
id: string;
|
||||
/**
|
||||
* the tab label
|
||||
*/
|
||||
label: string;
|
||||
/**
|
||||
* the new tab label
|
||||
* @description if set, the tab label will be replaced by this value
|
||||
*/
|
||||
newLabel?: 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
|
||||
* @description iconify icon
|
||||
*/
|
||||
icon?: string;
|
||||
/**
|
||||
* tab local icon
|
||||
* @description local icon
|
||||
*/
|
||||
localIcon?: string;
|
||||
/**
|
||||
* i18n key
|
||||
*/
|
||||
i18nKey?: I18n.I18nKey;
|
||||
};
|
||||
|
||||
/**
|
||||
* form rule
|
||||
*/
|
||||
type FormRule = import('naive-ui').FormItemRule;
|
||||
|
||||
/**
|
||||
* the global dropdown key
|
||||
*/
|
||||
type DropdownKey = 'closeCurrent' | 'closeOther' | 'closeLeft' | 'closeRight' | 'closeAll';
|
||||
}
|
||||
|
||||
/**
|
||||
* i18n namespace
|
||||
* @description 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 = {
|
||||
system: {
|
||||
title: string;
|
||||
};
|
||||
common: {
|
||||
tip: string;
|
||||
add: string;
|
||||
addSuccess: string;
|
||||
edit: string;
|
||||
editSuccess: string;
|
||||
delete: string;
|
||||
deleteSuccess: string;
|
||||
batchDelete: string;
|
||||
confirm: string;
|
||||
cancel: string;
|
||||
pleaseCheckValue: string;
|
||||
action: string;
|
||||
backToHome: string;
|
||||
lookForward: string;
|
||||
userCenter: string;
|
||||
logout: string;
|
||||
logoutConfirm: string;
|
||||
};
|
||||
theme: {
|
||||
themeSchema: { title: string } & Record<UnionKey.ThemeScheme, string>;
|
||||
layoutMode: { title: string } & Record<UnionKey.ThemeLayoutMode, string>;
|
||||
themeColor: {
|
||||
title: string;
|
||||
followPrimary: string;
|
||||
} & Theme.ThemeColor;
|
||||
scrollMode: { title: string } & Record<UnionKey.ThemeScrollMode, string>;
|
||||
page: {
|
||||
animate: string;
|
||||
mode: { title: string } & Record<UnionKey.ThemePageAnimateMode, string>;
|
||||
};
|
||||
fixedHeaderAndTab: string;
|
||||
header: {
|
||||
height: string;
|
||||
breadcrumb: {
|
||||
visible: string;
|
||||
showIcon: string;
|
||||
};
|
||||
};
|
||||
tab: {
|
||||
visible: string;
|
||||
cache: string;
|
||||
height: string;
|
||||
mode: { title: string } & Record<UnionKey.ThemeTabMode, string>;
|
||||
};
|
||||
sider: {
|
||||
inverted: string;
|
||||
width: string;
|
||||
collapsedWidth: string;
|
||||
mixWidth: string;
|
||||
mixCollapsedWidth: string;
|
||||
mixChildMenuWidth: string;
|
||||
};
|
||||
footer: {
|
||||
visible: string;
|
||||
fixed: string;
|
||||
height: string;
|
||||
right: string;
|
||||
};
|
||||
themeDrawerTitle: string;
|
||||
pageFunTitle: string;
|
||||
configOperation: {
|
||||
copyConfig: string;
|
||||
copySuccessMsg: string;
|
||||
resetConfig: string;
|
||||
resetSuccessMsg: string;
|
||||
};
|
||||
};
|
||||
route: Record<I18nRouteKey, string>;
|
||||
page: {
|
||||
login: {
|
||||
common: {
|
||||
loginOrRegister: string;
|
||||
userNamePlaceholder: string;
|
||||
phonePlaceholder: string;
|
||||
codePlaceholder: string;
|
||||
passwordPlaceholder: string;
|
||||
confirmPasswordPlaceholder: string;
|
||||
codeLogin: string;
|
||||
confirm: string;
|
||||
back: string;
|
||||
validateSuccess: string;
|
||||
loginSuccess: string;
|
||||
welcomeBack: string;
|
||||
};
|
||||
pwdLogin: {
|
||||
title: string;
|
||||
rememberMe: string;
|
||||
forgetPassword: string;
|
||||
register: string;
|
||||
otherAccountLogin: string;
|
||||
otherLoginMode: string;
|
||||
superAdmin: string;
|
||||
admin: string;
|
||||
user: string;
|
||||
};
|
||||
codeLogin: {
|
||||
title: string;
|
||||
getCode: string;
|
||||
imageCodePlaceholder: string;
|
||||
};
|
||||
register: {
|
||||
title: string;
|
||||
agreement: string;
|
||||
protocol: string;
|
||||
policy: string;
|
||||
};
|
||||
resetPwd: {
|
||||
title: string;
|
||||
};
|
||||
bindWeChat: {
|
||||
title: string;
|
||||
};
|
||||
};
|
||||
};
|
||||
form: {
|
||||
userName: FormMsg;
|
||||
phone: FormMsg;
|
||||
pwd: FormMsg;
|
||||
code: FormMsg;
|
||||
email: FormMsg;
|
||||
};
|
||||
dropdown: Record<Global.DropdownKey, string>;
|
||||
icon: {
|
||||
themeConfig: string;
|
||||
themeSchema: string;
|
||||
lang: string;
|
||||
fullscreen: string;
|
||||
fullscreenExit: string;
|
||||
reload: string;
|
||||
collapse: string;
|
||||
expand: string;
|
||||
pin: string;
|
||||
unpin: 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<I18nKey>): string;
|
||||
(key: I18nKey, list: unknown[], options?: TranslateOptions<I18nKey>): 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 {
|
||||
/**
|
||||
* the backend service env type
|
||||
*/
|
||||
type EnvType = 'dev' | 'test' | 'prod';
|
||||
|
||||
/**
|
||||
* the backend service config
|
||||
*/
|
||||
interface ServiceConfig {
|
||||
/**
|
||||
* the backend service base url
|
||||
*/
|
||||
baseURL: string;
|
||||
/**
|
||||
* other backend service base url map
|
||||
*/
|
||||
otherBaseURL: Record<string, string>;
|
||||
}
|
||||
|
||||
/**
|
||||
* the backend service config map
|
||||
*/
|
||||
type ServiceConfigMap = Record<EnvType, ServiceConfig>;
|
||||
|
||||
/**
|
||||
* the backend service response data
|
||||
*/
|
||||
type Response<T = unknown> = {
|
||||
/**
|
||||
* the backend service response code
|
||||
*/
|
||||
code: string;
|
||||
/**
|
||||
* the backend service response message
|
||||
*/
|
||||
message: string;
|
||||
/**
|
||||
* the backend service response data
|
||||
*/
|
||||
data: T;
|
||||
};
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user