global.d.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. import type { StyleValue } from "vue"
  2. import type { RouteRecordRaw, RouteMeta, NavigationGuard } from 'vue-router'
  3. type RecursiveRequired<T> = {
  4. [P in keyof T]-?: RecursiveRequired<T[P]>
  5. }
  6. type RecursivePartial<T> = {
  7. [P in keyof T]?: RecursivePartial<T[P]>
  8. }
  9. declare namespace Settings {
  10. interface base {
  11. serverUrl: string,
  12. devServerUrl: string, // 开发环境
  13. appID: string,
  14. appKey: string,
  15. appSecret: string,
  16. permitTplId: number
  17. }
  18. interface app {
  19. /**
  20. * 主题
  21. * @默认值 `'default'` 默认主题
  22. * @可选值 `'sys_green'` 绿色主题
  23. * @可选值 `'sys_orange'` 橙色主题
  24. * @可选值 `'sys_pink'` 粉色主题
  25. * @可选值 `'sys_grey'` 灰色主题
  26. * @可选值 `'sys_yellow'` 黄色主题
  27. */
  28. theme?: 'default' | 'sys_green' | 'sys_orange' | 'sys_pink' | 'sys_grey' | 'sys_yellow'
  29. /**
  30. * 颜色方案
  31. * @默认值 `''` 跟随系统
  32. * @可选值 `'light'` 明亮模式
  33. * @可选值 `'dark'` 暗黑模式
  34. */
  35. colorScheme?: '' | 'light' | 'dark'
  36. /**
  37. * Element Plus 组件默认尺寸
  38. * @默认值 `'default'` 默认
  39. * @可选值 `'large'` 大号
  40. * @可选值 `'small'` 小号
  41. */
  42. elementSize?: 'default' | 'large' | 'small'
  43. /**
  44. * 默认语言
  45. * @默认值 `''` 跟随浏览器语言设置
  46. * @可选值 [查看 Element Plus 支持语言列表](https://github.com/element-plus/element-plus/tree/dev/packages/locale/lang)
  47. */
  48. defaultLang?: string
  49. /**
  50. * 是否开启权限功能
  51. * @默认值 `false`
  52. */
  53. enablePermission?: boolean
  54. /**
  55. * 是否开启载入进度条
  56. * @默认值 `true`
  57. */
  58. enableProgress?: boolean
  59. /**
  60. * 是否开启动态标题
  61. * @默认值 `false`
  62. */
  63. enableDynamicTitle?: boolean
  64. /**
  65. * localStorage/sessionStorage 前缀
  66. * @默认值 `'fa_'`
  67. */
  68. storagePrefix?: string
  69. /**
  70. * 是否开启页面水印
  71. * @默认值 `false`
  72. */
  73. enableWatermark?: boolean
  74. /**
  75. * 是否在非开发环境开启错误日志功能,具体业务代码在 ./utils/error.log.ts
  76. * @默认值 `false`
  77. */
  78. enableErrorLog?: boolean
  79. /**
  80. * 路由数据来源
  81. * @默认值 `'frontend'` 前端
  82. * @可选值 `'backend'` 后端
  83. * @可选值 `'filesystem'` 文件系统
  84. */
  85. routeBaseOn?: 'frontend' | 'backend' | 'filesystem'
  86. }
  87. interface home {
  88. /**
  89. * 是否开启主页
  90. * @默认值 `true`
  91. */
  92. enable?: boolean
  93. /**
  94. * 主页名称
  95. * @默认值 `'主页'`
  96. */
  97. title?: string
  98. }
  99. interface layout {
  100. /**
  101. * 页宽模式,当设置为非 `'adaption'` 时,可以去 ./src/assets/styles/layout.scss 里设置 `--g-app-width` 宽度变量
  102. * @默认值 `'adaption'` 自适应
  103. * @可选值 `'adaption-min-width'` 自适应(有最小宽度)
  104. * @可选值 `'center'` 定宽居中
  105. * @可选值 `'center-max-width'` 定宽居中(有最大宽度)
  106. */
  107. widthMode?: 'adaption' | 'adaption-min-width' | 'center' | 'center-max-width'
  108. /**
  109. * 是否开启移动端适配,开启后当页面宽度小于 992px 时自动切换为移动端展示
  110. * @默认值 `false`
  111. */
  112. enableMobileAdaptation?: boolean
  113. }
  114. interface menu {
  115. /**
  116. * 导航栏数据来源,当 `app.routeBaseOn: 'filesystem'` 时生效
  117. * @默认值 `'frontend'` 前端
  118. * @可选值 `'backend'` 后端
  119. */
  120. baseOn?: 'frontend' | 'backend'
  121. /**
  122. * 导航栏模式
  123. * @默认值 `'side'` 侧边栏模式(有主导航)
  124. * @可选值 `'head'` 顶部模式
  125. * @可选值 `'single'` 侧边栏模式(无主导航)
  126. * @可选值 `'only-side'` 侧边栏精简模式
  127. * @可选值 `'only-head'` 顶部精简模式
  128. */
  129. menuMode?: 'side' | 'head' | 'single' | 'only-side' | 'only-head'
  130. /**
  131. * 导航栏填充风格
  132. * @默认值 `''`
  133. * @可选值 `'radius'` 圆角
  134. */
  135. menuFillStyle?: '' | 'radius'
  136. /**
  137. * 导航栏激活风格
  138. * @默认值 `''`
  139. * @可选值 `'arrow'` 箭头
  140. * @可选值 `'line'` 线条
  141. * @可选值 `'dot'` 圆点
  142. */
  143. menuActiveStyle?: '' | 'arrow' | 'line' | 'dot'
  144. /**
  145. * 切换主导航是否跳转页面
  146. * @默认值 `false`
  147. */
  148. switchMainMenuAndPageJump?: boolean
  149. /**
  150. * 次导航是否只保持一个子项的展开
  151. * @默认值 `true`
  152. */
  153. subMenuUniqueOpened?: boolean
  154. /**
  155. * 次导航只有一个导航时是否自动隐藏
  156. * @默认值 `false`
  157. */
  158. subMenuOnlyOneHide?: boolean
  159. /**
  160. * 次导航是否收起
  161. * @默认值 `false`
  162. */
  163. subMenuCollapse?: boolean
  164. /**
  165. * 是否开启次导航的展开/收起按钮
  166. * @默认值 `false`
  167. */
  168. enableSubMenuCollapseButton?: boolean
  169. /**
  170. * 是否开启主导航切换快捷键
  171. * @默认值 `false`
  172. */
  173. enableHotkeys?: boolean
  174. }
  175. interface topbar {
  176. /**
  177. * 模式
  178. * @默认值 `'static'` 静止,跟随页面滚动
  179. * @可选值 `'fixed'` 固定,不跟随页面滚动,始终固定在顶部
  180. * @可选值 `'sticky'` 粘性,页面往下滚动时隐藏,往上滚动时显示
  181. */
  182. mode?: 'static' | 'fixed' | 'sticky'
  183. /**
  184. * 是否切换显示标签栏和工具栏的显示位置
  185. * @默认值 `false` 标签栏在工具栏上面
  186. * @可选值 `true` 工具栏在标签栏上面
  187. */
  188. switchTabbarAndToolbar?: boolean
  189. }
  190. interface tabbar {
  191. /**
  192. * 是否开启标签栏
  193. * @默认值 `false`
  194. */
  195. enable?: boolean
  196. /**
  197. * 标签栏风格
  198. * @默认值 `'fashion'` 时尚
  199. * @可选值 `'card'` 卡片
  200. * @可选值 `'square'` 方块
  201. */
  202. style?: 'fashion' | 'card' | 'square'
  203. /**
  204. * 是否开启标签栏图标显示
  205. * @默认值 `false`
  206. */
  207. enableIcon?: boolean
  208. /**
  209. * 标签页合并规则
  210. * @默认值 `''` 不合并
  211. * @可选值 `'routeName'` 根据路由名称,相同路由名称的路由合并
  212. * @可选值 `'activeMenu'` 根据路由的 `meta.activeMenu` 字段,与指向的目标路由合并
  213. */
  214. mergeTabsBy?: '' | 'routeName' | 'activeMenu'
  215. /**
  216. * 是否开启标签栏快捷键
  217. * @默认值 `false`
  218. */
  219. enableHotkeys?: boolean
  220. }
  221. interface toolbar {
  222. /**
  223. * 是否开启通知中心
  224. * @默认值 `false`
  225. */
  226. enableNotification?: boolean
  227. /**
  228. * 是否开启国际化
  229. * @默认值 `false`
  230. */
  231. enableI18n?: boolean
  232. /**
  233. * 是否开启全屏
  234. * @默认值 `false`
  235. */
  236. enableFullscreen?: boolean
  237. /**
  238. * 是否开启页面刷新
  239. * @默认值 `false`
  240. */
  241. enablePageReload?: boolean
  242. /**
  243. * 是否开启颜色主题
  244. * @默认值 `false`
  245. */
  246. enableColorScheme?: boolean
  247. /**
  248. * 是否开启应用配置,强烈建议在生产环境中关闭
  249. * @默认值 `false`
  250. */
  251. enableAppSetting?: boolean
  252. }
  253. interface breadcrumb {
  254. /**
  255. * 是否开启面包屑导航
  256. * @默认值 `true`
  257. */
  258. enable?: boolean
  259. /**
  260. * 面包屑导航风格
  261. * @默认值 `''` 默认
  262. * @默认值 `'modern'` 现代
  263. */
  264. style?: '' | 'modern'
  265. /**
  266. * 是否在面包屑导航里显示主导航
  267. * @默认值 `false`
  268. */
  269. enableMainMenu?: boolean
  270. }
  271. interface mainPage {
  272. /**
  273. * 是否开启页面快捷键
  274. * @默认值 `true`
  275. */
  276. enableHotkeys?: boolean
  277. /**
  278. * iframe 页面最大缓存数量
  279. * @默认值 `3`
  280. */
  281. iframeCacheMax?: number
  282. }
  283. interface navSearch {
  284. /**
  285. * 是否开启导航搜索
  286. * @默认值 `true`
  287. */
  288. enable?: boolean
  289. /**
  290. * 是否开启导航搜索快捷键
  291. * @默认值 `true`
  292. */
  293. enableHotkeys?: boolean
  294. }
  295. interface copyright {
  296. /**
  297. * 是否开启底部版权,同时在路由 meta 对象里可以单独设置某个路由是否显示底部版权信息
  298. * @默认值 `true`
  299. */
  300. enable?: boolean
  301. /**
  302. * 网站运行日期
  303. * @默认值 `'2020-2022'`
  304. */
  305. dates?: string
  306. /**
  307. * 公司名称
  308. * @默认值 `'Fantastic-admin'`
  309. */
  310. company?: string
  311. /**
  312. * 网站地址
  313. * @默认值 `'https://hooray.gitee.io/fantastic-admin/'`
  314. */
  315. website?: string
  316. /**
  317. * 网站备案号
  318. * @默认值 `''`
  319. */
  320. beian?: string
  321. }
  322. interface all {
  323. /** 基本设置 */
  324. base: base
  325. /** 应用设置 */
  326. app?: app
  327. /** 主页设置 */
  328. home?: home
  329. /** 布局设置 */
  330. layout?: layout
  331. /** 导航栏设置 */
  332. menu?: menu
  333. /** 顶栏设置 */
  334. topbar?: topbar
  335. /** 标签栏设置 */
  336. tabbar?: tabbar
  337. /** 工具栏设置 */
  338. toolbar?: toolbar
  339. /** 面包屑导航设置 */
  340. breadcrumb?: breadcrumb
  341. /** 页面设置 */
  342. mainPage?: mainPage
  343. /** 导航搜索设置 */
  344. navSearch?: navSearch
  345. /** 底部版权设置 */
  346. copyright?: copyright
  347. }
  348. }
  349. declare module 'vue-router' {
  350. interface RouteMeta {
  351. title?: string | Function
  352. i18n?: string
  353. icon?: string
  354. activeIcon?: string
  355. defaultOpened?: boolean
  356. permanent?: boolean
  357. auth?: string | string[]
  358. sidebar?: boolean
  359. breadcrumb?: boolean
  360. activeMenu?: string
  361. cache?: boolean | string | string[]
  362. noCache?: string | string[]
  363. badge?: boolean | string | number | Function
  364. iframe?: string
  365. link?: string
  366. copyright?: boolean
  367. paddingBottom?: StyleValue
  368. whiteList?: boolean
  369. breadcrumbNeste?: Route.breadcrumb[]
  370. }
  371. }
  372. declare namespace Route {
  373. interface recordMainRaw {
  374. meta?: {
  375. title?: string | Function
  376. i18n?: string
  377. icon?: string
  378. activeIcon?: string
  379. auth?: string | string[]
  380. }
  381. children: RouteRecordRaw[]
  382. }
  383. interface breadcrumb {
  384. path: string
  385. title?: string | Function
  386. i18n?: string
  387. icon?: string
  388. activeIcon?: string
  389. hide: boolean
  390. }
  391. }
  392. declare namespace Menu {
  393. /** 原始 */
  394. interface recordRaw {
  395. path?: string
  396. meta?: {
  397. title?: string
  398. i18n?: string
  399. icon?: string
  400. activeIcon?: string
  401. defaultOpened?: boolean
  402. auth?: string | string[]
  403. sidebar?: boolean
  404. badge?: boolean | string | number | Function
  405. link?: string
  406. }
  407. children?: recordRaw[]
  408. }
  409. /** 主导航 */
  410. interface recordMainRaw {
  411. meta?: {
  412. title?: string
  413. i18n?: string
  414. icon?: string
  415. activeIcon?: string
  416. auth?: string | string[]
  417. }
  418. children: recordRaw[]
  419. }
  420. }
  421. declare namespace Tabbar {
  422. interface recordRaw {
  423. tabId: string
  424. fullPath: string
  425. routeName?: RouteRecordRaw.name
  426. activeMenu?: string
  427. title?: string | Function
  428. i18n?: string
  429. iframe?: string
  430. icon?: string
  431. activeIcon?: string
  432. name: string[]
  433. isPin: boolean
  434. isPermanent: boolean
  435. }
  436. }
  437. declare namespace Iframe {
  438. interface recordRaw {
  439. path: string
  440. src: string
  441. isOpen: boolean
  442. isLoading: boolean
  443. }
  444. }