smart-admin-web 10.5.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 (718) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +78 -0
  3. package/dist/App.vue.d.ts +3 -0
  4. package/dist/App.vue.js +54 -0
  5. package/dist/App.vue.js.map +1 -0
  6. package/dist/App2.vue.js +5 -0
  7. package/dist/App2.vue.js.map +1 -0
  8. package/dist/_virtual/_plugin-vue_export-helper.js +10 -0
  9. package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
  10. package/dist/api/client.d.ts +29 -0
  11. package/dist/api/client.js +139 -0
  12. package/dist/api/client.js.map +1 -0
  13. package/dist/api/index.d.ts +672 -0
  14. package/dist/api/index.js +638 -0
  15. package/dist/api/index.js.map +1 -0
  16. package/dist/api/reauthGate.d.ts +16 -0
  17. package/dist/api/reauthGate.js +21 -0
  18. package/dist/api/reauthGate.js.map +1 -0
  19. package/dist/api/schema.d.ts +10230 -0
  20. package/dist/assets/icons/ph-subset.json.js +16 -0
  21. package/dist/assets/icons/ph-subset.json.js.map +1 -0
  22. package/dist/assets/oauth/dingtalk.svg.js +5 -0
  23. package/dist/assets/oauth/dingtalk.svg.js.map +1 -0
  24. package/dist/assets/oauth/gitee.svg.js +5 -0
  25. package/dist/assets/oauth/gitee.svg.js.map +1 -0
  26. package/dist/assets/oauth/github.svg.js +5 -0
  27. package/dist/assets/oauth/github.svg.js.map +1 -0
  28. package/dist/assets/oauth/qq.svg.js +5 -0
  29. package/dist/assets/oauth/qq.svg.js.map +1 -0
  30. package/dist/assets/oauth/wechat.svg.js +5 -0
  31. package/dist/assets/oauth/wechat.svg.js.map +1 -0
  32. package/dist/assets/oauth/wecom.svg.js +5 -0
  33. package/dist/assets/oauth/wecom.svg.js.map +1 -0
  34. package/dist/assets/svg/star.svg.js +6 -0
  35. package/dist/assets/svg/star.svg.js.map +1 -0
  36. package/dist/components/ApiSelect/index.vue.d.ts +22 -0
  37. package/dist/components/ApiSelect/index.vue.js +50 -0
  38. package/dist/components/ApiSelect/index.vue.js.map +1 -0
  39. package/dist/components/ApiSelect/index2.vue.js +5 -0
  40. package/dist/components/ApiSelect/index2.vue.js.map +1 -0
  41. package/dist/components/AppIcon.vue.d.ts +7 -0
  42. package/dist/components/AppIcon.vue.js +33 -0
  43. package/dist/components/AppIcon.vue.js.map +1 -0
  44. package/dist/components/AppIcon2.vue.js +5 -0
  45. package/dist/components/AppIcon2.vue.js.map +1 -0
  46. package/dist/components/Chart/BarChart.vue.d.ts +13 -0
  47. package/dist/components/Chart/BarChart.vue.js +27 -0
  48. package/dist/components/Chart/BarChart.vue.js.map +1 -0
  49. package/dist/components/Chart/BarChart2.vue.js +5 -0
  50. package/dist/components/Chart/BarChart2.vue.js.map +1 -0
  51. package/dist/components/Chart/LineChart.vue.d.ts +15 -0
  52. package/dist/components/Chart/LineChart.vue.js +33 -0
  53. package/dist/components/Chart/LineChart.vue.js.map +1 -0
  54. package/dist/components/Chart/LineChart2.vue.js +5 -0
  55. package/dist/components/Chart/LineChart2.vue.js.map +1 -0
  56. package/dist/components/Chart/PieChart.vue.d.ts +14 -0
  57. package/dist/components/Chart/PieChart.vue.js +31 -0
  58. package/dist/components/Chart/PieChart.vue.js.map +1 -0
  59. package/dist/components/Chart/PieChart2.vue.js +5 -0
  60. package/dist/components/Chart/PieChart2.vue.js.map +1 -0
  61. package/dist/components/Chart/echarts.d.ts +57 -0
  62. package/dist/components/Chart/echarts.js +47 -0
  63. package/dist/components/Chart/echarts.js.map +1 -0
  64. package/dist/components/Chart/index.vue.d.ts +12 -0
  65. package/dist/components/Chart/index.vue.js +8 -0
  66. package/dist/components/Chart/index.vue.js.map +1 -0
  67. package/dist/components/Chart/index2.vue.js +27 -0
  68. package/dist/components/Chart/index2.vue.js.map +1 -0
  69. package/dist/components/CodeBlock/index.vue.d.ts +17 -0
  70. package/dist/components/CodeBlock/index.vue.js +8 -0
  71. package/dist/components/CodeBlock/index.vue.js.map +1 -0
  72. package/dist/components/CodeBlock/index2.vue.js +48 -0
  73. package/dist/components/CodeBlock/index2.vue.js.map +1 -0
  74. package/dist/components/CronEditor/index.vue.d.ts +15 -0
  75. package/dist/components/CronEditor/index.vue.js +8 -0
  76. package/dist/components/CronEditor/index.vue.js.map +1 -0
  77. package/dist/components/CronEditor/index2.vue.js +528 -0
  78. package/dist/components/CronEditor/index2.vue.js.map +1 -0
  79. package/dist/components/DetailPage/index.vue.d.ts +26 -0
  80. package/dist/components/DetailPage/index.vue.js +8 -0
  81. package/dist/components/DetailPage/index.vue.js.map +1 -0
  82. package/dist/components/DetailPage/index2.vue.js +51 -0
  83. package/dist/components/DetailPage/index2.vue.js.map +1 -0
  84. package/dist/components/DictCheckbox/index.vue.d.ts +6 -0
  85. package/dist/components/DictCheckbox/index.vue.js +43 -0
  86. package/dist/components/DictCheckbox/index.vue.js.map +1 -0
  87. package/dist/components/DictCheckbox/index2.vue.js +5 -0
  88. package/dist/components/DictCheckbox/index2.vue.js.map +1 -0
  89. package/dist/components/DictRadio/index.vue.d.ts +6 -0
  90. package/dist/components/DictRadio/index.vue.js +38 -0
  91. package/dist/components/DictRadio/index.vue.js.map +1 -0
  92. package/dist/components/DictRadio/index2.vue.js +5 -0
  93. package/dist/components/DictRadio/index2.vue.js.map +1 -0
  94. package/dist/components/DictSelect/index.vue.d.ts +6 -0
  95. package/dist/components/DictSelect/index.vue.js +37 -0
  96. package/dist/components/DictSelect/index.vue.js.map +1 -0
  97. package/dist/components/DictSelect/index2.vue.js +5 -0
  98. package/dist/components/DictSelect/index2.vue.js.map +1 -0
  99. package/dist/components/DictTag/index.vue.d.ts +10 -0
  100. package/dist/components/DictTag/index.vue.js +48 -0
  101. package/dist/components/DictTag/index.vue.js.map +1 -0
  102. package/dist/components/DictTag/index2.vue.js +5 -0
  103. package/dist/components/DictTag/index2.vue.js.map +1 -0
  104. package/dist/components/ErrorBoundary/index.vue.d.ts +13 -0
  105. package/dist/components/ErrorBoundary/index.vue.js +8 -0
  106. package/dist/components/ErrorBoundary/index.vue.js.map +1 -0
  107. package/dist/components/ErrorBoundary/index2.vue.js +61 -0
  108. package/dist/components/ErrorBoundary/index2.vue.js.map +1 -0
  109. package/dist/components/ExportColumnsModal/index.vue.d.ts +19 -0
  110. package/dist/components/ExportColumnsModal/index.vue.js +8 -0
  111. package/dist/components/ExportColumnsModal/index.vue.js.map +1 -0
  112. package/dist/components/ExportColumnsModal/index2.vue.js +121 -0
  113. package/dist/components/ExportColumnsModal/index2.vue.js.map +1 -0
  114. package/dist/components/FileUpload/index.vue.d.ts +24 -0
  115. package/dist/components/FileUpload/index.vue.js +42 -0
  116. package/dist/components/FileUpload/index.vue.js.map +1 -0
  117. package/dist/components/FileUpload/index2.vue.js +5 -0
  118. package/dist/components/FileUpload/index2.vue.js.map +1 -0
  119. package/dist/components/FormContainer/index.vue.d.ts +51 -0
  120. package/dist/components/FormContainer/index.vue.js +160 -0
  121. package/dist/components/FormContainer/index.vue.js.map +1 -0
  122. package/dist/components/FormContainer/index3.vue.js +6 -0
  123. package/dist/components/FormContainer/index3.vue.js.map +1 -0
  124. package/dist/components/IconPicker/index.vue.d.ts +18 -0
  125. package/dist/components/IconPicker/index.vue.js +43 -0
  126. package/dist/components/IconPicker/index.vue.js.map +1 -0
  127. package/dist/components/IconPicker/index2.vue.js +5 -0
  128. package/dist/components/IconPicker/index2.vue.js.map +1 -0
  129. package/dist/components/ImportWizard/index.vue.d.ts +39 -0
  130. package/dist/components/ImportWizard/index.vue.js +8 -0
  131. package/dist/components/ImportWizard/index.vue.js.map +1 -0
  132. package/dist/components/ImportWizard/index2.vue.js +634 -0
  133. package/dist/components/ImportWizard/index2.vue.js.map +1 -0
  134. package/dist/components/JsonEditor/index.vue.d.ts +12 -0
  135. package/dist/components/JsonEditor/index.vue.js +87 -0
  136. package/dist/components/JsonEditor/index.vue.js.map +1 -0
  137. package/dist/components/JsonEditor/index2.vue.js +5 -0
  138. package/dist/components/JsonEditor/index2.vue.js.map +1 -0
  139. package/dist/components/MarkdownEditor/MarkdownView.vue.d.ts +6 -0
  140. package/dist/components/MarkdownEditor/MarkdownView.vue.js +33 -0
  141. package/dist/components/MarkdownEditor/MarkdownView.vue.js.map +1 -0
  142. package/dist/components/MarkdownEditor/MarkdownView2.vue.js +5 -0
  143. package/dist/components/MarkdownEditor/MarkdownView2.vue.js.map +1 -0
  144. package/dist/components/MarkdownEditor/index.vue.d.ts +10 -0
  145. package/dist/components/MarkdownEditor/index.vue.js +35 -0
  146. package/dist/components/MarkdownEditor/index.vue.js.map +1 -0
  147. package/dist/components/MarkdownEditor/index2.vue.js +5 -0
  148. package/dist/components/MarkdownEditor/index2.vue.js.map +1 -0
  149. package/dist/components/MenuSearch.vue.d.ts +10 -0
  150. package/dist/components/MenuSearch.vue.js +8 -0
  151. package/dist/components/MenuSearch.vue.js.map +1 -0
  152. package/dist/components/MenuSearch2.vue.js +121 -0
  153. package/dist/components/MenuSearch2.vue.js.map +1 -0
  154. package/dist/components/OrgTreeSelect/index.vue.d.ts +6 -0
  155. package/dist/components/OrgTreeSelect/index.vue.js +42 -0
  156. package/dist/components/OrgTreeSelect/index.vue.js.map +1 -0
  157. package/dist/components/OrgTreeSelect/index2.vue.js +5 -0
  158. package/dist/components/OrgTreeSelect/index2.vue.js.map +1 -0
  159. package/dist/components/PasswordStrength/index.vue.d.ts +6 -0
  160. package/dist/components/PasswordStrength/index.vue.js +8 -0
  161. package/dist/components/PasswordStrength/index.vue.js.map +1 -0
  162. package/dist/components/PasswordStrength/index2.vue.js +91 -0
  163. package/dist/components/PasswordStrength/index2.vue.js.map +1 -0
  164. package/dist/components/ReauthModal.vue.d.ts +3 -0
  165. package/dist/components/ReauthModal.vue.js +8 -0
  166. package/dist/components/ReauthModal.vue.js.map +1 -0
  167. package/dist/components/ReauthModal2.vue.js +139 -0
  168. package/dist/components/ReauthModal2.vue.js.map +1 -0
  169. package/dist/components/RoleSelect/index.vue.d.ts +8 -0
  170. package/dist/components/RoleSelect/index.vue.js +26 -0
  171. package/dist/components/RoleSelect/index.vue.js.map +1 -0
  172. package/dist/components/RoleSelect/index2.vue.js +5 -0
  173. package/dist/components/RoleSelect/index2.vue.js.map +1 -0
  174. package/dist/components/SelectTable/index.vue.d.ts +76 -0
  175. package/dist/components/SelectTable/index.vue.js +8 -0
  176. package/dist/components/SelectTable/index.vue.js.map +1 -0
  177. package/dist/components/SelectTable/index2.vue.js +256 -0
  178. package/dist/components/SelectTable/index2.vue.js.map +1 -0
  179. package/dist/components/SmartLogo.vue.d.ts +8 -0
  180. package/dist/components/SmartLogo.vue.js +8 -0
  181. package/dist/components/SmartLogo.vue.js.map +1 -0
  182. package/dist/components/SmartLogo2.vue.js +74 -0
  183. package/dist/components/SmartLogo2.vue.js.map +1 -0
  184. package/dist/components/StatusSwitch/index.vue.d.ts +21 -0
  185. package/dist/components/StatusSwitch/index.vue.js +45 -0
  186. package/dist/components/StatusSwitch/index.vue.js.map +1 -0
  187. package/dist/components/StatusSwitch/index2.vue.js +5 -0
  188. package/dist/components/StatusSwitch/index2.vue.js.map +1 -0
  189. package/dist/components/TableZoomButton/index.vue.d.ts +13 -0
  190. package/dist/components/TableZoomButton/index.vue.js +42 -0
  191. package/dist/components/TableZoomButton/index.vue.js.map +1 -0
  192. package/dist/components/TableZoomButton/index2.vue.js +5 -0
  193. package/dist/components/TableZoomButton/index2.vue.js.map +1 -0
  194. package/dist/components/UserPicker/index.vue.d.ts +13 -0
  195. package/dist/components/UserPicker/index.vue.js +8 -0
  196. package/dist/components/UserPicker/index.vue.js.map +1 -0
  197. package/dist/components/UserPicker/index2.vue.js +214 -0
  198. package/dist/components/UserPicker/index2.vue.js.map +1 -0
  199. package/dist/components/UserSelect/index.vue.d.ts +9 -0
  200. package/dist/components/UserSelect/index.vue.js +32 -0
  201. package/dist/components/UserSelect/index.vue.js.map +1 -0
  202. package/dist/components/UserSelect/index2.vue.js +5 -0
  203. package/dist/components/UserSelect/index2.vue.js.map +1 -0
  204. package/dist/components/oauth/BrandIcon.vue.d.ts +12 -0
  205. package/dist/components/oauth/BrandIcon.vue.js +8 -0
  206. package/dist/components/oauth/BrandIcon.vue.js.map +1 -0
  207. package/dist/components/oauth/BrandIcon2.vue.js +95 -0
  208. package/dist/components/oauth/BrandIcon2.vue.js.map +1 -0
  209. package/dist/composables/authMenuRoute.d.ts +32 -0
  210. package/dist/composables/authMenuRoute.js +37 -0
  211. package/dist/composables/authMenuRoute.js.map +1 -0
  212. package/dist/composables/clearClientCache.d.ts +10 -0
  213. package/dist/composables/clearClientCache.js +17 -0
  214. package/dist/composables/clearClientCache.js.map +1 -0
  215. package/dist/composables/useAuthMenu.d.ts +3 -0
  216. package/dist/composables/useAuthMenu.js +61 -0
  217. package/dist/composables/useAuthMenu.js.map +1 -0
  218. package/dist/composables/useBatchDelete.d.ts +18 -0
  219. package/dist/composables/useBatchDelete.js +21 -0
  220. package/dist/composables/useBatchDelete.js.map +1 -0
  221. package/dist/composables/useCompactScreen.d.ts +12 -0
  222. package/dist/composables/useCompactScreen.js +17 -0
  223. package/dist/composables/useCompactScreen.js.map +1 -0
  224. package/dist/composables/useConfirm.d.ts +18 -0
  225. package/dist/composables/useConfirm.js +61 -0
  226. package/dist/composables/useConfirm.js.map +1 -0
  227. package/dist/composables/useFullscreenToggle.d.ts +11 -0
  228. package/dist/composables/useFullscreenToggle.js +64 -0
  229. package/dist/composables/useFullscreenToggle.js.map +1 -0
  230. package/dist/composables/useHeaderTools.d.ts +31 -0
  231. package/dist/composables/useHeaderTools.js +15 -0
  232. package/dist/composables/useHeaderTools.js.map +1 -0
  233. package/dist/composables/useLayoutMenu.d.ts +17 -0
  234. package/dist/composables/useLayoutMenu.js +93 -0
  235. package/dist/composables/useLayoutMenu.js.map +1 -0
  236. package/dist/composables/useMenuBadge.d.ts +11 -0
  237. package/dist/composables/useMenuBadge.js +17 -0
  238. package/dist/composables/useMenuBadge.js.map +1 -0
  239. package/dist/composables/useMenuFlat.d.ts +8 -0
  240. package/dist/composables/useMenuFlat.js +29 -0
  241. package/dist/composables/useMenuFlat.js.map +1 -0
  242. package/dist/composables/useModule.d.ts +16 -0
  243. package/dist/composables/useModule.js +44 -0
  244. package/dist/composables/useModule.js.map +1 -0
  245. package/dist/composables/useNoticeAction.d.ts +8 -0
  246. package/dist/composables/useNoticeAction.js +79 -0
  247. package/dist/composables/useNoticeAction.js.map +1 -0
  248. package/dist/composables/usePageTitle.d.ts +1 -0
  249. package/dist/composables/usePageTitle.js +20 -0
  250. package/dist/composables/usePageTitle.js.map +1 -0
  251. package/dist/composables/useRealtime.d.ts +31 -0
  252. package/dist/composables/useRealtime.js +59 -0
  253. package/dist/composables/useRealtime.js.map +1 -0
  254. package/dist/composables/useSite.d.ts +24 -0
  255. package/dist/composables/useSite.js +27 -0
  256. package/dist/composables/useSite.js.map +1 -0
  257. package/dist/composables/useTabTitle.d.ts +1 -0
  258. package/dist/composables/useTabTitle.js +10 -0
  259. package/dist/composables/useTabTitle.js.map +1 -0
  260. package/dist/composables/useTableRowSort.d.ts +20 -0
  261. package/dist/composables/useTableRowSort.js +59 -0
  262. package/dist/composables/useTableRowSort.js.map +1 -0
  263. package/dist/composables/useTableZoom.d.ts +5 -0
  264. package/dist/composables/useTableZoom.js +30 -0
  265. package/dist/composables/useTableZoom.js.map +1 -0
  266. package/dist/composables/useTheme.d.ts +13 -0
  267. package/dist/composables/useTheme.js +30 -0
  268. package/dist/composables/useTheme.js.map +1 -0
  269. package/dist/composables/useVisualViewportHeight.d.ts +3 -0
  270. package/dist/composables/useVisualViewportHeight.js +16 -0
  271. package/dist/composables/useVisualViewportHeight.js.map +1 -0
  272. package/dist/createSmartAdmin.d.ts +56 -0
  273. package/dist/createSmartAdmin.js +76 -0
  274. package/dist/createSmartAdmin.js.map +1 -0
  275. package/dist/directives/auth.d.ts +16 -0
  276. package/dist/directives/auth.js +19 -0
  277. package/dist/directives/auth.js.map +1 -0
  278. package/dist/env.d.ts +10 -0
  279. package/dist/index.d.ts +90 -0
  280. package/dist/index.js +273 -0
  281. package/dist/index.js.map +1 -0
  282. package/dist/layouts/AppHeader.vue.d.ts +12 -0
  283. package/dist/layouts/AppHeader.vue.js +8 -0
  284. package/dist/layouts/AppHeader.vue.js.map +1 -0
  285. package/dist/layouts/AppHeader2.vue.js +352 -0
  286. package/dist/layouts/AppHeader2.vue.js.map +1 -0
  287. package/dist/layouts/LayoutModeCards.vue.d.ts +3 -0
  288. package/dist/layouts/LayoutModeCards.vue.js +8 -0
  289. package/dist/layouts/LayoutModeCards.vue.js.map +1 -0
  290. package/dist/layouts/LayoutModeCards2.vue.js +67 -0
  291. package/dist/layouts/LayoutModeCards2.vue.js.map +1 -0
  292. package/dist/layouts/NoticeBell.vue.d.ts +3 -0
  293. package/dist/layouts/NoticeBell.vue.js +8 -0
  294. package/dist/layouts/NoticeBell.vue.js.map +1 -0
  295. package/dist/layouts/NoticeBell2.vue.js +292 -0
  296. package/dist/layouts/NoticeBell2.vue.js.map +1 -0
  297. package/dist/layouts/PersonalLayout.vue.d.ts +3 -0
  298. package/dist/layouts/PersonalLayout.vue.js +8 -0
  299. package/dist/layouts/PersonalLayout.vue.js.map +1 -0
  300. package/dist/layouts/PersonalLayout2.vue.js +65 -0
  301. package/dist/layouts/PersonalLayout2.vue.js.map +1 -0
  302. package/dist/layouts/SettingRow.vue.d.ts +16 -0
  303. package/dist/layouts/SettingRow.vue.js +8 -0
  304. package/dist/layouts/SettingRow.vue.js.map +1 -0
  305. package/dist/layouts/SettingRow2.vue.js +23 -0
  306. package/dist/layouts/SettingRow2.vue.js.map +1 -0
  307. package/dist/layouts/SettingsDrawer.vue.d.ts +10 -0
  308. package/dist/layouts/SettingsDrawer.vue.js +8 -0
  309. package/dist/layouts/SettingsDrawer.vue.js.map +1 -0
  310. package/dist/layouts/SettingsDrawer2.vue.js +380 -0
  311. package/dist/layouts/SettingsDrawer2.vue.js.map +1 -0
  312. package/dist/layouts/TabsBar.vue.d.ts +3 -0
  313. package/dist/layouts/TabsBar.vue.js +8 -0
  314. package/dist/layouts/TabsBar.vue.js.map +1 -0
  315. package/dist/layouts/TabsBar2.vue.js +132 -0
  316. package/dist/layouts/TabsBar2.vue.js.map +1 -0
  317. package/dist/layouts/components/SideNav.vue.d.ts +15 -0
  318. package/dist/layouts/components/SideNav.vue.js +8 -0
  319. package/dist/layouts/components/SideNav.vue.js.map +1 -0
  320. package/dist/layouts/components/SideNav2.vue.js +49 -0
  321. package/dist/layouts/components/SideNav2.vue.js.map +1 -0
  322. package/dist/layouts/default.vue.d.ts +3 -0
  323. package/dist/layouts/default.vue.js +8 -0
  324. package/dist/layouts/default.vue.js.map +1 -0
  325. package/dist/layouts/default2.vue.js +213 -0
  326. package/dist/layouts/default2.vue.js.map +1 -0
  327. package/dist/lib/chunkReload.d.ts +9 -0
  328. package/dist/lib/chunkReload.js +24 -0
  329. package/dist/lib/chunkReload.js.map +1 -0
  330. package/dist/lib/icons.d.ts +2 -0
  331. package/dist/lib/icons.js +39 -0
  332. package/dist/lib/icons.js.map +1 -0
  333. package/dist/lib/loadingBar.d.ts +7 -0
  334. package/dist/lib/loadingBar.js +18 -0
  335. package/dist/lib/loadingBar.js.map +1 -0
  336. package/dist/lib/markdown.d.ts +8 -0
  337. package/dist/lib/markdown.js +16 -0
  338. package/dist/lib/markdown.js.map +1 -0
  339. package/dist/lib/markdownLinks.d.ts +26 -0
  340. package/dist/lib/markdownLinks.js +21 -0
  341. package/dist/lib/markdownLinks.js.map +1 -0
  342. package/dist/lib/noticeActions.d.ts +13 -0
  343. package/dist/lib/noticeActions.js +16 -0
  344. package/dist/lib/noticeActions.js.map +1 -0
  345. package/dist/lib/runtime.d.ts +21 -0
  346. package/dist/lib/runtime.js +13 -0
  347. package/dist/lib/runtime.js.map +1 -0
  348. package/dist/locales/en-US.d.ts +1358 -0
  349. package/dist/locales/en-US.js +1362 -0
  350. package/dist/locales/en-US.js.map +1 -0
  351. package/dist/locales/index.d.ts +30 -0
  352. package/dist/locales/index.js +46 -0
  353. package/dist/locales/index.js.map +1 -0
  354. package/dist/locales/menuTitle.d.ts +8 -0
  355. package/dist/locales/menuTitle.js +19 -0
  356. package/dist/locales/menuTitle.js.map +1 -0
  357. package/dist/locales/zh-CN.d.ts +1358 -0
  358. package/dist/locales/zh-CN.js +1368 -0
  359. package/dist/locales/zh-CN.js.map +1 -0
  360. package/dist/router/bootFailure.d.ts +8 -0
  361. package/dist/router/bootFailure.js +11 -0
  362. package/dist/router/bootFailure.js.map +1 -0
  363. package/dist/router/detailRoutes.d.ts +2 -0
  364. package/dist/router/detailRoutes.js +19 -0
  365. package/dist/router/detailRoutes.js.map +1 -0
  366. package/dist/router/index.d.ts +3 -0
  367. package/dist/router/index.js +58 -0
  368. package/dist/router/index.js.map +1 -0
  369. package/dist/router/namedPage.d.ts +13 -0
  370. package/dist/router/namedPage.js +12 -0
  371. package/dist/router/namedPage.js.map +1 -0
  372. package/dist/router/routes.d.ts +2 -0
  373. package/dist/router/routes.js +121 -0
  374. package/dist/router/routes.js.map +1 -0
  375. package/dist/router/viewRegistry.d.ts +18 -0
  376. package/dist/router/viewRegistry.js +26 -0
  377. package/dist/router/viewRegistry.js.map +1 -0
  378. package/dist/stores/app.d.ts +83 -0
  379. package/dist/stores/app.js +82 -0
  380. package/dist/stores/app.js.map +1 -0
  381. package/dist/stores/auth.d.ts +106 -0
  382. package/dist/stores/auth.js +59 -0
  383. package/dist/stores/auth.js.map +1 -0
  384. package/dist/stores/dict.d.ts +11 -0
  385. package/dist/stores/dict.js +36 -0
  386. package/dist/stores/dict.js.map +1 -0
  387. package/dist/stores/tabs.d.ts +53 -0
  388. package/dist/stores/tabs.js +88 -0
  389. package/dist/stores/tabs.js.map +1 -0
  390. package/dist/stores/user.d.ts +64 -0
  391. package/dist/stores/user.js +64 -0
  392. package/dist/stores/user.js.map +1 -0
  393. package/dist/style.css +1 -0
  394. package/dist/theme/accents.d.ts +2 -0
  395. package/dist/theme/accents.js +5 -0
  396. package/dist/theme/accents.js.map +1 -0
  397. package/dist/theme/mix.d.ts +26 -0
  398. package/dist/theme/mix.js +43 -0
  399. package/dist/theme/mix.js.map +1 -0
  400. package/dist/theme/naive-theme.d.ts +9 -0
  401. package/dist/theme/naive-theme.js +89 -0
  402. package/dist/theme/naive-theme.js.map +1 -0
  403. package/dist/types/api.d.ts +714 -0
  404. package/dist/types/api.js +15 -0
  405. package/dist/types/api.js.map +1 -0
  406. package/dist/types/menu.d.ts +67 -0
  407. package/dist/types/menu.js +26 -0
  408. package/dist/types/menu.js.map +1 -0
  409. package/dist/utils/chunkUpload.d.ts +6 -0
  410. package/dist/utils/chunkUpload.js +35 -0
  411. package/dist/utils/chunkUpload.js.map +1 -0
  412. package/dist/utils/download.d.ts +8 -0
  413. package/dist/utils/download.js +8 -0
  414. package/dist/utils/download.js.map +1 -0
  415. package/dist/utils/error.d.ts +14 -0
  416. package/dist/utils/error.js +50 -0
  417. package/dist/utils/error.js.map +1 -0
  418. package/dist/utils/format.d.ts +20 -0
  419. package/dist/utils/format.js +19 -0
  420. package/dist/utils/format.js.map +1 -0
  421. package/dist/utils/importDup.d.ts +17 -0
  422. package/dist/utils/importDup.js +18 -0
  423. package/dist/utils/importDup.js.map +1 -0
  424. package/dist/utils/oauthBrand.d.ts +100 -0
  425. package/dist/utils/oauthBrand.js +97 -0
  426. package/dist/utils/oauthBrand.js.map +1 -0
  427. package/dist/utils/tree.d.ts +33 -0
  428. package/dist/utils/tree.js +47 -0
  429. package/dist/utils/tree.js.map +1 -0
  430. package/dist/utils/ua.d.ts +7 -0
  431. package/dist/utils/ua.js +33 -0
  432. package/dist/utils/ua.js.map +1 -0
  433. package/dist/utils/url.d.ts +16 -0
  434. package/dist/utils/url.js +13 -0
  435. package/dist/utils/url.js.map +1 -0
  436. package/dist/views/dashboard/biz.vue.d.ts +3 -0
  437. package/dist/views/dashboard/biz.vue.js +8 -0
  438. package/dist/views/dashboard/biz.vue.js.map +1 -0
  439. package/dist/views/dashboard/biz2.vue.js +136 -0
  440. package/dist/views/dashboard/biz2.vue.js.map +1 -0
  441. package/dist/views/dashboard/workbench.vue.d.ts +3 -0
  442. package/dist/views/dashboard/workbench.vue.js +8 -0
  443. package/dist/views/dashboard/workbench.vue.js.map +1 -0
  444. package/dist/views/dashboard/workbench2.vue.js +195 -0
  445. package/dist/views/dashboard/workbench2.vue.js.map +1 -0
  446. package/dist/views/embed/iframe.vue.d.ts +3 -0
  447. package/dist/views/embed/iframe.vue.js +8 -0
  448. package/dist/views/embed/iframe.vue.js.map +1 -0
  449. package/dist/views/embed/iframe2.vue.js +21 -0
  450. package/dist/views/embed/iframe2.vue.js.map +1 -0
  451. package/dist/views/error/404.vue.d.ts +3 -0
  452. package/dist/views/error/404.vue.js +8 -0
  453. package/dist/views/error/404.vue.js.map +1 -0
  454. package/dist/views/error/4042.vue.js +31 -0
  455. package/dist/views/error/4042.vue.js.map +1 -0
  456. package/dist/views/error/BootError.vue.d.ts +3 -0
  457. package/dist/views/error/BootError.vue.js +8 -0
  458. package/dist/views/error/BootError.vue.js.map +1 -0
  459. package/dist/views/error/BootError2.vue.js +57 -0
  460. package/dist/views/error/BootError2.vue.js.map +1 -0
  461. package/dist/views/error/MissingRoute.vue.d.ts +3 -0
  462. package/dist/views/error/MissingRoute.vue.js +8 -0
  463. package/dist/views/error/MissingRoute.vue.js.map +1 -0
  464. package/dist/views/error/MissingRoute2.vue.js +23 -0
  465. package/dist/views/error/MissingRoute2.vue.js.map +1 -0
  466. package/dist/views/login/LoginForm.vue.d.ts +12 -0
  467. package/dist/views/login/LoginForm.vue.js +8 -0
  468. package/dist/views/login/LoginForm.vue.js.map +1 -0
  469. package/dist/views/login/LoginForm2.vue.js +642 -0
  470. package/dist/views/login/LoginForm2.vue.js.map +1 -0
  471. package/dist/views/login/index.vue.d.ts +3 -0
  472. package/dist/views/login/index.vue.js +8 -0
  473. package/dist/views/login/index.vue.js.map +1 -0
  474. package/dist/views/login/index2.vue.js +79 -0
  475. package/dist/views/login/index2.vue.js.map +1 -0
  476. package/dist/views/login/skins/AuroraGlass.vue.d.ts +3 -0
  477. package/dist/views/login/skins/AuroraGlass.vue.js +8 -0
  478. package/dist/views/login/skins/AuroraGlass.vue.js.map +1 -0
  479. package/dist/views/login/skins/AuroraGlass2.vue.js +80 -0
  480. package/dist/views/login/skins/AuroraGlass2.vue.js.map +1 -0
  481. package/dist/views/login/skins/SplitPanel.vue.d.ts +3 -0
  482. package/dist/views/login/skins/SplitPanel.vue.js +8 -0
  483. package/dist/views/login/skins/SplitPanel.vue.js.map +1 -0
  484. package/dist/views/login/skins/SplitPanel2.vue.js +85 -0
  485. package/dist/views/login/skins/SplitPanel2.vue.js.map +1 -0
  486. package/dist/views/login/skins/Spotlight.vue.d.ts +3 -0
  487. package/dist/views/login/skins/Spotlight.vue.js +8 -0
  488. package/dist/views/login/skins/Spotlight.vue.js.map +1 -0
  489. package/dist/views/login/skins/Spotlight2.vue.js +36 -0
  490. package/dist/views/login/skins/Spotlight2.vue.js.map +1 -0
  491. package/dist/views/login/skins.d.ts +8 -0
  492. package/dist/views/login/skins.js +13 -0
  493. package/dist/views/login/skins.js.map +1 -0
  494. package/dist/views/mfa/bindComplete.d.ts +7 -0
  495. package/dist/views/mfa/bindComplete.js +8 -0
  496. package/dist/views/mfa/bindComplete.js.map +1 -0
  497. package/dist/views/mfa/index.vue.d.ts +3 -0
  498. package/dist/views/mfa/index.vue.js +8 -0
  499. package/dist/views/mfa/index.vue.js.map +1 -0
  500. package/dist/views/mfa/index2.vue.js +425 -0
  501. package/dist/views/mfa/index2.vue.js.map +1 -0
  502. package/dist/views/module/index.vue.d.ts +3 -0
  503. package/dist/views/module/index.vue.js +8 -0
  504. package/dist/views/module/index.vue.js.map +1 -0
  505. package/dist/views/module/index2.vue.js +142 -0
  506. package/dist/views/module/index2.vue.js.map +1 -0
  507. package/dist/views/oauth/callback.vue.d.ts +3 -0
  508. package/dist/views/oauth/callback.vue.js +8 -0
  509. package/dist/views/oauth/callback.vue.js.map +1 -0
  510. package/dist/views/oauth/callback2.vue.js +86 -0
  511. package/dist/views/oauth/callback2.vue.js.map +1 -0
  512. package/dist/views/personal/bindings.vue.d.ts +3 -0
  513. package/dist/views/personal/bindings.vue.js +8 -0
  514. package/dist/views/personal/bindings.vue.js.map +1 -0
  515. package/dist/views/personal/bindings2.vue.js +220 -0
  516. package/dist/views/personal/bindings2.vue.js.map +1 -0
  517. package/dist/views/personal/notice.vue.d.ts +3 -0
  518. package/dist/views/personal/notice.vue.js +5 -0
  519. package/dist/views/personal/notice.vue.js.map +1 -0
  520. package/dist/views/personal/notice2.vue.js +163 -0
  521. package/dist/views/personal/notice2.vue.js.map +1 -0
  522. package/dist/views/personal/password.vue.d.ts +3 -0
  523. package/dist/views/personal/password.vue.js +5 -0
  524. package/dist/views/personal/password.vue.js.map +1 -0
  525. package/dist/views/personal/password2.vue.js +147 -0
  526. package/dist/views/personal/password2.vue.js.map +1 -0
  527. package/dist/views/personal/profile.vue.d.ts +3 -0
  528. package/dist/views/personal/profile.vue.js +8 -0
  529. package/dist/views/personal/profile.vue.js.map +1 -0
  530. package/dist/views/personal/profile2.vue.js +264 -0
  531. package/dist/views/personal/profile2.vue.js.map +1 -0
  532. package/dist/views/personal/security.vue.d.ts +3 -0
  533. package/dist/views/personal/security.vue.js +8 -0
  534. package/dist/views/personal/security.vue.js.map +1 -0
  535. package/dist/views/personal/security2.vue.js +82 -0
  536. package/dist/views/personal/security2.vue.js.map +1 -0
  537. package/dist/views/personal/sessions.vue.d.ts +3 -0
  538. package/dist/views/personal/sessions.vue.js +8 -0
  539. package/dist/views/personal/sessions.vue.js.map +1 -0
  540. package/dist/views/personal/sessions2.vue.js +101 -0
  541. package/dist/views/personal/sessions2.vue.js.map +1 -0
  542. package/dist/views/system/cache/index.vue.d.ts +3 -0
  543. package/dist/views/system/cache/index.vue.js +8 -0
  544. package/dist/views/system/cache/index.vue.js.map +1 -0
  545. package/dist/views/system/cache/index2.vue.js +113 -0
  546. package/dist/views/system/cache/index2.vue.js.map +1 -0
  547. package/dist/views/system/config/components/ConfigFormModal.vue.d.ts +16 -0
  548. package/dist/views/system/config/components/ConfigFormModal.vue.js +5 -0
  549. package/dist/views/system/config/components/ConfigFormModal.vue.js.map +1 -0
  550. package/dist/views/system/config/components/ConfigFormModal2.vue.js +177 -0
  551. package/dist/views/system/config/components/ConfigFormModal2.vue.js.map +1 -0
  552. package/dist/views/system/config/components/ExternalAuthConfig.vue.d.ts +3 -0
  553. package/dist/views/system/config/components/ExternalAuthConfig.vue.js +8 -0
  554. package/dist/views/system/config/components/ExternalAuthConfig.vue.js.map +1 -0
  555. package/dist/views/system/config/components/ExternalAuthConfig2.vue.js +218 -0
  556. package/dist/views/system/config/components/ExternalAuthConfig2.vue.js.map +1 -0
  557. package/dist/views/system/config/components/GroupExtraConfig.vue.d.ts +9 -0
  558. package/dist/views/system/config/components/GroupExtraConfig.vue.js +8 -0
  559. package/dist/views/system/config/components/GroupExtraConfig.vue.js.map +1 -0
  560. package/dist/views/system/config/components/GroupExtraConfig2.vue.js +108 -0
  561. package/dist/views/system/config/components/GroupExtraConfig2.vue.js.map +1 -0
  562. package/dist/views/system/config/components/HighSensConfig.vue.d.ts +3 -0
  563. package/dist/views/system/config/components/HighSensConfig.vue.js +5 -0
  564. package/dist/views/system/config/components/HighSensConfig.vue.js.map +1 -0
  565. package/dist/views/system/config/components/HighSensConfig2.vue.js +134 -0
  566. package/dist/views/system/config/components/HighSensConfig2.vue.js.map +1 -0
  567. package/dist/views/system/config/components/JobConfig.vue.d.ts +3 -0
  568. package/dist/views/system/config/components/JobConfig.vue.js +5 -0
  569. package/dist/views/system/config/components/JobConfig.vue.js.map +1 -0
  570. package/dist/views/system/config/components/JobConfig2.vue.js +116 -0
  571. package/dist/views/system/config/components/JobConfig2.vue.js.map +1 -0
  572. package/dist/views/system/config/components/OtherConfig.vue.d.ts +3 -0
  573. package/dist/views/system/config/components/OtherConfig.vue.js +5 -0
  574. package/dist/views/system/config/components/OtherConfig.vue.js.map +1 -0
  575. package/dist/views/system/config/components/OtherConfig2.vue.js +121 -0
  576. package/dist/views/system/config/components/OtherConfig2.vue.js.map +1 -0
  577. package/dist/views/system/config/components/SecurityConfig.vue.d.ts +3 -0
  578. package/dist/views/system/config/components/SecurityConfig.vue.js +8 -0
  579. package/dist/views/system/config/components/SecurityConfig.vue.js.map +1 -0
  580. package/dist/views/system/config/components/SecurityConfig2.vue.js +456 -0
  581. package/dist/views/system/config/components/SecurityConfig2.vue.js.map +1 -0
  582. package/dist/views/system/config/components/SysBaseConfig.vue.d.ts +3 -0
  583. package/dist/views/system/config/components/SysBaseConfig.vue.js +5 -0
  584. package/dist/views/system/config/components/SysBaseConfig.vue.js.map +1 -0
  585. package/dist/views/system/config/components/SysBaseConfig2.vue.js +107 -0
  586. package/dist/views/system/config/components/SysBaseConfig2.vue.js.map +1 -0
  587. package/dist/views/system/config/components/UploadConfig.vue.d.ts +3 -0
  588. package/dist/views/system/config/components/UploadConfig.vue.js +5 -0
  589. package/dist/views/system/config/components/UploadConfig.vue.js.map +1 -0
  590. package/dist/views/system/config/components/UploadConfig2.vue.js +135 -0
  591. package/dist/views/system/config/components/UploadConfig2.vue.js.map +1 -0
  592. package/dist/views/system/config/groups.d.ts +9 -0
  593. package/dist/views/system/config/groups.js +18 -0
  594. package/dist/views/system/config/groups.js.map +1 -0
  595. package/dist/views/system/config/index.vue.d.ts +3 -0
  596. package/dist/views/system/config/index.vue.js +5 -0
  597. package/dist/views/system/config/index.vue.js.map +1 -0
  598. package/dist/views/system/config/index2.vue.js +127 -0
  599. package/dist/views/system/config/index2.vue.js.map +1 -0
  600. package/dist/views/system/dict/index.vue.d.ts +3 -0
  601. package/dist/views/system/dict/index.vue.js +8 -0
  602. package/dist/views/system/dict/index.vue.js.map +1 -0
  603. package/dist/views/system/dict/index2.vue.js +560 -0
  604. package/dist/views/system/dict/index2.vue.js.map +1 -0
  605. package/dist/views/system/file/index.vue.d.ts +3 -0
  606. package/dist/views/system/file/index.vue.js +5 -0
  607. package/dist/views/system/file/index.vue.js.map +1 -0
  608. package/dist/views/system/file/index2.vue.js +186 -0
  609. package/dist/views/system/file/index2.vue.js.map +1 -0
  610. package/dist/views/system/job/index.vue.d.ts +3 -0
  611. package/dist/views/system/job/index.vue.js +8 -0
  612. package/dist/views/system/job/index.vue.js.map +1 -0
  613. package/dist/views/system/job/index2.vue.js +1167 -0
  614. package/dist/views/system/job/index2.vue.js.map +1 -0
  615. package/dist/views/system/job-log/index.vue.d.ts +3 -0
  616. package/dist/views/system/job-log/index.vue.js +8 -0
  617. package/dist/views/system/job-log/index.vue.js.map +1 -0
  618. package/dist/views/system/job-log/index2.vue.js +411 -0
  619. package/dist/views/system/job-log/index2.vue.js.map +1 -0
  620. package/dist/views/system/job-monitor/index.vue.d.ts +3 -0
  621. package/dist/views/system/job-monitor/index.vue.js +8 -0
  622. package/dist/views/system/job-monitor/index.vue.js.map +1 -0
  623. package/dist/views/system/job-monitor/index2.vue.js +253 -0
  624. package/dist/views/system/job-monitor/index2.vue.js.map +1 -0
  625. package/dist/views/system/log/exception/index.vue.d.ts +3 -0
  626. package/dist/views/system/log/exception/index.vue.js +8 -0
  627. package/dist/views/system/log/exception/index.vue.js.map +1 -0
  628. package/dist/views/system/log/exception/index2.vue.js +216 -0
  629. package/dist/views/system/log/exception/index2.vue.js.map +1 -0
  630. package/dist/views/system/log/login/index.vue.d.ts +3 -0
  631. package/dist/views/system/log/login/index.vue.js +5 -0
  632. package/dist/views/system/log/login/index.vue.js.map +1 -0
  633. package/dist/views/system/log/login/index2.vue.js +113 -0
  634. package/dist/views/system/log/login/index2.vue.js.map +1 -0
  635. package/dist/views/system/log/op/index.vue.d.ts +3 -0
  636. package/dist/views/system/log/op/index.vue.js +8 -0
  637. package/dist/views/system/log/op/index.vue.js.map +1 -0
  638. package/dist/views/system/log/op/index2.vue.js +332 -0
  639. package/dist/views/system/log/op/index2.vue.js.map +1 -0
  640. package/dist/views/system/menu/components/ButtonManager.vue.d.ts +21 -0
  641. package/dist/views/system/menu/components/ButtonManager.vue.js +8 -0
  642. package/dist/views/system/menu/components/ButtonManager.vue.js.map +1 -0
  643. package/dist/views/system/menu/components/ButtonManager2.vue.js +498 -0
  644. package/dist/views/system/menu/components/ButtonManager2.vue.js.map +1 -0
  645. package/dist/views/system/menu/components/MenuFormModal.vue.d.ts +22 -0
  646. package/dist/views/system/menu/components/MenuFormModal.vue.js +8 -0
  647. package/dist/views/system/menu/components/MenuFormModal.vue.js.map +1 -0
  648. package/dist/views/system/menu/components/MenuFormModal2.vue.js +259 -0
  649. package/dist/views/system/menu/components/MenuFormModal2.vue.js.map +1 -0
  650. package/dist/views/system/menu/index.vue.d.ts +3 -0
  651. package/dist/views/system/menu/index.vue.js +8 -0
  652. package/dist/views/system/menu/index.vue.js.map +1 -0
  653. package/dist/views/system/menu/index2.vue.js +391 -0
  654. package/dist/views/system/menu/index2.vue.js.map +1 -0
  655. package/dist/views/system/module/index.vue.d.ts +3 -0
  656. package/dist/views/system/module/index.vue.js +8 -0
  657. package/dist/views/system/module/index.vue.js.map +1 -0
  658. package/dist/views/system/module/index2.vue.js +344 -0
  659. package/dist/views/system/module/index2.vue.js.map +1 -0
  660. package/dist/views/system/monitor/index.vue.d.ts +3 -0
  661. package/dist/views/system/monitor/index.vue.js +8 -0
  662. package/dist/views/system/monitor/index.vue.js.map +1 -0
  663. package/dist/views/system/monitor/index2.vue.js +184 -0
  664. package/dist/views/system/monitor/index2.vue.js.map +1 -0
  665. package/dist/views/system/notice/index.vue.d.ts +3 -0
  666. package/dist/views/system/notice/index.vue.js +8 -0
  667. package/dist/views/system/notice/index.vue.js.map +1 -0
  668. package/dist/views/system/notice/index2.vue.js +401 -0
  669. package/dist/views/system/notice/index2.vue.js.map +1 -0
  670. package/dist/views/system/org/index.vue.d.ts +3 -0
  671. package/dist/views/system/org/index.vue.js +8 -0
  672. package/dist/views/system/org/index.vue.js.map +1 -0
  673. package/dist/views/system/org/index2.vue.js +397 -0
  674. package/dist/views/system/org/index2.vue.js.map +1 -0
  675. package/dist/views/system/position/index.vue.d.ts +3 -0
  676. package/dist/views/system/position/index.vue.js +5 -0
  677. package/dist/views/system/position/index.vue.js.map +1 -0
  678. package/dist/views/system/position/index2.vue.js +211 -0
  679. package/dist/views/system/position/index2.vue.js.map +1 -0
  680. package/dist/views/system/recycle/index.vue.d.ts +3 -0
  681. package/dist/views/system/recycle/index.vue.js +8 -0
  682. package/dist/views/system/recycle/index.vue.js.map +1 -0
  683. package/dist/views/system/recycle/index2.vue.js +121 -0
  684. package/dist/views/system/recycle/index2.vue.js.map +1 -0
  685. package/dist/views/system/role/components/GrantMenuTable.vue.d.ts +18 -0
  686. package/dist/views/system/role/components/GrantMenuTable.vue.js +8 -0
  687. package/dist/views/system/role/components/GrantMenuTable.vue.js.map +1 -0
  688. package/dist/views/system/role/components/GrantMenuTable2.vue.js +212 -0
  689. package/dist/views/system/role/components/GrantMenuTable2.vue.js.map +1 -0
  690. package/dist/views/system/role/components/grantMenuGroups.d.ts +31 -0
  691. package/dist/views/system/role/components/grantMenuGroups.js +76 -0
  692. package/dist/views/system/role/components/grantMenuGroups.js.map +1 -0
  693. package/dist/views/system/role/index.vue.d.ts +3 -0
  694. package/dist/views/system/role/index.vue.js +5 -0
  695. package/dist/views/system/role/index.vue.js.map +1 -0
  696. package/dist/views/system/role/index2.vue.js +476 -0
  697. package/dist/views/system/role/index2.vue.js.map +1 -0
  698. package/dist/views/system/session/index.vue.d.ts +3 -0
  699. package/dist/views/system/session/index.vue.js +5 -0
  700. package/dist/views/system/session/index.vue.js.map +1 -0
  701. package/dist/views/system/session/index2.vue.js +80 -0
  702. package/dist/views/system/session/index2.vue.js.map +1 -0
  703. package/dist/views/system/user/components/ResetPasswordModal.vue.d.ts +10 -0
  704. package/dist/views/system/user/components/ResetPasswordModal.vue.js +8 -0
  705. package/dist/views/system/user/components/ResetPasswordModal.vue.js.map +1 -0
  706. package/dist/views/system/user/components/ResetPasswordModal2.vue.js +111 -0
  707. package/dist/views/system/user/components/ResetPasswordModal2.vue.js.map +1 -0
  708. package/dist/views/system/user/components/UserFormModal.vue.d.ts +30 -0
  709. package/dist/views/system/user/components/UserFormModal.vue.js +8 -0
  710. package/dist/views/system/user/components/UserFormModal.vue.js.map +1 -0
  711. package/dist/views/system/user/components/UserFormModal2.vue.js +415 -0
  712. package/dist/views/system/user/components/UserFormModal2.vue.js.map +1 -0
  713. package/dist/views/system/user/index.vue.d.ts +3 -0
  714. package/dist/views/system/user/index.vue.js +8 -0
  715. package/dist/views/system/user/index.vue.js.map +1 -0
  716. package/dist/views/system/user/index2.vue.js +427 -0
  717. package/dist/views/system/user/index2.vue.js.map +1 -0
  718. package/package.json +99 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuthMenu.js","sources":["../../src/composables/useAuthMenu.ts"],"sourcesContent":["// 后端菜单树 → vue-router 动态路由的物化层(决策部分在 authMenuRoute.ts,这里只管注册)。\n// 动态路由只活在内存里,F5/深链后是空的,所以路由守卫里的 useModule().enterInitial() 会再调一次\n// buildRoutesForModule 重建 —— 本文件被重复调用是常态,resetRouter + hasRoute/removeRoute 保证幂等。\n// 坑:菜单 component 字段必须落在页面表(router/viewRegistry)里;拼错不会静默 404,\n// 而是注册成 MissingRoute 诊断页,这样配错的人能看见到底缺哪个文件。\nimport { router, resetRouter, registerDynamic } from '#/router'\nimport { namedPage } from '#/router/namedPage'\nimport { registerDetailRoutes } from '#/router/detailRoutes'\nimport { getView, viewComponentPaths } from '#/router/viewRegistry'\nimport { useAuthStore } from '#/stores/auth'\nimport { personalApi } from '#/api'\nimport { describeMenuRoute } from './authMenuRoute'\nimport type { MenuNode } from '#/types/menu'\n\nexport { registerViews, viewComponentPaths, type ViewLoader } from '#/router/viewRegistry'\n\nfunction flatten(nodes: MenuNode[]): MenuNode[] {\n return nodes.flatMap(n => [n, ...(n.children?.length ? flatten(n.children) : [])])\n}\n\n/** 拉某应用的菜单树 → 重建动态路由(挂在 layout 下)。 */\nexport async function buildRoutesForModule(moduleId: number): Promise<void> {\n const auth = useAuthStore()\n const tree = await personalApi.menu(moduleId)\n auth.menuTree = tree\n auth.currentModuleId = moduleId\n\n const viewKeys = new Set(viewComponentPaths())\n resetRouter()\n for (const node of flatten(tree)) {\n const route = describeMenuRoute(node, viewKeys)\n if (!route) continue\n\n if (router.hasRoute(route.name)) router.removeRoute(route.name)\n if (route.kind === 'iframe') {\n router.addRoute('layout', {\n path: route.path,\n name: route.name,\n component: namedPage(route.name, () => import('#/views/embed/iframe.vue')),\n meta: { title: route.title, icon: route.icon, keepAlive: true, iframeSrc: route.iframeSrc },\n })\n registerDynamic(route.name)\n continue\n }\n\n if (route.kind === 'missing') {\n // 组件路径配错是运维需要在控制台看到的诊断信息\n // eslint-disable-next-line no-console\n console.warn('[menu] 缺少视图组件:', route.component)\n router.addRoute('layout', {\n path: route.path,\n name: route.name,\n component: namedPage(route.name, () => import('#/views/error/MissingRoute.vue')),\n meta: {\n title: route.title,\n icon: route.icon,\n keepAlive: true,\n missingComponent: route.component,\n },\n })\n registerDynamic(route.name)\n continue\n }\n\n const loader = getView(route.viewKey)!\n router.addRoute('layout', {\n path: route.path,\n name: route.name,\n component: namedPage(route.name, loader),\n meta: { title: route.title, icon: route.icon, keepAlive: true },\n })\n registerDynamic(route.name)\n }\n // 约定式详情路由(views/**/detail.vue → /<路径>/:id/detail)随菜单路由一并注册,\n // 故 F5/深链走守卫重建时详情路由也复活(见 router/detailRoutes.ts)。\n registerDetailRoutes()\n auth.routesReady = true\n}\n"],"names":["flatten","nodes","n","_a","buildRoutesForModule","moduleId","auth","useAuthStore","tree","personalApi","viewKeys","viewComponentPaths","resetRouter","node","route","describeMenuRoute","router","namedPage","registerDynamic","loader","getView","registerDetailRoutes"],"mappings":";;;;;;;;AAgBA,SAASA,EAAQC,GAA+B;AAC9C,SAAOA,EAAM,QAAQ,CAAAC,MAAA;;AAAK,YAACA,GAAG,IAAIC,IAAAD,EAAE,aAAF,QAAAC,EAAY,SAASH,EAAQE,EAAE,QAAQ,IAAI,CAAA,CAAG;AAAA,GAAC;AACnF;AAGA,eAAsBE,EAAqBC,GAAiC;AAC1E,QAAMC,IAAOC,EAAA,GACPC,IAAO,MAAMC,EAAY,KAAKJ,CAAQ;AAC5C,EAAAC,EAAK,WAAWE,GAChBF,EAAK,kBAAkBD;AAEvB,QAAMK,IAAW,IAAI,IAAIC,GAAoB;AAC7C,EAAAC,EAAA;AACA,aAAWC,KAAQb,EAAQQ,CAAI,GAAG;AAChC,UAAMM,IAAQC,EAAkBF,GAAMH,CAAQ;AAC9C,QAAI,CAACI,EAAO;AAGZ,QADIE,EAAO,SAASF,EAAM,IAAI,KAAGE,EAAO,YAAYF,EAAM,IAAI,GAC1DA,EAAM,SAAS,UAAU;AAC3B,MAAAE,EAAO,SAAS,UAAU;AAAA,QACxB,MAAMF,EAAM;AAAA,QACZ,MAAMA,EAAM;AAAA,QACZ,WAAWG,EAAUH,EAAM,MAAM,MAAM,OAAO,8BAA0B,CAAC;AAAA,QACzE,MAAM,EAAE,OAAOA,EAAM,OAAO,MAAMA,EAAM,MAAM,WAAW,IAAM,WAAWA,EAAM,UAAA;AAAA,MAAU,CAC3F,GACDI,EAAgBJ,EAAM,IAAI;AAC1B;AAAA,IACF;AAEA,QAAIA,EAAM,SAAS,WAAW;AAG5B,cAAQ,KAAK,kBAAkBA,EAAM,SAAS,GAC9CE,EAAO,SAAS,UAAU;AAAA,QACxB,MAAMF,EAAM;AAAA,QACZ,MAAMA,EAAM;AAAA,QACZ,WAAWG,EAAUH,EAAM,MAAM,MAAM,OAAO,oCAAgC,CAAC;AAAA,QAC/E,MAAM;AAAA,UACJ,OAAOA,EAAM;AAAA,UACb,MAAMA,EAAM;AAAA,UACZ,WAAW;AAAA,UACX,kBAAkBA,EAAM;AAAA,QAAA;AAAA,MAC1B,CACD,GACDI,EAAgBJ,EAAM,IAAI;AAC1B;AAAA,IACF;AAEA,UAAMK,IAASC,EAAQN,EAAM,OAAO;AACpC,IAAAE,EAAO,SAAS,UAAU;AAAA,MACxB,MAAMF,EAAM;AAAA,MACZ,MAAMA,EAAM;AAAA,MACZ,WAAWG,EAAUH,EAAM,MAAMK,CAAM;AAAA,MACvC,MAAM,EAAE,OAAOL,EAAM,OAAO,MAAMA,EAAM,MAAM,WAAW,GAAA;AAAA,IAAK,CAC/D,GACDI,EAAgBJ,EAAM,IAAI;AAAA,EAC5B;AAGA,EAAAO,EAAA,GACAf,EAAK,cAAc;AACrB;"}
