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
@@ -1,41 +1,43 @@
1
- import { defineComponent as J, onMounted as P, onUnmounted as Q, ref as C, computed as o, watch as X, nextTick as T, openBlock as l, createElementBlock as w, normalizeClass as k, normalizeStyle as Y, Fragment as Z, createVNode as r, unref as e, withDirectives as ee, vShow as te, createBlock as i, createCommentVNode as c, createElementVNode as b, withCtx as s, Transition as ae, KeepAlive as oe, resolveDynamicComponent as re } from "vue";
2
- import { RouterView as le } from "vue-router";
3
- import { NButton as ie, NWatermark as se, NDrawer as ne, NDrawerContent as ue } from "naive-ui";
4
- import { Icon as ce } from "@iconify/vue";
5
- import { useBreakpoints as de, breakpointsTailwind as pe } from "@vueuse/core";
6
- import { useI18n as me } from "vue-i18n";
7
- import { useAppStore as ve } from "../stores/app.js";
8
- import { useUserStore as he } from "../stores/user.js";
9
- import { useLayoutMenu as fe } from "../composables/useLayoutMenu.js";
10
- import { useTabsStore as we } from "../stores/tabs.js";
11
- import { useSite as be } from "../composables/useSite.js";
12
- import { useRealtime as ye } from "../composables/useRealtime.js";
13
- import { useVisualViewportHeight as Se } from "../composables/useVisualViewportHeight.js";
14
- import ke from "../components/ErrorBoundary/index.vue.js";
15
- import _e from "./AppHeader.vue.js";
16
- import d from "./components/SideNav.vue.js";
17
- import xe from "./TabsBar.vue.js";
18
- const Ne = { class: "apph" }, ge = { class: "content" }, Be = {
19
- key: 0,
20
- class: "tabs"
21
- }, Ce = { class: "page" }, We = /* @__PURE__ */ J({
1
+ import { defineComponent as te, onMounted as oe, onUnmounted as re, ref as k, computed as r, watch as le, nextTick as A, openBlock as i, createElementBlock as N, normalizeClass as x, normalizeStyle as se, Fragment as ie, createVNode as s, unref as e, createBlock as u, createCommentVNode as h, createElementVNode as f, withCtx as p, Transition as ne, KeepAlive as ue, resolveDynamicComponent as de } from "vue";
2
+ import { RouterView as ce } from "vue-router";
3
+ import { NButton as pe, NDrawer as ve, NDrawerContent as me } from "naive-ui";
4
+ import { Icon as he } from "@iconify/vue";
5
+ import { useBreakpoints as fe, breakpointsTailwind as be, onKeyStroke as we } from "@vueuse/core";
6
+ import { useI18n as ye } from "vue-i18n";
7
+ import { useAppStore as Se } from "../stores/app.js";
8
+ import { useUserStore as ke } from "../stores/user.js";
9
+ import { useLayoutMenu as xe } from "../composables/useLayoutMenu.js";
10
+ import { useTabsStore as ge } from "../stores/tabs.js";
11
+ import { useSite as Te } from "../composables/useSite.js";
12
+ import { useRealtime as _e } from "../composables/useRealtime.js";
13
+ import { useVisualViewportHeight as Ne } from "../composables/useVisualViewportHeight.js";
14
+ import { provideShellBreakpoint as Me } from "../composables/useShellBreakpoint.js";
15
+ import Be from "../components/ErrorBoundary/index.vue.js";
16
+ import Ce from "../components/MenuSearch.vue.js";
17
+ import Ee from "../components/AppWatermark.vue.js";
18
+ import Ke from "./AppHeader.vue.js";
19
+ import b from "./components/SideNav.vue.js";
20
+ import Ie from "./TabsBar.vue.js";
21
+ const Re = ["inert"], $e = { class: "toolbar" }, He = { class: "apph" }, Oe = { class: "content" }, Ve = ["data-bp"], la = /* @__PURE__ */ te({
22
22
  __name: "default",
23
- setup(Te) {
24
- const { t: M } = me(), t = ve(), V = he(), p = we(), { site: z } = be(), { menuOptions: _, l1Options: x, l2Options: N, selectedL1: g, activeKey: m, onSelect: y, onSelectL1: B } = fe(), { start: D, stop: O } = ye();
25
- P(D), Q(O), Se();
26
- const n = de(pe).smaller("md"), v = C(!1), a = o(() => n.value ? "mobile" : t.layoutMode), R = /* @__PURE__ */ new Set([
23
+ setup(Ae) {
24
+ const { t: L } = ye(), n = Se(), w = ke(), y = ge(), { site: M } = Te(), { menuOptions: B, l1Options: C, l2Options: E, selectedL1: K, activeKey: S, onSelect: g, onSelectL1: I } = xe(), { start: U, stop: z } = _e();
25
+ oe(U), re(z), Ne();
26
+ const v = fe(be).smaller("md"), m = k(!1), d = k(!1), R = k(), { bp: $ } = Me(R), o = r(() => v.value ? "mobile" : n.layoutMode), D = /* @__PURE__ */ new Set([
27
27
  "vertical",
28
28
  "vertical-mix",
29
29
  "vertical-hybrid-header-first",
30
30
  "top-hybrid-sidebar-first",
31
31
  "top-hybrid-header-first"
32
- ]), A = /* @__PURE__ */ new Set([
32
+ ]), F = /* @__PURE__ */ new Set([
33
33
  "horizontal",
34
34
  "vertical-hybrid-header-first",
35
35
  "top-hybrid-sidebar-first",
36
36
  "top-hybrid-header-first"
37
- ]), E = o(() => !n.value && R.has(t.layoutMode)), H = o(() => a.value === "vertical" || a.value === "vertical-mix"), I = o(() => n.value || A.has(a.value)), K = o(() => {
38
- switch (a.value) {
37
+ ]), T = r(() => !v.value && D.has(n.layoutMode)), W = r(() => o.value === "vertical" || o.value === "vertical-mix"), q = r(
38
+ () => v.value || F.has(o.value) || c.value
39
+ ), P = r(() => {
40
+ switch (o.value) {
39
41
  case "horizontal":
40
42
  return "full";
41
43
  case "vertical-hybrid-header-first":
@@ -46,116 +48,145 @@ const Ne = { class: "apph" }, ge = { class: "content" }, Be = {
46
48
  default:
47
49
  return null;
48
50
  }
49
- }), L = /* @__PURE__ */ new Set([
51
+ }), H = /* @__PURE__ */ new Set([
50
52
  "vertical",
51
53
  "vertical-mix",
52
54
  "vertical-hybrid-header-first",
53
55
  "top-hybrid-header-first"
54
- ]), U = o(() => !n.value && L.has(a.value)), $ = o(
55
- () => a.value === "vertical" ? _.value : N.value
56
- ), j = o(() => a.value === "vertical-mix" ? { width: t.collapsed ? "var(--rail-w)" : "calc(var(--rail-w) + var(--sidebar-w))" } : a.value === "top-hybrid-sidebar-first" ? { width: "var(--rail-w)" } : { width: t.collapsed ? "var(--sidebar-w-collapsed)" : "var(--sidebar-w)" }), q = o(
57
- () => t.pageTransition === "none" ? void 0 : t.pageTransition
58
- ), F = o(
59
- () => {
60
- var u;
61
- return [(u = V.userInfo) == null ? void 0 : u.name, t.watermarkText].filter(Boolean).join(" · ") || z.title;
62
- }
63
- ), W = o(() => t.isDark ? "rgba(255,255,255,0.12)" : "rgba(0,0,0,0.06)");
64
- function G(u) {
65
- y(u), v.value = !1;
56
+ ]), O = r(() => !v.value && H.has(o.value)), c = r(
57
+ () => T.value && n.collapsed && H.has(o.value)
58
+ ), X = r(
59
+ () => T.value && !c.value && o.value !== "top-hybrid-sidebar-first"
60
+ );
61
+ function j(a) {
62
+ return a instanceof HTMLElement ? ["INPUT", "TEXTAREA", "SELECT"].includes(a.tagName) || a.isContentEditable || !!a.closest(".cm-editor, .md-editor, .md-editor-v3") : !1;
63
+ }
64
+ we("b", (a) => {
65
+ !(a.ctrlKey || a.metaKey) || a.altKey || a.shiftKey || !O.value || j(a.target) || (a.preventDefault(), n.toggleCollapsed());
66
+ });
67
+ const G = r(
68
+ () => o.value === "vertical" ? B.value : E.value
69
+ ), J = r(() => o.value === "vertical-mix" ? "calc(var(--rail-w) + var(--sidebar-w))" : o.value === "top-hybrid-sidebar-first" ? "var(--rail-w)" : "var(--sidebar-w)"), Q = r(() => ({
70
+ "--aside-w": J.value,
71
+ width: c.value ? "0px" : "var(--aside-w)"
72
+ })), Y = r(
73
+ () => n.pageTransition === "none" ? void 0 : n.pageTransition
74
+ ), Z = r(() => {
75
+ var a, t, l, V;
76
+ return {
77
+ name: (a = w.userInfo) == null ? void 0 : a.name,
78
+ account: (t = w.userInfo) == null ? void 0 : t.account,
79
+ org: (l = w.userInfo) == null ? void 0 : l.orgName,
80
+ phoneTail: (V = w.userInfo) == null ? void 0 : V.phoneTail
81
+ };
82
+ });
83
+ function ee(a) {
84
+ g(a), m.value = !1;
66
85
  }
67
- const S = C(!0);
68
- return X(
69
- () => p.reloadKey,
86
+ function ae() {
87
+ m.value = !1, d.value = !0;
88
+ }
89
+ const _ = k(!0);
90
+ return le(
91
+ () => y.reloadKey,
70
92
  async () => {
71
- S.value = !1, await T(), S.value = !0, await T(), p.excludeName = "";
93
+ _.value = !1, await A(), _.value = !0, await A(), y.excludeName = "";
72
94
  }
73
- ), (u, h) => (l(), w("div", {
74
- class: k(["layout", `mode-${a.value}`])
95
+ ), (a, t) => (i(), N("div", {
96
+ class: x(["layout", [`mode-${o.value}`, { "aside-hidden": c.value }]])
75
97
  }, [
76
- E.value ? (l(), w("aside", {
98
+ T.value ? (i(), N("aside", {
77
99
  key: 0,
78
- class: k(["aside", { "aside--mix": a.value === "vertical-mix" }]),
79
- style: Y(j.value)
100
+ class: x(["aside glass", { "aside--mix": o.value === "vertical-mix", "aside--hidden": c.value }]),
101
+ style: se(Q.value),
102
+ inert: c.value
80
103
  }, [
81
- a.value === "vertical-mix" ? (l(), w(Z, { key: 0 }, [
82
- r(d, {
104
+ o.value === "vertical-mix" ? (i(), N(ie, { key: 0 }, [
105
+ s(b, {
83
106
  class: "rail",
84
- options: e(x),
85
- value: e(g),
107
+ options: e(C),
108
+ value: e(K),
86
109
  rail: "",
87
110
  "show-brand": "",
88
- onSelect: e(B)
111
+ onSelect: e(I)
89
112
  }, null, 8, ["options", "value", "onSelect"]),
90
- ee(r(d, {
113
+ s(b, {
91
114
  class: "l2col",
92
- options: e(N),
93
- value: e(m),
94
- onSelect: e(y)
95
- }, null, 8, ["options", "value", "onSelect"]), [
96
- [te, !e(t).collapsed]
97
- ])
98
- ], 64)) : a.value === "top-hybrid-sidebar-first" ? (l(), i(d, {
115
+ options: e(E),
116
+ value: e(S),
117
+ "show-search": "",
118
+ onSelect: e(g),
119
+ onSearch: t[0] || (t[0] = (l) => d.value = !0)
120
+ }, null, 8, ["options", "value", "onSelect"])
121
+ ], 64)) : o.value === "top-hybrid-sidebar-first" ? (i(), u(b, {
99
122
  key: 1,
100
- options: e(x),
101
- value: e(g),
123
+ options: e(C),
124
+ value: e(K),
102
125
  rail: "",
103
- onSelect: e(B)
104
- }, null, 8, ["options", "value", "onSelect"])) : (l(), i(d, {
126
+ onSelect: e(I)
127
+ }, null, 8, ["options", "value", "onSelect"])) : (i(), u(b, {
105
128
  key: 2,
106
- options: $.value,
107
- value: e(m),
108
- collapsed: e(t).collapsed,
109
- "show-brand": H.value,
110
- onSelect: e(y)
111
- }, null, 8, ["options", "value", "collapsed", "show-brand", "onSelect"]))
112
- ], 6)) : c("", !0),
113
- b("header", {
114
- class: k(["header", { "header--static": !e(t).fixedHeader }])
129
+ options: G.value,
130
+ value: e(S),
131
+ "show-brand": W.value,
132
+ "show-search": "",
133
+ onSelect: e(g),
134
+ onSearch: t[1] || (t[1] = (l) => d.value = !0)
135
+ }, null, 8, ["options", "value", "show-brand", "onSelect"]))
136
+ ], 14, Re)) : h("", !0),
137
+ f("div", {
138
+ class: x(["shell-head glass", { "shell-head--static": !e(n).fixedHeader }])
115
139
  }, [
116
- e(n) ? (l(), i(e(ie), {
117
- key: 0,
118
- quaternary: "",
119
- circle: "",
120
- class: "hbg",
121
- "aria-label": e(M)("app.openMenu"),
122
- onClick: h[0] || (h[0] = (f) => v.value = !0)
123
- }, {
124
- default: s(() => [
125
- r(e(ce), {
126
- icon: "ph:list",
127
- width: 20
128
- })
129
- ]),
130
- _: 1
131
- }, 8, ["aria-label"])) : c("", !0),
132
- b("div", Ne, [
133
- r(_e, {
134
- "show-collapse": U.value,
135
- "show-brand": I.value,
136
- "top-menu": K.value
137
- }, null, 8, ["show-collapse", "show-brand", "top-menu"])
138
- ])
140
+ f("header", $e, [
141
+ e(v) ? (i(), u(e(pe), {
142
+ key: 0,
143
+ quaternary: "",
144
+ circle: "",
145
+ class: "hbg",
146
+ "aria-label": e(L)("app.openMenu"),
147
+ onClick: t[2] || (t[2] = (l) => m.value = !0)
148
+ }, {
149
+ default: p(() => [
150
+ s(e(he), {
151
+ icon: "ph:sidebar-simple",
152
+ width: 19
153
+ })
154
+ ]),
155
+ _: 1
156
+ }, 8, ["aria-label"])) : h("", !0),
157
+ f("div", He, [
158
+ s(Ke, {
159
+ "show-collapse": O.value,
160
+ "show-brand": q.value,
161
+ "top-menu": P.value,
162
+ "show-search": !X.value,
163
+ onSearch: t[3] || (t[3] = (l) => d.value = !0)
164
+ }, null, 8, ["show-collapse", "show-brand", "top-menu", "show-search"])
165
+ ])
166
+ ]),
167
+ e(n).showTabs ? (i(), u(Ie, { key: 0 })) : h("", !0)
139
168
  ], 2),
140
- b("main", ge, [
141
- e(t).showTabs ? (l(), w("div", Be, [
142
- r(xe)
143
- ])) : c("", !0),
144
- b("div", Ce, [
145
- r(ke, null, {
146
- default: s(() => [
147
- r(e(le), null, {
148
- default: s(({ Component: f }) => [
149
- r(ae, {
150
- name: q.value,
169
+ f("main", Oe, [
170
+ f("div", {
171
+ ref_key: "pageRef",
172
+ ref: R,
173
+ class: x(["page", `bp-${e($)}`]),
174
+ "data-bp": e($)
175
+ }, [
176
+ s(Be, null, {
177
+ default: p(() => [
178
+ s(e(ce), null, {
179
+ default: p(({ Component: l }) => [
180
+ s(ne, {
181
+ name: Y.value,
151
182
  mode: "out-in"
152
183
  }, {
153
- default: s(() => [
154
- (l(), i(oe, {
155
- include: e(p).cachedNames,
156
- exclude: e(p).excludeName
184
+ default: p(() => [
185
+ (i(), u(ue, {
186
+ include: e(y).cachedNames,
187
+ exclude: e(y).excludeName
157
188
  }, [
158
- S.value ? (l(), i(re(f), { key: e(m) })) : c("", !0)
189
+ _.value ? (i(), u(de(l), { key: e(S) })) : h("", !0)
159
190
  ], 1032, ["include", "exclude"]))
160
191
  ]),
161
192
  _: 2
@@ -166,48 +197,47 @@ const Ne = { class: "apph" }, ge = { class: "content" }, Be = {
166
197
  ]),
167
198
  _: 1
168
199
  })
169
- ]),
170
- e(t).watermark ? (l(), i(e(se), {
171
- key: 1,
172
- content: F.value,
173
- cross: "",
174
- fullscreen: "",
175
- "font-size": 14,
176
- "line-height": 16,
177
- width: 192,
178
- height: 128,
179
- rotate: -16,
180
- "font-color": W.value
181
- }, null, 8, ["content", "font-color"])) : c("", !0)
200
+ ], 10, Ve),
201
+ e(M).watermark.enabled ? (i(), u(Ee, {
202
+ key: 0,
203
+ settings: e(M).watermark,
204
+ who: Z.value
205
+ }, null, 8, ["settings", "who"])) : h("", !0)
182
206
  ]),
183
- r(e(ne), {
184
- show: v.value,
185
- "onUpdate:show": h[1] || (h[1] = (f) => v.value = f),
207
+ s(e(ve), {
208
+ show: m.value,
209
+ "onUpdate:show": t[4] || (t[4] = (l) => m.value = l),
186
210
  placement: "left",
187
211
  width: 236
188
212
  }, {
189
- default: s(() => [
190
- r(e(ue), {
213
+ default: p(() => [
214
+ s(e(me), {
191
215
  "native-scrollbar": !1,
192
216
  "body-content-style": "padding:0"
193
217
  }, {
194
- default: s(() => [
195
- r(d, {
196
- options: e(_),
197
- value: e(m),
218
+ default: p(() => [
219
+ s(b, {
220
+ options: e(B),
221
+ value: e(S),
198
222
  "show-brand": "",
199
- onSelect: G
223
+ "show-search": "",
224
+ onSelect: ee,
225
+ onSearch: ae
200
226
  }, null, 8, ["options", "value"])
201
227
  ]),
202
228
  _: 1
203
229
  })
204
230
  ]),
205
231
  _: 1
206
- }, 8, ["show"])
232
+ }, 8, ["show"]),
233
+ s(Ce, {
234
+ show: d.value,
235
+ "onUpdate:show": t[5] || (t[5] = (l) => d.value = l)
236
+ }, null, 8, ["show"])
207
237
  ], 2));
208
238
  }
209
239
  });
210
240
  export {
211
- We as default
241
+ la as default
212
242
  };
213
243
  //# sourceMappingURL=default2.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"default2.vue.js","sources":["../../src/layouts/default.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { RouterView } from 'vue-router'\nimport { NWatermark, NDrawer, NDrawerContent, NButton } from 'naive-ui'\nimport { Icon } from '@iconify/vue'\nimport { useBreakpoints, breakpointsTailwind } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\nimport { useAppStore, type LayoutMode } from '#/stores/app'\nimport { useUserStore } from '#/stores/user'\nimport { useLayoutMenu } from '#/composables/useLayoutMenu'\nimport { useTabsStore } from '#/stores/tabs'\nimport { useSite } from '#/composables/useSite'\nimport { useRealtime } from '#/composables/useRealtime'\nimport { useVisualViewportHeight } from '#/composables/useVisualViewportHeight'\nimport ErrorBoundary from '#/components/ErrorBoundary/index.vue'\nimport AppHeader from './AppHeader.vue'\nimport SideNav from './components/SideNav.vue'\nimport TabsBar from './TabsBar.vue'\n\nconst { t } = useI18n()\nconst app = useAppStore()\nconst user = useUserStore()\nconst tabs = useTabsStore()\nconst { site } = useSite()\nconst { menuOptions, l1Options, l2Options, selectedL1, activeKey, onSelect, onSelectL1 } =\n useLayoutMenu()\n\n// 实时通知(SignalR):鉴权外壳挂载即连、卸载即断。后端未开启实时时连接静默失败,退回轮询/惰性 401(纯增强)。\nconst { start: startRealtime, stop: stopRealtime } = useRealtime()\nonMounted(startRealtime)\nonUnmounted(stopRealtime)\n\n// 维护 --vvh(真实可视高度):软键盘弹起时 dvh 不变,只有 visualViewport 会缩。\n// 布局壳自身用 100dvh 就够,变量留给需要贴着键盘排版的页面(见 composables/useVisualViewportHeight)。\nuseVisualViewportHeight()\n\nconst isMobile = useBreakpoints(breakpointsTailwind).smaller('md')\nconst mobileOpen = ref(false)\n\n// 窄屏忽略 layoutMode,统一走 mobile(单列 + 抽屉侧栏)。\nconst mode = computed<LayoutMode | 'mobile'>(() => (isMobile.value ? 'mobile' : app.layoutMode))\n\n// 除 horizontal(无侧栏)外都有侧栏。\nconst withSider = new Set<LayoutMode>([\n 'vertical',\n 'vertical-mix',\n 'vertical-hybrid-header-first',\n 'top-hybrid-sidebar-first',\n 'top-hybrid-header-first',\n])\n// 顶栏显示品牌的模式(其余由侧栏/rail 顶部显示品牌,保证每种布局品牌只出现一处)。\nconst headerBrandModes = new Set<string>([\n 'horizontal',\n 'vertical-hybrid-header-first',\n 'top-hybrid-sidebar-first',\n 'top-hybrid-header-first',\n])\nconst showSider = computed(() => !isMobile.value && withSider.has(app.layoutMode))\nconst sideShowBrand = computed(() => mode.value === 'vertical' || mode.value === 'vertical-mix')\nconst headerShowBrand = computed(() => isMobile.value || headerBrandModes.has(mode.value))\n// 顶栏菜单:horizontal=完整树;两个 header-first=一级;侧边优先=二级(选中的一级的子菜单)。\nconst headerTopMenu = computed<'full' | 'l1' | 'l2' | null>(() => {\n switch (mode.value) {\n case 'horizontal':\n return 'full'\n case 'vertical-hybrid-header-first':\n case 'top-hybrid-header-first':\n return 'l1'\n case 'top-hybrid-sidebar-first':\n return 'l2'\n default:\n return null\n }\n})\n// 折叠按钮:有可折叠树侧栏的模式(侧边优先的一级 rail 固定宽,不折叠)。\nconst collapsibleSider = new Set<string>([\n 'vertical',\n 'vertical-mix',\n 'vertical-hybrid-header-first',\n 'top-hybrid-header-first',\n])\nconst showCollapse = computed(() => !isMobile.value && collapsibleSider.has(mode.value))\n\n// 非特殊侧栏内容:vertical=完整树;两个 header-first hybrid=二级子菜单树。\nconst asideOptions = computed(() =>\n mode.value === 'vertical' ? menuOptions.value : l2Options.value,\n)\nconst asideStyle = computed(() => {\n if (mode.value === 'vertical-mix') {\n return { width: app.collapsed ? 'var(--rail-w)' : 'calc(var(--rail-w) + var(--sidebar-w))' }\n }\n if (mode.value === 'top-hybrid-sidebar-first') {\n return { width: 'var(--rail-w)' } // 一级 icon rail,固定宽\n }\n return { width: app.collapsed ? 'var(--sidebar-w-collapsed)' : 'var(--sidebar-w)' }\n})\n\nconst transitionName = computed(() =>\n app.pageTransition === 'none' ? undefined : app.pageTransition,\n)\n\nconst watermarkContent = computed(\n () => [user.userInfo?.name, app.watermarkText].filter(Boolean).join(' · ') || site.title,\n)\nconst watermarkColor = computed(() => (app.isDark ? 'rgba(255,255,255,0.12)' : 'rgba(0,0,0,0.06)'))\n\nfunction onMobileSelect(key: string) {\n onSelect(key)\n mobileOpen.value = false\n}\n\n// 刷新标签:store 置 excludeName(逐出缓存)+ 递增 reloadKey;这里 v-if 关开一次令当前页重挂,再放行缓存。\nconst rvShow = ref(true)\nwatch(\n () => tabs.reloadKey,\n async () => {\n rvShow.value = false\n await nextTick()\n rvShow.value = true\n await nextTick()\n tabs.excludeName = ''\n },\n)\n</script>\n\n<template>\n <div class=\"layout\" :class=\"`mode-${mode}`\">\n <!-- 侧栏 -->\n <aside\n v-if=\"showSider\"\n class=\"aside\"\n :class=\"{ 'aside--mix': mode === 'vertical-mix' }\"\n :style=\"asideStyle\"\n >\n <template v-if=\"mode === 'vertical-mix'\">\n <SideNav\n class=\"rail\"\n :options=\"l1Options\"\n :value=\"selectedL1\"\n rail\n show-brand\n @select=\"onSelectL1\"\n />\n <SideNav\n v-show=\"!app.collapsed\"\n class=\"l2col\"\n :options=\"l2Options\"\n :value=\"activeKey\"\n @select=\"onSelect\"\n />\n </template>\n <!-- 顶部混合-侧边优先:侧栏只放一级 icon rail(二级在顶栏) -->\n <SideNav\n v-else-if=\"mode === 'top-hybrid-sidebar-first'\"\n :options=\"l1Options\"\n :value=\"selectedL1\"\n rail\n @select=\"onSelectL1\"\n />\n <SideNav\n v-else\n :options=\"asideOptions\"\n :value=\"activeKey\"\n :collapsed=\"app.collapsed\"\n :show-brand=\"sideShowBrand\"\n @select=\"onSelect\"\n />\n </aside>\n\n <!-- 顶栏 -->\n <header class=\"header\" :class=\"{ 'header--static': !app.fixedHeader }\">\n <n-button\n v-if=\"isMobile\"\n quaternary\n circle\n class=\"hbg\"\n :aria-label=\"t('app.openMenu')\"\n @click=\"mobileOpen = true\"\n >\n <Icon icon=\"ph:list\" :width=\"20\" />\n </n-button>\n <div class=\"apph\">\n <AppHeader\n :show-collapse=\"showCollapse\"\n :show-brand=\"headerShowBrand\"\n :top-menu=\"headerTopMenu\"\n />\n </div>\n </header>\n\n <!-- 内容 -->\n <main class=\"content\">\n <div v-if=\"app.showTabs\" class=\"tabs\"><TabsBar /></div>\n <div class=\"page\">\n <!-- 错误边界包住整个内容区:页面组件抛异常时 Vue 会卸掉整棵子树,没有它就是白屏。\n component :key=路由 path 给稳定身份:out-in 过渡才能正确区分进/出场,否则显示上一页缓存\n (按 path 各自成键,不塌缩缓存)。每个页面经 namedPage 套了一层 <div.page-view> 单元素根,\n out-in 能瞬时过渡任何页。 -->\n <ErrorBoundary>\n <router-view v-slot=\"{ Component }\">\n <transition :name=\"transitionName\" mode=\"out-in\">\n <keep-alive :include=\"tabs.cachedNames\" :exclude=\"tabs.excludeName\">\n <component :is=\"Component\" v-if=\"rvShow\" :key=\"activeKey\" />\n </keep-alive>\n </transition>\n </router-view>\n </ErrorBoundary>\n </div>\n <n-watermark\n v-if=\"app.watermark\"\n :content=\"watermarkContent\"\n cross\n fullscreen\n :font-size=\"14\"\n :line-height=\"16\"\n :width=\"192\"\n :height=\"128\"\n :rotate=\"-16\"\n :font-color=\"watermarkColor\"\n />\n </main>\n\n <!-- 移动端抽屉侧栏 -->\n <n-drawer v-model:show=\"mobileOpen\" placement=\"left\" :width=\"236\">\n <n-drawer-content :native-scrollbar=\"false\" body-content-style=\"padding:0\">\n <SideNav :options=\"menuOptions\" :value=\"activeKey\" show-brand @select=\"onMobileSelect\" />\n </n-drawer-content>\n </n-drawer>\n </div>\n</template>\n\n<style scoped>\n.layout {\n display: grid;\n /* dvh 而非 vh:移动端浏览器地址栏收起时 vh 仍按最小视口算,底部会被裁掉一条 */\n height: 100dvh;\n overflow: hidden;\n background: var(--color-bg-app); /* 整页画布跟随 tokens,暗色自动切深蓝黑渐变 */\n}\n/* 竖向壳:侧栏满高在左,顶栏缩进到内容列上方 */\n.mode-vertical,\n.mode-vertical-mix,\n.mode-vertical-hybrid-header-first {\n grid-template-columns: auto 1fr;\n grid-template-rows: var(--header-h) 1fr;\n grid-template-areas: 'aside header' 'aside content';\n}\n/* 顶栏壳:顶栏通栏,侧栏在其下方左侧 */\n.mode-top-hybrid-sidebar-first,\n.mode-top-hybrid-header-first {\n grid-template-columns: auto 1fr;\n grid-template-rows: var(--header-h) 1fr;\n grid-template-areas: 'header header' 'aside content';\n}\n.mode-horizontal,\n.mode-mobile {\n grid-template-columns: 1fr;\n grid-template-rows: var(--header-h) 1fr;\n grid-template-areas: 'header' 'content';\n}\n\n.aside {\n grid-area: aside;\n height: 100%;\n overflow: hidden;\n border-right: 1px solid var(--color-border);\n background: var(--color-bg-container);\n backdrop-filter: blur(18px); /* 侧栏玻璃背景,与顶栏/弹层质感统一 */\n -webkit-backdrop-filter: blur(18px);\n transition: width 0.2s ease;\n}\n.aside--mix {\n display: flex;\n}\n.aside--mix .rail {\n width: var(--rail-w);\n flex-shrink: 0;\n border-right: 1px solid var(--color-border);\n}\n.aside--mix .l2col {\n flex: 1;\n min-width: 0;\n}\n\n.header {\n grid-area: header;\n display: flex;\n align-items: stretch;\n border-bottom: 1px solid var(--color-border);\n background: var(--color-header-bg);\n backdrop-filter: blur(12px);\n z-index: 10;\n}\n.header--static {\n backdrop-filter: none;\n}\n.hbg {\n align-self: center;\n margin-left: 8px;\n}\n.apph {\n flex: 1;\n min-width: 0;\n height: 100%;\n}\n\n.content {\n grid-area: content;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow: hidden;\n}\n.tabs {\n flex-shrink: 0;\n}\n.page {\n flex: 1;\n min-height: 0;\n overflow: auto;\n padding: var(--pad-page);\n}\n</style>\n"],"names":["t","useI18n","app","useAppStore","user","useUserStore","tabs","useTabsStore","site","useSite","menuOptions","l1Options","l2Options","selectedL1","activeKey","onSelect","onSelectL1","useLayoutMenu","startRealtime","stopRealtime","useRealtime","onMounted","onUnmounted","useVisualViewportHeight","isMobile","useBreakpoints","breakpointsTailwind","mobileOpen","ref","mode","computed","withSider","headerBrandModes","showSider","sideShowBrand","headerShowBrand","headerTopMenu","collapsibleSider","showCollapse","asideOptions","asideStyle","transitionName","watermarkContent","_a","watermarkColor","onMobileSelect","key","rvShow","watch","nextTick","_createElementBlock","_normalizeClass","_Fragment","_createVNode","SideNav","_unref","_vShow","_createBlock","_createElementVNode","NButton","Icon","_hoisted_1","AppHeader","_hoisted_2","_openBlock","_hoisted_3","TabsBar","_hoisted_4","ErrorBoundary","RouterView","_withCtx","Component","_Transition","_KeepAlive","_resolveDynamicComponent","NWatermark","NDrawer","$event","NDrawerContent"],"mappings":"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"}
1
+ {"version":3,"file":"default2.vue.js","sources":["../../src/layouts/default.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'\nimport { RouterView } from 'vue-router'\nimport { NDrawer, NDrawerContent, NButton } from 'naive-ui'\nimport { Icon } from '@iconify/vue'\nimport { useBreakpoints, breakpointsTailwind, onKeyStroke } from '@vueuse/core'\nimport { useI18n } from 'vue-i18n'\nimport { useAppStore, type LayoutMode } from '#/stores/app'\nimport { useUserStore } from '#/stores/user'\nimport { useLayoutMenu } from '#/composables/useLayoutMenu'\nimport { useTabsStore } from '#/stores/tabs'\nimport { useSite } from '#/composables/useSite'\nimport { useRealtime } from '#/composables/useRealtime'\nimport { useVisualViewportHeight } from '#/composables/useVisualViewportHeight'\nimport { provideShellBreakpoint } from '#/composables/useShellBreakpoint'\nimport ErrorBoundary from '#/components/ErrorBoundary/index.vue'\nimport MenuSearch from '#/components/MenuSearch.vue'\nimport AppWatermark from '#/components/AppWatermark.vue'\nimport AppHeader from './AppHeader.vue'\nimport SideNav from './components/SideNav.vue'\nimport TabsBar from './TabsBar.vue'\n\nconst { t } = useI18n()\nconst app = useAppStore()\nconst user = useUserStore()\nconst tabs = useTabsStore()\nconst { site } = useSite()\nconst { menuOptions, l1Options, l2Options, selectedL1, activeKey, onSelect, onSelectL1 } =\n useLayoutMenu()\n\n// 实时通知(SignalR):鉴权外壳挂载即连、卸载即断。后端未开启实时时连接静默失败,退回轮询/惰性 401(纯增强)。\nconst { start: startRealtime, stop: stopRealtime } = useRealtime()\nonMounted(startRealtime)\nonUnmounted(stopRealtime)\n\n// 维护 --vvh(真实可视高度):软键盘弹起时 dvh 不变,只有 visualViewport 会缩。\n// 布局壳自身用 100dvh 就够,变量留给需要贴着键盘排版的页面(见 composables/useVisualViewportHeight)。\nuseVisualViewportHeight()\n\nconst isMobile = useBreakpoints(breakpointsTailwind).smaller('md')\nconst mobileOpen = ref(false)\n// 菜单搜索面板(Ctrl+K 同一个):侧栏里的只读输入框、顶栏的搜索按钮都开它,面板本身在 MenuSearch 里。\nconst searchOpen = ref(false)\n\n// 壳层三档(wide / mid / narrow):按内容区(.page 的 content box)宽度判,盯住的就是下面的 .page。\n// 页面里用 useShellBreakpoint() 读;样式里用 .page 上的 bp-* 类 / data-bp。阈值与理由见 composables/useShellBreakpoint。\nconst pageRef = ref<HTMLElement>()\nconst { bp } = provideShellBreakpoint(pageRef)\n\n// 窄屏忽略 layoutMode,统一走 mobile(单列 + 抽屉侧栏)。\nconst mode = computed<LayoutMode | 'mobile'>(() => (isMobile.value ? 'mobile' : app.layoutMode))\n\n// 除 horizontal(无侧栏)外都有侧栏。\nconst withSider = new Set<LayoutMode>([\n 'vertical',\n 'vertical-mix',\n 'vertical-hybrid-header-first',\n 'top-hybrid-sidebar-first',\n 'top-hybrid-header-first',\n])\n// 顶栏显示品牌的模式(其余由侧栏/rail 顶部显示品牌,保证每种布局品牌只出现一处)。\nconst headerBrandModes = new Set<string>([\n 'horizontal',\n 'vertical-hybrid-header-first',\n 'top-hybrid-sidebar-first',\n 'top-hybrid-header-first',\n])\nconst showSider = computed(() => !isMobile.value && withSider.has(app.layoutMode))\nconst sideShowBrand = computed(() => mode.value === 'vertical' || mode.value === 'vertical-mix')\n// 侧栏整个隐藏时品牌回到顶栏,否则这种布局下品牌无处可显\nconst headerShowBrand = computed(\n () => isMobile.value || headerBrandModes.has(mode.value) || asideHidden.value,\n)\n// 顶栏菜单:horizontal=完整树;两个 header-first=一级;侧边优先=二级(选中的一级的子菜单)。\nconst headerTopMenu = computed<'full' | 'l1' | 'l2' | null>(() => {\n switch (mode.value) {\n case 'horizontal':\n return 'full'\n case 'vertical-hybrid-header-first':\n case 'top-hybrid-header-first':\n return 'l1'\n case 'top-hybrid-sidebar-first':\n return 'l2'\n default:\n return null\n }\n})\n// 折叠按钮:有可折叠树侧栏的模式(侧边优先的一级 rail 固定宽,不折叠)。\nconst collapsibleSider = new Set<string>([\n 'vertical',\n 'vertical-mix',\n 'vertical-hybrid-header-first',\n 'top-hybrid-header-first',\n])\nconst showCollapse = computed(() => !isMobile.value && collapsibleSider.has(mode.value))\n// 折叠 = 把侧栏整个隐藏(不是收成图标条):内容区铺满,再点一次(或 Ctrl/⌘+B)恢复。\nconst asideHidden = computed(\n () => showSider.value && app.collapsed && collapsibleSider.has(mode.value),\n)\n// 侧栏树列自带搜索入口(品牌下的只读输入框)时,顶栏不再重复放搜索按钮;\n// 一级 rail 与侧栏隐藏时侧栏里没有输入框,搜索入口回到顶栏。\nconst sideHasSearch = computed(\n () => showSider.value && !asideHidden.value && mode.value !== 'top-hybrid-sidebar-first',\n)\n\n// Ctrl/⌘+B 收起 / 展开侧栏(只在有可折叠侧栏的布局生效)。\n// 编辑器里 Ctrl+B 是「加粗」,在输入控件 / 富文本 / 代码编辑器里不抢。\nfunction inEditable(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) return false\n return (\n ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName) ||\n target.isContentEditable ||\n !!target.closest('.cm-editor, .md-editor, .md-editor-v3')\n )\n}\nonKeyStroke('b', e => {\n if (!(e.ctrlKey || e.metaKey) || e.altKey || e.shiftKey) return\n if (!showCollapse.value || inEditable(e.target)) return\n e.preventDefault()\n app.toggleCollapsed()\n})\n\n// 非特殊侧栏内容:vertical=完整树;两个 header-first hybrid=二级子菜单树。\nconst asideOptions = computed(() =>\n mode.value === 'vertical' ? menuOptions.value : l2Options.value,\n)\nconst asideFullWidth = computed(() => {\n if (mode.value === 'vertical-mix') return 'calc(var(--rail-w) + var(--sidebar-w))'\n if (mode.value === 'top-hybrid-sidebar-first') return 'var(--rail-w)' // 一级 icon rail,固定宽\n return 'var(--sidebar-w)'\n})\n// 收起 = 宽度过渡到 0(侧栏不卸载,才有得过渡)。--aside-w 是满宽,内容按它定宽、被 aside 的 overflow 裁掉,\n// 收窄过程中菜单文字不会跟着重排。\nconst asideStyle = computed(() => ({\n '--aside-w': asideFullWidth.value,\n width: asideHidden.value ? '0px' : 'var(--aside-w)',\n}))\n\nconst transitionName = computed(() =>\n app.pageTransition === 'none' ? undefined : app.pageTransition,\n)\n\nconst watermarkWho = computed(() => ({\n name: user.userInfo?.name,\n account: user.userInfo?.account,\n org: user.userInfo?.orgName,\n phoneTail: user.userInfo?.phoneTail,\n}))\n\nfunction onMobileSelect(key: string) {\n onSelect(key)\n mobileOpen.value = false\n}\nfunction onMobileSearch() {\n mobileOpen.value = false\n searchOpen.value = true\n}\n\n// 刷新标签:store 置 excludeName(逐出缓存)+ 递增 reloadKey;这里 v-if 关开一次令当前页重挂,再放行缓存。\nconst rvShow = ref(true)\nwatch(\n () => tabs.reloadKey,\n async () => {\n rvShow.value = false\n await nextTick()\n rvShow.value = true\n await nextTick()\n tabs.excludeName = ''\n },\n)\n</script>\n\n<template>\n <div class=\"layout\" :class=\"[`mode-${mode}`, { 'aside-hidden': asideHidden }]\">\n <!-- 侧栏:玻璃面板,悬浮在壁纸上 -->\n <!-- 收起时仍挂载(宽度过渡到 0),inert 让它退出 Tab 序列与无障碍树 -->\n <aside\n v-if=\"showSider\"\n class=\"aside glass\"\n :class=\"{ 'aside--mix': mode === 'vertical-mix', 'aside--hidden': asideHidden }\"\n :style=\"asideStyle\"\n :inert=\"asideHidden\"\n >\n <template v-if=\"mode === 'vertical-mix'\">\n <SideNav\n class=\"rail\"\n :options=\"l1Options\"\n :value=\"selectedL1\"\n rail\n show-brand\n @select=\"onSelectL1\"\n />\n <SideNav\n class=\"l2col\"\n :options=\"l2Options\"\n :value=\"activeKey\"\n show-search\n @select=\"onSelect\"\n @search=\"searchOpen = true\"\n />\n </template>\n <!-- 顶部混合-侧边优先:侧栏只放一级 icon rail(二级在顶栏) -->\n <SideNav\n v-else-if=\"mode === 'top-hybrid-sidebar-first'\"\n :options=\"l1Options\"\n :value=\"selectedL1\"\n rail\n @select=\"onSelectL1\"\n />\n <SideNav\n v-else\n :options=\"asideOptions\"\n :value=\"activeKey\"\n :show-brand=\"sideShowBrand\"\n show-search\n @select=\"onSelect\"\n @search=\"searchOpen = true\"\n />\n </aside>\n\n <!-- 顶部玻璃面板:工具栏 + 页签条同一块,页签条在工具栏下方、以一条发丝线分隔 -->\n <div class=\"shell-head glass\" :class=\"{ 'shell-head--static': !app.fixedHeader }\">\n <header class=\"toolbar\">\n <n-button\n v-if=\"isMobile\"\n quaternary\n circle\n class=\"hbg\"\n :aria-label=\"t('app.openMenu')\"\n @click=\"mobileOpen = true\"\n >\n <Icon icon=\"ph:sidebar-simple\" :width=\"19\" />\n </n-button>\n <div class=\"apph\">\n <AppHeader\n :show-collapse=\"showCollapse\"\n :show-brand=\"headerShowBrand\"\n :top-menu=\"headerTopMenu\"\n :show-search=\"!sideHasSearch\"\n @search=\"searchOpen = true\"\n />\n </div>\n </header>\n <TabsBar v-if=\"app.showTabs\" />\n </div>\n\n <!-- 内容:壁纸(柔光渐变)上直接摆页面,内容层不挂玻璃 -->\n <main class=\"content\">\n <div ref=\"pageRef\" class=\"page\" :class=\"`bp-${bp}`\" :data-bp=\"bp\">\n <!-- 错误边界包住整个内容区:页面组件抛异常时 Vue 会卸掉整棵子树,没有它就是白屏。\n component :key=路由 path 给稳定身份:out-in 过渡才能正确区分进/出场,否则显示上一页缓存\n (按 path 各自成键,不塌缩缓存)。每个页面经 namedPage 套了一层 <div.page-view> 单元素根,\n out-in 能瞬时过渡任何页。 -->\n <ErrorBoundary>\n <router-view v-slot=\"{ Component }\">\n <transition :name=\"transitionName\" mode=\"out-in\">\n <keep-alive :include=\"tabs.cachedNames\" :exclude=\"tabs.excludeName\">\n <component :is=\"Component\" v-if=\"rvShow\" :key=\"activeKey\" />\n </keep-alive>\n </transition>\n </router-view>\n </ErrorBoundary>\n </div>\n <AppWatermark v-if=\"site.watermark.enabled\" :settings=\"site.watermark\" :who=\"watermarkWho\" />\n </main>\n\n <!-- 移动端抽屉侧栏 -->\n <n-drawer v-model:show=\"mobileOpen\" placement=\"left\" :width=\"236\">\n <n-drawer-content :native-scrollbar=\"false\" body-content-style=\"padding:0\">\n <SideNav\n :options=\"menuOptions\"\n :value=\"activeKey\"\n show-brand\n show-search\n @select=\"onMobileSelect\"\n @search=\"onMobileSearch\"\n />\n </n-drawer-content>\n </n-drawer>\n\n <MenuSearch v-model:show=\"searchOpen\" />\n </div>\n</template>\n\n<style scoped>\n/* 壳层:两块玻璃面板(侧栏 / 顶部)+ 一块内容区,离屏幕边缘 8px、面板之间 8px。\n 背景是一整张氛围壁纸(--wallpaper:由强调色推导的柔光 + 底色,不画网格),玻璃叠在光上才有层次;\n 内容层的卡片不用玻璃(只有侧栏、顶栏、弹层是玻璃)。\n z-index 全部压在 1999 以下:smart-naive-table 的放大层是 1999(刻意低于 naive 浮层的 2000),\n 壳层不能盖住它。 */\n.layout {\n --sidebar-w: 232px;\n --rail-w: 64px;\n --aside-duration: 0.28s; /* 侧栏收起 / 展开,macOS 侧栏滑动的量级 */\n display: grid;\n /* dvh 而非 vh:移动端浏览器地址栏收起时 vh 仍按最小视口算,底部会被裁掉一条 */\n height: 100dvh;\n padding: 8px;\n gap: 8px;\n overflow: hidden;\n background: var(--wallpaper, var(--bg-app));\n}\n/* 竖向壳:侧栏满高在左,顶栏缩进到内容列上方 */\n.mode-vertical,\n.mode-vertical-mix,\n.mode-vertical-hybrid-header-first {\n grid-template-columns: auto minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n grid-template-areas: 'aside header' 'aside content';\n}\n/* 顶栏壳:顶栏通栏,侧栏在其下方左侧 */\n.mode-top-hybrid-sidebar-first,\n.mode-top-hybrid-header-first {\n grid-template-columns: auto minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n grid-template-areas: 'header header' 'aside content';\n}\n.mode-horizontal,\n.mode-mobile {\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: auto minmax(0, 1fr);\n grid-template-areas: 'header' 'content';\n}\n\n/* 侧栏隐藏:列还在,侧栏宽度过渡到 0;列间距也要归零,否则空列旁边还留一道 8px。\n 两者用同一时长与曲线,内容区才是被侧栏「推」着变宽,而不是先后跳两下。 */\n.layout {\n transition: column-gap var(--aside-duration) var(--ease-sheet);\n}\n.layout.aside-hidden {\n column-gap: 0;\n}\n\n/* 玻璃面板:半透明底 + 强模糊 + 发丝描边 + 顶边高光 + 深投影 */\n.glass {\n background: var(--glass-panel);\n backdrop-filter: blur(40px) saturate(180%);\n -webkit-backdrop-filter: blur(40px) saturate(180%);\n border: 1px solid var(--glass-border);\n box-shadow: var(--glass-shadow);\n}\n@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {\n .glass {\n background: var(--glass-solid, var(--glass-panel));\n }\n}\n\n.aside {\n grid-area: aside;\n position: relative;\n z-index: 2;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n border-radius: var(--radius-lg);\n transition:\n width var(--aside-duration) var(--ease-sheet),\n border-width var(--aside-duration) var(--ease-sheet),\n opacity 0.2s ease;\n}\n/* 收起:border-box 下宽 0 仍会留两侧 1px 描边,一并归零;透明度同时带走投影 */\n.aside--hidden {\n border-width: 0;\n opacity: 0;\n}\n/* 内容按满宽定宽,被 .aside 的 overflow:hidden 裁掉,收窄时不重排(mix 模式由下面两条各自定宽) */\n.aside:not(.aside--mix) > * {\n width: var(--aside-w);\n}\n.aside--mix {\n display: flex;\n}\n.aside--mix .rail {\n width: var(--rail-w);\n flex-shrink: 0;\n border-right: 1px solid var(--hairline);\n}\n.aside--mix .l2col {\n flex: none;\n width: var(--sidebar-w);\n}\n\n.shell-head {\n grid-area: header;\n position: relative;\n z-index: 5;\n min-width: 0;\n overflow: hidden;\n border-radius: 14px;\n}\n/* 「固定头部」关闭:顶栏不再模糊背后的内容 */\n.shell-head--static {\n backdrop-filter: none;\n -webkit-backdrop-filter: none;\n}\n.toolbar {\n display: flex;\n align-items: stretch;\n height: 44px;\n}\n.hbg {\n align-self: center;\n margin-left: 8px;\n}\n.apph {\n flex: 1;\n min-width: 0;\n height: 100%;\n}\n\n.content {\n grid-area: content;\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n/* 页面滚动层。左右只留 2px(让卡片的描边 / 投影不被 overflow 裁掉)。\n 顶部不留白:顶栏到首张卡片永远是面板之间的 8px(--gap-card),满屏页和自然滚动页一样 —— 两类页面顶部间距不同的话,\n 从列表页切到工作台首张卡片会下跳一截。自然滚动页底部留 8px 给卡片投影,满屏页(下条)只留 2px。\n 内边距不进壳层档位的数字:档位量的是这块的 content box,见 composables/useShellBreakpoint。 */\n.page {\n flex: 1;\n min-height: 0;\n overflow: auto;\n padding: 0 2px 8px;\n}\n/* 满屏页(列表 / 左右分栏)吃满一屏,四周只留 2px,滚动发生在表体里 */\n.page:not(.bp-narrow):has(> .page-view > :is(.smart-table, .fill-page, .side-page)) {\n padding: 0 2px 2px;\n}\n/* narrow:整页自然滚动,不再锁一屏高度。满屏列表页的 .page-view 在 layout.css 里被补成 height:100%,\n 这里放回自动高度,内容多长页面就多长、由 .page 滚动。 */\n.page.bp-narrow :deep(.page-view) {\n height: auto;\n}\n</style>\n"],"names":["t","useI18n","app","useAppStore","user","useUserStore","tabs","useTabsStore","site","useSite","menuOptions","l1Options","l2Options","selectedL1","activeKey","onSelect","onSelectL1","useLayoutMenu","startRealtime","stopRealtime","useRealtime","onMounted","onUnmounted","useVisualViewportHeight","isMobile","useBreakpoints","breakpointsTailwind","mobileOpen","ref","searchOpen","pageRef","bp","provideShellBreakpoint","mode","computed","withSider","headerBrandModes","showSider","sideShowBrand","headerShowBrand","asideHidden","headerTopMenu","collapsibleSider","showCollapse","sideHasSearch","inEditable","target","onKeyStroke","e","asideOptions","asideFullWidth","asideStyle","transitionName","watermarkWho","_a","_b","_c","_d","onMobileSelect","key","onMobileSearch","rvShow","watch","nextTick","_createElementBlock","_normalizeClass","_Fragment","_createVNode","SideNav","_unref","_createBlock","_createElementVNode","_hoisted_2","NButton","Icon","_hoisted_3","AppHeader","TabsBar","_hoisted_4","ErrorBoundary","RouterView","_withCtx","Component","_Transition","_KeepAlive","_openBlock","_resolveDynamicComponent","AppWatermark","NDrawer","$event","NDrawerContent","MenuSearch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAsBA,UAAM,EAAE,GAAAA,EAAA,IAAMC,GAAA,GACRC,IAAMC,GAAA,GACNC,IAAOC,GAAA,GACPC,IAAOC,GAAA,GACP,EAAE,MAAAC,EAAA,IAASC,GAAA,GACX,EAAE,aAAAC,GAAa,WAAAC,GAAW,WAAAC,GAAW,YAAAC,GAAY,WAAAC,GAAW,UAAAC,GAAU,YAAAC,EAAA,IAC1EC,GAAA,GAGI,EAAE,OAAOC,GAAe,MAAMC,EAAA,IAAiBC,GAAA;AACrD,IAAAC,GAAUH,CAAa,GACvBI,GAAYH,CAAY,GAIxBI,GAAA;AAEA,UAAMC,IAAWC,GAAeC,EAAmB,EAAE,QAAQ,IAAI,GAC3DC,IAAaC,EAAI,EAAK,GAEtBC,IAAaD,EAAI,EAAK,GAItBE,IAAUF,EAAA,GACV,EAAE,IAAAG,EAAA,IAAOC,GAAuBF,CAAO,GAGvCG,IAAOC,EAAgC,MAAOV,EAAS,QAAQ,WAAWtB,EAAI,UAAW,GAGzFiC,wBAAgB,IAAgB;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD,GAEKC,wBAAuB,IAAY;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD,GACKC,IAAYH,EAAS,MAAM,CAACV,EAAS,SAASW,EAAU,IAAIjC,EAAI,UAAU,CAAC,GAC3EoC,IAAgBJ,EAAS,MAAMD,EAAK,UAAU,cAAcA,EAAK,UAAU,cAAc,GAEzFM,IAAkBL;AAAA,MACtB,MAAMV,EAAS,SAASY,EAAiB,IAAIH,EAAK,KAAK,KAAKO,EAAY;AAAA,IAAA,GAGpEC,IAAgBP,EAAsC,MAAM;AAChE,cAAQD,EAAK,OAAA;AAAA,QACX,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC,GAEKS,wBAAuB,IAAY;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD,GACKC,IAAeT,EAAS,MAAM,CAACV,EAAS,SAASkB,EAAiB,IAAIT,EAAK,KAAK,CAAC,GAEjFO,IAAcN;AAAA,MAClB,MAAMG,EAAU,SAASnC,EAAI,aAAawC,EAAiB,IAAIT,EAAK,KAAK;AAAA,IAAA,GAIrEW,IAAgBV;AAAA,MACpB,MAAMG,EAAU,SAAS,CAACG,EAAY,SAASP,EAAK,UAAU;AAAA,IAAA;AAKhE,aAASY,EAAWC,GAA4B;AAC9C,aAAMA,aAAkB,cAEtB,CAAC,SAAS,YAAY,QAAQ,EAAE,SAASA,EAAO,OAAO,KACvDA,EAAO,qBACP,CAAC,CAACA,EAAO,QAAQ,uCAAuC,IAJb;AAAA,IAM/C;AACA,IAAAC,GAAY,KAAK,CAAAC,MAAK;AACpB,MAAI,EAAEA,EAAE,WAAWA,EAAE,YAAYA,EAAE,UAAUA,EAAE,YAC3C,CAACL,EAAa,SAASE,EAAWG,EAAE,MAAM,MAC9CA,EAAE,eAAA,GACF9C,EAAI,gBAAA;AAAA,IACN,CAAC;AAGD,UAAM+C,IAAef;AAAA,MAAS,MAC5BD,EAAK,UAAU,aAAavB,EAAY,QAAQE,EAAU;AAAA,IAAA,GAEtDsC,IAAiBhB,EAAS,MAC1BD,EAAK,UAAU,iBAAuB,2CACtCA,EAAK,UAAU,6BAAmC,kBAC/C,kBACR,GAGKkB,IAAajB,EAAS,OAAO;AAAA,MACjC,aAAagB,EAAe;AAAA,MAC5B,OAAOV,EAAY,QAAQ,QAAQ;AAAA,IAAA,EACnC,GAEIY,IAAiBlB;AAAA,MAAS,MAC9BhC,EAAI,mBAAmB,SAAS,SAAYA,EAAI;AAAA,IAAA,GAG5CmD,IAAenB,EAAS,MAAA;;AAAO;AAAA,QACnC,OAAMoB,IAAAlD,EAAK,aAAL,gBAAAkD,EAAe;AAAA,QACrB,UAASC,IAAAnD,EAAK,aAAL,gBAAAmD,EAAe;AAAA,QACxB,MAAKC,IAAApD,EAAK,aAAL,gBAAAoD,EAAe;AAAA,QACpB,YAAWC,IAAArD,EAAK,aAAL,gBAAAqD,EAAe;AAAA,MAAA;AAAA,KAC1B;AAEF,aAASC,GAAeC,GAAa;AACnC,MAAA5C,EAAS4C,CAAG,GACZhC,EAAW,QAAQ;AAAA,IACrB;AACA,aAASiC,KAAiB;AACxB,MAAAjC,EAAW,QAAQ,IACnBE,EAAW,QAAQ;AAAA,IACrB;AAGA,UAAMgC,IAASjC,EAAI,EAAI;AACvB,WAAAkC;AAAA,MACE,MAAMxD,EAAK;AAAA,MACX,YAAY;AACV,QAAAuD,EAAO,QAAQ,IACf,MAAME,EAAA,GACNF,EAAO,QAAQ,IACf,MAAME,EAAA,GACNzD,EAAK,cAAc;AAAA,MACrB;AAAA,IAAA,mBAKA0D,EA4GM,OAAA;AAAA,MA5GD,OAAKC,EAAA,CAAC,UAAQ,CAAA,QAAkBhC,EAAA,KAAI,sBAAsBO,EAAA,MAAA,CAAW,CAAA,CAAA;AAAA,IAAA;MAIhEH,EAAA,cADR2B,EA0CQ,SAAA;AAAA;QAxCN,OAAKC,EAAA,CAAC,eAAa,EAAA,cACKhC,EAAA,2CAA0CO,EAAA,MAAA,CAAW,CAAA;AAAA,QAC5E,UAAOW,EAAA,KAAU;AAAA,QACjB,OAAOX,EAAA;AAAA,MAAA;QAEQP,EAAA,UAAI,uBAApB+B,EAiBWE,IAAA,EAAA,KAAA,KAAA;AAAA,UAhBTC,EAOEC,GAAA;AAAA,YANA,OAAM;AAAA,YACL,SAASC,EAAA1D,CAAA;AAAA,YACT,OAAO0D,EAAAxD,CAAA;AAAA,YACR,MAAA;AAAA,YACA,cAAA;AAAA,YACC,UAAQwD,EAAArD,CAAA;AAAA,UAAA;UAEXmD,EAOEC,GAAA;AAAA,YANA,OAAM;AAAA,YACL,SAASC,EAAAzD,CAAA;AAAA,YACT,OAAOyD,EAAAvD,CAAA;AAAA,YACR,eAAA;AAAA,YACC,UAAQuD,EAAAtD,CAAA;AAAA,YACR,iCAAQc,EAAA,QAAU;AAAA,UAAA;kBAKVI,EAAA,UAAI,mCADjBqC,EAMEF,GAAA;AAAA;UAJC,SAASC,EAAA1D,CAAA;AAAA,UACT,OAAO0D,EAAAxD,CAAA;AAAA,UACR,MAAA;AAAA,UACC,UAAQwD,EAAArD,CAAA;AAAA,QAAA,uDAEXsD,EAQEF,GAAA;AAAA;UANC,SAASnB,EAAA;AAAA,UACT,OAAOoB,EAAAvD,CAAA;AAAA,UACP,cAAYwB,EAAA;AAAA,UACb,eAAA;AAAA,UACC,UAAQ+B,EAAAtD,CAAA;AAAA,UACR,iCAAQc,EAAA,QAAU;AAAA,QAAA;;MAKvB0C,EAuBM,OAAA;AAAA,QAvBD,OAAKN,EAAA,CAAC,oBAAkB,EAAA,sBAAA,CAAkCI,EAAAnE,CAAA,EAAI,aAAW,CAAA;AAAA,MAAA;QAC5EqE,EAoBS,UApBTC,IAoBS;AAAA,UAlBCH,EAAA7C,CAAA,UADR8C,EASWD,EAAAI,EAAA,GAAA;AAAA;YAPT,YAAA;AAAA,YACA,QAAA;AAAA,YACA,OAAM;AAAA,YACL,cAAYJ,EAAArE,CAAA,EAAC,cAAA;AAAA,YACb,gCAAO2B,EAAA,QAAU;AAAA,UAAA;uBAElB,MAA6C;AAAA,cAA7CwC,EAA6CE,EAAAK,EAAA,GAAA;AAAA,gBAAvC,MAAK;AAAA,gBAAqB,OAAO;AAAA,cAAA;;;;UAEzCH,EAQM,OARNI,IAQM;AAAA,YAPJR,EAMES,IAAA;AAAA,cALC,iBAAejC,EAAA;AAAA,cACf,cAAYJ,EAAA;AAAA,cACZ,YAAUE,EAAA;AAAA,cACV,gBAAcG,EAAA;AAAA,cACd,iCAAQf,EAAA,QAAU;AAAA,YAAA;;;QAIVwC,EAAAnE,CAAA,EAAI,iBAAnBoE,EAA+BO,IAAA,EAAA,KAAA,EAAA,CAAA;;MAIjCN,EAiBO,QAjBPO,IAiBO;AAAA,QAhBLP,EAcM,OAAA;AAAA,mBAdG;AAAA,UAAJ,KAAIzC;AAAA,UAAU,OAAKmC,EAAA,CAAC,QAAM,MAAeI,EAAAtC,CAAA,CAAE,EAAA,CAAA;AAAA,UAAK,WAASsC,EAAAtC,CAAA;AAAA,QAAA;UAK5DoC,EAQgBY,IAAA,MAAA;AAAA,uBAPd,MAMc;AAAA,cANdZ,EAMcE,EAAAW,EAAA,GAAA,MAAA;AAAA,gBALZ,SAAAC,EAAA,CAIa,EALQ,WAAAC,QAAS;AAAA,kBAC9Bf,EAIagB,IAAA;AAAA,oBAJA,MAAM/B,EAAA;AAAA,oBAAgB,MAAK;AAAA,kBAAA;+BACtC,MAEa;AAAA,4BAFbkB,EAEac,IAAA;AAAA,wBAFA,SAASf,EAAA/D,CAAA,EAAK;AAAA,wBAAc,SAAS+D,EAAA/D,CAAA,EAAK;AAAA,sBAAA;wBACpBuD,EAAA,SAAjCwB,EAAA,GAAAf,EAA4DgB,GAA5CJ,CAAS,GAAA,EAAiB,KAAKb,EAAAvD,CAAA,EAAA,CAAS;;;;;;;;;;;;QAM9CuD,EAAA7D,CAAA,EAAK,UAAU,gBAAnC8D,EAA6FiB,IAAA;AAAA;UAAhD,UAAUlB,EAAA7D,CAAA,EAAK;AAAA,UAAY,KAAK6C,EAAA;AAAA,QAAA;;MAI/Ec,EAWWE,EAAAmB,EAAA,GAAA;AAAA,QAXO,MAAM7D,EAAA;AAAA,gDAAAA,EAAU,QAAA8D;AAAA,QAAE,WAAU;AAAA,QAAQ,OAAO;AAAA,MAAA;mBAC3D,MASmB;AAAA,UATnBtB,EASmBE,EAAAqB,EAAA,GAAA;AAAA,YATA,oBAAkB;AAAA,YAAO,sBAAmB;AAAA,UAAA;uBAC7D,MAOE;AAAA,cAPFvB,EAOEC,GAAA;AAAA,gBANC,SAASC,EAAA3D,CAAA;AAAA,gBACT,OAAO2D,EAAAvD,CAAA;AAAA,gBACR,cAAA;AAAA,gBACA,eAAA;AAAA,gBACC,UAAQ4C;AAAA,gBACR,UAAQE;AAAA,cAAA;;;;;;;MAKfO,EAAwCwB,IAAA;AAAA,QAApB,MAAM9D,EAAA;AAAA,gDAAAA,EAAU,QAAA4D;AAAA,MAAA;;;;"}
@@ -0,0 +1 @@
1
+ export declare function applyFavicon(doc: Document, logo: string | null | undefined): void;
@@ -0,0 +1,12 @@
1
+ const i = /* @__PURE__ */ new WeakMap();
2
+ function l(f, r) {
3
+ const n = f.querySelectorAll('link[rel~="icon"]');
4
+ for (const e of n) {
5
+ let t = i.get(e);
6
+ t || (t = { href: e.getAttribute("href") ?? "", type: e.getAttribute("type") }, i.set(e, t)), r ? (e.href = r, e.removeAttribute("type")) : (e.setAttribute("href", t.href), t.type && e.setAttribute("type", t.type));
7
+ }
8
+ }
9
+ export {
10
+ l as applyFavicon
11
+ };
12
+ //# sourceMappingURL=favicon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favicon.js","sources":["../../src/lib/favicon.ts"],"sourcesContent":["// 浏览器标签页图标跟随站点 Logo。改写页面里所有 rel=icon 的 href,而不是再追加一个:\n// 多个候选时各浏览器挑哪个并不一致,追加的那个未必生效。原 href/type 记在 WeakMap 里,Logo 清空时还原。\n// 不记在 DOM 属性上:从 DOM 读出再写回 href,会被静态分析当成\"DOM 文本重新解释为 HTML\"。\n// apple-touch-icon 不动:iOS 主屏图标要 180×180 不透明底,和 Logo 的要求不同。\n\ninterface IconDefaults {\n href: string\n type: string | null\n}\n\nconst defaults = new WeakMap<HTMLLinkElement, IconDefaults>()\n\nexport function applyFavicon(doc: Document, logo: string | null | undefined): void {\n const links = doc.querySelectorAll<HTMLLinkElement>('link[rel~=\"icon\"]')\n for (const link of links) {\n let original = defaults.get(link)\n if (!original) {\n original = { href: link.getAttribute('href') ?? '', type: link.getAttribute('type') }\n defaults.set(link, original)\n }\n if (logo) {\n link.href = logo\n link.removeAttribute('type') // 原 type 可能是 image/svg+xml,留着会让浏览器按错的类型解析 Logo\n } else {\n link.setAttribute('href', original.href)\n if (original.type) link.setAttribute('type', original.type)\n }\n }\n}\n"],"names":["defaults","applyFavicon","doc","logo","links","link","original"],"mappings":"AAUA,MAAMA,wBAAe,QAAA;AAEd,SAASC,EAAaC,GAAeC,GAAuC;AACjF,QAAMC,IAAQF,EAAI,iBAAkC,mBAAmB;AACvE,aAAWG,KAAQD,GAAO;AACxB,QAAIE,IAAWN,EAAS,IAAIK,CAAI;AAChC,IAAKC,MACHA,IAAW,EAAE,MAAMD,EAAK,aAAa,MAAM,KAAK,IAAI,MAAMA,EAAK,aAAa,MAAM,EAAA,GAClFL,EAAS,IAAIK,GAAMC,CAAQ,IAEzBH,KACFE,EAAK,OAAOF,GACZE,EAAK,gBAAgB,MAAM,MAE3BA,EAAK,aAAa,QAAQC,EAAS,IAAI,GACnCA,EAAS,QAAMD,EAAK,aAAa,QAAQC,EAAS,IAAI;AAAA,EAE9D;AACF;"}
@@ -0,0 +1,16 @@
1
+ export interface LoginHeroCopy {
2
+ headline: string;
3
+ highlight: string;
4
+ features: string[];
5
+ }
6
+ export interface LoginHeroFallbacks {
7
+ headline: string;
8
+ highlight: string;
9
+ features: string[];
10
+ }
11
+ /** 亮点按行输入;空行忽略,最多保留 5 条。 */
12
+ export declare function splitLoginHeroFeatures(value: string | null | undefined, max?: number): string[];
13
+ /** 归一化站点接口下发的 Hero 文案,非法形状按缺失处理。 */
14
+ export declare function normalizeLoginHero(value: unknown): Record<string, LoginHeroCopy>;
15
+ /** 空配置逐字段回退内置文案;亮点开关关闭时返回空清单。 */
16
+ export declare function resolveLoginHero(copy: Partial<LoginHeroCopy> | undefined, fallback: LoginHeroFallbacks, showFeatures?: boolean): LoginHeroCopy;
@@ -0,0 +1,33 @@
1
+ function s(r, t = 5) {
2
+ return r != null && r.trim() ? r.replace(/\r\n/g, `
3
+ `).split(`
4
+ `).map((n) => n.trim()).filter(Boolean).slice(0, t) : [];
5
+ }
6
+ function f(r) {
7
+ if (!r || typeof r != "object" || Array.isArray(r)) return {};
8
+ const t = {};
9
+ for (const [n, i] of Object.entries(r)) {
10
+ if (!i || typeof i != "object" || Array.isArray(i)) continue;
11
+ const e = i;
12
+ t[n] = {
13
+ headline: typeof e.headline == "string" ? e.headline : "",
14
+ highlight: typeof e.highlight == "string" ? e.highlight : "",
15
+ features: Array.isArray(e.features) ? e.features.filter((h) => typeof h == "string" && !!h.trim()) : []
16
+ };
17
+ }
18
+ return t;
19
+ }
20
+ function g(r, t, n = !0) {
21
+ var i, e, h;
22
+ return {
23
+ headline: ((i = r == null ? void 0 : r.headline) == null ? void 0 : i.trim()) || t.headline,
24
+ highlight: ((e = r == null ? void 0 : r.highlight) == null ? void 0 : e.trim()) || t.highlight,
25
+ features: n ? (h = r == null ? void 0 : r.features) != null && h.length ? r.features : t.features : []
26
+ };
27
+ }
28
+ export {
29
+ f as normalizeLoginHero,
30
+ g as resolveLoginHero,
31
+ s as splitLoginHeroFeatures
32
+ };
33
+ //# sourceMappingURL=loginHero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loginHero.js","sources":["../../src/lib/loginHero.ts"],"sourcesContent":["export interface LoginHeroCopy {\n headline: string\n highlight: string\n features: string[]\n}\n\nexport interface LoginHeroFallbacks {\n headline: string\n highlight: string\n features: string[]\n}\n\n/** 亮点按行输入;空行忽略,最多保留 5 条。 */\nexport function splitLoginHeroFeatures(value: string | null | undefined, max = 5): string[] {\n if (!value?.trim()) return []\n return value\n .replace(/\\r\\n/g, '\\n')\n .split('\\n')\n .map(line => line.trim())\n .filter(Boolean)\n .slice(0, max)\n}\n\n/** 归一化站点接口下发的 Hero 文案,非法形状按缺失处理。 */\nexport function normalizeLoginHero(value: unknown): Record<string, LoginHeroCopy> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {}\n\n const result: Record<string, LoginHeroCopy> = {}\n for (const [locale, raw] of Object.entries(value)) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) continue\n const copy = raw as Record<string, unknown>\n result[locale] = {\n headline: typeof copy.headline === 'string' ? copy.headline : '',\n highlight: typeof copy.highlight === 'string' ? copy.highlight : '',\n features: Array.isArray(copy.features)\n ? copy.features.filter((item): item is string => typeof item === 'string' && !!item.trim())\n : [],\n }\n }\n return result\n}\n\n/** 空配置逐字段回退内置文案;亮点开关关闭时返回空清单。 */\nexport function resolveLoginHero(\n copy: Partial<LoginHeroCopy> | undefined,\n fallback: LoginHeroFallbacks,\n showFeatures = true,\n): LoginHeroCopy {\n return {\n headline: copy?.headline?.trim() || fallback.headline,\n highlight: copy?.highlight?.trim() || fallback.highlight,\n features: showFeatures ? (copy?.features?.length ? copy.features : fallback.features) : [],\n }\n}\n"],"names":["splitLoginHeroFeatures","value","max","line","normalizeLoginHero","result","locale","raw","copy","item","resolveLoginHero","fallback","showFeatures","_a","_b","_c"],"mappings":"AAaO,SAASA,EAAuBC,GAAkCC,IAAM,GAAa;AAC1F,SAAKD,KAAA,QAAAA,EAAO,SACLA,EACJ,QAAQ,SAAS;AAAA,CAAI,EACrB,MAAM;AAAA,CAAI,EACV,IAAI,OAAQE,EAAK,KAAA,CAAM,EACvB,OAAO,OAAO,EACd,MAAM,GAAGD,CAAG,IANY,CAAA;AAO7B;AAGO,SAASE,EAAmBH,GAA+C;AAChF,MAAI,CAACA,KAAS,OAAOA,KAAU,YAAY,MAAM,QAAQA,CAAK,EAAG,QAAO,CAAA;AAExE,QAAMI,IAAwC,CAAA;AAC9C,aAAW,CAACC,GAAQC,CAAG,KAAK,OAAO,QAAQN,CAAK,GAAG;AACjD,QAAI,CAACM,KAAO,OAAOA,KAAQ,YAAY,MAAM,QAAQA,CAAG,EAAG;AAC3D,UAAMC,IAAOD;AACb,IAAAF,EAAOC,CAAM,IAAI;AAAA,MACf,UAAU,OAAOE,EAAK,YAAa,WAAWA,EAAK,WAAW;AAAA,MAC9D,WAAW,OAAOA,EAAK,aAAc,WAAWA,EAAK,YAAY;AAAA,MACjE,UAAU,MAAM,QAAQA,EAAK,QAAQ,IACjCA,EAAK,SAAS,OAAO,CAACC,MAAyB,OAAOA,KAAS,YAAY,CAAC,CAACA,EAAK,KAAA,CAAM,IACxF,CAAA;AAAA,IAAC;AAAA,EAET;AACA,SAAOJ;AACT;AAGO,SAASK,EACdF,GACAG,GACAC,IAAe,IACA;AAlCV,MAAAC,GAAAC,GAAAC;AAmCL,SAAO;AAAA,IACL,YAAUF,IAAAL,KAAA,gBAAAA,EAAM,aAAN,gBAAAK,EAAgB,WAAUF,EAAS;AAAA,IAC7C,aAAWG,IAAAN,KAAA,gBAAAA,EAAM,cAAN,gBAAAM,EAAiB,WAAUH,EAAS;AAAA,IAC/C,UAAUC,KAAgBG,IAAAP,KAAA,gBAAAA,EAAM,aAAN,QAAAO,EAAgB,SAASP,EAAK,WAAWG,EAAS,WAAY,CAAA;AAAA,EAAC;AAE7F;"}
@@ -0,0 +1,25 @@
1
+ export interface CropState {
2
+ /** 图片原始宽高 */
3
+ width: number;
4
+ height: number;
5
+ /** 取景框边长(px,视口坐标) */
6
+ frame: number;
7
+ /** 当前缩放(图片像素 → 视口像素) */
8
+ scale: number;
9
+ /** 图片中心相对取景框中心的偏移(视口像素) */
10
+ x: number;
11
+ y: number;
12
+ }
13
+ /** 刚好铺满取景框的最小缩放:短边等于框边,不留空白。 */
14
+ export declare function coverScale(width: number, height: number, frame: number): number;
15
+ /** 把偏移收在"图片始终盖满取景框"的范围内。 */
16
+ export declare function clampOffset(s: CropState): {
17
+ x: number;
18
+ y: number;
19
+ };
20
+ /** 取景框在原图上的区域(原图像素),供 drawImage 取源矩形。 */
21
+ export declare function sourceRect(s: CropState): {
22
+ sx: number;
23
+ sy: number;
24
+ size: number;
25
+ };
@@ -0,0 +1,22 @@
1
+ function n(t, e, a) {
2
+ return a / Math.min(t, e);
3
+ }
4
+ const c = (t, e) => e === 0 ? 0 : Math.min(e, Math.max(-e, t));
5
+ function r(t) {
6
+ const e = Math.max(0, (t.width * t.scale - t.frame) / 2), a = Math.max(0, (t.height * t.scale - t.frame) / 2);
7
+ return { x: c(t.x, e), y: c(t.y, a) };
8
+ }
9
+ function h(t) {
10
+ const e = t.frame / t.scale;
11
+ return {
12
+ sx: t.width / 2 - t.x / t.scale - e / 2,
13
+ sy: t.height / 2 - t.y / t.scale - e / 2,
14
+ size: e
15
+ };
16
+ }
17
+ export {
18
+ r as clampOffset,
19
+ n as coverScale,
20
+ h as sourceRect
21
+ };
22
+ //# sourceMappingURL=logoCrop.js.map