smart-admin-web 10.14.0 → 10.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/README.md +6 -6
  2. package/dist/api/index.d.ts +41 -2
  3. package/dist/api/index.js +36 -15
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/schema.d.ts +418 -6
  6. package/dist/assets/icons/ph-subset.json.js +7 -7
  7. package/dist/assets/smart-logo.svg.js +5 -0
  8. package/dist/assets/smart-logo.svg.js.map +1 -0
  9. package/dist/components/AppIcon.vue.js +9 -9
  10. package/dist/components/AppIcon.vue.js.map +1 -1
  11. package/dist/components/AppWatermark.vue.d.ts +14 -0
  12. package/dist/components/AppWatermark.vue.js +38 -0
  13. package/dist/components/AppWatermark.vue.js.map +1 -0
  14. package/dist/components/AppWatermark2.vue.js +5 -0
  15. package/dist/components/AppWatermark2.vue.js.map +1 -0
  16. package/dist/components/Chart/PieChart.vue.d.ts +1 -1
  17. package/dist/components/Chart/echarts.js +15 -20
  18. package/dist/components/Chart/echarts.js.map +1 -1
  19. package/dist/components/CronEditor/index.vue.js +1 -1
  20. package/dist/components/CronEditor/index2.vue.js +2 -1
  21. package/dist/components/CronEditor/index2.vue.js.map +1 -1
  22. package/dist/components/DetailPage/index.vue.js +2 -2
  23. package/dist/components/DetailPage/index2.vue.js.map +1 -1
  24. package/dist/components/DictTag/index.vue.js.map +1 -1
  25. package/dist/components/ErrorBoundary/index.vue.js +2 -2
  26. package/dist/components/ErrorBoundary/index2.vue.js +1 -1
  27. package/dist/components/ErrorBoundary/index2.vue.js.map +1 -1
  28. package/dist/components/FormContainer/index.vue.js +91 -56
  29. package/dist/components/FormContainer/index.vue.js.map +1 -1
  30. package/dist/components/ImportWizard/index.vue.js +1 -1
  31. package/dist/components/ImportWizard/index2.vue.js +44 -41
  32. package/dist/components/ImportWizard/index2.vue.js.map +1 -1
  33. package/dist/components/MenuSearch.vue.js +2 -2
  34. package/dist/components/MenuSearch2.vue.js +19 -18
  35. package/dist/components/MenuSearch2.vue.js.map +1 -1
  36. package/dist/components/PasswordStrength/index.vue.js +2 -2
  37. package/dist/components/PasswordStrength/index2.vue.js +20 -18
  38. package/dist/components/PasswordStrength/index2.vue.js.map +1 -1
  39. package/dist/components/SmartLogo.vue.d.ts +3 -0
  40. package/dist/components/SmartLogo.vue.js +1 -1
  41. package/dist/components/SmartLogo2.vue.js +22 -64
  42. package/dist/components/SmartLogo2.vue.js.map +1 -1
  43. package/dist/{views/system/config/components/GroupExtraConfig.vue.d.ts → components/TableTotal/index.vue.d.ts} +1 -4
  44. package/dist/components/{SelectTable → TableTotal}/index.vue.js +1 -1
  45. package/dist/components/TableTotal/index2.vue.js +16 -0
  46. package/dist/components/TableTotal/index2.vue.js.map +1 -0
  47. package/dist/components/TableZoomButton/index.vue.js.map +1 -1
  48. package/dist/components/UserPicker/index.vue.js +2 -2
  49. package/dist/components/UserPicker/index2.vue.js +176 -117
  50. package/dist/components/UserPicker/index2.vue.js.map +1 -1
  51. package/dist/composables/useBatchDelete.js.map +1 -1
  52. package/dist/composables/useLayoutMenu.js +17 -16
  53. package/dist/composables/useLayoutMenu.js.map +1 -1
  54. package/dist/composables/useLoginHero.d.ts +2 -0
  55. package/dist/composables/useLoginHero.js +22 -0
  56. package/dist/composables/useLoginHero.js.map +1 -0
  57. package/dist/composables/useModule.js +39 -29
  58. package/dist/composables/useModule.js.map +1 -1
  59. package/dist/composables/usePageTitle.js +16 -14
  60. package/dist/composables/usePageTitle.js.map +1 -1
  61. package/dist/composables/useShellBreakpoint.d.ts +19 -0
  62. package/dist/composables/useShellBreakpoint.js +37 -0
  63. package/dist/composables/useShellBreakpoint.js.map +1 -0
  64. package/dist/composables/useSite.d.ts +20 -0
  65. package/dist/composables/useSite.js +18 -13
  66. package/dist/composables/useSite.js.map +1 -1
  67. package/dist/composables/useTabTitle.js.map +1 -1
  68. package/dist/composables/useTableTitle.d.ts +6 -0
  69. package/dist/composables/useTableTitle.js +11 -0
  70. package/dist/composables/useTableTitle.js.map +1 -0
  71. package/dist/composables/useTableZoom.d.ts +5 -0
  72. package/dist/composables/useTableZoom.js.map +1 -1
  73. package/dist/composables/useTheme.d.ts +2 -2
  74. package/dist/composables/useTheme.js +23 -20
  75. package/dist/composables/useTheme.js.map +1 -1
  76. package/dist/createSmartAdmin.d.ts +12 -2
  77. package/dist/createSmartAdmin.js +72 -60
  78. package/dist/createSmartAdmin.js.map +1 -1
  79. package/dist/index.d.ts +5 -2
  80. package/dist/index.js +223 -208
  81. package/dist/index.js.map +1 -1
  82. package/dist/layouts/AccentPicker.vue.js +8 -0
  83. package/dist/layouts/AccentPicker.vue.js.map +1 -0
  84. package/dist/layouts/AccentPicker2.vue.js +131 -0
  85. package/dist/layouts/AccentPicker2.vue.js.map +1 -0
  86. package/dist/layouts/AppHeader.vue.d.ts +8 -1
  87. package/dist/layouts/AppHeader.vue.js +2 -2
  88. package/dist/layouts/AppHeader2.vue.js +317 -235
  89. package/dist/layouts/AppHeader2.vue.js.map +1 -1
  90. package/dist/layouts/NoticeBell.vue.js +2 -2
  91. package/dist/layouts/NoticeBell2.vue.js +1 -1
  92. package/dist/layouts/NoticeBell2.vue.js.map +1 -1
  93. package/dist/layouts/PersonalLayout.vue.js +2 -2
  94. package/dist/layouts/PersonalLayout2.vue.js +69 -47
  95. package/dist/layouts/PersonalLayout2.vue.js.map +1 -1
  96. package/dist/layouts/SettingsDrawer.vue.js +3 -3
  97. package/dist/layouts/SettingsDrawer2.vue.js +261 -325
  98. package/dist/layouts/SettingsDrawer2.vue.js.map +1 -1
  99. package/dist/layouts/TabsBar.vue.js +2 -2
  100. package/dist/layouts/TabsBar2.vue.js +97 -69
  101. package/dist/layouts/TabsBar2.vue.js.map +1 -1
  102. package/dist/layouts/components/SideNav.vue.d.ts +3 -0
  103. package/dist/layouts/components/SideNav.vue.js +1 -1
  104. package/dist/layouts/components/SideNav2.vue.js +54 -26
  105. package/dist/layouts/components/SideNav2.vue.js.map +1 -1
  106. package/dist/layouts/default.vue.js +1 -1
  107. package/dist/layouts/default2.vue.js +170 -140
  108. package/dist/layouts/default2.vue.js.map +1 -1
  109. package/dist/lib/favicon.d.ts +1 -0
  110. package/dist/lib/favicon.js +12 -0
  111. package/dist/lib/favicon.js.map +1 -0
  112. package/dist/lib/loginHero.d.ts +16 -0
  113. package/dist/lib/loginHero.js +33 -0
  114. package/dist/lib/loginHero.js.map +1 -0
  115. package/dist/lib/logoCrop.d.ts +25 -0
  116. package/dist/lib/logoCrop.js +22 -0
  117. package/dist/lib/logoCrop.js.map +1 -0
  118. package/dist/lib/runtime.d.ts +2 -0
  119. package/dist/lib/runtime.js +1 -1
  120. package/dist/lib/runtime.js.map +1 -1
  121. package/dist/lib/securityRules.d.ts +26 -0
  122. package/dist/lib/securityRules.js +86 -0
  123. package/dist/lib/securityRules.js.map +1 -0
  124. package/dist/lib/watermark.d.ts +110 -0
  125. package/dist/lib/watermark.js +151 -0
  126. package/dist/lib/watermark.js.map +1 -0
  127. package/dist/locales/en-US.d.ts +462 -42
  128. package/dist/locales/en-US.js +491 -78
  129. package/dist/locales/en-US.js.map +1 -1
  130. package/dist/locales/kernelMenuTitles.d.ts +1 -0
  131. package/dist/locales/kernelMenuTitles.js +128 -0
  132. package/dist/locales/kernelMenuTitles.js.map +1 -0
  133. package/dist/locales/menuTitle.d.ts +3 -0
  134. package/dist/locales/menuTitle.js +14 -12
  135. package/dist/locales/menuTitle.js.map +1 -1
  136. package/dist/locales/zh-CN.d.ts +462 -42
  137. package/dist/locales/zh-CN.js +490 -81
  138. package/dist/locales/zh-CN.js.map +1 -1
  139. package/dist/router/index.js +41 -32
  140. package/dist/router/index.js.map +1 -1
  141. package/dist/router/namedPage.d.ts +4 -0
  142. package/dist/router/namedPage.js +7 -7
  143. package/dist/router/namedPage.js.map +1 -1
  144. package/dist/router/viewRegistry.js +12 -12
  145. package/dist/router/viewRegistry.js.map +1 -1
  146. package/dist/stores/app.d.ts +0 -12
  147. package/dist/stores/app.js +11 -12
  148. package/dist/stores/app.js.map +1 -1
  149. package/dist/stores/tabs.js.map +1 -1
  150. package/dist/stores/user.d.ts +10 -0
  151. package/dist/stores/user.js.map +1 -1
  152. package/dist/style.css +1 -1
  153. package/dist/theme/accentTokens.d.ts +27 -0
  154. package/dist/theme/accentTokens.js +54 -0
  155. package/dist/theme/accentTokens.js.map +1 -0
  156. package/dist/theme/accents.d.ts +21 -1
  157. package/dist/theme/accents.js +11 -2
  158. package/dist/theme/accents.js.map +1 -1
  159. package/dist/theme/mix.d.ts +58 -7
  160. package/dist/theme/mix.js +115 -30
  161. package/dist/theme/mix.js.map +1 -1
  162. package/dist/theme/naive-theme.d.ts +5 -2
  163. package/dist/theme/naive-theme.js +405 -75
  164. package/dist/theme/naive-theme.js.map +1 -1
  165. package/dist/utils/jwt.d.ts +8 -0
  166. package/dist/utils/jwt.js +14 -0
  167. package/dist/utils/jwt.js.map +1 -0
  168. package/dist/utils/menuIcon.d.ts +2 -0
  169. package/dist/utils/menuIcon.js +8 -0
  170. package/dist/utils/menuIcon.js.map +1 -0
  171. package/dist/utils/oauthBrand.d.ts +34 -9
  172. package/dist/utils/oauthBrand.js +70 -74
  173. package/dist/utils/oauthBrand.js.map +1 -1
  174. package/dist/utils/tableFilter.d.ts +88 -0
  175. package/dist/utils/tableFilter.js +116 -0
  176. package/dist/utils/tableFilter.js.map +1 -0
  177. package/dist/utils/tableToolbar.d.ts +18 -0
  178. package/dist/utils/tableToolbar.js +11 -0
  179. package/dist/utils/tableToolbar.js.map +1 -0
  180. package/dist/utils/treeFilter.d.ts +20 -0
  181. package/dist/utils/treeFilter.js +24 -0
  182. package/dist/utils/treeFilter.js.map +1 -0
  183. package/dist/views/dashboard/ShortcutPicker.vue.js +1 -1
  184. package/dist/views/dashboard/ShortcutPicker2.vue.js +73 -48
  185. package/dist/views/dashboard/ShortcutPicker2.vue.js.map +1 -1
  186. package/dist/views/dashboard/biz.vue.js +1 -1
  187. package/dist/views/dashboard/biz2.vue.js +310 -257
  188. package/dist/views/dashboard/biz2.vue.js.map +1 -1
  189. package/dist/views/dashboard/workbench.vue.js +2 -2
  190. package/dist/views/dashboard/workbench2.vue.js +141 -155
  191. package/dist/views/dashboard/workbench2.vue.js.map +1 -1
  192. package/dist/views/embed/iframe.vue.js +2 -2
  193. package/dist/views/embed/iframe2.vue.js +22 -15
  194. package/dist/views/embed/iframe2.vue.js.map +1 -1
  195. package/dist/views/error/404.vue.js +2 -2
  196. package/dist/views/error/4042.vue.js +33 -24
  197. package/dist/views/error/4042.vue.js.map +1 -1
  198. package/dist/views/error/BootError.vue.js +1 -1
  199. package/dist/views/error/BootError2.vue.js +59 -48
  200. package/dist/views/error/BootError2.vue.js.map +1 -1
  201. package/dist/views/error/MissingRoute.vue.js +2 -2
  202. package/dist/views/error/MissingRoute2.vue.js +34 -15
  203. package/dist/views/error/MissingRoute2.vue.js.map +1 -1
  204. package/dist/views/login/LoginForm.vue.d.ts +7 -1
  205. package/dist/views/login/LoginForm.vue.js +2 -2
  206. package/dist/views/login/LoginForm2.vue.js +580 -488
  207. package/dist/views/login/LoginForm2.vue.js.map +1 -1
  208. package/dist/views/login/components/LoginDesk.vue.d.ts +36 -0
  209. package/dist/views/login/components/LoginDesk.vue.js +9 -0
  210. package/dist/views/login/components/LoginDesk.vue.js.map +1 -0
  211. package/dist/views/login/components/LoginDesk2.vue.js +100 -0
  212. package/dist/views/login/components/LoginDesk2.vue.js.map +1 -0
  213. package/dist/views/login/components/LoginHeroPanel.vue.d.ts +18 -0
  214. package/dist/views/login/components/LoginHeroPanel.vue.js +8 -0
  215. package/dist/views/login/components/LoginHeroPanel.vue.js.map +1 -0
  216. package/dist/views/login/components/LoginHeroPanel2.vue.js +61 -0
  217. package/dist/views/login/components/LoginHeroPanel2.vue.js.map +1 -0
  218. package/dist/views/login/index.vue.js +1 -1
  219. package/dist/views/login/index2.vue.js +141 -71
  220. package/dist/views/login/index2.vue.js.map +1 -1
  221. package/dist/views/login/layout.d.ts +11 -0
  222. package/dist/views/login/layout.js +27 -0
  223. package/dist/views/login/layout.js.map +1 -0
  224. package/dist/views/mfa/index.vue.js +2 -2
  225. package/dist/views/mfa/index2.vue.js +367 -321
  226. package/dist/views/mfa/index2.vue.js.map +1 -1
  227. package/dist/views/module/index.vue.js +2 -2
  228. package/dist/views/module/index2.vue.js +132 -99
  229. package/dist/views/module/index2.vue.js.map +1 -1
  230. package/dist/views/oauth/callback.vue.js +2 -2
  231. package/dist/views/oauth/callback2.vue.js +65 -51
  232. package/dist/views/oauth/callback2.vue.js.map +1 -1
  233. package/dist/views/personal/bindings.vue.js +2 -2
  234. package/dist/views/personal/bindings2.vue.js +98 -94
  235. package/dist/views/personal/bindings2.vue.js.map +1 -1
  236. package/dist/views/personal/notice2.vue.js +103 -76
  237. package/dist/views/personal/notice2.vue.js.map +1 -1
  238. package/dist/views/personal/password2.vue.js +47 -40
  239. package/dist/views/personal/password2.vue.js.map +1 -1
  240. package/dist/views/personal/profile.vue.js +3 -3
  241. package/dist/views/personal/profile2.vue.js +24 -18
  242. package/dist/views/personal/profile2.vue.js.map +1 -1
  243. package/dist/views/personal/security.vue.js +2 -2
  244. package/dist/views/personal/security2.vue.js +65 -53
  245. package/dist/views/personal/security2.vue.js.map +1 -1
  246. package/dist/views/personal/sessions.vue.js +2 -2
  247. package/dist/views/personal/sessions2.vue.js +67 -62
  248. package/dist/views/personal/sessions2.vue.js.map +1 -1
  249. package/dist/views/system/ai-model/components/ProviderCard.vue.js +2 -2
  250. package/dist/views/system/ai-model/components/ProviderCard2.vue.js +142 -130
  251. package/dist/views/system/ai-model/components/ProviderCard2.vue.js.map +1 -1
  252. package/dist/views/system/ai-model/components/ProviderForm.vue.js +2 -2
  253. package/dist/views/system/ai-model/components/ProviderForm2.vue.js +71 -70
  254. package/dist/views/system/ai-model/components/ProviderForm2.vue.js.map +1 -1
  255. package/dist/views/system/ai-model/index.vue.js +2 -2
  256. package/dist/views/system/ai-model/index2.vue.js +99 -99
  257. package/dist/views/system/ai-model/index2.vue.js.map +1 -1
  258. package/dist/views/system/ai-model/presets.d.ts +1 -1
  259. package/dist/views/system/ai-model/presets.js +18 -18
  260. package/dist/views/system/ai-model/presets.js.map +1 -1
  261. package/dist/views/system/ai-usage/index.vue.js +2 -2
  262. package/dist/views/system/ai-usage/index2.vue.js +356 -258
  263. package/dist/views/system/ai-usage/index2.vue.js.map +1 -1
  264. package/dist/views/system/api-docs/index.vue.js +5 -2
  265. package/dist/views/system/api-docs/index.vue.js.map +1 -1
  266. package/dist/views/system/api-docs/index2.vue.js +92 -42
  267. package/dist/views/system/api-docs/index2.vue.js.map +1 -1
  268. package/dist/views/system/cache/index.vue.js +2 -2
  269. package/dist/views/system/cache/index2.vue.js +74 -80
  270. package/dist/views/system/cache/index2.vue.js.map +1 -1
  271. package/dist/views/system/config/components/AdminMock.vue.js +8 -0
  272. package/dist/views/system/config/components/AdminMock.vue.js.map +1 -0
  273. package/dist/views/system/config/components/AdminMock2.vue.js +93 -0
  274. package/dist/views/system/config/components/AdminMock2.vue.js.map +1 -0
  275. package/dist/views/system/config/components/AdvancedSection.vue.js +8 -0
  276. package/dist/views/system/config/components/AdvancedSection.vue.js.map +1 -0
  277. package/dist/views/system/config/components/AdvancedSection2.vue.js +163 -0
  278. package/dist/views/system/config/components/AdvancedSection2.vue.js.map +1 -0
  279. package/dist/views/system/config/components/BrandSection.vue.d.ts +7 -0
  280. package/dist/views/system/config/components/BrandSection.vue.js +8 -0
  281. package/dist/views/system/config/components/BrandSection.vue.js.map +1 -0
  282. package/dist/views/system/config/components/BrandSection2.vue.js +266 -0
  283. package/dist/views/system/config/components/BrandSection2.vue.js.map +1 -0
  284. package/dist/views/system/config/components/CfgGroup.vue.d.ts +18 -0
  285. package/dist/views/system/config/components/CfgGroup.vue.js +8 -0
  286. package/dist/views/system/config/components/CfgGroup.vue.js.map +1 -0
  287. package/dist/views/system/config/components/CfgGroup2.vue.js +22 -0
  288. package/dist/views/system/config/components/CfgGroup2.vue.js.map +1 -0
  289. package/dist/views/system/config/components/CfgRow.vue.d.ts +26 -0
  290. package/dist/views/system/config/components/CfgRow.vue.js +9 -0
  291. package/dist/views/system/config/components/CfgRow.vue.js.map +1 -0
  292. package/dist/views/system/config/components/CfgRow2.vue.js +54 -0
  293. package/dist/views/system/config/components/CfgRow2.vue.js.map +1 -0
  294. package/dist/views/system/config/components/CfgSegment.vue.d.ts +28 -0
  295. package/dist/views/system/config/components/CfgSegment.vue.js +8 -0
  296. package/dist/views/system/config/components/CfgSegment.vue.js.map +1 -0
  297. package/dist/views/system/config/components/CfgSegment2.vue.js +45 -0
  298. package/dist/views/system/config/components/CfgSegment2.vue.js.map +1 -0
  299. package/dist/views/system/config/components/ConfigFormModal.vue.js +4 -1
  300. package/dist/views/system/config/components/ConfigFormModal.vue.js.map +1 -1
  301. package/dist/views/system/config/components/ConfigFormModal2.vue.js +72 -60
  302. package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -1
  303. package/dist/views/system/config/components/JobSection.vue.js +8 -0
  304. package/dist/views/system/config/components/JobSection.vue.js.map +1 -0
  305. package/dist/views/system/config/components/JobSection2.vue.js +140 -0
  306. package/dist/views/system/config/components/JobSection2.vue.js.map +1 -0
  307. package/dist/views/system/config/components/LoginMock.vue.d.ts +8 -0
  308. package/dist/views/system/config/components/LoginMock.vue.js +8 -0
  309. package/dist/views/system/config/components/LoginMock.vue.js.map +1 -0
  310. package/dist/views/system/config/components/LoginMock2.vue.js +132 -0
  311. package/dist/views/system/config/components/LoginMock2.vue.js.map +1 -0
  312. package/dist/views/system/config/components/LogoCropper.vue.d.ts +10 -0
  313. package/dist/views/system/config/components/LogoCropper.vue.js +8 -0
  314. package/dist/views/system/config/components/LogoCropper.vue.js.map +1 -0
  315. package/dist/views/system/config/components/LogoCropper2.vue.js +122 -0
  316. package/dist/views/system/config/components/LogoCropper2.vue.js.map +1 -0
  317. package/dist/views/system/config/components/LogoEditor.vue.js +8 -0
  318. package/dist/views/system/config/components/LogoEditor.vue.js.map +1 -0
  319. package/dist/views/system/config/components/LogoEditor2.vue.js +161 -0
  320. package/dist/views/system/config/components/LogoEditor2.vue.js.map +1 -0
  321. package/dist/views/system/config/components/ProviderSheet.vue.d.ts +17 -0
  322. package/dist/views/system/config/components/ProviderSheet.vue.js +8 -0
  323. package/dist/views/system/config/components/ProviderSheet.vue.js.map +1 -0
  324. package/dist/views/system/config/components/ProviderSheet2.vue.js +343 -0
  325. package/dist/views/system/config/components/ProviderSheet2.vue.js.map +1 -0
  326. package/dist/{layouts/SettingRow.vue.d.ts → views/system/config/components/ScaleToFit.vue.d.ts} +2 -1
  327. package/dist/views/system/config/components/ScaleToFit.vue.js +8 -0
  328. package/dist/views/system/config/components/ScaleToFit.vue.js.map +1 -0
  329. package/dist/views/system/config/components/ScaleToFit2.vue.js +41 -0
  330. package/dist/views/system/config/components/ScaleToFit2.vue.js.map +1 -0
  331. package/dist/views/system/config/components/SectionLayout.vue.d.ts +30 -0
  332. package/dist/views/system/config/components/SectionLayout.vue.js +8 -0
  333. package/dist/views/system/config/components/SectionLayout.vue.js.map +1 -0
  334. package/dist/views/system/config/components/SectionLayout2.vue.js +69 -0
  335. package/dist/views/system/config/components/SectionLayout2.vue.js.map +1 -0
  336. package/dist/views/system/config/components/SecuritySection.vue.js +8 -0
  337. package/dist/views/system/config/components/SecuritySection.vue.js.map +1 -0
  338. package/dist/views/system/config/components/SecuritySection2.vue.js +417 -0
  339. package/dist/views/system/config/components/SecuritySection2.vue.js.map +1 -0
  340. package/dist/views/system/config/components/SensitiveSection.vue.js +8 -0
  341. package/dist/views/system/config/components/SensitiveSection.vue.js.map +1 -0
  342. package/dist/views/system/config/components/SensitiveSection2.vue.js +214 -0
  343. package/dist/views/system/config/components/SensitiveSection2.vue.js.map +1 -0
  344. package/dist/views/system/config/components/SigninSection.vue.js +8 -0
  345. package/dist/views/system/config/components/SigninSection.vue.js.map +1 -0
  346. package/dist/views/system/config/components/SigninSection2.vue.js +201 -0
  347. package/dist/views/system/config/components/SigninSection2.vue.js.map +1 -0
  348. package/dist/views/system/config/components/UploadSection.vue.js +8 -0
  349. package/dist/views/system/config/components/UploadSection.vue.js.map +1 -0
  350. package/dist/views/system/config/components/UploadSection2.vue.js +176 -0
  351. package/dist/views/system/config/components/UploadSection2.vue.js.map +1 -0
  352. package/dist/views/system/config/components/WatermarkSection.vue.js +8 -0
  353. package/dist/views/system/config/components/WatermarkSection.vue.js.map +1 -0
  354. package/dist/views/system/config/components/WatermarkSection2.vue.js +284 -0
  355. package/dist/views/system/config/components/WatermarkSection2.vue.js.map +1 -0
  356. package/dist/views/system/config/draft.d.ts +148 -0
  357. package/dist/views/system/config/draft.js +170 -0
  358. package/dist/views/system/config/draft.js.map +1 -0
  359. package/dist/views/system/config/flash.d.ts +2 -0
  360. package/dist/views/system/config/flash.js +9 -0
  361. package/dist/views/system/config/flash.js.map +1 -0
  362. package/dist/views/system/config/groups.d.ts +38 -7
  363. package/dist/views/system/config/groups.js +104 -14
  364. package/dist/views/system/config/groups.js.map +1 -1
  365. package/dist/views/system/config/index.vue.js +6 -2
  366. package/dist/views/system/config/index.vue.js.map +1 -1
  367. package/dist/views/system/config/index2.vue.js +201 -111
  368. package/dist/views/system/config/index2.vue.js.map +1 -1
  369. package/dist/views/system/config/layoutMode.d.ts +23 -0
  370. package/dist/views/system/config/layoutMode.js +28 -0
  371. package/dist/views/system/config/layoutMode.js.map +1 -0
  372. package/dist/views/system/config/providerForm.d.ts +33 -0
  373. package/dist/views/system/config/providerForm.js +63 -0
  374. package/dist/views/system/config/providerForm.js.map +1 -0
  375. package/dist/views/system/dict/index.vue.js +2 -2
  376. package/dist/views/system/dict/index2.vue.js +471 -366
  377. package/dist/views/system/dict/index2.vue.js.map +1 -1
  378. package/dist/views/system/file/index2.vue.js +91 -76
  379. package/dist/views/system/file/index2.vue.js.map +1 -1
  380. package/dist/views/system/job/index.vue.js +3 -3
  381. package/dist/views/system/job/index2.vue.js +897 -828
  382. package/dist/views/system/job/index2.vue.js.map +1 -1
  383. package/dist/views/system/job-log/components/AttemptTable.vue.d.ts +8 -0
  384. package/dist/views/system/job-log/components/AttemptTable.vue.js +5 -0
  385. package/dist/views/system/job-log/components/AttemptTable.vue.js.map +1 -0
  386. package/dist/views/system/job-log/components/AttemptTable2.vue.js +54 -0
  387. package/dist/views/system/job-log/components/AttemptTable2.vue.js.map +1 -0
  388. package/dist/views/system/job-log/index.vue.js +2 -2
  389. package/dist/views/system/job-log/index2.vue.js +193 -207
  390. package/dist/views/system/job-log/index2.vue.js.map +1 -1
  391. package/dist/views/system/job-log/runStatus.d.ts +13 -0
  392. package/dist/views/system/job-log/runStatus.js +26 -0
  393. package/dist/views/system/job-log/runStatus.js.map +1 -0
  394. package/dist/views/system/job-monitor/index.vue.js +2 -2
  395. package/dist/views/system/job-monitor/index2.vue.js +172 -180
  396. package/dist/views/system/job-monitor/index2.vue.js.map +1 -1
  397. package/dist/views/system/log/exception/index.vue.js +2 -2
  398. package/dist/views/system/log/exception/index2.vue.js +135 -96
  399. package/dist/views/system/log/exception/index2.vue.js.map +1 -1
  400. package/dist/views/system/log/login/index2.vue.js +62 -41
  401. package/dist/views/system/log/login/index2.vue.js.map +1 -1
  402. package/dist/views/system/log/op/index.vue.js +2 -2
  403. package/dist/views/system/log/op/index2.vue.js +200 -162
  404. package/dist/views/system/log/op/index2.vue.js.map +1 -1
  405. package/dist/views/system/menu/components/ButtonManager.vue.js +2 -2
  406. package/dist/views/system/menu/components/ButtonManager2.vue.js +206 -190
  407. package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -1
  408. package/dist/views/system/menu/components/MenuFormModal.vue.js +2 -2
  409. package/dist/views/system/menu/components/MenuFormModal2.vue.js +127 -118
  410. package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -1
  411. package/dist/views/system/menu/index.vue.js +1 -1
  412. package/dist/views/system/menu/index2.vue.js +216 -183
  413. package/dist/views/system/menu/index2.vue.js.map +1 -1
  414. package/dist/views/system/module/index.vue.js +1 -1
  415. package/dist/views/system/module/index2.vue.js +177 -144
  416. package/dist/views/system/module/index2.vue.js.map +1 -1
  417. package/dist/views/system/monitor/index.vue.js +2 -2
  418. package/dist/views/system/monitor/index2.vue.js +134 -149
  419. package/dist/views/system/monitor/index2.vue.js.map +1 -1
  420. package/dist/views/system/notice/index.vue.js +1 -1
  421. package/dist/views/system/notice/index2.vue.js +209 -181
  422. package/dist/views/system/notice/index2.vue.js.map +1 -1
  423. package/dist/views/system/org/index.vue.js +1 -1
  424. package/dist/views/system/org/index2.vue.js +278 -248
  425. package/dist/views/system/org/index2.vue.js.map +1 -1
  426. package/dist/views/system/position/index.vue.js +5 -2
  427. package/dist/views/system/position/index.vue.js.map +1 -1
  428. package/dist/views/system/position/index2.vue.js +128 -92
  429. package/dist/views/system/position/index2.vue.js.map +1 -1
  430. package/dist/views/system/recycle/index.vue.js +2 -2
  431. package/dist/views/system/recycle/index2.vue.js +90 -67
  432. package/dist/views/system/recycle/index2.vue.js.map +1 -1
  433. package/dist/views/system/role/components/GrantMenuSheet.vue.d.ts +20 -0
  434. package/dist/views/system/role/components/GrantMenuSheet.vue.js +8 -0
  435. package/dist/views/system/role/components/GrantMenuSheet.vue.js.map +1 -0
  436. package/dist/views/system/role/components/GrantMenuSheet2.vue.js +117 -0
  437. package/dist/views/system/role/components/GrantMenuSheet2.vue.js.map +1 -0
  438. package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +6 -4
  439. package/dist/views/system/role/components/GrantMenuTable.vue.js +2 -2
  440. package/dist/views/system/role/components/GrantMenuTable2.vue.js +279 -177
  441. package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -1
  442. package/dist/views/system/role/components/MatchText.vue.d.ts +7 -0
  443. package/dist/views/system/role/components/MatchText.vue.js +8 -0
  444. package/dist/views/system/role/components/MatchText.vue.js.map +1 -0
  445. package/dist/views/system/role/components/MatchText2.vue.js +29 -0
  446. package/dist/views/system/role/components/MatchText2.vue.js.map +1 -0
  447. package/dist/views/system/role/components/grantMenuGroups.d.ts +36 -0
  448. package/dist/views/system/role/components/grantMenuGroups.js +110 -48
  449. package/dist/views/system/role/components/grantMenuGroups.js.map +1 -1
  450. package/dist/views/system/role/index.vue.js +5 -2
  451. package/dist/views/system/role/index.vue.js.map +1 -1
  452. package/dist/views/system/role/index2.vue.js +181 -165
  453. package/dist/views/system/role/index2.vue.js.map +1 -1
  454. package/dist/views/system/session/index2.vue.js +75 -49
  455. package/dist/views/system/session/index2.vue.js.map +1 -1
  456. package/dist/views/system/user/components/ResetPasswordModal.vue.js +2 -2
  457. package/dist/views/system/user/components/ResetPasswordModal2.vue.js +2 -0
  458. package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -1
  459. package/dist/views/system/user/components/UserFormModal.vue.js +2 -2
  460. package/dist/views/system/user/components/UserFormModal2.vue.js +77 -76
  461. package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -1
  462. package/dist/views/system/user/index.vue.js +2 -2
  463. package/dist/views/system/user/index2.vue.js +362 -275
  464. package/dist/views/system/user/index2.vue.js.map +1 -1
  465. package/package.json +6 -8
  466. package/dist/components/SelectTable/index.vue.d.ts +0 -76
  467. package/dist/components/SelectTable/index2.vue.js +0 -256
  468. package/dist/components/SelectTable/index2.vue.js.map +0 -1
  469. package/dist/composables/useTableRowSort.d.ts +0 -20
  470. package/dist/composables/useTableRowSort.js +0 -59
  471. package/dist/composables/useTableRowSort.js.map +0 -1
  472. package/dist/layouts/LayoutModeCards.vue.js +0 -8
  473. package/dist/layouts/LayoutModeCards.vue.js.map +0 -1
  474. package/dist/layouts/LayoutModeCards2.vue.js +0 -67
  475. package/dist/layouts/LayoutModeCards2.vue.js.map +0 -1
  476. package/dist/layouts/SettingRow.vue.js +0 -8
  477. package/dist/layouts/SettingRow.vue.js.map +0 -1
  478. package/dist/layouts/SettingRow2.vue.js +0 -23
  479. package/dist/layouts/SettingRow2.vue.js.map +0 -1
  480. package/dist/views/login/skins/AuroraGlass.vue.js +0 -8
  481. package/dist/views/login/skins/AuroraGlass.vue.js.map +0 -1
  482. package/dist/views/login/skins/AuroraGlass2.vue.js +0 -80
  483. package/dist/views/login/skins/AuroraGlass2.vue.js.map +0 -1
  484. package/dist/views/login/skins/SplitPanel.vue.js +0 -8
  485. package/dist/views/login/skins/SplitPanel.vue.js.map +0 -1
  486. package/dist/views/login/skins/SplitPanel2.vue.js +0 -85
  487. package/dist/views/login/skins/SplitPanel2.vue.js.map +0 -1
  488. package/dist/views/login/skins/Spotlight.vue.js +0 -8
  489. package/dist/views/login/skins/Spotlight.vue.js.map +0 -1
  490. package/dist/views/login/skins/Spotlight2.vue.js +0 -36
  491. package/dist/views/login/skins/Spotlight2.vue.js.map +0 -1
  492. package/dist/views/login/skins.d.ts +0 -8
  493. package/dist/views/login/skins.js +0 -13
  494. package/dist/views/login/skins.js.map +0 -1
  495. package/dist/views/system/config/components/ExternalAuthConfig.vue.js +0 -8
  496. package/dist/views/system/config/components/ExternalAuthConfig.vue.js.map +0 -1
  497. package/dist/views/system/config/components/ExternalAuthConfig2.vue.js +0 -218
  498. package/dist/views/system/config/components/ExternalAuthConfig2.vue.js.map +0 -1
  499. package/dist/views/system/config/components/GroupExtraConfig.vue.js +0 -8
  500. package/dist/views/system/config/components/GroupExtraConfig.vue.js.map +0 -1
  501. package/dist/views/system/config/components/GroupExtraConfig2.vue.js +0 -108
  502. package/dist/views/system/config/components/GroupExtraConfig2.vue.js.map +0 -1
  503. package/dist/views/system/config/components/HighSensConfig.vue.js +0 -5
  504. package/dist/views/system/config/components/HighSensConfig.vue.js.map +0 -1
  505. package/dist/views/system/config/components/HighSensConfig2.vue.js +0 -134
  506. package/dist/views/system/config/components/HighSensConfig2.vue.js.map +0 -1
  507. package/dist/views/system/config/components/JobConfig.vue.js +0 -5
  508. package/dist/views/system/config/components/JobConfig.vue.js.map +0 -1
  509. package/dist/views/system/config/components/JobConfig2.vue.js +0 -116
  510. package/dist/views/system/config/components/JobConfig2.vue.js.map +0 -1
  511. package/dist/views/system/config/components/OtherConfig.vue.js +0 -5
  512. package/dist/views/system/config/components/OtherConfig.vue.js.map +0 -1
  513. package/dist/views/system/config/components/OtherConfig2.vue.js +0 -121
  514. package/dist/views/system/config/components/OtherConfig2.vue.js.map +0 -1
  515. package/dist/views/system/config/components/SecurityConfig.vue.js +0 -8
  516. package/dist/views/system/config/components/SecurityConfig.vue.js.map +0 -1
  517. package/dist/views/system/config/components/SecurityConfig2.vue.js +0 -456
  518. package/dist/views/system/config/components/SecurityConfig2.vue.js.map +0 -1
  519. package/dist/views/system/config/components/SysBaseConfig.vue.js +0 -5
  520. package/dist/views/system/config/components/SysBaseConfig.vue.js.map +0 -1
  521. package/dist/views/system/config/components/SysBaseConfig2.vue.js +0 -107
  522. package/dist/views/system/config/components/SysBaseConfig2.vue.js.map +0 -1
  523. package/dist/views/system/config/components/UploadConfig.vue.d.ts +0 -3
  524. package/dist/views/system/config/components/UploadConfig.vue.js +0 -5
  525. package/dist/views/system/config/components/UploadConfig.vue.js.map +0 -1
  526. package/dist/views/system/config/components/UploadConfig2.vue.js +0 -135
  527. package/dist/views/system/config/components/UploadConfig2.vue.js.map +0 -1
  528. /package/dist/components/{SelectTable → TableTotal}/index.vue.js.map +0 -0
  529. /package/dist/layouts/{LayoutModeCards.vue.d.ts → AccentPicker.vue.d.ts} +0 -0
  530. /package/dist/views/{login/skins/AuroraGlass.vue.d.ts → system/config/components/AdminMock.vue.d.ts} +0 -0
  531. /package/dist/views/{login/skins/SplitPanel.vue.d.ts → system/config/components/AdvancedSection.vue.d.ts} +0 -0
  532. /package/dist/views/{login/skins/Spotlight.vue.d.ts → system/config/components/JobSection.vue.d.ts} +0 -0
  533. /package/dist/views/system/config/components/{ExternalAuthConfig.vue.d.ts → LogoEditor.vue.d.ts} +0 -0
  534. /package/dist/views/system/config/components/{HighSensConfig.vue.d.ts → SecuritySection.vue.d.ts} +0 -0
  535. /package/dist/views/system/config/components/{JobConfig.vue.d.ts → SensitiveSection.vue.d.ts} +0 -0
  536. /package/dist/views/system/config/components/{OtherConfig.vue.d.ts → SigninSection.vue.d.ts} +0 -0
  537. /package/dist/views/system/config/components/{SecurityConfig.vue.d.ts → UploadSection.vue.d.ts} +0 -0
  538. /package/dist/views/system/config/components/{SysBaseConfig.vue.d.ts → WatermarkSection.vue.d.ts} +0 -0