@@ -0,0 +1,18 @@
1
+ export interface UseBatchDeleteOptions {
2
+ /** 批量删除接口(收 number[] 主键)。 */
3
+ remove: (ids: number[]) => Promise<unknown>;
4
+ /** 删除成功后刷新数据。 */
5
+ refresh: () => void;
6
+ /** 成功 toast 文案;false = 不弹(另有提示)。缺省用 common.success。 */
7
+ successMsg?: string | false;
8
+ /**
9
+ * 自定义确认文案(可异步:删前要先查点东西才能把话说清楚时用,如"这些角色关联了 N 个用户")。
10
+ * 缺省是按条数的通用文案。有此需求的页面若只给行内单删加警告,勾选+批量删就能绕过去。
11
+ */
12
+ content?: (ids: number[]) => string | Promise<string>;
13
+ }
14
+ export declare function useBatchDelete(opts: UseBatchDeleteOptions): {
15
+ checkedKeys: import('vue').Ref<(string | number)[], (string | number)[]>;
16
+ hasSelection: import('vue').ComputedRef<boolean>;
17
+ run: () => Promise<void>;
18
+ };
@@ -0,0 +1,21 @@
1
+ import { ref as m, computed as s } from "vue";
2
+ import { useI18n as a } from "vue-i18n";
3
+ import { useConfirm as f } from "./useConfirm.js";
4
+ function d(e) {
5
+ const { t: o } = a(), { confirm: r } = f(), n = m([]), u = s(() => n.value.length > 0);
6
+ async function i() {
7
+ var t;
8
+ const c = n.value.map(Number);
9
+ if (c.length === 0) return;
10
+ await r({
11
+ content: await ((t = e.content) == null ? void 0 : t.call(e, c)) ?? o("common.batchDeleteConfirm", { count: c.length }),
12
+ action: () => e.remove(c),
13
+ successMsg: e.successMsg
14
+ }) && (n.value = [], e.refresh());
15
+ }
16
+ return { checkedKeys: n, hasSelection: u, run: i };
17
+ }
18
+ export {
19
+ d as useBatchDelete
20
+ };
21
+ //# sourceMappingURL=useBatchDelete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBatchDelete.js","sources":["../../src/composables/useBatchDelete.ts"],"sourcesContent":["// 表格批量删除的样板收敛:维护勾选态 + 二次确认(挂起对话框防连点)+ 成功后清选并刷新。\n// 用在 SmartTable(经 $attrs 把 checked-row-keys 透传到内层 n-data-table)与裸 n-data-table 两处。\n// 仅限 setup 中调用(内部用 useConfirm → useI18n/useDialog)。\nimport { computed, ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useConfirm } from '#/composables/useConfirm'\n\nexport interface UseBatchDeleteOptions {\n /** 批量删除接口(收 number[] 主键)。 */\n remove: (ids: number[]) => Promise<unknown>\n /** 删除成功后刷新数据。 */\n refresh: () => void\n /** 成功 toast 文案;false = 不弹(另有提示)。缺省用 common.success。 */\n successMsg?: string | false\n /**\n * 自定义确认文案(可异步:删前要先查点东西才能把话说清楚时用,如\"这些角色关联了 N 个用户\")。\n * 缺省是按条数的通用文案。有此需求的页面若只给行内单删加警告,勾选+批量删就能绕过去。\n */\n content?: (ids: number[]) => string | Promise<string>\n}\n\nexport function useBatchDelete(opts: UseBatchDeleteOptions) {\n const { t } = useI18n()\n const { confirm } = useConfirm()\n /** 勾选的行主键(绑到表格的 checked-row-keys)。 */\n const checkedKeys = ref<Array<string | number>>([])\n const hasSelection = computed(() => checkedKeys.value.length > 0)\n\n async function run() {\n const ids = checkedKeys.value.map(Number)\n if (ids.length === 0) return\n const ok = await confirm({\n content: (await opts.content?.(ids)) ?? t('common.batchDeleteConfirm', { count: ids.length }),\n action: () => opts.remove(ids),\n successMsg: opts.successMsg,\n })\n if (ok) {\n checkedKeys.value = []\n opts.refresh()\n }\n }\n\n return { checkedKeys, hasSelection, run }\n}\n"],"names":["useBatchDelete","opts","t","useI18n","confirm","useConfirm","checkedKeys","ref","hasSelection","computed","run","ids","_a"],"mappings":";;;AAqBO,SAASA,EAAeC,GAA6B;AAC1D,QAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACR,EAAE,SAAAC,EAAA,IAAYC,EAAA,GAEdC,IAAcC,EAA4B,EAAE,GAC5CC,IAAeC,EAAS,MAAMH,EAAY,MAAM,SAAS,CAAC;AAEhE,iBAAeI,IAAM;;AACnB,UAAMC,IAAML,EAAY,MAAM,IAAI,MAAM;AACxC,QAAIK,EAAI,WAAW,EAAG;AAMtB,IALW,MAAMP,EAAQ;AAAA,MACvB,SAAU,QAAMQ,IAAAX,EAAK,YAAL,gBAAAW,EAAA,KAAAX,GAAeU,OAAST,EAAE,6BAA6B,EAAE,OAAOS,EAAI,OAAA,CAAQ;AAAA,MAC5F,QAAQ,MAAMV,EAAK,OAAOU,CAAG;AAAA,MAC7B,YAAYV,EAAK;AAAA,IAAA,CAClB,MAECK,EAAY,QAAQ,CAAA,GACpBL,EAAK,QAAA;AAAA,EAET;AAEA,SAAO,EAAE,aAAAK,GAAa,cAAAE,GAAc,KAAAE,EAAA;AACtC;"}
@@ -0,0 +1,12 @@
1
+ import { ComputedRef } from 'vue';
2
+ /** 宽度阈值:iPad 竖屏是 768 / 834,横屏 1024 起;手机远小于此。 */
3
+ export declare const COMPACT_MAX_WIDTH = 900;
4
+ /** 高度阈值:1280×600 这类矮屏笔记本,以及横屏平板弹出软键盘后剩下的高度。 */
5
+ export declare const COMPACT_MAX_HEIGHT = 640;
6
+ /** 纯判定,便于单测与非响应式场景直接调用。 */
7
+ export declare function isCompactSize(width: number, height: number, maxWidth?: number, maxHeight?: number): boolean;
8
+ /** 响应式紧凑屏标记。阈值可按页覆盖(如某张宽表要更早切紧凑)。 */
9
+ export declare function useCompactScreen(opts?: {
10
+ maxWidth?: number;
11
+ maxHeight?: number;
12
+ }): ComputedRef<boolean>;
@@ -0,0 +1,17 @@
1
+ import { computed as c } from "vue";
2
+ import { useWindowSize as m } from "@vueuse/core";
3
+ const u = 900, t = 640;
4
+ function a(e, i, n = u, r = t) {
5
+ return e <= n || i <= r;
6
+ }
7
+ function o(e) {
8
+ const { width: i, height: n } = m();
9
+ return c(() => a(i.value, n.value, e == null ? void 0 : e.maxWidth, e == null ? void 0 : e.maxHeight));
10
+ }
11
+ export {
12
+ t as COMPACT_MAX_HEIGHT,
13
+ u as COMPACT_MAX_WIDTH,
14
+ a as isCompactSize,
15
+ o as useCompactScreen
16
+ };
17
+ //# sourceMappingURL=useCompactScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCompactScreen.js","sources":["../../src/composables/useCompactScreen.ts"],"sourcesContent":["// 紧凑屏判定:视口小到「桌面密度那一套(560px 卡片、并排两栏、悬停操作)不再合适」的时候。\n//\n// 判据是视口尺寸而不是 UA:平板既可能横屏当笔记本用,也可能竖屏当大手机用,同一台设备两种形态,\n// 认 UA 只会两边都判错。软键盘弹起把可视区压扁的情况同理 —— 那时也该按紧凑处理。\nimport { computed, type ComputedRef } from 'vue'\nimport { useWindowSize } from '@vueuse/core'\n\n/** 宽度阈值:iPad 竖屏是 768 / 834,横屏 1024 起;手机远小于此。 */\nexport const COMPACT_MAX_WIDTH = 900\n/** 高度阈值:1280×600 这类矮屏笔记本,以及横屏平板弹出软键盘后剩下的高度。 */\nexport const COMPACT_MAX_HEIGHT = 640\n\n/** 纯判定,便于单测与非响应式场景直接调用。 */\nexport function isCompactSize(\n width: number,\n height: number,\n maxWidth = COMPACT_MAX_WIDTH,\n maxHeight = COMPACT_MAX_HEIGHT,\n): boolean {\n return width <= maxWidth || height <= maxHeight\n}\n\n/** 响应式紧凑屏标记。阈值可按页覆盖(如某张宽表要更早切紧凑)。 */\nexport function useCompactScreen(opts?: {\n maxWidth?: number\n maxHeight?: number\n}): ComputedRef<boolean> {\n const { width, height } = useWindowSize()\n return computed(() => isCompactSize(width.value, height.value, opts?.maxWidth, opts?.maxHeight))\n}\n"],"names":["COMPACT_MAX_WIDTH","COMPACT_MAX_HEIGHT","isCompactSize","width","height","maxWidth","maxHeight","useCompactScreen","opts","useWindowSize","computed"],"mappings":";;AAQO,MAAMA,IAAoB,KAEpBC,IAAqB;AAG3B,SAASC,EACdC,GACAC,GACAC,IAAWL,GACXM,IAAYL,GACH;AACT,SAAOE,KAASE,KAAYD,KAAUE;AACxC;AAGO,SAASC,EAAiBC,GAGR;AACvB,QAAM,EAAE,OAAAL,GAAO,QAAAC,EAAA,IAAWK,EAAA;AAC1B,SAAOC,EAAS,MAAMR,EAAcC,EAAM,OAAOC,EAAO,OAAOI,KAAA,gBAAAA,EAAM,UAAUA,KAAA,gBAAAA,EAAM,SAAS,CAAC;AACjG;"}
@@ -0,0 +1,18 @@
1
+ export interface ConfirmOptions<T> {
2
+ content: string;
3
+ /** 默认 t('common.confirmTitle') */
4
+ title?: string;
5
+ type?: 'warning' | 'error' | 'info';
6
+ action: () => Promise<T>;
7
+ /** false = 成功不弹 toast(后续另有提示时) */
8
+ successMsg?: string | false;
9
+ }
10
+ export declare function useConfirm(): {
11
+ ask: (opts: {
12
+ content: string;
13
+ title?: string;
14
+ type?: "warning" | "error" | "info";
15
+ }) => Promise<boolean>;
16
+ confirm: <T>(opts: ConfirmOptions<T>) => Promise<boolean>;
17
+ run: <T>(action: () => Promise<T>, successMsg?: string | false) => Promise<boolean>;
18
+ };
@@ -0,0 +1,61 @@
1
+ import { useDialog as l, useMessage as m } from "naive-ui";
2
+ import { useI18n as u } from "vue-i18n";
3
+ import { translateError as g } from "../utils/error.js";
4
+ function T() {
5
+ const c = l(), a = m(), { t } = u();
6
+ function s(n) {
7
+ return new Promise((e) => {
8
+ c.create({
9
+ type: n.type ?? "warning",
10
+ title: n.title ?? t("common.confirmTitle"),
11
+ content: n.content,
12
+ positiveText: t("common.confirm"),
13
+ negativeText: t("common.cancel"),
14
+ onPositiveClick: () => e(!0),
15
+ onNegativeClick: () => e(!1),
16
+ onClose: () => e(!1),
17
+ onMaskClick: () => e(!1),
18
+ onEsc: () => e(!1)
19
+ });
20
+ });
21
+ }
22
+ async function r(n, e) {
23
+ try {
24
+ return await n(), e !== !1 && a.success(e ?? t("common.success")), !0;
25
+ } catch (i) {
26
+ return a.error(g(i)), !1;
27
+ }
28
+ }
29
+ function f(n) {
30
+ return new Promise((e) => {
31
+ let i = !1;
32
+ const o = c.create({
33
+ type: n.type ?? "warning",
34
+ title: n.title ?? t("common.confirmTitle"),
35
+ content: n.content,
36
+ positiveText: t("common.confirm"),
37
+ negativeText: t("common.cancel"),
38
+ onPositiveClick: () => (i = !0, o.loading = !0, o.closeOnEsc = !1, o.maskClosable = !1, r(n.action, n.successMsg).then(e)),
39
+ onNegativeClick: () => {
40
+ if (i) return !1;
41
+ e(!1);
42
+ },
43
+ onClose: () => {
44
+ if (i) return !1;
45
+ e(!1);
46
+ },
47
+ onMaskClick: () => {
48
+ if (i) return !1;
49
+ e(!1);
50
+ },
51
+ onEsc: () => e(!1)
52
+ // busy 时已由 closeOnEsc=false 挡住,不会走到这里
53
+ });
54
+ });
55
+ }
56
+ return { ask: s, confirm: f, run: r };
57
+ }
58
+ export {
59
+ T as useConfirm
60
+ };
61
+ //# sourceMappingURL=useConfirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConfirm.js","sources":["../../src/composables/useConfirm.ts"],"sourcesContent":["// 二次确认 + 结果 toast 的样板收敛(参考参照实现 useHandleData 的取舍):\n// ask —— 仅弹确认框不执行动作,resolve(用户是否确认);给需要自管后续流程的组件(如 StatusSwitch)。\n// confirm —— dialog 确认后执行 action,成/败统一 toast,resolve(执行是否成功);给不适合内联的重操作。\n// run —— 不弹 dialog 的后半段「执行 → toast」,配模板层 n-popconfirm 的 positive-click 用\n// (popconfirm 是触发器旁的内联组件,保留在模板层比 composable 化更顺手)。\n// 仅限 setup 中调用:useDialog/useMessage 依赖 App.vue 的 Provider 注入。\nimport { useDialog, useMessage } from 'naive-ui'\nimport { useI18n } from 'vue-i18n'\nimport { translateError } from '#/utils/error'\n\nexport interface ConfirmOptions<T> {\n content: string\n /** 默认 t('common.confirmTitle') */\n title?: string\n type?: 'warning' | 'error' | 'info'\n action: () => Promise<T>\n /** false = 成功不弹 toast(后续另有提示时) */\n successMsg?: string | false\n}\n\nexport function useConfirm() {\n const dialog = useDialog()\n const message = useMessage()\n const { t } = useI18n()\n\n /** 仅确认不执行:取消/关闭/遮罩/Esc 均 resolve(false)。Esc 必须显式接 onEsc——Naive 的 Esc 路径不走 onClose。 */\n function ask(opts: {\n content: string\n title?: string\n type?: 'warning' | 'error' | 'info'\n }): Promise<boolean> {\n return new Promise(resolve => {\n dialog.create({\n type: opts.type ?? 'warning',\n title: opts.title ?? t('common.confirmTitle'),\n content: opts.content,\n positiveText: t('common.confirm'),\n negativeText: t('common.cancel'),\n onPositiveClick: () => resolve(true),\n onNegativeClick: () => resolve(false),\n onClose: () => resolve(false),\n onMaskClick: () => resolve(false),\n onEsc: () => resolve(false),\n })\n })\n }\n\n /** 执行 → 成/败 toast。resolve(true) 仅当执行成功。 */\n async function run<T>(action: () => Promise<T>, successMsg?: string | false): Promise<boolean> {\n try {\n await action()\n if (successMsg !== false) message.success(successMsg ?? t('common.success'))\n return true\n } catch (e) {\n message.error(translateError(e))\n return false\n }\n }\n\n /** dialog 确认 → run(action 在 dialog 挂起期间执行)。取消/关闭/Esc/失败均 resolve(false)。 */\n function confirm<T>(opts: ConfirmOptions<T>): Promise<boolean> {\n return new Promise(resolve => {\n // Naive 只把关闭延迟到 onPositiveClick 的 Promise settle,不会自动置 loading/锁按钮——\n // 手动锁死全部关闭路径,防连点重复执行、防执行中取消导致「已删成功但表格没刷新」。\n let busy = false\n const inst = dialog.create({\n type: opts.type ?? 'warning',\n title: opts.title ?? t('common.confirmTitle'),\n content: opts.content,\n positiveText: t('common.confirm'),\n negativeText: t('common.cancel'),\n onPositiveClick: () => {\n busy = true\n inst.loading = true // 确认钮 loading + 禁点\n inst.closeOnEsc = false\n inst.maskClosable = false\n return run(opts.action, opts.successMsg).then(resolve)\n },\n onNegativeClick: () => {\n if (busy) return false // 执行中禁取消\n resolve(false)\n },\n onClose: () => {\n if (busy) return false\n resolve(false)\n },\n onMaskClick: () => {\n if (busy) return false\n resolve(false)\n },\n onEsc: () => resolve(false), // busy 时已由 closeOnEsc=false 挡住,不会走到这里\n })\n })\n }\n\n return { ask, confirm, run }\n}\n"],"names":["useConfirm","dialog","useDialog","message","useMessage","useI18n","ask","opts","resolve","run","action","successMsg","e","translateError","confirm","busy","inst"],"mappings":";;;AAoBO,SAASA,IAAa;AAC3B,QAAMC,IAASC,EAAA,GACTC,IAAUC,EAAA,GACV,EAAE,EAAA,IAAMC,EAAA;AAGd,WAASC,EAAIC,GAIQ;AACnB,WAAO,IAAI,QAAQ,CAAAC,MAAW;AAC5B,MAAAP,EAAO,OAAO;AAAA,QACZ,MAAMM,EAAK,QAAQ;AAAA,QACnB,OAAOA,EAAK,SAAS,EAAE,qBAAqB;AAAA,QAC5C,SAASA,EAAK;AAAA,QACd,cAAc,EAAE,gBAAgB;AAAA,QAChC,cAAc,EAAE,eAAe;AAAA,QAC/B,iBAAiB,MAAMC,EAAQ,EAAI;AAAA,QACnC,iBAAiB,MAAMA,EAAQ,EAAK;AAAA,QACpC,SAAS,MAAMA,EAAQ,EAAK;AAAA,QAC5B,aAAa,MAAMA,EAAQ,EAAK;AAAA,QAChC,OAAO,MAAMA,EAAQ,EAAK;AAAA,MAAA,CAC3B;AAAA,IACH,CAAC;AAAA,EACH;AAGA,iBAAeC,EAAOC,GAA0BC,GAA+C;AAC7F,QAAI;AACF,mBAAMD,EAAA,GACFC,MAAe,MAAOR,EAAQ,QAAQQ,KAAc,EAAE,gBAAgB,CAAC,GACpE;AAAA,IACT,SAASC,GAAG;AACV,aAAAT,EAAQ,MAAMU,EAAeD,CAAC,CAAC,GACxB;AAAA,IACT;AAAA,EACF;AAGA,WAASE,EAAWP,GAA2C;AAC7D,WAAO,IAAI,QAAQ,CAAAC,MAAW;AAG5B,UAAIO,IAAO;AACX,YAAMC,IAAOf,EAAO,OAAO;AAAA,QACzB,MAAMM,EAAK,QAAQ;AAAA,QACnB,OAAOA,EAAK,SAAS,EAAE,qBAAqB;AAAA,QAC5C,SAASA,EAAK;AAAA,QACd,cAAc,EAAE,gBAAgB;AAAA,QAChC,cAAc,EAAE,eAAe;AAAA,QAC/B,iBAAiB,OACfQ,IAAO,IACPC,EAAK,UAAU,IACfA,EAAK,aAAa,IAClBA,EAAK,eAAe,IACbP,EAAIF,EAAK,QAAQA,EAAK,UAAU,EAAE,KAAKC,CAAO;AAAA,QAEvD,iBAAiB,MAAM;AACrB,cAAIO,EAAM,QAAO;AACjB,UAAAP,EAAQ,EAAK;AAAA,QACf;AAAA,QACA,SAAS,MAAM;AACb,cAAIO,EAAM,QAAO;AACjB,UAAAP,EAAQ,EAAK;AAAA,QACf;AAAA,QACA,aAAa,MAAM;AACjB,cAAIO,EAAM,QAAO;AACjB,UAAAP,EAAQ,EAAK;AAAA,QACf;AAAA,QACA,OAAO,MAAMA,EAAQ,EAAK;AAAA;AAAA,MAAA,CAC3B;AAAA,IACH,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,KAAAF,GAAK,SAAAQ,GAAS,KAAAL,EAAA;AACzB;"}
@@ -0,0 +1,11 @@
1
+ import { Ref } from 'vue';
2
+ export interface FullscreenToggle {
3
+ /** 本设备是否真能全屏。false 时调用方应隐藏按钮,而不是留个点了没反应的。 */
4
+ isSupported: boolean;
5
+ isFullscreen: Ref<boolean>;
6
+ enter: () => Promise<void>;
7
+ exit: () => Promise<void>;
8
+ toggle: () => Promise<void>;
9
+ }
10
+ /** @param target 要全屏的元素,默认整个文档。 */
11
+ export declare function useFullscreenToggle(target?: () => Element | null | undefined): FullscreenToggle;
@@ -0,0 +1,64 @@
1
+ import { ref as S, onScopeDispose as w } from "vue";
2
+ const d = [
3
+ "requestFullscreen",
4
+ "webkitRequestFullscreen",
5
+ "webkitRequestFullScreen",
6
+ "mozRequestFullScreen",
7
+ "msRequestFullscreen"
8
+ ], k = [
9
+ "exitFullscreen",
10
+ "webkitExitFullscreen",
11
+ "webkitCancelFullScreen",
12
+ "mozCancelFullScreen",
13
+ "msExitFullscreen"
14
+ ], p = [
15
+ "fullscreenElement",
16
+ "webkitFullscreenElement",
17
+ "webkitCurrentFullScreenElement",
18
+ "mozFullScreenElement",
19
+ "msFullscreenElement"
20
+ ], m = [
21
+ "fullscreenchange",
22
+ "webkitfullscreenchange",
23
+ "mozfullscreenchange",
24
+ "MSFullscreenChange"
25
+ ];
26
+ function F(l, n) {
27
+ return n.find((e) => typeof l[e] == "function");
28
+ }
29
+ function y(l) {
30
+ for (const n of p) {
31
+ const e = l[n];
32
+ if (e) return e;
33
+ }
34
+ return null;
35
+ }
36
+ function v(l) {
37
+ const n = document, e = S(!1), o = () => (l == null ? void 0 : l()) ?? document.documentElement, u = F(o(), d), s = F(n, k), r = !!u && !!s;
38
+ function c() {
39
+ e.value = !!y(n);
40
+ }
41
+ c();
42
+ async function i() {
43
+ var t, E;
44
+ !u || e.value || (await ((E = (t = o())[u]) == null ? void 0 : E.call(t)), c());
45
+ }
46
+ async function f() {
47
+ var t;
48
+ !s || !e.value || (await ((t = n[s]) == null ? void 0 : t.call(n)), c());
49
+ }
50
+ async function a() {
51
+ await (e.value ? f() : i());
52
+ }
53
+ if (r) {
54
+ for (const t of m) document.addEventListener(t, c);
55
+ w(() => {
56
+ for (const t of m) document.removeEventListener(t, c);
57
+ });
58
+ }
59
+ return { isSupported: r, isFullscreen: e, enter: i, exit: f, toggle: a };
60
+ }
61
+ export {
62
+ v as useFullscreenToggle
63
+ };
64
+ //# sourceMappingURL=useFullscreenToggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFullscreenToggle.js","sources":["../../src/composables/useFullscreenToggle.ts"],"sourcesContent":["// 原生全屏开关。自己写而不用 VueUse 的 `useFullscreen`,只为一件事:**iPadOS 上它把 isSupported 判成 false**。\n//\n// iPadOS 的 Safari 默认「请求桌面网站」,UA 看着就是 macOS Safari,于是不会走移动端分支;\n// 但它的 Element 上只有带 `webkit` 前缀的 `webkitRequestFullscreen`,没有标准名。VueUse 只探标准名,\n// 结论就是「不支持」—— 顶栏的全屏按钮在一台明明能全屏的设备上永远是灰的。\n//\n// 真不支持的设备(iPhone Safari:只有 video 能全屏)照旧回 false,调用方据此把按钮藏掉,\n// 而不是留一个点了没反应的按钮。\nimport { onScopeDispose, ref, type Ref } from 'vue'\n\ntype FullscreenElement = Element & {\n requestFullscreen?: () => Promise<void>\n webkitRequestFullscreen?: () => Promise<void> | void\n webkitRequestFullScreen?: () => Promise<void> | void\n mozRequestFullScreen?: () => Promise<void> | void\n msRequestFullscreen?: () => Promise<void> | void\n}\n\ntype FullscreenDocument = Document & {\n exitFullscreen?: () => Promise<void>\n webkitExitFullscreen?: () => Promise<void> | void\n webkitCancelFullScreen?: () => Promise<void> | void\n mozCancelFullScreen?: () => Promise<void> | void\n msExitFullscreen?: () => Promise<void> | void\n fullscreenElement?: Element | null\n webkitFullscreenElement?: Element | null\n webkitCurrentFullScreenElement?: Element | null\n mozFullScreenElement?: Element | null\n msFullscreenElement?: Element | null\n}\n\nconst REQUEST_KEYS = [\n 'requestFullscreen',\n 'webkitRequestFullscreen',\n 'webkitRequestFullScreen',\n 'mozRequestFullScreen',\n 'msRequestFullscreen',\n] as const\n\nconst EXIT_KEYS = [\n 'exitFullscreen',\n 'webkitExitFullscreen',\n 'webkitCancelFullScreen',\n 'mozCancelFullScreen',\n 'msExitFullscreen',\n] as const\n\nconst ELEMENT_KEYS = [\n 'fullscreenElement',\n 'webkitFullscreenElement',\n 'webkitCurrentFullScreenElement',\n 'mozFullScreenElement',\n 'msFullscreenElement',\n] as const\n\n// 前缀实现派发的是各自的事件名,少监听一个就会出现「已全屏但图标没变」。\nconst CHANGE_EVENTS = [\n 'fullscreenchange',\n 'webkitfullscreenchange',\n 'mozfullscreenchange',\n 'MSFullscreenChange',\n] as const\n\nfunction pickMethod<T extends string>(host: object, keys: readonly T[]): T | undefined {\n return keys.find(k => typeof (host as Record<string, unknown>)[k] === 'function')\n}\n\n/** 当前是否处于全屏(把带前缀的 fullscreenElement 一并认全)。 */\nfunction currentFullscreenElement(doc: FullscreenDocument): Element | null {\n for (const key of ELEMENT_KEYS) {\n const el = doc[key]\n if (el) return el\n }\n return null\n}\n\nexport interface FullscreenToggle {\n /** 本设备是否真能全屏。false 时调用方应隐藏按钮,而不是留个点了没反应的。 */\n isSupported: boolean\n isFullscreen: Ref<boolean>\n enter: () => Promise<void>\n exit: () => Promise<void>\n toggle: () => Promise<void>\n}\n\n/** @param target 要全屏的元素,默认整个文档。 */\nexport function useFullscreenToggle(target?: () => Element | null | undefined): FullscreenToggle {\n const doc = document as FullscreenDocument\n const isFullscreen = ref(false)\n\n const el = () => (target?.() ?? document.documentElement) as FullscreenElement\n const requestKey = pickMethod(el(), REQUEST_KEYS)\n const exitKey = pickMethod(doc, EXIT_KEYS)\n const isSupported = !!requestKey && !!exitKey\n\n function sync() {\n isFullscreen.value = !!currentFullscreenElement(doc)\n }\n sync()\n\n async function enter() {\n if (!requestKey || isFullscreen.value) return\n await el()[requestKey]?.()\n sync() // 前缀实现未必派发事件,进出后主动对一次状态\n }\n\n async function exit() {\n if (!exitKey || !isFullscreen.value) return\n await doc[exitKey]?.()\n sync()\n }\n\n async function toggle() {\n await (isFullscreen.value ? exit() : enter())\n }\n\n if (isSupported) {\n for (const e of CHANGE_EVENTS) document.addEventListener(e, sync)\n onScopeDispose(() => {\n for (const e of CHANGE_EVENTS) document.removeEventListener(e, sync)\n })\n }\n\n return { isSupported, isFullscreen, enter, exit, toggle }\n}\n"],"names":["REQUEST_KEYS","EXIT_KEYS","ELEMENT_KEYS","CHANGE_EVENTS","pickMethod","host","keys","k","currentFullscreenElement","doc","key","el","useFullscreenToggle","target","isFullscreen","ref","requestKey","exitKey","isSupported","sync","enter","_b","_a","exit","toggle","e","onScopeDispose"],"mappings":";AA+BA,MAAMA,IAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,IAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,IAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGMC,IAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAASC,EAA6BC,GAAcC,GAAmC;AACrF,SAAOA,EAAK,KAAK,CAAAC,MAAK,OAAQF,EAAiCE,CAAC,KAAM,UAAU;AAClF;AAGA,SAASC,EAAyBC,GAAyC;AACzE,aAAWC,KAAOR,GAAc;AAC9B,UAAMS,IAAKF,EAAIC,CAAG;AAClB,QAAIC,EAAI,QAAOA;AAAA,EACjB;AACA,SAAO;AACT;AAYO,SAASC,EAAoBC,GAA6D;AAC/F,QAAMJ,IAAM,UACNK,IAAeC,EAAI,EAAK,GAExBJ,IAAK,OAAOE,KAAA,gBAAAA,QAAc,SAAS,iBACnCG,IAAaZ,EAAWO,EAAA,GAAMX,CAAY,GAC1CiB,IAAUb,EAAWK,GAAKR,CAAS,GACnCiB,IAAc,CAAC,CAACF,KAAc,CAAC,CAACC;AAEtC,WAASE,IAAO;AACd,IAAAL,EAAa,QAAQ,CAAC,CAACN,EAAyBC,CAAG;AAAA,EACrD;AACA,EAAAU,EAAA;AAEA,iBAAeC,IAAQ;;AACrB,IAAI,CAACJ,KAAcF,EAAa,UAChC,QAAMO,KAAAC,IAAAX,EAAA,GAAKK,OAAL,gBAAAK,EAAA,KAAAC,KACNH,EAAA;AAAA,EACF;AAEA,iBAAeI,IAAO;;AACpB,IAAI,CAACN,KAAW,CAACH,EAAa,UAC9B,QAAMQ,IAAAb,EAAIQ,OAAJ,gBAAAK,EAAA,KAAAb,KACNU,EAAA;AAAA,EACF;AAEA,iBAAeK,IAAS;AACtB,WAAOV,EAAa,QAAQS,EAAA,IAASH,EAAA;AAAA,EACvC;AAEA,MAAIF,GAAa;AACf,eAAWO,KAAKtB,EAAe,UAAS,iBAAiBsB,GAAGN,CAAI;AAChE,IAAAO,EAAe,MAAM;AACnB,iBAAWD,KAAKtB,EAAe,UAAS,oBAAoBsB,GAAGN,CAAI;AAAA,IACrE,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,aAAAD,GAAa,cAAAJ,GAAc,OAAAM,GAAO,MAAAG,GAAM,QAAAC,EAAA;AACnD;"}
@@ -0,0 +1,31 @@
1
+ import { Component, ComputedRef } from 'vue';
2
+ interface HeaderToolBase {
3
+ /** 唯一键,重复登记以最后一次为准 */
4
+ key: string;
5
+ /** 排序,越小越靠左;内置项(铃铛、用户下拉)恒在登记项右侧 */
6
+ order?: number;
7
+ /** 窄屏(<768px)是否保留。默认隐藏:顶栏挤不下时右端会被裁,最右的登出入口优先 */
8
+ keepOnMobile?: boolean;
9
+ }
10
+ /** 图标模式:一个圆形 quaternary 按钮 + 悬浮提示,适合"点了就跳/就开弹窗"的入口。 */
11
+ export interface HeaderToolIcon extends HeaderToolBase {
12
+ /** iconify 名(Phosphor 的 calendar-dots 之类)。子集外的名字由 AppIcon 懒加载兜底 */
13
+ icon: string;
14
+ /** 悬浮提示与 aria-label(自行翻译好) */
15
+ label: string;
16
+ onClick: () => void;
17
+ component?: never;
18
+ }
19
+ /** 组件模式:整块交给你自己的组件渲染(自带角标 / 弹层的入口,内置铃铛就是这个形状)。 */
20
+ export interface HeaderToolComponent extends HeaderToolBase {
21
+ component: Component;
22
+ icon?: never;
23
+ label?: never;
24
+ onClick?: never;
25
+ }
26
+ export type HeaderTool = HeaderToolIcon | HeaderToolComponent;
27
+ /** 往顶栏工具区放一项,返回注销函数。 */
28
+ export declare function registerHeaderTool(tool: HeaderTool): () => void;
29
+ /** 已登记的工具项,按 order 升序(同 order 保持登记先后)。AppHeader 渲染用。 */
30
+ export declare function useHeaderTools(): ComputedRef<HeaderTool[]>;
31
+ export {};
@@ -0,0 +1,15 @@
1
+ import { computed as o, shallowReactive as n } from "vue";
2
+ const r = n(/* @__PURE__ */ new Map());
3
+ function d(e) {
4
+ return r.set(e.key, e), () => {
5
+ r.get(e.key) === e && r.delete(e.key);
6
+ };
7
+ }
8
+ function u() {
9
+ return o(() => [...r.values()].toSorted((e, t) => (e.order ?? 0) - (t.order ?? 0)));
10
+ }
11
+ export {
12
+ d as registerHeaderTool,
13
+ u as useHeaderTools
14
+ };
15
+ //# sourceMappingURL=useHeaderTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHeaderTools.js","sources":["../../src/composables/useHeaderTools.ts"],"sourcesContent":["// 顶栏工具区登记表:扩展模块把自己的入口(图标按钮或整块组件)放进顶栏。\n// 不做成 AppHeader 上的具名插槽:AppHeader 只有 layouts/default.vue 一处使用,走插槽就得连 default.vue\n// 一起改,而两者都在包里,应用改不到。登记表让扩展代码留在应用自己的文件里。\nimport { computed, shallowReactive, type Component, type ComputedRef } from 'vue'\n\ninterface HeaderToolBase {\n /** 唯一键,重复登记以最后一次为准 */\n key: string\n /** 排序,越小越靠左;内置项(铃铛、用户下拉)恒在登记项右侧 */\n order?: number\n /** 窄屏(<768px)是否保留。默认隐藏:顶栏挤不下时右端会被裁,最右的登出入口优先 */\n keepOnMobile?: boolean\n}\n\n/** 图标模式:一个圆形 quaternary 按钮 + 悬浮提示,适合\"点了就跳/就开弹窗\"的入口。 */\nexport interface HeaderToolIcon extends HeaderToolBase {\n /** iconify 名(Phosphor 的 calendar-dots 之类)。子集外的名字由 AppIcon 懒加载兜底 */\n icon: string\n /** 悬浮提示与 aria-label(自行翻译好) */\n label: string\n onClick: () => void\n component?: never\n}\n\n/** 组件模式:整块交给你自己的组件渲染(自带角标 / 弹层的入口,内置铃铛就是这个形状)。 */\nexport interface HeaderToolComponent extends HeaderToolBase {\n component: Component\n icon?: never\n label?: never\n onClick?: never\n}\n\nexport type HeaderTool = HeaderToolIcon | HeaderToolComponent\n\nconst tools = shallowReactive(new Map<string, HeaderTool>())\n\n/** 往顶栏工具区放一项,返回注销函数。 */\nexport function registerHeaderTool(tool: HeaderTool): () => void {\n tools.set(tool.key, tool)\n return () => {\n if (tools.get(tool.key) === tool) tools.delete(tool.key)\n }\n}\n\n/** 已登记的工具项,按 order 升序(同 order 保持登记先后)。AppHeader 渲染用。 */\nexport function useHeaderTools(): ComputedRef<HeaderTool[]> {\n return computed(() => [...tools.values()].toSorted((a, b) => (a.order ?? 0) - (b.order ?? 0)))\n}\n"],"names":["tools","shallowReactive","registerHeaderTool","tool","useHeaderTools","computed","a","b"],"mappings":";AAkCA,MAAMA,IAAQC,EAAgB,oBAAI,KAAyB;AAGpD,SAASC,EAAmBC,GAA8B;AAC/D,SAAAH,EAAM,IAAIG,EAAK,KAAKA,CAAI,GACjB,MAAM;AACX,IAAIH,EAAM,IAAIG,EAAK,GAAG,MAAMA,KAAMH,EAAM,OAAOG,EAAK,GAAG;AAAA,EACzD;AACF;AAGO,SAASC,IAA4C;AAC1D,SAAOC,EAAS,MAAM,CAAC,GAAGL,EAAM,OAAA,CAAQ,EAAE,SAAS,CAACM,GAAGC,OAAOD,EAAE,SAAS,MAAMC,EAAE,SAAS,EAAE,CAAC;AAC/F;"}
@@ -0,0 +1,17 @@
1
+ import { MenuOption } from 'naive-ui';
2
+ /**
3
+ * 布局菜单派生 + 一/二级选中态联动(混合布局用)。
4
+ * createSharedComposable → default.vue 与 AppHeader 共享同一份 selectedL1,不各自漂移。
5
+ * 走 router.currentRoute(全局 ref),不依赖组件上下文的 useRoute。
6
+ */
7
+ declare function useLayoutMenuImpl(): {
8
+ menuOptions: import('vue').ComputedRef<MenuOption[]>;
9
+ l1Options: import('vue').ComputedRef<MenuOption[]>;
10
+ l2Options: import('vue').ComputedRef<MenuOption[]>;
11
+ selectedL1: import('vue').Ref<string | undefined, string | undefined>;
12
+ activeKey: import('vue').ComputedRef<string>;
13
+ onSelect: (key: string) => void;
14
+ onSelectL1: (key: string) => void;
15
+ };
16
+ export declare const useLayoutMenu: typeof useLayoutMenuImpl;
17
+ export {};
@@ -0,0 +1,93 @@
1
+ import { computed as l, ref as M, watch as s, h } from "vue";
2
+ import { NBadge as O } from "naive-ui";
3
+ import { createSharedComposable as w } from "@vueuse/core";
4
+ import A from "../components/AppIcon.vue.js";
5
+ import { menuBadge as I } from "./useMenuBadge.js";
6
+ import { router as a } from "../router/index.js";
7
+ import { useAuthStore as K } from "../stores/auth.js";
8
+ import { useAppStore as T } from "../stores/app.js";
9
+ import { translateMenuTitle as m } from "../locales/menuTitle.js";
10
+ import { isHttpUrl as W, isFullscreenPath as _ } from "../utils/url.js";
11
+ import { MenuType as p } from "../types/menu.js";
12
+ function d(r) {
13
+ return !W(r) && !_(r) ? !1 : (window.open(r, "_blank", "noopener,noreferrer"), !0);
14
+ }
15
+ function v(r, e = "ph:dot-outline-duotone") {
16
+ return () => h(A, { icon: r || e, size: 18 });
17
+ }
18
+ function C(r) {
19
+ if (r)
20
+ return () => {
21
+ const e = I(r);
22
+ return e == null || e === 0 || e === "" ? null : h(O, { value: e, max: 99 });
23
+ };
24
+ }
25
+ function y(r) {
26
+ return r.toSorted((e, n) => e.sort - n.sort).filter((e) => e.type !== p.Button && e.visible !== !1).map((e) => {
27
+ if (e.type === p.Catalog) {
28
+ const n = y(e.children ?? []);
29
+ return n.length ? {
30
+ label: m(e.title, e.path),
31
+ key: `cat-${e.id}`,
32
+ icon: v(e.icon, "ph:folder-duotone"),
33
+ children: n
34
+ } : null;
35
+ }
36
+ return {
37
+ label: m(e.title, e.path),
38
+ key: e.path ?? `menu-${e.id}`,
39
+ icon: v(e.icon),
40
+ extra: C(e.path)
41
+ };
42
+ }).filter((e) => e !== null);
43
+ }
44
+ function g(r, e) {
45
+ return r.key === e ? !0 : (r.children ?? []).some((n) => g(n, e));
46
+ }
47
+ function k(r) {
48
+ if (typeof r.key == "string" && r.key.startsWith("/")) return r.key;
49
+ for (const e of r.children ?? []) {
50
+ const n = k(e);
51
+ if (n) return n;
52
+ }
53
+ }
54
+ function R() {
55
+ const r = K(), e = T(), n = l(() => (e.locale, y(r.menuTree))), b = l(
56
+ () => n.value.map((t) => ({ label: t.label, key: t.key, icon: t.icon, extra: t.extra }))
57
+ ), c = l(() => a.currentRoute.value.path), i = M();
58
+ function f(t) {
59
+ const o = n.value.find((u) => g(u, t));
60
+ return o ? String(o.key) : void 0;
61
+ }
62
+ s(
63
+ () => a.currentRoute.value.path,
64
+ (t) => {
65
+ var u;
66
+ const o = f(t);
67
+ o ? i.value = o : i.value === void 0 && (i.value = (u = n.value[0]) == null ? void 0 : u.key);
68
+ },
69
+ { immediate: !0 }
70
+ ), s(n, (t) => {
71
+ var o;
72
+ (i.value === void 0 || !t.some((u) => u.key === i.value)) && (i.value = f(c.value) ?? ((o = t[0]) == null ? void 0 : o.key));
73
+ });
74
+ const S = l(() => {
75
+ const t = n.value.find((o) => o.key === i.value);
76
+ return (t == null ? void 0 : t.children) ?? [];
77
+ });
78
+ function x(t) {
79
+ d(t) || t.startsWith("/") && a.push(t);
80
+ }
81
+ function L(t) {
82
+ if (d(t)) return;
83
+ i.value = t;
84
+ const o = n.value.find((B) => B.key === t), u = t.startsWith("/") ? t : o ? k(o) : void 0;
85
+ u && a.push(u);
86
+ }
87
+ return { menuOptions: n, l1Options: b, l2Options: S, selectedL1: i, activeKey: c, onSelect: x, onSelectL1: L };
88
+ }
89
+ const G = w(R);
90
+ export {
91
+ G as useLayoutMenu
92
+ };
93
+ //# sourceMappingURL=useLayoutMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLayoutMenu.js","sources":["../../src/composables/useLayoutMenu.ts"],"sourcesContent":["// auth.menuTree → n-menu 的 MenuOption,外加混合布局下顶栏一级 / 侧栏二级的选中态联动。\n// 用法:default.vue 与 AppHeader 各自 useLayoutMenu(),createSharedComposable 保证它们共享同一份选中态。\n// 坑:off-menu 路由(如 /personal/*)命中不到任何一级,此时保留上一次的一级选中,别把顶栏清空。\nimport { computed, h, ref, watch } from 'vue'\nimport { NBadge, type MenuOption } from 'naive-ui'\nimport { createSharedComposable } from '@vueuse/core'\nimport AppIcon from '#/components/AppIcon.vue'\nimport { menuBadge } from '#/composables/useMenuBadge'\nimport { router } from '#/router'\nimport { useAuthStore } from '#/stores/auth'\nimport { useAppStore } from '#/stores/app'\nimport { translateMenuTitle } from '#/locales/menuTitle'\nimport { isFullscreenPath, isHttpUrl } from '#/utils/url'\nimport { MenuType, type MenuNode } from '#/types/menu'\n\n/**\n * 新标签页打开的两类 key → window.open;返回是否已处理。\n * - 外链菜单:path 为 http(s) URL。\n * - 站内整屏页:path 以 `/fullscreen/` 开头(大屏看板),站内静态路由,但必须脱离布局壳整屏显示。\n */\nfunction openIfExternal(key: string): boolean {\n if (!isHttpUrl(key) && !isFullscreenPath(key)) return false\n window.open(key, '_blank', 'noopener,noreferrer')\n return true\n}\n\n// 无图标兜底:rail/折叠态的 n-menu 只画图标,缺图标会渲染成空槽“消失”(§组织管理),故永不返回 undefined。\n// 走 AppIcon 而非裸 Icon:菜单图标是库里配的,子集外的名字要由它懒加载整集兜底,否则渲染不出来。\nfunction renderIcon(name: string | undefined, fallback = 'ph:dot-outline-duotone') {\n return () => h(AppIcon, { icon: name || fallback, size: 18 })\n}\n\n// 角标(registerMenuBadge 登记的未读数/待办数)→ n-menu 的 extra 槽。\n// 读值在渲染函数里做,故登记的 ref 一变角标就变,不必重算整棵 options。\n// 折叠 / rail 态 n-menu 只画图标、不渲染 extra,角标随之隐藏——这是 n-menu 的行为,不另做补偿。\nfunction renderBadge(path: string | undefined) {\n if (!path) return undefined\n return () => {\n const value = menuBadge(path)\n if (value === null || value === undefined || value === 0 || value === '') return null\n return h(NBadge, { value, max: 99 })\n }\n}\n\n// 菜单树 → n-menu options:剥按钮、丢空目录、页面叶子 key=路由 path。目录/叶子各自兜底图标。\nfunction toOptions(nodes: MenuNode[]): MenuOption[] {\n return nodes\n .toSorted((a, b) => a.sort - b.sort)\n .filter(n => n.type !== MenuType.Button && n.visible !== false)\n .map<MenuOption | null>(n => {\n if (n.type === MenuType.Catalog) {\n const children = toOptions(n.children ?? [])\n if (!children.length) return null\n return {\n label: translateMenuTitle(n.title, n.path),\n key: `cat-${n.id}`,\n icon: renderIcon(n.icon, 'ph:folder-duotone'),\n children,\n }\n }\n return {\n label: translateMenuTitle(n.title, n.path),\n key: n.path ?? `menu-${n.id}`,\n icon: renderIcon(n.icon),\n extra: renderBadge(n.path),\n }\n })\n .filter((o): o is MenuOption => o !== null)\n}\n\nfunction containsKey(opt: MenuOption, path: string): boolean {\n if (opt.key === path) return true\n return ((opt.children as MenuOption[]) ?? []).some(c => containsKey(c, path))\n}\nfunction firstLeafKey(opt: MenuOption): string | undefined {\n if (typeof opt.key === 'string' && opt.key.startsWith('/')) return opt.key\n for (const c of (opt.children as MenuOption[]) ?? []) {\n const k = firstLeafKey(c)\n if (k) return k\n }\n return undefined\n}\n\n/**\n * 布局菜单派生 + 一/二级选中态联动(混合布局用)。\n * createSharedComposable → default.vue 与 AppHeader 共享同一份 selectedL1,不各自漂移。\n * 走 router.currentRoute(全局 ref),不依赖组件上下文的 useRoute。\n */\nfunction useLayoutMenuImpl() {\n const auth = useAuthStore()\n const app = useAppStore()\n\n // 工作台是每个应用菜单树里的一条(Sort=0 → 排第一项),跟着应用变,不用手工 prepend。\n const menuOptions = computed<MenuOption[]>(() => {\n void app.locale // 依赖:切换语言时 i18n key 标题重算\n return toOptions(auth.menuTree)\n })\n\n // 一级(剥 children → n-menu 渲染为可选普通项,无展开箭头)。\n const l1Options = computed<MenuOption[]>(() =>\n menuOptions.value.map(o => ({ label: o.label, key: o.key, icon: o.icon, extra: o.extra })),\n )\n\n const activeKey = computed(() => router.currentRoute.value.path)\n const selectedL1 = ref<string>()\n\n function findActiveL1(path: string): string | undefined {\n const top = menuOptions.value.find(o => containsKey(o, path))\n return top ? String(top.key) : undefined\n }\n\n // 路由 → 一级同步:命中才覆写(off-menu 路由如 /personal/* 保留上次);首次 seed 头一项。\n watch(\n () => router.currentRoute.value.path,\n path => {\n const l1 = findActiveL1(path)\n if (l1) selectedL1.value = l1\n else if (selectedL1.value === undefined)\n selectedL1.value = menuOptions.value[0]?.key as string | undefined\n },\n { immediate: true },\n )\n // 菜单可能晚于首个 watch 到达(F5 重建):补 seed / 修正失效选择。\n watch(menuOptions, opts => {\n if (selectedL1.value === undefined || !opts.some(o => o.key === selectedL1.value)) {\n selectedL1.value = findActiveL1(activeKey.value) ?? (opts[0]?.key as string | undefined)\n }\n })\n\n const l2Options = computed<MenuOption[]>(() => {\n const top = menuOptions.value.find(o => o.key === selectedL1.value)\n return (top?.children as MenuOption[]) ?? []\n })\n\n function onSelect(key: string) {\n if (openIfExternal(key)) return\n if (key.startsWith('/')) router.push(key)\n }\n function onSelectL1(key: string) {\n if (openIfExternal(key)) return\n selectedL1.value = key // 先设,L2 列立即刷新,不等导航\n const top = menuOptions.value.find(o => o.key === key)\n const target = key.startsWith('/') ? key : top ? firstLeafKey(top) : undefined\n if (target) router.push(target)\n }\n\n return { menuOptions, l1Options, l2Options, selectedL1, activeKey, onSelect, onSelectL1 }\n}\n\nexport const useLayoutMenu = createSharedComposable(useLayoutMenuImpl)\n"],"names":["openIfExternal","key","isHttpUrl","isFullscreenPath","renderIcon","name","fallback","AppIcon","renderBadge","path","value","menuBadge","NBadge","toOptions","nodes","a","b","n","MenuType","children","translateMenuTitle","o","containsKey","opt","c","firstLeafKey","k","useLayoutMenuImpl","auth","useAuthStore","app","useAppStore","menuOptions","computed","l1Options","activeKey","router","selectedL1","ref","findActiveL1","top","watch","l1","_a","opts","l2Options","onSelect","onSelectL1","target","useLayoutMenu","createSharedComposable"],"mappings":";;;;;;;;;;;AAoBA,SAASA,EAAeC,GAAsB;AAC5C,SAAI,CAACC,EAAUD,CAAG,KAAK,CAACE,EAAiBF,CAAG,IAAU,MACtD,OAAO,KAAKA,GAAK,UAAU,qBAAqB,GACzC;AACT;AAIA,SAASG,EAAWC,GAA0BC,IAAW,0BAA0B;AACjF,SAAO,MAAM,EAAEC,GAAS,EAAE,MAAMF,KAAQC,GAAU,MAAM,IAAI;AAC9D;AAKA,SAASE,EAAYC,GAA0B;AAC7C,MAAKA;AACL,WAAO,MAAM;AACX,YAAMC,IAAQC,EAAUF,CAAI;AAC5B,aAAIC,KAAU,QAA+BA,MAAU,KAAKA,MAAU,KAAW,OAC1E,EAAEE,GAAQ,EAAE,OAAAF,GAAO,KAAK,IAAI;AAAA,IACrC;AACF;AAGA,SAASG,EAAUC,GAAiC;AAClD,SAAOA,EACJ,SAAS,CAACC,GAAGC,MAAMD,EAAE,OAAOC,EAAE,IAAI,EAClC,OAAO,CAAAC,MAAKA,EAAE,SAASC,EAAS,UAAUD,EAAE,YAAY,EAAK,EAC7D,IAAuB,CAAAA,MAAK;AAC3B,QAAIA,EAAE,SAASC,EAAS,SAAS;AAC/B,YAAMC,IAAWN,EAAUI,EAAE,YAAY,CAAA,CAAE;AAC3C,aAAKE,EAAS,SACP;AAAA,QACL,OAAOC,EAAmBH,EAAE,OAAOA,EAAE,IAAI;AAAA,QACzC,KAAK,OAAOA,EAAE,EAAE;AAAA,QAChB,MAAMb,EAAWa,EAAE,MAAM,mBAAmB;AAAA,QAC5C,UAAAE;AAAA,MAAA,IAL2B;AAAA,IAO/B;AACA,WAAO;AAAA,MACL,OAAOC,EAAmBH,EAAE,OAAOA,EAAE,IAAI;AAAA,MACzC,KAAKA,EAAE,QAAQ,QAAQA,EAAE,EAAE;AAAA,MAC3B,MAAMb,EAAWa,EAAE,IAAI;AAAA,MACvB,OAAOT,EAAYS,EAAE,IAAI;AAAA,IAAA;AAAA,EAE7B,CAAC,EACA,OAAO,CAACI,MAAuBA,MAAM,IAAI;AAC9C;AAEA,SAASC,EAAYC,GAAiBd,GAAuB;AAC3D,SAAIc,EAAI,QAAQd,IAAa,MACpBc,EAAI,YAA6B,IAAI,KAAK,CAAAC,MAAKF,EAAYE,GAAGf,CAAI,CAAC;AAC9E;AACA,SAASgB,EAAaF,GAAqC;AACzD,MAAI,OAAOA,EAAI,OAAQ,YAAYA,EAAI,IAAI,WAAW,GAAG,EAAG,QAAOA,EAAI;AACvE,aAAWC,KAAMD,EAAI,YAA6B,CAAA,GAAI;AACpD,UAAMG,IAAID,EAAaD,CAAC;AACxB,QAAIE,EAAG,QAAOA;AAAA,EAChB;AAEF;AAOA,SAASC,IAAoB;AAC3B,QAAMC,IAAOC,EAAA,GACPC,IAAMC,EAAA,GAGNC,IAAcC,EAAuB,OACpCH,EAAI,QACFjB,EAAUe,EAAK,QAAQ,EAC/B,GAGKM,IAAYD;AAAA,IAAuB,MACvCD,EAAY,MAAM,IAAI,CAAAX,OAAM,EAAE,OAAOA,EAAE,OAAO,KAAKA,EAAE,KAAK,MAAMA,EAAE,MAAM,OAAOA,EAAE,QAAQ;AAAA,EAAA,GAGrFc,IAAYF,EAAS,MAAMG,EAAO,aAAa,MAAM,IAAI,GACzDC,IAAaC,EAAA;AAEnB,WAASC,EAAa9B,GAAkC;AACtD,UAAM+B,IAAMR,EAAY,MAAM,KAAK,OAAKV,EAAYD,GAAGZ,CAAI,CAAC;AAC5D,WAAO+B,IAAM,OAAOA,EAAI,GAAG,IAAI;AAAA,EACjC;AAGA,EAAAC;AAAA,IACE,MAAML,EAAO,aAAa,MAAM;AAAA,IAChC,CAAA3B,MAAQ;;AACN,YAAMiC,IAAKH,EAAa9B,CAAI;AAC5B,MAAIiC,MAAe,QAAQA,IAClBL,EAAW,UAAU,WAC5BA,EAAW,SAAQM,IAAAX,EAAY,MAAM,CAAC,MAAnB,gBAAAW,EAAsB;AAAA,IAC7C;AAAA,IACA,EAAE,WAAW,GAAA;AAAA,EAAK,GAGpBF,EAAMT,GAAa,CAAAY,MAAQ;;AACzB,KAAIP,EAAW,UAAU,UAAa,CAACO,EAAK,KAAK,CAAAvB,MAAKA,EAAE,QAAQgB,EAAW,KAAK,OAC9EA,EAAW,QAAQE,EAAaJ,EAAU,KAAK,OAAMQ,IAAAC,EAAK,CAAC,MAAN,gBAAAD,EAAS;AAAA,EAElE,CAAC;AAED,QAAME,IAAYZ,EAAuB,MAAM;AAC7C,UAAMO,IAAMR,EAAY,MAAM,KAAK,OAAK,EAAE,QAAQK,EAAW,KAAK;AAClE,YAAQG,KAAA,gBAAAA,EAAK,aAA6B,CAAA;AAAA,EAC5C,CAAC;AAED,WAASM,EAAS7C,GAAa;AAC7B,IAAID,EAAeC,CAAG,KAClBA,EAAI,WAAW,GAAG,KAAGmC,EAAO,KAAKnC,CAAG;AAAA,EAC1C;AACA,WAAS8C,EAAW9C,GAAa;AAC/B,QAAID,EAAeC,CAAG,EAAG;AACzB,IAAAoC,EAAW,QAAQpC;AACnB,UAAMuC,IAAMR,EAAY,MAAM,KAAK,CAAAX,MAAKA,EAAE,QAAQpB,CAAG,GAC/C+C,IAAS/C,EAAI,WAAW,GAAG,IAAIA,IAAMuC,IAAMf,EAAae,CAAG,IAAI;AACrE,IAAIQ,KAAQZ,EAAO,KAAKY,CAAM;AAAA,EAChC;AAEA,SAAO,EAAE,aAAAhB,GAAa,WAAAE,GAAW,WAAAW,GAAW,YAAAR,GAAY,WAAAF,GAAW,UAAAW,GAAU,YAAAC,EAAA;AAC/E;AAEO,MAAME,IAAgBC,EAAuBvB,CAAiB;"}
@@ -0,0 +1,11 @@
1
+ import { MaybeRefOrGetter } from 'vue';
2
+ /** 角标值。0 / '' / null / undefined 一律不渲染——未读为零时不该在菜单上留个空圈。 */
3
+ export type MenuBadgeValue = number | string | null | undefined;
4
+ /**
5
+ * 给菜单项挂角标,返回注销函数。
6
+ * <p>`path` 用菜单的路由 path(与 MenuNode.path 同一个值)。value 可传 ref / getter:
7
+ * 值变了角标自己跟着变,不必重新登记。同一 path 重复登记以最后一次为准。</p>
8
+ */
9
+ export declare function registerMenuBadge(path: string, value: MaybeRefOrGetter<MenuBadgeValue>): () => void;
10
+ /** 取某菜单项当前的角标值(useLayoutMenu 渲染用)。 */
11
+ export declare function menuBadge(path: string): MenuBadgeValue;
@@ -0,0 +1,17 @@
1
+ import { reactive as o, toValue as u } from "vue";
2
+ const n = o(/* @__PURE__ */ new Map());
3
+ function i(e, t) {
4
+ const r = () => u(t);
5
+ return n.set(e, r), () => {
6
+ n.get(e) === r && n.delete(e);
7
+ };
8
+ }
9
+ function a(e) {
10
+ var t;
11
+ return (t = n.get(e)) == null ? void 0 : t();
12
+ }
13
+ export {
14
+ a as menuBadge,
15
+ i as registerMenuBadge
16
+ };
17
+ //# sourceMappingURL=useMenuBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMenuBadge.js","sources":["../../src/composables/useMenuBadge.ts"],"sourcesContent":["// 菜单角标登记表(未读数 / 待办数)。\n// 不做成 MenuNode 上的字段:菜单树是后端拉的,每次重拉都会把前端算出来的动态值冲掉;\n// 这里按路由 path 登记,渲染在 useLayoutMenu 产出的 MenuOption.extra 上,\n// 侧栏 / 顶栏 / 二级 / 移动抽屉四处共用同一份。\nimport { reactive, toValue, type MaybeRefOrGetter } from 'vue'\n\n/** 角标值。0 / '' / null / undefined 一律不渲染——未读为零时不该在菜单上留个空圈。 */\nexport type MenuBadgeValue = number | string | null | undefined\n\nconst badges = reactive(new Map<string, () => MenuBadgeValue>())\n\n/**\n * 给菜单项挂角标,返回注销函数。\n * <p>`path` 用菜单的路由 path(与 MenuNode.path 同一个值)。value 可传 ref / getter:\n * 值变了角标自己跟着变,不必重新登记。同一 path 重复登记以最后一次为准。</p>\n */\nexport function registerMenuBadge(\n path: string,\n value: MaybeRefOrGetter<MenuBadgeValue>,\n): () => void {\n const read = () => toValue(value)\n badges.set(path, read)\n return () => {\n if (badges.get(path) === read) badges.delete(path)\n }\n}\n\n/** 取某菜单项当前的角标值(useLayoutMenu 渲染用)。 */\nexport function menuBadge(path: string): MenuBadgeValue {\n return badges.get(path)?.()\n}\n"],"names":["badges","reactive","registerMenuBadge","path","value","read","toValue","menuBadge","_a"],"mappings":";AASA,MAAMA,IAASC,EAAS,oBAAI,KAAmC;AAOxD,SAASC,EACdC,GACAC,GACY;AACZ,QAAMC,IAAO,MAAMC,EAAQF,CAAK;AAChC,SAAAJ,EAAO,IAAIG,GAAME,CAAI,GACd,MAAM;AACX,IAAIL,EAAO,IAAIG,CAAI,MAAME,KAAML,EAAO,OAAOG,CAAI;AAAA,EACnD;AACF;AAGO,SAASI,EAAUJ,GAA8B;;AACtD,UAAOK,IAAAR,EAAO,IAAIG,CAAI,MAAf,gBAAAK;AACT;"}
@@ -0,0 +1,8 @@
1
+ export interface MenuLeaf {
2
+ title: string;
3
+ path: string;
4
+ icon?: string;
5
+ breadcrumb: string[];
6
+ }
7
+ /** auth.menuTree 扁平为叶子(供面包屑与全局搜索共用),复刻 toOptions 的按钮/隐藏/排序规则。 */
8
+ export declare function useMenuFlat(): import('vue').ComputedRef<MenuLeaf[]>;
@@ -0,0 +1,29 @@
1
+ import { computed as a } from "vue";
2
+ import { useAuthStore as m } from "../stores/auth.js";
3
+ import { useAppStore as f } from "../stores/app.js";
4
+ import { translateMenuTitle as h, menuTitleKey as d } from "../locales/menuTitle.js";
5
+ import { MenuType as i } from "../types/menu.js";
6
+ function v() {
7
+ const p = m(), u = f();
8
+ return a(() => {
9
+ u.locale;
10
+ const o = [], r = (c, l) => {
11
+ var n;
12
+ for (const t of c.toSorted((e, s) => e.sort - s.sort)) {
13
+ if (t.type === i.Button || t.visible === !1) continue;
14
+ const e = [...l, h(t.title, t.path)];
15
+ t.type === i.Menu && t.path && o.push({
16
+ title: d(t.title, t.path),
17
+ path: t.path,
18
+ icon: t.icon,
19
+ breadcrumb: e
20
+ }), (n = t.children) != null && n.length && r(t.children, e);
21
+ }
22
+ };
23
+ return r(p.menuTree, []), o;
24
+ });
25
+ }
26
+ export {
27
+ v as useMenuFlat
28
+ };
29
+ //# sourceMappingURL=useMenuFlat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMenuFlat.js","sources":["../../src/composables/useMenuFlat.ts"],"sourcesContent":["// 面包屑与全局搜索共同需要的「菜单叶子清单」:把 auth.menuTree 压平成带完整标题链的叶子数组。\n// 坑:按钮/隐藏/排序规则必须与 useLayoutMenu 的 toOptions 保持一致,否则搜索能搜到侧栏里看不见的页面。\nimport { computed } from 'vue'\nimport { useAuthStore } from '#/stores/auth'\nimport { useAppStore } from '#/stores/app'\nimport { menuTitleKey, translateMenuTitle } from '#/locales/menuTitle'\nimport { MenuType, type MenuNode } from '#/types/menu'\n\nexport interface MenuLeaf {\n title: string // 原始标题(后端串或 i18n key)\n path: string\n icon?: string\n breadcrumb: string[] // 从根到叶的标题链\n}\n\n/** auth.menuTree 扁平为叶子(供面包屑与全局搜索共用),复刻 toOptions 的按钮/隐藏/排序规则。 */\nexport function useMenuFlat() {\n const auth = useAuthStore()\n const app = useAppStore()\n\n return computed<MenuLeaf[]>(() => {\n void app.locale // 依赖:切换语言时 i18n key 标题重算\n const out: MenuLeaf[] = [] // 工作台是菜单树里的一条,不用手工注入\n const walk = (nodes: MenuNode[], trail: string[]) => {\n for (const n of nodes.toSorted((a, b) => a.sort - b.sort)) {\n if (n.type === MenuType.Button || n.visible === false) continue\n const here = [...trail, translateMenuTitle(n.title, n.path)]\n if (n.type === MenuType.Menu && n.path)\n out.push({\n title: menuTitleKey(n.title, n.path),\n path: n.path,\n icon: n.icon,\n breadcrumb: here,\n })\n if (n.children?.length) walk(n.children, here)\n }\n }\n walk(auth.menuTree, [])\n return out\n })\n}\n"],"names":["useMenuFlat","auth","useAuthStore","app","useAppStore","computed","out","walk","nodes","trail","n","a","b","MenuType","here","translateMenuTitle","menuTitleKey","_a"],"mappings":";;;;;AAgBO,SAASA,IAAc;AAC5B,QAAMC,IAAOC,EAAA,GACPC,IAAMC,EAAA;AAEZ,SAAOC,EAAqB,MAAM;AAChC,IAAKF,EAAI;AACT,UAAMG,IAAkB,CAAA,GAClBC,IAAO,CAACC,GAAmBC,MAAoB;;AACnD,iBAAWC,KAAKF,EAAM,SAAS,CAACG,GAAGC,MAAMD,EAAE,OAAOC,EAAE,IAAI,GAAG;AACzD,YAAIF,EAAE,SAASG,EAAS,UAAUH,EAAE,YAAY,GAAO;AACvD,cAAMI,IAAO,CAAC,GAAGL,GAAOM,EAAmBL,EAAE,OAAOA,EAAE,IAAI,CAAC;AAC3D,QAAIA,EAAE,SAASG,EAAS,QAAQH,EAAE,QAChCJ,EAAI,KAAK;AAAA,UACP,OAAOU,EAAaN,EAAE,OAAOA,EAAE,IAAI;AAAA,UACnC,MAAMA,EAAE;AAAA,UACR,MAAMA,EAAE;AAAA,UACR,YAAYI;AAAA,QAAA,CACb,IACCG,IAAAP,EAAE,aAAF,QAAAO,EAAY,UAAQV,EAAKG,EAAE,UAAUI,CAAI;AAAA,MAC/C;AAAA,IACF;AACA,WAAAP,EAAKN,EAAK,UAAU,EAAE,GACfK;AAAA,EACT,CAAC;AACH;"}
@@ -0,0 +1,16 @@
1
+ type EnterResult = {
2
+ chooser: true;
3
+ } | {
4
+ chooser: false;
5
+ moduleId: number;
6
+ };
7
+ /** 进指定应用:重建它的动态路由。 */
8
+ declare function enter(moduleId: number): Promise<EnterResult>;
9
+ /** 门户:登录后决定直接进 / 进默认 / 弹选择器,以及切换应用。逻辑与 Naive 无关。 */
10
+ export declare function useModule(): {
11
+ enter: typeof enter;
12
+ enterInitial: () => Promise<EnterResult>;
13
+ switchModule: (moduleId: number) => Promise<void>;
14
+ setDefault: (moduleId: number) => Promise<void>;
15
+ };
16
+ export {};