preferences.schema.json 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455
  1. {
  2. "$schema": "https://json-schema.org/draft/2020-12/schema",
  3. "$id": "./preferences.schema.json",
  4. "title": "Preferences",
  5. "description": "Schema for preferences.json (DeepPartial<Preferences>)",
  6. "type": "object",
  7. "additionalProperties": false,
  8. "properties": {
  9. "$schema": {
  10. "type": "string",
  11. "description": "JSON Schema 文件路径,用于编辑器提示与校验(例如 ../../../schema/preferences.schema.json)"
  12. },
  13. "app": {
  14. "type": "object",
  15. "description": "全局配置",
  16. "additionalProperties": false,
  17. "properties": {
  18. "accessMode": {
  19. "type": "string",
  20. "description": "权限模式",
  21. "enum": ["backend", "frontend", "mixed"]
  22. },
  23. "authPageLayout": {
  24. "type": "string",
  25. "description": "登录注册页面布局",
  26. "enum": ["panel-center", "panel-left", "panel-right"]
  27. },
  28. "checkUpdatesInterval": {
  29. "type": "number",
  30. "description": "检查更新轮询时间"
  31. },
  32. "colorGrayMode": {
  33. "type": "boolean",
  34. "description": "是否开启灰色模式"
  35. },
  36. "colorWeakMode": {
  37. "type": "boolean",
  38. "description": "是否开启色弱模式"
  39. },
  40. "compact": { "type": "boolean", "description": "是否开启紧凑模式" },
  41. "contentCompact": {
  42. "type": "string",
  43. "description": "内容紧凑模式",
  44. "enum": ["compact", "wide"]
  45. },
  46. "contentCompactWidth": {
  47. "type": "number",
  48. "description": "内容紧凑宽度"
  49. },
  50. "contentPadding": { "type": "number", "description": "内容内边距" },
  51. "contentPaddingBottom": {
  52. "type": "number",
  53. "description": "内容底部内边距"
  54. },
  55. "contentPaddingLeft": {
  56. "type": "number",
  57. "description": "内容左侧内边距"
  58. },
  59. "contentPaddingRight": {
  60. "type": "number",
  61. "description": "内容右侧内边距"
  62. },
  63. "contentPaddingTop": {
  64. "type": "number",
  65. "description": "内容顶部内边距"
  66. },
  67. "defaultAvatar": {
  68. "type": "string",
  69. "description": "应用默认头像地址"
  70. },
  71. "defaultHomePath": { "type": "string", "description": "默认首页地址" },
  72. "dynamicTitle": {
  73. "type": "boolean",
  74. "description": "是否开启动态标题"
  75. },
  76. "enableCheckUpdates": {
  77. "type": "boolean",
  78. "description": "是否开启检查更新"
  79. },
  80. "enableCopyPreferences": {
  81. "type": "boolean",
  82. "description": "是否显示复制偏好设置按钮"
  83. },
  84. "enablePreferences": {
  85. "type": "boolean",
  86. "description": "是否显示偏好设置"
  87. },
  88. "enableRefreshToken": {
  89. "type": "boolean",
  90. "description": "是否开启 refreshToken"
  91. },
  92. "enableStickyPreferencesNavigationBar": {
  93. "type": "boolean",
  94. "description": "是否开启首选项导航栏吸顶效果"
  95. },
  96. "isMobile": { "type": "boolean", "description": "是否移动端" },
  97. "layout": {
  98. "type": "string",
  99. "description": "布局方式",
  100. "enum": [
  101. "full-content",
  102. "header-mixed-nav",
  103. "header-nav",
  104. "header-sidebar-nav",
  105. "mixed-nav",
  106. "sidebar-mixed-nav",
  107. "sidebar-nav"
  108. ]
  109. },
  110. "locale": {
  111. "type": "string",
  112. "description": "支持的语言",
  113. "enum": ["en-US", "zh-CN"]
  114. },
  115. "loginExpiredMode": {
  116. "type": "string",
  117. "description": "登录过期模式",
  118. "enum": ["modal", "page"]
  119. },
  120. "name": { "type": "string", "description": "应用名称" },
  121. "preferencesButtonPosition": {
  122. "type": "string",
  123. "description": "偏好设置按钮位置",
  124. "enum": ["auto", "fixed", "header", "user-dropdown"]
  125. },
  126. "timezone": { "type": "string", "description": "应用时区" },
  127. "watermark": { "type": "boolean", "description": "是否开启水印" },
  128. "watermarkContent": { "type": "string", "description": "水印文案" },
  129. "zIndex": { "type": "number", "description": "全局 z-index" }
  130. }
  131. },
  132. "breadcrumb": {
  133. "type": "object",
  134. "description": "面包屑配置",
  135. "additionalProperties": false,
  136. "properties": {
  137. "enable": { "type": "boolean", "description": "面包屑是否启用" },
  138. "hideOnlyOne": {
  139. "type": "boolean",
  140. "description": "是否在仅一个项时隐藏"
  141. },
  142. "showHome": { "type": "boolean", "description": "首页图标是否可见" },
  143. "showIcon": { "type": "boolean", "description": "图标是否可见" },
  144. "styleType": {
  145. "type": "string",
  146. "description": "面包屑风格",
  147. "enum": ["background", "normal"]
  148. }
  149. }
  150. },
  151. "copyright": {
  152. "type": "object",
  153. "description": "版权配置",
  154. "additionalProperties": false,
  155. "properties": {
  156. "companyName": { "type": "string", "description": "版权公司名" },
  157. "companySiteLink": { "type": "string", "description": "版权公司链接" },
  158. "date": { "type": "string", "description": "版权年份/日期" },
  159. "enable": { "type": "boolean", "description": "版权是否可见" },
  160. "icp": { "type": "string", "description": "备案号" },
  161. "icpLink": { "type": "string", "description": "备案号链接" },
  162. "settingShow": {
  163. "type": "boolean",
  164. "description": "设置面板中是否显示"
  165. }
  166. }
  167. },
  168. "footer": {
  169. "type": "object",
  170. "description": "底栏配置",
  171. "additionalProperties": false,
  172. "properties": {
  173. "enable": { "type": "boolean", "description": "底栏是否可见" },
  174. "fixed": { "type": "boolean", "description": "底栏是否固定" },
  175. "height": { "type": "number", "description": "底栏高度" }
  176. }
  177. },
  178. "header": {
  179. "type": "object",
  180. "description": "顶栏配置",
  181. "additionalProperties": false,
  182. "properties": {
  183. "enable": { "type": "boolean", "description": "顶栏是否启用" },
  184. "height": { "type": "number", "description": "顶栏高度" },
  185. "hidden": {
  186. "type": "boolean",
  187. "description": "顶栏是否隐藏(CSS 隐藏)"
  188. },
  189. "menuAlign": {
  190. "type": "string",
  191. "description": "顶栏菜单位置",
  192. "enum": ["center", "end", "start"]
  193. },
  194. "mode": {
  195. "type": "string",
  196. "description": "顶栏显示模式",
  197. "enum": ["auto", "auto-scroll", "fixed", "static"]
  198. }
  199. }
  200. },
  201. "logo": {
  202. "type": "object",
  203. "description": "Logo 配置",
  204. "additionalProperties": false,
  205. "properties": {
  206. "enable": { "type": "boolean", "description": "Logo 是否可见" },
  207. "fit": {
  208. "type": "string",
  209. "description": "Logo 图片适应方式",
  210. "enum": ["contain", "cover", "fill", "none", "scale-down"]
  211. },
  212. "source": { "type": "string", "description": "Logo 地址" },
  213. "sourceDark": { "type": "string", "description": "暗色主题 Logo 地址" }
  214. }
  215. },
  216. "navigation": {
  217. "type": "object",
  218. "description": "导航配置",
  219. "additionalProperties": false,
  220. "properties": {
  221. "accordion": { "type": "boolean", "description": "导航菜单手风琴模式" },
  222. "split": {
  223. "type": "boolean",
  224. "description": "导航菜单是否切割(layout=mixed-nav 生效)"
  225. },
  226. "styleType": {
  227. "type": "string",
  228. "description": "导航菜单风格",
  229. "enum": ["plain", "rounded"]
  230. }
  231. }
  232. },
  233. "shortcutKeys": {
  234. "type": "object",
  235. "description": "快捷键配置",
  236. "additionalProperties": false,
  237. "properties": {
  238. "enable": { "type": "boolean", "description": "是否启用全局快捷键" },
  239. "globalLockScreen": {
  240. "type": "boolean",
  241. "description": "是否启用全局锁屏快捷键"
  242. },
  243. "globalLogout": {
  244. "type": "boolean",
  245. "description": "是否启用全局注销快捷键"
  246. },
  247. "globalPreferences": {
  248. "type": "boolean",
  249. "description": "是否启用全局偏好设置快捷键"
  250. },
  251. "globalSearch": {
  252. "type": "boolean",
  253. "description": "是否启用全局搜索快捷键"
  254. }
  255. }
  256. },
  257. "sidebar": {
  258. "type": "object",
  259. "description": "侧边栏配置",
  260. "additionalProperties": false,
  261. "properties": {
  262. "autoActivateChild": {
  263. "type": "boolean",
  264. "description": "点击目录时自动激活子菜单"
  265. },
  266. "collapsed": { "type": "boolean", "description": "侧边栏是否折叠" },
  267. "collapsedButton": {
  268. "type": "boolean",
  269. "description": "侧边栏折叠按钮是否可见"
  270. },
  271. "collapsedShowTitle": {
  272. "type": "boolean",
  273. "description": "折叠时是否显示标题"
  274. },
  275. "collapseWidth": { "type": "number", "description": "侧边栏折叠宽度" },
  276. "draggable": {
  277. "type": "boolean",
  278. "description": "侧边栏菜单是否可拖拽"
  279. },
  280. "enable": { "type": "boolean", "description": "侧边栏是否可见" },
  281. "expandOnHover": {
  282. "type": "boolean",
  283. "description": "鼠标悬停时是否自动展开"
  284. },
  285. "extraCollapse": {
  286. "type": "boolean",
  287. "description": "扩展区域是否折叠"
  288. },
  289. "extraCollapsedWidth": {
  290. "type": "number",
  291. "description": "扩展区域折叠宽度"
  292. },
  293. "fixedButton": {
  294. "type": "boolean",
  295. "description": "侧边栏固定按钮是否可见"
  296. },
  297. "hidden": { "type": "boolean", "description": "侧边栏是否隐藏(CSS)" },
  298. "mixedWidth": { "type": "number", "description": "混合布局侧边栏宽度" },
  299. "width": { "type": "number", "description": "侧边栏宽度" }
  300. }
  301. },
  302. "tabbar": {
  303. "type": "object",
  304. "description": "标签页配置",
  305. "additionalProperties": false,
  306. "properties": {
  307. "draggable": { "type": "boolean", "description": "是否开启标签页拖拽" },
  308. "enable": { "type": "boolean", "description": "是否启用标签页" },
  309. "height": { "type": "number", "description": "标签页高度" },
  310. "keepAlive": { "type": "boolean", "description": "是否开启标签页缓存" },
  311. "maxCount": { "type": "number", "description": "标签页最大数量" },
  312. "middleClickToClose": {
  313. "type": "boolean",
  314. "description": "中键点击是否关闭标签"
  315. },
  316. "persist": { "type": "boolean", "description": "是否持久化标签页" },
  317. "showIcon": { "type": "boolean", "description": "是否显示标签页图标" },
  318. "showMaximize": {
  319. "type": "boolean",
  320. "description": "是否显示最大化按钮"
  321. },
  322. "showMore": { "type": "boolean", "description": "是否显示更多按钮" },
  323. "showRefresh": { "type": "boolean", "description": "是否显示刷新按钮" },
  324. "styleType": {
  325. "type": "string",
  326. "description": "标签页风格",
  327. "enum": ["brisk", "card", "chrome", "plain"]
  328. },
  329. "visitHistory": {
  330. "type": "boolean",
  331. "description": "是否开启访问历史记录"
  332. },
  333. "wheelable": {
  334. "type": "boolean",
  335. "description": "是否响应鼠标滚轮切换"
  336. }
  337. }
  338. },
  339. "theme": {
  340. "type": "object",
  341. "description": "主题配置",
  342. "additionalProperties": false,
  343. "properties": {
  344. "builtinType": {
  345. "description": "内置主题名(支持内置主题,也允许自定义字符串)",
  346. "anyOf": [
  347. {
  348. "type": "string",
  349. "enum": [
  350. "custom",
  351. "deep-blue",
  352. "deep-green",
  353. "default",
  354. "gray",
  355. "green",
  356. "neutral",
  357. "orange",
  358. "pink",
  359. "red",
  360. "rose",
  361. "sky-blue",
  362. "slate",
  363. "stone",
  364. "violet",
  365. "yellow",
  366. "zinc"
  367. ]
  368. },
  369. { "type": "string" }
  370. ]
  371. },
  372. "colorDestructive": { "type": "string", "description": "错误色" },
  373. "colorPrimary": { "type": "string", "description": "主题色" },
  374. "colorSuccess": { "type": "string", "description": "成功色" },
  375. "colorWarning": { "type": "string", "description": "警告色" },
  376. "fontSize": { "type": "number", "description": "字体大小(px)" },
  377. "mode": {
  378. "type": "string",
  379. "description": "主题模式",
  380. "enum": ["auto", "dark", "light"]
  381. },
  382. "radius": { "type": "string", "description": "全局圆角" },
  383. "semiDarkHeader": {
  384. "type": "boolean",
  385. "description": "浅色主题下是否启用半深色头部"
  386. },
  387. "semiDarkSidebar": {
  388. "type": "boolean",
  389. "description": "浅色主题下是否启用半深色侧边栏"
  390. },
  391. "semiDarkSidebarSub": {
  392. "type": "boolean",
  393. "description": "浅色主题下是否启用半深色子菜单"
  394. }
  395. }
  396. },
  397. "transition": {
  398. "type": "object",
  399. "description": "页面动画配置",
  400. "additionalProperties": false,
  401. "properties": {
  402. "enable": { "type": "boolean", "description": "页面切换动画是否启用" },
  403. "loading": {
  404. "type": "boolean",
  405. "description": "是否开启页面加载 loading"
  406. },
  407. "name": {
  408. "description": "页面切换动画名称(支持内置动画,也允许自定义字符串)",
  409. "anyOf": [
  410. {
  411. "type": "string",
  412. "enum": ["fade", "fade-down", "fade-slide", "fade-up"]
  413. },
  414. { "type": "string" }
  415. ]
  416. },
  417. "progress": {
  418. "type": "boolean",
  419. "description": "是否开启页面加载进度动画"
  420. }
  421. }
  422. },
  423. "widget": {
  424. "type": "object",
  425. "description": "功能部件配置",
  426. "additionalProperties": false,
  427. "properties": {
  428. "fullscreen": { "type": "boolean", "description": "是否启用全屏部件" },
  429. "globalSearch": {
  430. "type": "boolean",
  431. "description": "是否启用全局搜索部件"
  432. },
  433. "languageToggle": {
  434. "type": "boolean",
  435. "description": "是否启用语言切换部件"
  436. },
  437. "lockScreen": { "type": "boolean", "description": "是否启用锁屏部件" },
  438. "notification": {
  439. "type": "boolean",
  440. "description": "是否启用通知部件"
  441. },
  442. "refresh": { "type": "boolean", "description": "是否显示刷新部件" },
  443. "sidebarToggle": {
  444. "type": "boolean",
  445. "description": "是否显示侧边栏开关部件"
  446. },
  447. "themeToggle": {
  448. "type": "boolean",
  449. "description": "是否显示主题切换部件"
  450. },
  451. "timezone": { "type": "boolean", "description": "是否显示时区部件" }
  452. }
  453. }
  454. }
  455. }