@@ -0,0 +1,148 @@
1
+ import { ExternalProviderAdmin } from '../../../api';
2
+ import { ConfigTab, LoginLocale } from './groups';
3
+ export declare const enabledKey: (code: string) => string;
4
+ export declare const linkKey: (code: string) => string;
5
+ export declare const hasLinkSwitch: (code: string) => boolean;
6
+ /** 与原值不同的键(按字符串比较;配置值一律以字符串落库)。 */
7
+ export declare function diffKeys(original: Record<string, string>, values: Record<string, string>): string[];
8
+ /** 保存前的校验结论:error 阻止保存并跳到对应分类,warnings 只提示。 */
9
+ export interface DraftCheck {
10
+ error?: {
11
+ tab: ConfigTab;
12
+ message: string;
13
+ locale?: LoginLocale;
14
+ };
15
+ warnings: {
16
+ locale: LoginLocale;
17
+ message: string;
18
+ }[];
19
+ }
20
+ /** 登录页 Hero 的规则:亮点最多 5 条(阻止);强调词不在主标题里(提示,照常保存)。 */
21
+ export declare function checkDraft(values: Record<string, string>): DraftCheck;
22
+ export declare function createConfigDraft(): {
23
+ original: Record<string, string>;
24
+ values: Record<string, string>;
25
+ providers: import('vue').Ref<{
26
+ enabled: boolean;
27
+ linkByAccount: boolean;
28
+ code: string;
29
+ displayName: string;
30
+ icon?: string | null | undefined;
31
+ }[], ExternalProviderAdmin[] | {
32
+ enabled: boolean;
33
+ linkByAccount: boolean;
34
+ code: string;
35
+ displayName: string;
36
+ icon?: string | null | undefined;
37
+ }[]>;
38
+ catalog: import('vue').Ref<{
39
+ dataProtectionEphemeral: boolean;
40
+ callbackBaseUrlMissing: boolean;
41
+ types: {
42
+ type: string;
43
+ defaultDisplayName: string;
44
+ defaultIcon: null | string;
45
+ allowMultiple: boolean;
46
+ fields: {
47
+ name: string;
48
+ secret: boolean;
49
+ required: boolean;
50
+ default: null | string;
51
+ definesEndpoint: boolean;
52
+ }[];
53
+ }[];
54
+ providers: {
55
+ code: string;
56
+ type: string;
57
+ displayName: string;
58
+ icon: null | string;
59
+ source: string;
60
+ installed: boolean;
61
+ configured: boolean;
62
+ values: {
63
+ [key: string]: string;
64
+ };
65
+ secrets: {
66
+ [key: string]: import('../../..').KernelComponents["schemas"]["ExternalAuthSecretState"];
67
+ };
68
+ callbackUri: string;
69
+ }[];
70
+ callbackUriTemplate: string;
71
+ }, {
72
+ dataProtectionEphemeral: boolean;
73
+ callbackBaseUrlMissing: boolean;
74
+ types: import('../../..').KernelComponents["schemas"]["ExternalAuthTypeView"][];
75
+ providers: import('../../..').KernelComponents["schemas"]["ExternalAuthProviderView"][];
76
+ callbackUriTemplate: string;
77
+ } | {
78
+ dataProtectionEphemeral: boolean;
79
+ callbackBaseUrlMissing: boolean;
80
+ types: {
81
+ type: string;
82
+ defaultDisplayName: string;
83
+ defaultIcon: null | string;
84
+ allowMultiple: boolean;
85
+ fields: {
86
+ name: string;
87
+ secret: boolean;
88
+ required: boolean;
89
+ default: null | string;
90
+ definesEndpoint: boolean;
91
+ }[];
92
+ }[];
93
+ providers: {
94
+ code: string;
95
+ type: string;
96
+ displayName: string;
97
+ icon: null | string;
98
+ source: string;
99
+ installed: boolean;
100
+ configured: boolean;
101
+ values: {
102
+ [key: string]: string;
103
+ };
104
+ secrets: {
105
+ [key: string]: import('../../..').KernelComponents["schemas"]["ExternalAuthSecretState"];
106
+ };
107
+ callbackUri: string;
108
+ }[];
109
+ callbackUriTemplate: string;
110
+ }>;
111
+ providerRows: import('vue').ComputedRef<import('../../../utils/oauthBrand').ConfigProviderRow[]>;
112
+ loading: import('vue').Ref<boolean, boolean>;
113
+ saving: import('vue').Ref<boolean, boolean>;
114
+ pendingLogo: import('vue').Ref<{
115
+ readonly size: number;
116
+ readonly type: string;
117
+ arrayBuffer: () => Promise<ArrayBuffer>;
118
+ bytes: () => Promise<Uint8Array<ArrayBuffer>>;
119
+ slice: (start?: number, end?: number, contentType?: string) => Blob;
120
+ stream: () => ReadableStream<Uint8Array<ArrayBuffer>>;
121
+ text: () => Promise<string>;
122
+ } | null, Blob | {
123
+ readonly size: number;
124
+ readonly type: string;
125
+ arrayBuffer: () => Promise<ArrayBuffer>;
126
+ bytes: () => Promise<Uint8Array<ArrayBuffer>>;
127
+ slice: (start?: number, end?: number, contentType?: string) => Blob;
128
+ stream: () => ReadableStream<Uint8Array<ArrayBuffer>>;
129
+ text: () => Promise<string>;
130
+ } | null>;
131
+ dirtyKeys: import('vue').ComputedRef<string[]>;
132
+ dirtyTabs: import('vue').ComputedRef<Set<"security" | "brand" | "watermark" | "advanced" | "job" | "sensitive" | "upload" | "signin">>;
133
+ claimedKeys: import('vue').ComputedRef<string[]>;
134
+ load: () => Promise<void>;
135
+ refreshProviders: () => Promise<void>;
136
+ discard: () => void;
137
+ save: () => Promise<void>;
138
+ setPendingLogo: (blob: Blob | null, previewUrl: string) => void;
139
+ };
140
+ export type ConfigDraft = ReturnType<typeof createConfigDraft>;
141
+ export declare function provideConfigDraft(draft: ConfigDraft): void;
142
+ export declare function useConfigDraft(): ConfigDraft;
143
+ /** 字符串 / 数值 / 开关三种双向绑定,模板里直接 v-model。 */
144
+ export declare function useDraftFields(): {
145
+ str: (key: string) => import('vue').WritableComputedRef<string, string>;
146
+ num: (key: string, fallback: number) => import('vue').WritableComputedRef<number, number>;
147
+ bool: (key: string) => import('vue').WritableComputedRef<boolean, boolean>;
148
+ };
@@ -0,0 +1,170 @@
1
+ import { reactive as L, ref as m, computed as v, provide as B, inject as F } from "vue";
2
+ import { configApi as O, externalAuthApi as p } from "../../../api/index.js";
3
+ import { loadSite as M } from "../../../composables/useSite.js";
4
+ import { splitLoginHeroFeatures as G } from "../../../lib/loginHero.js";
5
+ import { buildConfigProviderRows as I, LINK_BY_ACCOUNT_CODES as x } from "../../../utils/oauthBrand.js";
6
+ import { tabOfKey as Y, STATIC_CLAIMED_KEYS as S, LOGIN_LOCALES as V, LOGO_KEY as y, bumpConfigRevision as $, STRUCTURED_GROUPS as H, heroKeys as W } from "./groups.js";
7
+ const h = (e) => `sys.externalauth.${e}.enabled`, A = (e) => `sys.externalauth.${e}.linkByAccount`, k = (e) => x.includes(e);
8
+ function E(e, t) {
9
+ return Object.keys(t).filter((i) => t[i] !== e[i]);
10
+ }
11
+ function te(e) {
12
+ var i, r;
13
+ const t = [];
14
+ for (const l of V) {
15
+ const f = W(l);
16
+ if (G(e[f.features], Number.MAX_SAFE_INTEGER).length > 5)
17
+ return { error: { tab: "brand", locale: l, message: "config.login.tooManyFeatures" }, warnings: t };
18
+ const a = ((i = e[f.headline]) == null ? void 0 : i.trim()) ?? "", u = ((r = e[f.highlight]) == null ? void 0 : r.trim()) ?? "";
19
+ u && a && !a.includes(u) && t.push({ locale: l, message: "config.login.highlightMissing" });
20
+ }
21
+ return { warnings: t };
22
+ }
23
+ function oe() {
24
+ const e = L({}), t = L({}), i = m([]), r = m({
25
+ dataProtectionEphemeral: !1,
26
+ callbackBaseUrlMissing: !1,
27
+ callbackUriTemplate: "",
28
+ types: [],
29
+ providers: []
30
+ }), l = m(!0), f = m(!1), a = m(null), u = v(() => I(r.value, i.value)), b = v(() => E(e, t)), j = v(() => new Set(b.value.map(Y))), _ = v(() => [
31
+ ...S,
32
+ ...u.value.flatMap(
33
+ (o) => k(o.code) ? [h(o.code), A(o.code)] : [h(o.code)]
34
+ )
35
+ ]);
36
+ function D(o) {
37
+ for (const n of Object.keys(e)) delete e[n];
38
+ for (const n of Object.keys(t)) delete t[n];
39
+ Object.assign(e, o), Object.assign(t, o);
40
+ }
41
+ async function R() {
42
+ l.value = !0;
43
+ try {
44
+ const [o, n, g] = await Promise.all([
45
+ Promise.all(H.map((d) => O.listByGroup(d))),
46
+ p.providersAll(),
47
+ p.catalog()
48
+ ]);
49
+ i.value = n, r.value = g;
50
+ const c = new Set(S), s = {};
51
+ for (const d of S) s[d] = "";
52
+ for (const d of o.flat())
53
+ c.has(d.configKey) && (s[d.configKey] = d.configValue ?? "");
54
+ Object.assign(s, C()), D(s);
55
+ } finally {
56
+ l.value = !1;
57
+ }
58
+ }
59
+ function C() {
60
+ const o = {};
61
+ for (const n of u.value.filter((g) => g.registered))
62
+ o[h(n.code)] = String(n.enabled), k(n.code) && (o[A(n.code)] = String(n.linkByAccount));
63
+ return o;
64
+ }
65
+ async function N() {
66
+ const [o, n] = await Promise.all([
67
+ p.providersAll(),
68
+ p.catalog()
69
+ ]);
70
+ i.value = o, r.value = n;
71
+ const g = C();
72
+ for (const [c, s] of Object.entries(g))
73
+ c in e || (e[c] = s, t[c] = s);
74
+ for (const c of u.value.filter((s) => !s.registered))
75
+ for (const s of [h(c.code), A(c.code)])
76
+ delete e[s], delete t[s];
77
+ }
78
+ function P(o, n) {
79
+ w(), a.value = o, t[y] = n;
80
+ }
81
+ function w() {
82
+ var o;
83
+ (o = t[y]) != null && o.startsWith("blob:") && URL.revokeObjectURL(t[y]);
84
+ }
85
+ function T() {
86
+ w(), a.value = null, Object.assign(t, e);
87
+ }
88
+ async function U() {
89
+ f.value = !0;
90
+ try {
91
+ if (a.value) {
92
+ const n = new File([a.value], "logo.png", { type: "image/png" }), g = await O.uploadLogo(n);
93
+ w(), t[y] = g.viewUrl ?? "", a.value = null;
94
+ }
95
+ for (const n of b.value) t[n] = t[n].trim();
96
+ const o = E(e, t).map((n) => ({
97
+ configKey: n,
98
+ configValue: t[n]
99
+ }));
100
+ o.length && await O.saveBatch(o), Object.assign(e, t), $(), await M(!0);
101
+ } finally {
102
+ f.value = !1;
103
+ }
104
+ }
105
+ return {
106
+ original: e,
107
+ values: t,
108
+ providers: i,
109
+ catalog: r,
110
+ providerRows: u,
111
+ loading: l,
112
+ saving: f,
113
+ pendingLogo: a,
114
+ dirtyKeys: b,
115
+ dirtyTabs: j,
116
+ claimedKeys: _,
117
+ load: R,
118
+ refreshProviders: N,
119
+ discard: T,
120
+ save: U,
121
+ setPendingLogo: P
122
+ };
123
+ }
124
+ const K = Symbol("config-draft");
125
+ function ne(e) {
126
+ B(K, e);
127
+ }
128
+ function X() {
129
+ const e = F(K);
130
+ if (!e) throw new Error("useConfigDraft() 只能在配置中心页面内使用");
131
+ return e;
132
+ }
133
+ function ie() {
134
+ const { values: e } = X();
135
+ return {
136
+ str: (t) => v({
137
+ get: () => e[t] ?? "",
138
+ set: (i) => {
139
+ e[t] = i ?? "";
140
+ }
141
+ }),
142
+ num: (t, i) => v({
143
+ get: () => {
144
+ const r = Number(e[t]);
145
+ return e[t] === "" || e[t] === void 0 || Number.isNaN(r) ? i : r;
146
+ },
147
+ set: (r) => {
148
+ e[t] = String(r ?? i);
149
+ }
150
+ }),
151
+ bool: (t) => v({
152
+ get: () => e[t] === "true",
153
+ set: (i) => {
154
+ e[t] = i ? "true" : "false";
155
+ }
156
+ })
157
+ };
158
+ }
159
+ export {
160
+ te as checkDraft,
161
+ oe as createConfigDraft,
162
+ E as diffKeys,
163
+ h as enabledKey,
164
+ k as hasLinkSwitch,
165
+ A as linkKey,
166
+ ne as provideConfigDraft,
167
+ X as useConfigDraft,
168
+ ie as useDraftFields
169
+ };
170
+ //# sourceMappingURL=draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft.js","sources":["../../../../src/views/system/config/draft.ts"],"sourcesContent":["// 配置中心的页面级草稿:进页面一次载入所有结构化表单的值,各分类只读写这份草稿,\n// 底部保存条统一保存。切换顶部导航不会丢改动;离开页面草稿随组件销毁。\nimport { computed, inject, provide, reactive, ref, type InjectionKey } from 'vue'\nimport {\n configApi,\n externalAuthApi,\n type ExternalAuthCatalog,\n type ExternalProviderAdmin,\n} from '#/api'\nimport { loadSite } from '#/composables/useSite'\nimport { splitLoginHeroFeatures } from '#/lib/loginHero'\nimport { buildConfigProviderRows, LINK_BY_ACCOUNT_CODES } from '#/utils/oauthBrand'\nimport {\n bumpConfigRevision,\n heroKeys,\n LOGIN_LOCALES,\n LOGO_KEY,\n STATIC_CLAIMED_KEYS,\n STRUCTURED_GROUPS,\n tabOfKey,\n type ConfigTab,\n type LoginLocale,\n} from './groups'\n\nexport const enabledKey = (code: string) => `sys.externalauth.${code}.enabled`\nexport const linkKey = (code: string) => `sys.externalauth.${code}.linkByAccount`\nexport const hasLinkSwitch = (code: string) => LINK_BY_ACCOUNT_CODES.includes(code)\n\n/** 与原值不同的键(按字符串比较;配置值一律以字符串落库)。 */\nexport function diffKeys(original: Record<string, string>, values: Record<string, string>) {\n return Object.keys(values).filter(key => values[key] !== original[key])\n}\n\n/** 保存前的校验结论:error 阻止保存并跳到对应分类,warnings 只提示。 */\nexport interface DraftCheck {\n error?: { tab: ConfigTab; message: string; locale?: LoginLocale }\n warnings: { locale: LoginLocale; message: string }[]\n}\n\n/** 登录页 Hero 的规则:亮点最多 5 条(阻止);强调词不在主标题里(提示,照常保存)。 */\nexport function checkDraft(values: Record<string, string>): DraftCheck {\n const warnings: DraftCheck['warnings'] = []\n for (const locale of LOGIN_LOCALES) {\n const keys = heroKeys(locale)\n if (splitLoginHeroFeatures(values[keys.features], Number.MAX_SAFE_INTEGER).length > 5)\n return { error: { tab: 'brand', locale, message: 'config.login.tooManyFeatures' }, warnings }\n const headline = values[keys.headline]?.trim() ?? ''\n const highlight = values[keys.highlight]?.trim() ?? ''\n if (highlight && headline && !headline.includes(highlight))\n warnings.push({ locale, message: 'config.login.highlightMissing' })\n }\n return { warnings }\n}\n\nexport function createConfigDraft() {\n const original = reactive<Record<string, string>>({})\n const values = reactive<Record<string, string>>({})\n const providers = ref<ExternalProviderAdmin[]>([])\n const catalog = ref<ExternalAuthCatalog>({\n dataProtectionEphemeral: false,\n callbackBaseUrlMissing: false,\n callbackUriTemplate: '',\n types: [],\n providers: [],\n })\n const loading = ref(true)\n const saving = ref(false)\n /** 裁剪好、还没上传的 Logo;预览期间 values[LOGO_KEY] 是它的 blob: 地址,保存时才上传 */\n const pendingLogo = ref<Blob | null>(null)\n\n const providerRows = computed(() => buildConfigProviderRows(catalog.value, providers.value))\n const dirtyKeys = computed(() => diffKeys(original, values))\n const dirtyTabs = computed(() => new Set(dirtyKeys.value.map(tabOfKey)))\n /** 结构化表单认领的全部键:「高级」页排除它们。未注册的第三方登录方式也算,它们的开关在卡片上。 */\n const claimedKeys = computed(() => [\n ...STATIC_CLAIMED_KEYS,\n ...providerRows.value.flatMap(p =>\n hasLinkSwitch(p.code) ? [enabledKey(p.code), linkKey(p.code)] : [enabledKey(p.code)],\n ),\n ])\n\n function reset(next: Record<string, string>) {\n for (const key of Object.keys(original)) delete original[key]\n for (const key of Object.keys(values)) delete values[key]\n Object.assign(original, next)\n Object.assign(values, next)\n }\n\n async function load() {\n loading.value = true\n try {\n const [groups, list, cat] = await Promise.all([\n Promise.all(STRUCTURED_GROUPS.map(g => configApi.listByGroup(g))),\n externalAuthApi.providersAll(),\n externalAuthApi.catalog(),\n ])\n providers.value = list\n catalog.value = cat\n const claimed = new Set(STATIC_CLAIMED_KEYS)\n const next: Record<string, string> = {}\n // 库里没有的键按空串起步:表单显示默认值,不动它就不算改动,也不会被写回\n for (const key of STATIC_CLAIMED_KEYS) next[key] = ''\n for (const row of groups.flat())\n if (claimed.has(row.configKey)) next[row.configKey] = row.configValue ?? ''\n // 第三方登录只收已配置的方式:没配好的开关不可打开,永远不写\n Object.assign(next, providerSwitchValues())\n reset(next)\n } finally {\n loading.value = false\n }\n }\n\n /** 已配置的第三方各自的开关值(enabled / linkByAccount)。 */\n function providerSwitchValues() {\n const out: Record<string, string> = {}\n for (const p of providerRows.value.filter(row => row.registered)) {\n out[enabledKey(p.code)] = String(p.enabled)\n if (hasLinkSwitch(p.code)) out[linkKey(p.code)] = String(p.linkByAccount)\n }\n return out\n }\n\n /**\n * 设置面板保存或清除之后重读第三方目录。已在草稿里的开关不动(可能有未保存的改动),\n * 新配好的补进来,被清掉的移出——没有配置的方式,开关没有意义。\n */\n async function refreshProviders() {\n const [list, cat] = await Promise.all([\n externalAuthApi.providersAll(),\n externalAuthApi.catalog(),\n ])\n providers.value = list\n catalog.value = cat\n const fresh = providerSwitchValues()\n for (const [key, value] of Object.entries(fresh)) {\n if (key in original) continue\n original[key] = value\n values[key] = value\n }\n for (const row of providerRows.value.filter(r => !r.registered)) {\n for (const key of [enabledKey(row.code), linkKey(row.code)]) {\n delete original[key]\n delete values[key]\n }\n }\n }\n\n function setPendingLogo(blob: Blob | null, previewUrl: string) {\n revokePreview()\n pendingLogo.value = blob\n values[LOGO_KEY] = previewUrl\n }\n\n function revokePreview() {\n if (values[LOGO_KEY]?.startsWith('blob:')) URL.revokeObjectURL(values[LOGO_KEY])\n }\n\n function discard() {\n revokePreview()\n pendingLogo.value = null\n Object.assign(values, original)\n }\n\n /** 保存全部改动;有待传的 Logo 先上传换成签名直链,再一次批量写库。 */\n async function save() {\n saving.value = true\n try {\n if (pendingLogo.value) {\n const file = new File([pendingLogo.value], 'logo.png', { type: 'image/png' })\n const uploaded = await configApi.uploadLogo(file)\n revokePreview()\n values[LOGO_KEY] = uploaded.viewUrl ?? ''\n // 传完就清掉:后面批量保存失败时重试不会再传一遍\n pendingLogo.value = null\n }\n for (const key of dirtyKeys.value) values[key] = values[key].trim()\n const items = diffKeys(original, values).map(configKey => ({\n configKey,\n configValue: values[configKey],\n }))\n if (items.length) await configApi.saveBatch(items)\n Object.assign(original, values)\n bumpConfigRevision()\n // 即时生效:侧栏、顶栏、登录页、浏览器标签页的品牌随之刷新\n await loadSite(true)\n } finally {\n saving.value = false\n }\n }\n\n return {\n original,\n values,\n providers,\n catalog,\n providerRows,\n loading,\n saving,\n pendingLogo,\n dirtyKeys,\n dirtyTabs,\n claimedKeys,\n load,\n refreshProviders,\n discard,\n save,\n setPendingLogo,\n }\n}\n\nexport type ConfigDraft = ReturnType<typeof createConfigDraft>\n\nconst DRAFT_KEY: InjectionKey<ConfigDraft> = Symbol('config-draft')\n\nexport function provideConfigDraft(draft: ConfigDraft) {\n provide(DRAFT_KEY, draft)\n}\n\nexport function useConfigDraft(): ConfigDraft {\n const draft = inject(DRAFT_KEY)\n if (!draft) throw new Error('useConfigDraft() 只能在配置中心页面内使用')\n return draft\n}\n\n/** 字符串 / 数值 / 开关三种双向绑定,模板里直接 v-model。 */\nexport function useDraftFields() {\n const { values } = useConfigDraft()\n return {\n str: (key: string) =>\n computed({\n get: () => values[key] ?? '',\n set: v => {\n values[key] = v ?? ''\n },\n }),\n num: (key: string, fallback: number) =>\n computed<number>({\n get: () => {\n const n = Number(values[key])\n return values[key] === '' || values[key] === undefined || Number.isNaN(n) ? fallback : n\n },\n set: v => {\n values[key] = String(v ?? fallback)\n },\n }),\n bool: (key: string) =>\n computed<boolean>({\n get: () => values[key] === 'true',\n set: v => {\n values[key] = v ? 'true' : 'false'\n },\n }),\n }\n}\n"],"names":["enabledKey","code","linkKey","hasLinkSwitch","LINK_BY_ACCOUNT_CODES","diffKeys","original","values","key","checkDraft","warnings","locale","LOGIN_LOCALES","keys","heroKeys","splitLoginHeroFeatures","headline","_a","highlight","_b","createConfigDraft","reactive","providers","ref","catalog","loading","saving","pendingLogo","providerRows","computed","buildConfigProviderRows","dirtyKeys","dirtyTabs","tabOfKey","claimedKeys","STATIC_CLAIMED_KEYS","p","reset","next","load","groups","list","cat","STRUCTURED_GROUPS","configApi","g","externalAuthApi","claimed","row","providerSwitchValues","out","refreshProviders","fresh","value","r","setPendingLogo","blob","previewUrl","revokePreview","LOGO_KEY","discard","save","file","uploaded","items","configKey","bumpConfigRevision","loadSite","DRAFT_KEY","provideConfigDraft","draft","provide","useConfigDraft","inject","useDraftFields","v","fallback","n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Directive } from 'vue';
2
+ export declare const vFlash: Directive<HTMLElement, unknown>;
@@ -0,0 +1,9 @@
1
+ const t = {
2
+ updated(s, a) {
3
+ a.value !== a.oldValue && (s.classList.remove("cfg-flash"), s.offsetWidth, s.classList.add("cfg-flash"));
4
+ }
5
+ };
6
+ export {
7
+ t as vFlash
8
+ };
9
+ //# sourceMappingURL=flash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flash.js","sources":["../../../../src/views/system/config/flash.ts"],"sourcesContent":["// v-flash=\"值\":值一变,元素闪一下橙框(样式 .cfg-flash 在 SectionLayout 的预览区里)。\n// 用在预览里受某项设置影响的部分上,让用户看到\"刚才改的东西落在这里\"。\nimport type { Directive } from 'vue'\n\nexport const vFlash: Directive<HTMLElement, unknown> = {\n updated(el, binding) {\n if (binding.value === binding.oldValue) return\n el.classList.remove('cfg-flash')\n void el.offsetWidth // 重新触发动画\n el.classList.add('cfg-flash')\n },\n}\n"],"names":["vFlash","el","binding"],"mappings":"AAIO,MAAMA,IAA0C;AAAA,EACrD,QAAQC,GAAIC,GAAS;AACnB,IAAIA,EAAQ,UAAUA,EAAQ,aAC9BD,EAAG,UAAU,OAAO,WAAW,GAC1BA,EAAG,aACRA,EAAG,UAAU,IAAI,WAAW;AAAA,EAC9B;AACF;"}
@@ -1,9 +1,40 @@
1
- /** 结构化分组 → 管它的 Tab(值是 config.tab.* 的 i18n 子键)。 */
2
- export declare const STRUCTURED_GROUP_TABS: Readonly<Record<string, string>>;
3
- export declare const STRUCTURED_GROUPS: string[];
4
- /**
5
- * 配置行增删改的版本号。各 Tab 以 show:lazy 常驻,切回来不会重新挂载;
6
- * 行被改动后 bump 一次,「本组其它配置」据此重拉,不用刷新整页。
7
- */
1
+ import { WATERMARK_KEYS } from '../../../lib/watermark';
2
+ export declare const CONFIG_TABS: readonly ["brand", "signin", "security", "watermark", "sensitive", "upload", "job", "advanced"];
3
+ export type ConfigTab = (typeof CONFIG_TABS)[number];
4
+ /** 顶部导航分组:站点与安全 | 系统,组间留空。 */
5
+ export declare const TAB_GROUPS: readonly (readonly ConfigTab[])[];
6
+ /** 导航图标 */
7
+ export declare const TAB_ICONS: Record<ConfigTab, string>;
8
+ export declare const LOGO_KEY = "sys.site.logo";
9
+ export declare const BRAND_KEYS: readonly ["sys.site.title", "sys.site.logo", "sys.site.copyright", "sys.site.copyrightUrl"];
10
+ /** 水印的 10 个键(`sys.watermark.*`),在「水印设置」页编辑 */
11
+ export { WATERMARK_KEYS };
12
+ export declare const LOGIN_LOCALES: readonly ["zh-CN", "en-US"];
13
+ export type LoginLocale = (typeof LOGIN_LOCALES)[number];
14
+ export declare const heroKeys: (locale: LoginLocale) => {
15
+ headline: string;
16
+ highlight: string;
17
+ features: string;
18
+ };
19
+ export declare const SUBTITLE_KEY = "sys.site.subtitle";
20
+ export declare const SHOW_FEATURES_KEY = "sys.login.hero.showFeatures";
21
+ export declare const LOGIN_KEYS: string[];
22
+ export declare const SECURITY_NUMBERS: Readonly<Record<string, number>>;
23
+ /** 短信验证码登录是一种登录方式,在「登录方式」页,不在安全策略 */
24
+ export declare const SMS_LOGIN_KEY = "sys.security.smsLogin.enabled";
25
+ export declare const SECURITY_SWITCHES: readonly ["sys.security.password.requireUpper", "sys.security.password.requireLower", "sys.security.password.requireDigit", "sys.security.password.requireSpecial", "sys.security.password.forceChangeOnFirstLogin", "sys.security.captcha.enabled", "sys.security.totp.enabled", "sys.security.totp.requireForSuperAdmin", "sys.security.mfa.enabled", "sys.security.rateLimit.enabled"];
26
+ export declare const CAPTCHA_TYPE_KEY = "sys.security.captcha.type";
27
+ export declare const SECURITY_KEYS: string[];
28
+ export declare const UPLOAD_MAX_KEY = "sys.upload.maxSizeMb";
29
+ export declare const UPLOAD_EXTS_KEY = "sys.upload.allowedExtensions";
30
+ export declare const JOB_RETENTION_KEY = "sys.job.logRetentionDays";
31
+ export declare const JOB_ALERT_KEY = "sys.job.alertEmails";
32
+ /** 固定认领的键(第三方登录的键按已注册的方式动态认领,见 draft.ts)。 */
33
+ export declare const STATIC_CLAIMED_KEYS: readonly string[];
34
+ /** 结构化表单从这些分组取值。 */
35
+ export declare const STRUCTURED_GROUPS: readonly ["sys", "login", "security", "upload", "job"];
36
+ /** 键 → 所属分类,用于导航上的"有未保存改动"标记。 */
37
+ export declare function tabOfKey(key: string): ConfigTab;
38
+ /** 配置行增删改的版本号:保存或在「高级」页改了行之后 bump,「高级」表据此重拉。 */
8
39
  export declare const configRevision: import('vue').Ref<number, number>;
