Files
basic/src/types/global.d.ts
T
2025-01-24 11:45:06 +08:00

309 lines
6.7 KiB
TypeScript
Executable File

import type { RouteRecordRaw } from 'vue-router'
type RecursiveRequired<T> = {
[P in keyof T]-?: RecursiveRequired<T[P]>
}
type RecursivePartial<T> = {
[P in keyof T]?: RecursivePartial<T[P]>
}
declare namespace Settings {
interface app {
/**
* 颜色方案
* @默认值 `''` 跟随系统
* @可选值 `'light'` 明亮模式
* @可选值 `'dark'` 暗黑模式
*/
colorScheme?: '' | 'light' | 'dark'
/**
* 圆角系数
* @默认值 `0.5`
* @可选值 `0` / `0.25` / `0.5` / `0.75` / `1`
*/
radius?: 0 | 0.25 | 0.5 | 0.75 | 1
/**
* 是否开启哀悼模式
* @默认值 `false`
*/
enableMournMode?: boolean
/**
* 是否开启色弱模式
* @默认值 `false`
*/
enableColorAmblyopiaMode?: boolean
/**
* 是否开启权限功能
* @默认值 `false`
*/
enablePermission?: boolean
/**
* 是否开启载入进度条
* @默认值 `true`
*/
enableProgress?: boolean
/**
* 是否开启动态标题
* @默认值 `false`
*/
enableDynamicTitle?: boolean
/**
* 路由数据来源
* @默认值 `'frontend'` 前端
* @可选值 `'backend'` 后端
* @可选值 `'filesystem'` 文件系统
*/
routeBaseOn?: 'frontend' | 'backend' | 'filesystem'
}
interface home {
/**
* 是否开启主页
* @默认值 `true`
*/
enable?: boolean
/**
* 主页名称
* @默认值 `'主页'`
*/
title?: string
/**
* 主页完整路径
* @默认值 `'/'`
*/
fullPath?: string
}
interface layout {
/**
* 是否开启移动端适配,开启后当页面宽度小于 1024px 时自动切换为移动端展示
* @默认值 `false`
*/
enableMobileAdaptation?: boolean
}
interface menu {
/**
* 导航栏数据来源,当 `app.routeBaseOn: 'filesystem'` 时生效
* @默认值 `'frontend'` 前端
* @可选值 `'backend'` 后端
*/
baseOn?: 'frontend' | 'backend'
/**
* 导航栏模式
* @默认值 `'side'` 侧边栏模式(有主导航)
* @可选值 `'head'` 顶部模式
* @可选值 `'single'` 侧边栏模式(无主导航)
*/
mode?: 'side' | 'head' | 'single'
/**
* 主导航点击模式
* @默认值 `'switch'` 切换
* @可选值 `'jump'` 跳转
* @可选值 `'smart'` 智能选择,判断次导航是否只有且只有一个可访问的菜单进行切换或跳转操作
*/
mainMenuClickMode?: 'switch' | 'jump' | 'smart'
/**
* 次导航是否只保持一个子项的展开
* @默认值 `true`
*/
subMenuUniqueOpened?: boolean
/**
* 次导航是否收起
* @默认值 `false`
*/
subMenuCollapse?: boolean
/**
* 是否开启次导航的展开/收起按钮
* @默认值 `false`
*/
enableSubMenuCollapseButton?: boolean
/**
* 是否开启主导航切换快捷键
* @默认值 `false`
*/
enableHotkeys?: boolean
}
interface topbar {
/**
* 模式
* @默认值 `'static'` 静止,跟随页面滚动
* @可选值 `'fixed'` 固定,不跟随页面滚动,始终固定在顶部
* @可选值 `'sticky'` 粘性,页面往下滚动时隐藏,往上滚动时显示
*/
mode?: 'static' | 'fixed' | 'sticky'
}
interface tabbar {
/**
* 是否开启标签栏
* @默认值 `false`
*/
enable?: boolean
/**
* 是否开启标签栏图标显示
* @默认值 `false`
*/
enableIcon?: boolean
/**
* 是否开启标签栏快捷键
* @默认值 `false`
*/
enableHotkeys?: boolean
}
interface toolbar {
/**
* 是否开启面包屑导航
* @默认值 `true`
*/
breadcrumb?: boolean
/**
* 是否开启导航搜索
* @默认值 `true`
*/
navSearch?: boolean
/**
* 是否开启全屏
* @默认值 `false`
*/
fullscreen?: boolean
/**
* 是否开启页面刷新
* @默认值 `false`
*/
pageReload?: boolean
/**
* 是否开启颜色主题
* @默认值 `false`
*/
colorScheme?: boolean
}
interface mainPage {
/**
* 是否开启页面快捷键
* @默认值 `true`
*/
enableHotkeys?: boolean
}
interface navSearch {
/**
* 是否开启导航搜索快捷键
* @默认值 `true`
*/
enableHotkeys?: boolean
}
interface copyright {
/**
* 是否开启底部版权,同时在路由 meta 对象里可以单独设置某个路由是否显示底部版权信息
* @默认值 `false`
*/
enable?: boolean
/**
* 网站运行日期
* @默认值 `''`
*/
dates?: string
/**
* 公司名称
* @默认值 `''`
*/
company?: string
/**
* 网站地址
* @默认值 `''`
*/
website?: string
/**
* 网站备案号
* @默认值 `''`
*/
beian?: string
}
interface all {
/** 应用设置 */
app?: app
/** 主页设置 */
home?: home
/** 布局设置 */
layout?: layout
/** 导航栏设置 */
menu?: menu
/** 顶栏设置 */
topbar?: topbar
/** 标签栏设置 */
tabbar?: tabbar
/** 工具栏设置 */
toolbar?: toolbar
/** 页面设置 */
mainPage?: mainPage
/** 导航搜索设置 */
navSearch?: navSearch
/** 底部版权设置 */
copyright?: copyright
}
}
declare module 'vue-router' {
interface RouteMeta {
title?: string | (() => string)
icon?: string
defaultOpened?: boolean
auth?: string | string[]
menu?: boolean
breadcrumb?: boolean
activeMenu?: string
cache?: boolean | string | string[]
noCache?: string | string[]
link?: string
breadcrumbNeste?: Route.breadcrumb[]
}
}
declare namespace Route {
interface recordMainRaw {
meta?: {
title?: string | (() => string)
icon?: string
auth?: string | string[]
}
children: RouteRecordRaw[]
}
interface breadcrumb {
path: string
title?: string | (() => string)
icon?: string
hide: boolean
}
}
declare namespace Menu {
/** 原始 */
interface recordRaw {
path?: string
meta?: {
title?: string | (() => string)
icon?: string
defaultOpened?: boolean
auth?: string | string[]
menu?: boolean
link?: string
}
children?: recordRaw[]
}
/** 主导航 */
interface recordMainRaw {
meta?: {
title?: string | (() => string)
icon?: string
auth?: string | string[]
}
children: recordRaw[]
}
}
declare namespace Tabbar {
interface recordRaw {
tabId: string
fullPath: string
title?: string | (() => string)
icon?: string
name: string[]
}
}