9
40
  export declare function bumpConfigRevision(): void;
@@ -1,18 +1,108 @@
1
- import { ref as o } from "vue";
2
- const e = {
3
- sys: "base",
4
- security: "security",
5
- externalauth: "externalAuth",
6
- upload: "upload",
7
- job: "job"
8
- }, s = Object.keys(e), t = o(0);
9
- function i() {
10
- t.value++;
1
+ import { ref as e } from "vue";
2
+ import { WATERMARK_KEYS as i } from "../../../lib/watermark.js";
3
+ const L = [
4
+ "brand",
5
+ "signin",
6
+ "security",
7
+ "watermark",
8
+ "sensitive",
9
+ "upload",
10
+ "job",
11
+ "advanced"
12
+ ], T = [
13
+ ["brand", "signin", "security", "watermark", "sensitive"],
14
+ ["upload", "job", "advanced"]
15
+ ], f = {
16
+ brand: "ph:browser",
17
+ signin: "ph:sign-in",
18
+ security: "ph:shield-check",
19
+ watermark: "ph:drop",
20
+ sensitive: "ph:lock-key",
21
+ upload: "ph:cloud-arrow-up",
22
+ job: "ph:clock",
23
+ advanced: "ph:sliders-horizontal"
24
+ }, r = "sys.site.logo", o = [
25
+ "sys.site.title",
26
+ r,
27
+ "sys.site.copyright",
28
+ "sys.site.copyrightUrl"
29
+ ], n = ["zh-CN", "en-US"], a = (s) => ({
30
+ headline: `sys.login.hero.headline.${s}`,
31
+ highlight: `sys.login.hero.highlight.${s}`,
32
+ features: `sys.login.hero.features.${s}`
33
+ }), c = "sys.site.subtitle", y = "sys.login.hero.showFeatures", u = [
34
+ c,
35
+ y,
36
+ ...n.flatMap((s) => Object.values(a(s)))
37
+ ], d = {
38
+ "sys.security.loginLock.maxFailCount": 0,
39
+ "sys.security.loginLock.lockMinutes": 1,
40
+ "sys.security.password.minLength": 1,
41
+ "sys.security.password.expireDays": 0,
42
+ "sys.security.password.historyCount": 0,
43
+ "sys.security.session.accessMinutes": 1,
44
+ "sys.security.session.refreshMinutes": 1,
45
+ "sys.security.rateLimit.windowSeconds": 1,
46
+ "sys.security.rateLimit.permitPerWindow": 0,
47
+ "sys.security.rateLimit.authPermitPerWindow": 0
48
+ }, t = "sys.security.smsLogin.enabled", p = [
49
+ "sys.security.password.requireUpper",
50
+ "sys.security.password.requireLower",
51
+ "sys.security.password.requireDigit",
52
+ "sys.security.password.requireSpecial",
53
+ "sys.security.password.forceChangeOnFirstLogin",
54
+ "sys.security.captcha.enabled",
55
+ "sys.security.totp.enabled",
56
+ "sys.security.totp.requireForSuperAdmin",
57
+ "sys.security.mfa.enabled",
58
+ "sys.security.rateLimit.enabled"
59
+ ], h = "sys.security.captcha.type", l = [
60
+ ...Object.keys(d),
61
+ ...p,
62
+ h,
63
+ t
64
+ ], E = "sys.upload.maxSizeMb", S = "sys.upload.allowedExtensions", _ = "sys.job.logRetentionDays", g = "sys.job.alertEmails", O = [
65
+ ...o,
66
+ ...u,
67
+ ...i,
68
+ ...l,
69
+ E,
70
+ S,
71
+ _,
72
+ g
73
+ ], Y = ["sys", "login", "security", "upload", "job"];
74
+ function A(s) {
75
+ return s.startsWith("sys.site.") || s.startsWith("sys.login.") ? "brand" : s.startsWith("sys.watermark.") ? "watermark" : s === t || s.startsWith("sys.externalauth.") ? "signin" : s.startsWith("sys.security.") ? "security" : s.startsWith("sys.upload.") ? "upload" : s.startsWith("sys.job.") ? "job" : "advanced";
76
+ }
77
+ const b = e(0);
78
+ function C() {
79
+ b.value++;
11
80
  }
12
81
  export {
13
- s as STRUCTURED_GROUPS,
14
- e as STRUCTURED_GROUP_TABS,
15
- i as bumpConfigRevision,
16
- t as configRevision
82
+ o as BRAND_KEYS,
83
+ h as CAPTCHA_TYPE_KEY,
84
+ L as CONFIG_TABS,
85
+ g as JOB_ALERT_KEY,
86
+ _ as JOB_RETENTION_KEY,
87
+ u as LOGIN_KEYS,
88
+ n as LOGIN_LOCALES,
89
+ r as LOGO_KEY,
90
+ l as SECURITY_KEYS,
91
+ d as SECURITY_NUMBERS,
92
+ p as SECURITY_SWITCHES,
93
+ y as SHOW_FEATURES_KEY,
94
+ t as SMS_LOGIN_KEY,
95
+ O as STATIC_CLAIMED_KEYS,
96
+ Y as STRUCTURED_GROUPS,
97
+ c as SUBTITLE_KEY,
98
+ T as TAB_GROUPS,
99
+ f as TAB_ICONS,
100
+ S as UPLOAD_EXTS_KEY,
101
+ E as UPLOAD_MAX_KEY,
102
+ i as WATERMARK_KEYS,
103
+ C as bumpConfigRevision,
104
+ b as configRevision,
105
+ a as heroKeys,
106
+ A as tabOfKey
17
107
  };
18
108
  //# sourceMappingURL=groups.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"groups.js","sources":["../../../../src/views/system/config/groups.ts"],"sourcesContent":["// 分类配置中心的分组归属:某分组由某结构化 Tab 管理,该组的行都显示在那个 Tab 里\n// (Tab 认领的键渲染成字段,其余在「本组其它配置」);「其他配置」只列不归任何结构化 Tab 的分组。\nimport { ref } from 'vue'\n\n/** 结构化分组 → 管它的 Tab(值是 config.tab.* 的 i18n 子键)。 */\nexport const STRUCTURED_GROUP_TABS: Readonly<Record<string, string>> = {\n sys: 'base',\n security: 'security',\n externalauth: 'externalAuth',\n upload: 'upload',\n job: 'job',\n}\n\nexport const STRUCTURED_GROUPS = Object.keys(STRUCTURED_GROUP_TABS)\n\n/**\n * 配置行增删改的版本号。各 Tab 以 show:lazy 常驻,切回来不会重新挂载;\n * 行被改动后 bump 一次,「本组其它配置」据此重拉,不用刷新整页。\n */\nexport const configRevision = ref(0)\n\nexport function bumpConfigRevision() {\n configRevision.value++\n}\n"],"names":["STRUCTURED_GROUP_TABS","STRUCTURED_GROUPS","configRevision","ref","bumpConfigRevision"],"mappings":";AAKO,MAAMA,IAA0D;AAAA,EACrE,KAAK;AAAA,EACL,UAAU;AAAA,EACV,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,KAAK;AACP,GAEaC,IAAoB,OAAO,KAAKD,CAAqB,GAMrDE,IAAiBC,EAAI,CAAC;AAE5B,SAASC,IAAqB;AACnC,EAAAF,EAAe;AACjB;"}
1
+ {"version":3,"file":"groups.js","sources":["../../../../src/views/system/config/groups.ts"],"sourcesContent":["// 配置中心的分类与键归属。顶部导航每一项是一个分类,分类名就是它管的那一类东西;\n// 结构化表单认领的键由这里集中声明,\n// 草稿只装这些键,「高级」页据此排除它们(同一个键不会在两处都能改)。\nimport { ref } from 'vue'\nimport { WATERMARK_KEYS } from '#/lib/watermark'\n\nexport const CONFIG_TABS = [\n 'brand',\n 'signin',\n 'security',\n 'watermark',\n 'sensitive',\n 'upload',\n 'job',\n 'advanced',\n] as const\nexport type ConfigTab = (typeof CONFIG_TABS)[number]\n\n/** 顶部导航分组:站点与安全 | 系统,组间留空。 */\nexport const TAB_GROUPS: readonly (readonly ConfigTab[])[] = [\n ['brand', 'signin', 'security', 'watermark', 'sensitive'],\n ['upload', 'job', 'advanced'],\n]\n\n/** 导航图标 */\nexport const TAB_ICONS: Record<ConfigTab, string> = {\n brand: 'ph:browser',\n signin: 'ph:sign-in',\n security: 'ph:shield-check',\n watermark: 'ph:drop',\n sensitive: 'ph:lock-key',\n upload: 'ph:cloud-arrow-up',\n job: 'ph:clock',\n advanced: 'ph:sliders-horizontal',\n}\n\nexport const LOGO_KEY = 'sys.site.logo'\nexport const BRAND_KEYS = [\n 'sys.site.title',\n LOGO_KEY,\n 'sys.site.copyright',\n 'sys.site.copyrightUrl',\n] as const\n\n/** 水印的 10 个键(`sys.watermark.*`),在「水印设置」页编辑 */\nexport { WATERMARK_KEYS }\n\nexport const LOGIN_LOCALES = ['zh-CN', 'en-US'] as const\nexport type LoginLocale = (typeof LOGIN_LOCALES)[number]\nexport const heroKeys = (locale: LoginLocale) => ({\n headline: `sys.login.hero.headline.${locale}`,\n highlight: `sys.login.hero.highlight.${locale}`,\n features: `sys.login.hero.features.${locale}`,\n})\nexport const SUBTITLE_KEY = 'sys.site.subtitle'\nexport const SHOW_FEATURES_KEY = 'sys.login.hero.showFeatures'\nexport const LOGIN_KEYS = [\n SUBTITLE_KEY,\n SHOW_FEATURES_KEY,\n ...LOGIN_LOCALES.flatMap(l => Object.values(heroKeys(l))),\n]\n\n// 数值项的下限:锁定阈值不为负、时长至少 1 分钟,避免存 0 变成永不过期/永久锁定。\n// 0 在少数项上是合法的\"关闭\"语义(永不过期、不防重用、不限流)。\nexport const SECURITY_NUMBERS: Readonly<Record<string, number>> = {\n 'sys.security.loginLock.maxFailCount': 0,\n 'sys.security.loginLock.lockMinutes': 1,\n 'sys.security.password.minLength': 1,\n 'sys.security.password.expireDays': 0,\n 'sys.security.password.historyCount': 0,\n 'sys.security.session.accessMinutes': 1,\n 'sys.security.session.refreshMinutes': 1,\n 'sys.security.rateLimit.windowSeconds': 1,\n 'sys.security.rateLimit.permitPerWindow': 0,\n 'sys.security.rateLimit.authPermitPerWindow': 0,\n}\n/** 短信验证码登录是一种登录方式,在「登录方式」页,不在安全策略 */\nexport const SMS_LOGIN_KEY = 'sys.security.smsLogin.enabled'\nexport const SECURITY_SWITCHES = [\n 'sys.security.password.requireUpper',\n 'sys.security.password.requireLower',\n 'sys.security.password.requireDigit',\n 'sys.security.password.requireSpecial',\n 'sys.security.password.forceChangeOnFirstLogin',\n 'sys.security.captcha.enabled',\n 'sys.security.totp.enabled',\n 'sys.security.totp.requireForSuperAdmin',\n 'sys.security.mfa.enabled',\n 'sys.security.rateLimit.enabled',\n] as const\nexport const CAPTCHA_TYPE_KEY = 'sys.security.captcha.type'\nexport const SECURITY_KEYS = [\n ...Object.keys(SECURITY_NUMBERS),\n ...SECURITY_SWITCHES,\n CAPTCHA_TYPE_KEY,\n SMS_LOGIN_KEY,\n]\n\nexport const UPLOAD_MAX_KEY = 'sys.upload.maxSizeMb'\nexport const UPLOAD_EXTS_KEY = 'sys.upload.allowedExtensions'\nexport const JOB_RETENTION_KEY = 'sys.job.logRetentionDays'\nexport const JOB_ALERT_KEY = 'sys.job.alertEmails'\n\n/** 固定认领的键(第三方登录的键按已注册的方式动态认领,见 draft.ts)。 */\nexport const STATIC_CLAIMED_KEYS: readonly string[] = [\n ...BRAND_KEYS,\n ...LOGIN_KEYS,\n ...WATERMARK_KEYS,\n ...SECURITY_KEYS,\n UPLOAD_MAX_KEY,\n UPLOAD_EXTS_KEY,\n JOB_RETENTION_KEY,\n JOB_ALERT_KEY,\n]\n\n/** 结构化表单从这些分组取值。 */\nexport const STRUCTURED_GROUPS = ['sys', 'login', 'security', 'upload', 'job'] as const\n\n/** 键 → 所属分类,用于导航上的\"有未保存改动\"标记。 */\nexport function tabOfKey(key: string): ConfigTab {\n if (key.startsWith('sys.site.') || key.startsWith('sys.login.')) return 'brand'\n if (key.startsWith('sys.watermark.')) return 'watermark'\n if (key === SMS_LOGIN_KEY || key.startsWith('sys.externalauth.')) return 'signin'\n if (key.startsWith('sys.security.')) return 'security'\n if (key.startsWith('sys.upload.')) return 'upload'\n if (key.startsWith('sys.job.')) return 'job'\n return 'advanced'\n}\n\n/** 配置行增删改的版本号:保存或在「高级」页改了行之后 bump,「高级」表据此重拉。 */\nexport const configRevision = ref(0)\n\nexport function bumpConfigRevision() {\n configRevision.value++\n}\n"],"names":["CONFIG_TABS","TAB_GROUPS","TAB_ICONS","LOGO_KEY","BRAND_KEYS","LOGIN_LOCALES","heroKeys","locale","SUBTITLE_KEY","SHOW_FEATURES_KEY","LOGIN_KEYS","l","SECURITY_NUMBERS","SMS_LOGIN_KEY","SECURITY_SWITCHES","CAPTCHA_TYPE_KEY","SECURITY_KEYS","UPLOAD_MAX_KEY","UPLOAD_EXTS_KEY","JOB_RETENTION_KEY","JOB_ALERT_KEY","STATIC_CLAIMED_KEYS","WATERMARK_KEYS","STRUCTURED_GROUPS","tabOfKey","key","configRevision","ref","bumpConfigRevision"],"mappings":";;AAMO,MAAMA,IAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAIaC,IAAgD;AAAA,EAC3D,CAAC,SAAS,UAAU,YAAY,aAAa,WAAW;AAAA,EACxD,CAAC,UAAU,OAAO,UAAU;AAC9B,GAGaC,IAAuC;AAAA,EAClD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,UAAU;AACZ,GAEaC,IAAW,iBACXC,IAAa;AAAA,EACxB;AAAA,EACAD;AAAA,EACA;AAAA,EACA;AACF,GAKaE,IAAgB,CAAC,SAAS,OAAO,GAEjCC,IAAW,CAACC,OAAyB;AAAA,EAChD,UAAU,2BAA2BA,CAAM;AAAA,EAC3C,WAAW,4BAA4BA,CAAM;AAAA,EAC7C,UAAU,2BAA2BA,CAAM;AAC7C,IACaC,IAAe,qBACfC,IAAoB,+BACpBC,IAAa;AAAA,EACxBF;AAAA,EACAC;AAAA,EACA,GAAGJ,EAAc,QAAQ,CAAAM,MAAK,OAAO,OAAOL,EAASK,CAAC,CAAC,CAAC;AAC1D,GAIaC,IAAqD;AAAA,EAChE,uCAAuC;AAAA,EACvC,sCAAsC;AAAA,EACtC,mCAAmC;AAAA,EACnC,oCAAoC;AAAA,EACpC,sCAAsC;AAAA,EACtC,sCAAsC;AAAA,EACtC,uCAAuC;AAAA,EACvC,wCAAwC;AAAA,EACxC,0CAA0C;AAAA,EAC1C,8CAA8C;AAChD,GAEaC,IAAgB,iCAChBC,IAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACaC,IAAmB,6BACnBC,IAAgB;AAAA,EAC3B,GAAG,OAAO,KAAKJ,CAAgB;AAAA,EAC/B,GAAGE;AAAA,EACHC;AAAA,EACAF;AACF,GAEaI,IAAiB,wBACjBC,IAAkB,gCAClBC,IAAoB,4BACpBC,IAAgB,uBAGhBC,IAAyC;AAAA,EACpD,GAAGjB;AAAA,EACH,GAAGM;AAAA,EACH,GAAGY;AAAA,EACH,GAAGN;AAAA,EACHC;AAAA,EACAC;AAAA,EACAC;AAAA,EACAC;AACF,GAGaG,IAAoB,CAAC,OAAO,SAAS,YAAY,UAAU,KAAK;AAGtE,SAASC,EAASC,GAAwB;AAC/C,SAAIA,EAAI,WAAW,WAAW,KAAKA,EAAI,WAAW,YAAY,IAAU,UACpEA,EAAI,WAAW,gBAAgB,IAAU,cACzCA,MAAQZ,KAAiBY,EAAI,WAAW,mBAAmB,IAAU,WACrEA,EAAI,WAAW,eAAe,IAAU,aACxCA,EAAI,WAAW,aAAa,IAAU,WACtCA,EAAI,WAAW,UAAU,IAAU,QAChC;AACT;AAGO,MAAMC,IAAiBC,EAAI,CAAC;AAE5B,SAASC,IAAqB;AACnC,EAAAF,EAAe;AACjB;"}
@@ -1,5 +1,9 @@
1
- import f from "./index2.vue.js";
1
+ import o from "./index2.vue.js";
2
+ /* empty css */
3
+ /* empty css */
4
+ import t from "../../../_virtual/_plugin-vue_export-helper.js";
5
+ const i = /* @__PURE__ */ t(o, [["__scopeId", "data-v-c57600e7"]]);
2
6
  export {
3
- f as default
7
+ i as default
4
8
  };
5
9
  //# sourceMappingURL=index.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}