@done-coding/admin-core 0.17.1-alpha.0 → 0.18.1-alpha.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 (342) hide show
  1. package/README.md +77 -1
  2. package/es/_virtual/_plugin-vue_export-helper.mjs +7 -6
  3. package/es/bridge/config-hook.mjs +49 -37
  4. package/es/bridge/index.mjs +152 -109
  5. package/es/bridge/layout.mjs +45 -31
  6. package/es/bridge/plugin.mjs +22 -12
  7. package/es/bridge/route.mjs +59 -50
  8. package/es/bridge/state.mjs +54 -39
  9. package/es/bridge/storage.mjs +18 -8
  10. package/es/bridge/theme/index.mjs +200 -97
  11. package/es/bridge/theme/persist.mjs +11 -7
  12. package/es/bridge/theme/system-dark.mjs +13 -6
  13. package/es/components/app-layout/AppAside.vue.mjs +4 -4
  14. package/es/components/app-layout/AppAside.vue2.mjs +37 -30
  15. package/es/components/app-layout/AppBody.vue.mjs +4 -4
  16. package/es/components/app-layout/AppBody.vue2.mjs +97 -60
  17. package/es/components/app-layout/AppBreadcrumb.vue.mjs +4 -4
  18. package/es/components/app-layout/AppBreadcrumb.vue2.mjs +59 -38
  19. package/es/components/app-layout/AppCollapseToggle.vue.mjs +4 -4
  20. package/es/components/app-layout/AppCollapseToggle.vue2.mjs +51 -42
  21. package/es/components/app-layout/AppFooter.vue.mjs +4 -4
  22. package/es/components/app-layout/AppFooter.vue2.mjs +15 -12
  23. package/es/components/app-layout/AppHeader.vue.mjs +4 -4
  24. package/es/components/app-layout/AppHeader.vue2.mjs +81 -58
  25. package/es/components/app-layout/AppLayout.vue.mjs +4 -4
  26. package/es/components/app-layout/AppLayout.vue2.mjs +148 -112
  27. package/es/components/app-layout/AppPage.vue.mjs +4 -4
  28. package/es/components/app-layout/AppPage.vue2.mjs +254 -197
  29. package/es/components/app-layout/AppShell.vue.mjs +44 -42
  30. package/es/components/app-layout/AppShell.vue2.mjs +2 -2
  31. package/es/components/app-layout/AppSidebar.vue.mjs +4 -4
  32. package/es/components/app-layout/AppSidebar.vue2.mjs +76 -59
  33. package/es/components/app-layout/AppTheme.vue.mjs +4 -4
  34. package/es/components/app-layout/AppTheme.vue2.mjs +69 -57
  35. package/es/components/app-layout/app-page-geometry.mjs +44 -42
  36. package/es/components/app-layout/keep-alive.mjs +27 -19
  37. package/es/components/app-layout/viewport.mjs +4 -3
  38. package/es/components/data-view/DataListView.vue.mjs +4 -4
  39. package/es/components/data-view/DataListView.vue2.mjs +133 -93
  40. package/es/components/data-view/DataListViewItem.vue.mjs +4 -4
  41. package/es/components/data-view/DataListViewItem.vue2.mjs +11 -9
  42. package/es/components/data-view/utils.mjs +36 -34
  43. package/es/components/display/ActionBtn.vue.mjs +94 -71
  44. package/es/components/display/ActionBtn.vue2.mjs +2 -2
  45. package/es/components/display/ActionBtnGroup.vue.mjs +54 -48
  46. package/es/components/display/ActionBtnGroup.vue2.mjs +2 -2
  47. package/es/components/display/ActionConfirm.vue.mjs +4 -4
  48. package/es/components/display/ActionConfirm.vue2.mjs +116 -92
  49. package/es/components/display/BooleanTag.vue.mjs +24 -18
  50. package/es/components/display/BooleanTag.vue2.mjs +2 -2
  51. package/es/components/display/HeightProvider.vue.mjs +37 -27
  52. package/es/components/display/HeightProvider.vue2.mjs +2 -2
  53. package/es/components/display/TabsHeader.vue.mjs +4 -4
  54. package/es/components/display/TabsHeader.vue2.mjs +86 -57
  55. package/es/components/display/TabsMain.vue.mjs +156 -125
  56. package/es/components/display/TabsMain.vue2.mjs +2 -2
  57. package/es/components/display/TabsNaturalFlow.vue.mjs +15 -11
  58. package/es/components/display/TabsNaturalFlow.vue2.mjs +2 -2
  59. package/es/components/display/TabsRefineFlow.vue.mjs +55 -42
  60. package/es/components/display/TabsRefineFlow.vue2.mjs +2 -2
  61. package/es/components/display/TabsTile.vue.mjs +4 -4
  62. package/es/components/display/TabsTile.vue2.mjs +204 -146
  63. package/es/components/display/WatchSize.vue.mjs +50 -30
  64. package/es/components/display/WatchSize.vue2.mjs +2 -2
  65. package/es/components/display/use-tabs-query-sync.mjs +21 -17
  66. package/es/components/form/FormItem.vue.mjs +4 -4
  67. package/es/components/form/FormItem.vue2.mjs +183 -121
  68. package/es/components/form/FormItemNestForm.vue.mjs +4 -4
  69. package/es/components/form/FormItemNestForm.vue2.mjs +38 -34
  70. package/es/components/form/FormItemNestFormList.vue.mjs +4 -4
  71. package/es/components/form/FormItemNestFormList.vue2.mjs +135 -106
  72. package/es/components/form/FormMain.vue.mjs +4 -4
  73. package/es/components/form/FormMain.vue2.mjs +226 -139
  74. package/es/components/form/FormRadioGroup.vue.mjs +67 -52
  75. package/es/components/form/FormRadioGroup.vue2.mjs +2 -2
  76. package/es/components/form/FormSearch.vue.mjs +4 -4
  77. package/es/components/form/FormSearch.vue2.mjs +194 -156
  78. package/es/components/form/FormSelect.vue.mjs +69 -42
  79. package/es/components/form/FormSelect.vue2.mjs +2 -2
  80. package/es/components/form/FormSubmitBtn.vue.mjs +30 -25
  81. package/es/components/form/FormSubmitBtn.vue2.mjs +2 -2
  82. package/es/components/form/FormSubmitPanel.vue.mjs +4 -4
  83. package/es/components/form/FormSubmitPanel.vue2.mjs +129 -96
  84. package/es/components/form/FormTree.vue.mjs +19 -16
  85. package/es/components/form/FormTree.vue2.mjs +2 -2
  86. package/es/components/form/FormVerifyCode.vue.mjs +58 -41
  87. package/es/components/form/FormVerifyCode.vue2.mjs +2 -2
  88. package/es/components/form/FormVerifyImage.vue.mjs +4 -4
  89. package/es/components/form/FormVerifyImage.vue2.mjs +62 -40
  90. package/es/components/form/form-search-utils.mjs +83 -52
  91. package/es/components/form/nest-form-item-list.mjs +63 -55
  92. package/es/components/form/nest-form-item.mjs +30 -30
  93. package/es/components/form/nest-registry.mjs +4 -4
  94. package/es/components/form/use-form-submit.mjs +18 -15
  95. package/es/components/form/use-layout-by-container.mjs +23 -15
  96. package/es/components/form/use-nest-form-list.mjs +19 -16
  97. package/es/components/form/use-nest-form.mjs +37 -28
  98. package/es/components/form/use-nest-layout-scale.mjs +11 -10
  99. package/es/components/form/utils.mjs +233 -145
  100. package/es/components/list-page/ListPage.vue.mjs +4 -4
  101. package/es/components/list-page/ListPage.vue2.mjs +313 -207
  102. package/es/components/list-page/use-sticky.mjs +45 -33
  103. package/es/components/menu/MenuItemSub.vue.mjs +47 -43
  104. package/es/components/menu/MenuItemSub.vue2.mjs +2 -2
  105. package/es/components/menu/MenuTree.vue.mjs +84 -61
  106. package/es/components/menu/MenuTree.vue2.mjs +2 -2
  107. package/es/components/misc/AutoRefresh.vue.mjs +4 -4
  108. package/es/components/misc/AutoRefresh.vue2.mjs +78 -53
  109. package/es/components/misc/AutoRefreshGroup.vue.mjs +4 -4
  110. package/es/components/misc/AutoRefreshGroup.vue2.mjs +54 -51
  111. package/es/components/misc/SelectModule.vue.mjs +54 -45
  112. package/es/components/misc/SelectModule.vue2.mjs +2 -2
  113. package/es/components/misc/TriggerAutoImport.vue.mjs +7 -5
  114. package/es/components/misc/TriggerAutoImport.vue2.mjs +2 -2
  115. package/es/components/modal/ModalConfirm.vue.mjs +4 -4
  116. package/es/components/modal/ModalConfirm.vue2.mjs +160 -125
  117. package/es/components/modal/ModalDetail.vue.mjs +50 -39
  118. package/es/components/modal/ModalDetail.vue2.mjs +2 -2
  119. package/es/components/modal/ModalForm.vue.mjs +63 -52
  120. package/es/components/modal/ModalForm.vue2.mjs +2 -2
  121. package/es/components/modal/ModalPorter.vue.mjs +51 -36
  122. package/es/components/modal/ModalPorter.vue2.mjs +2 -2
  123. package/es/components/modal/ModalShelf.vue.mjs +38 -28
  124. package/es/components/modal/ModalShelf.vue2.mjs +2 -2
  125. package/es/components/modal/modal-shelf-core.mjs +52 -36
  126. package/es/components/modal/modal-shelf-hierarchy.mjs +11 -9
  127. package/es/components/panel/PanelEditSwitch.vue.mjs +4 -4
  128. package/es/components/panel/PanelEditSwitch.vue2.mjs +88 -66
  129. package/es/components/panel/PanelItem.vue.mjs +4 -4
  130. package/es/components/panel/PanelItem.vue2.mjs +103 -77
  131. package/es/components/panel/PanelItemNestForm.vue.mjs +4 -4
  132. package/es/components/panel/PanelItemNestForm.vue2.mjs +61 -52
  133. package/es/components/panel/PanelItemNestPanel.vue.mjs +22 -20
  134. package/es/components/panel/PanelItemNestPanel.vue2.mjs +2 -2
  135. package/es/components/panel/PanelMain.vue.mjs +4 -4
  136. package/es/components/panel/PanelMain.vue2.mjs +92 -74
  137. package/es/components/panel/nest-panel-form.mjs +44 -38
  138. package/es/components/panel/nest-panel-item.mjs +18 -17
  139. package/es/components/slot-layout/SlotLayoutFlowAside.vue.mjs +4 -4
  140. package/es/components/slot-layout/SlotLayoutFlowAside.vue2.mjs +55 -42
  141. package/es/components/slot-layout/SlotLayoutTemplate.vue.mjs +11 -9
  142. package/es/components/slot-layout/SlotLayoutTemplate.vue2.mjs +2 -2
  143. package/es/components/table/TableMain.vue.mjs +4 -4
  144. package/es/components/table/TableMain.vue2.mjs +378 -275
  145. package/es/components/table/TableSkeleton.vue.mjs +4 -4
  146. package/es/components/table/TableSkeleton.vue2.mjs +95 -74
  147. package/es/components/table/TableToolbar.vue.mjs +4 -4
  148. package/es/components/table/TableToolbar.vue2.mjs +170 -154
  149. package/es/components/table/ToolbarButtons.vue.mjs +12 -10
  150. package/es/components/table/ToolbarButtons.vue2.mjs +2 -2
  151. package/es/components/table/constants.mjs +4 -3
  152. package/es/components/table/use-fill-height.mjs +12 -10
  153. package/es/components/table/use-table-skeleton.mjs +19 -15
  154. package/es/config/list-model.mjs +2 -2
  155. package/es/config/route.mjs +4 -3
  156. package/es/helpers/form.mjs +35 -25
  157. package/es/helpers/list-helper.mjs +59 -44
  158. package/es/hooks/activated.mjs +49 -33
  159. package/es/hooks/feel-size.mjs +39 -23
  160. package/es/hooks/menus-dispatch.mjs +68 -35
  161. package/es/hooks/timeout.mjs +29 -14
  162. package/es/hooks/use-breakpoint.mjs +35 -23
  163. package/es/hooks/use-channel-viewport-height.mjs +30 -20
  164. package/es/hooks/use-custom-breakpoint.mjs +48 -31
  165. package/es/hooks/use-observe-size.mjs +37 -20
  166. package/es/hooks/use-theme-apply.mjs +175 -124
  167. package/es/hooks/use-viewport-apply.mjs +39 -27
  168. package/es/index.mjs +239 -239
  169. package/es/inject/key.mjs +52 -41
  170. package/es/injectInfo.json.mjs +2 -2
  171. package/es/router/group-redirect.mjs +22 -16
  172. package/es/router/guard/index.mjs +26 -21
  173. package/es/router/guard/login.mjs +4 -2
  174. package/es/router/guard/permission.mjs +4 -2
  175. package/es/store/app.mjs +163 -123
  176. package/es/store/router-permission.mjs +75 -46
  177. package/es/store/user.mjs +100 -71
  178. package/es/style.css +769 -1
  179. package/es/utils/dom.mjs +20 -16
  180. package/es/utils/export.mjs +34 -18
  181. package/es/utils/id.mjs +5 -3
  182. package/es/utils/router.mjs +21 -14
  183. package/es/utils/theme-scale.mjs +50 -35
  184. package/es/utils/time.mjs +20 -14
  185. package/package.json +4 -3
  186. package/src/bridge/README.md +5 -0
  187. package/src/bridge/docs/README.md +72 -0
  188. package/src/components/README.md +84 -0
  189. package/src/components/app-layout/README.md +46 -0
  190. package/src/components/app-layout/docs/README-AppAside.md +69 -0
  191. package/src/components/app-layout/docs/README-AppBody.md +81 -0
  192. package/src/components/app-layout/docs/README-AppBreadcrumb.md +71 -0
  193. package/src/components/app-layout/docs/README-AppFooter.md +41 -0
  194. package/src/components/app-layout/docs/README-AppHeader.md +73 -0
  195. package/src/components/app-layout/docs/README-AppLayout.md +83 -0
  196. package/src/components/app-layout/docs/README-AppPage.md +80 -0
  197. package/src/components/app-layout/docs/README-AppSidebar.md +70 -0
  198. package/src/components/app-layout/docs/README-AppTheme.md +66 -0
  199. package/src/components/data-view/README.md +19 -0
  200. package/src/components/data-view/docs/README-DataListView.md +114 -0
  201. package/src/components/display/README.md +23 -0
  202. package/src/components/display/docs/README-ActionBtn.md +84 -0
  203. package/src/components/display/docs/README-ActionBtnGroup.md +96 -0
  204. package/src/components/display/docs/README-ActionConfirm.md +77 -0
  205. package/src/components/display/docs/README-BooleanTag.md +76 -0
  206. package/src/components/display/docs/README-HeightProvider.md +74 -0
  207. package/src/components/display/docs/README-TabsMain.md +99 -0
  208. package/src/components/display/docs/README-WatchSize.md +70 -0
  209. package/src/components/form/README.md +24 -0
  210. package/src/components/form/docs/README-FormItemNestForm.md +86 -0
  211. package/src/components/form/docs/README-FormItemNestFormList.md +93 -0
  212. package/src/components/form/docs/README-FormMain.md +101 -0
  213. package/src/components/form/docs/README-FormSearch.md +89 -0
  214. package/src/components/form/docs/README-FormSubmitBtn.md +72 -0
  215. package/src/components/form/docs/README-FormSubmitPanel.md +97 -0
  216. package/src/components/list-page/README.md +16 -0
  217. package/src/components/list-page/docs/README-ListPage.md +136 -0
  218. package/src/components/menu/README.md +19 -0
  219. package/src/components/menu/docs/README-MenuItemSub.md +53 -0
  220. package/src/components/menu/docs/README-MenuTree.md +76 -0
  221. package/src/components/misc/README.md +21 -0
  222. package/src/components/misc/docs/README-AutoRefresh.md +74 -0
  223. package/src/components/misc/docs/README-AutoRefreshGroup.md +74 -0
  224. package/src/components/misc/docs/README-SelectModule.md +72 -0
  225. package/src/components/modal/README.md +21 -0
  226. package/src/components/modal/docs/README-ModalConfirm.md +105 -0
  227. package/src/components/modal/docs/README-ModalDetail.md +103 -0
  228. package/src/components/modal/docs/README-ModalForm.md +97 -0
  229. package/src/components/modal/docs/README-ModalPorter.md +92 -0
  230. package/src/components/modal/docs/README-ModalShelf.md +115 -0
  231. package/src/components/panel/README.md +19 -0
  232. package/src/components/panel/docs/README-PanelMain.md +149 -0
  233. package/src/components/slot-layout/README.md +17 -0
  234. package/src/components/slot-layout/docs/README-SlotLayoutFlowAside.md +83 -0
  235. package/src/components/slot-layout/docs/README-SlotLayoutTemplate.md +73 -0
  236. package/src/components/table/README.md +17 -0
  237. package/src/components/table/docs/README-TableMain.md +140 -0
  238. package/src/hooks/README.md +5 -0
  239. package/src/hooks/docs/README.md +49 -0
  240. package/types/bridge/config-hook.d.ts +68 -0
  241. package/types/bridge/index.d.ts +411 -0
  242. package/types/bridge/layout.d.ts +40 -0
  243. package/types/bridge/plugin.d.ts +18 -0
  244. package/types/bridge/route.d.ts +20 -1
  245. package/types/bridge/state.d.ts +14 -0
  246. package/types/bridge/storage.d.ts +9 -0
  247. package/types/bridge/theme/index.d.ts +7 -0
  248. package/types/bridge/theme/persist.d.ts +12 -0
  249. package/types/bridge/theme/system-dark.d.ts +12 -0
  250. package/types/bridge/theme/types.d.ts +238 -0
  251. package/types/components/app-layout/AppAside.vue.d.ts +1 -0
  252. package/types/components/app-layout/AppCollapseToggle.vue.d.ts +3 -0
  253. package/types/components/app-layout/AppHeader.vue.d.ts +3 -0
  254. package/types/components/app-layout/AppLayout.vue.d.ts +12 -0
  255. package/types/components/app-layout/AppPage.vue.d.ts +17 -0
  256. package/types/components/app-layout/AppSidebar.vue.d.ts +2 -0
  257. package/types/components/app-layout/app-page-geometry.d.ts +48 -0
  258. package/types/components/app-layout/keep-alive.d.ts +17 -0
  259. package/types/components/app-layout/types.d.ts +125 -0
  260. package/types/components/app-layout/viewport.d.ts +28 -0
  261. package/types/components/data-view/DataListViewItem.vue.d.ts +8 -0
  262. package/types/components/data-view/index.d.ts +4 -0
  263. package/types/components/data-view/types.d.ts +42 -0
  264. package/types/components/data-view/utils.d.ts +3 -0
  265. package/types/components/display/TabsHeader.vue.d.ts +2 -0
  266. package/types/components/display/TabsMain.vue.d.ts +2 -0
  267. package/types/components/display/TabsRefineFlow.vue.d.ts +1 -0
  268. package/types/components/display/TabsTile.vue.d.ts +247 -12
  269. package/types/components/display/WatchSize.vue.d.ts +9 -0
  270. package/types/components/display/index.d.ts +37 -1
  271. package/types/components/display/types.d.ts +163 -0
  272. package/types/components/display/use-tabs-query-sync.d.ts +29 -0
  273. package/types/components/form/FormItemNestForm.vue.d.ts +5 -0
  274. package/types/components/form/FormItemNestFormList.vue.d.ts +17 -0
  275. package/types/components/form/FormVerifyCode.vue.d.ts +9 -0
  276. package/types/components/form/FormVerifyImage.vue.d.ts +1 -0
  277. package/types/components/form/form-search-utils.d.ts +34 -0
  278. package/types/components/form/nest-form-item-list.d.ts +28 -0
  279. package/types/components/form/nest-form-item.d.ts +21 -0
  280. package/types/components/form/nest-registry.d.ts +14 -0
  281. package/types/components/form/types.d.ts +208 -8
  282. package/types/components/form/use-form-submit.d.ts +13 -0
  283. package/types/components/form/use-layout-by-container.d.ts +23 -0
  284. package/types/components/form/use-nest-form-list.d.ts +13 -0
  285. package/types/components/form/use-nest-form.d.ts +15 -0
  286. package/types/components/form/use-nest-layout-scale.d.ts +12 -0
  287. package/types/components/form/utils.d.ts +56 -1
  288. package/types/components/list-page/ListPage.vue.d.ts +6 -0
  289. package/types/components/list-page/types.d.ts +50 -2
  290. package/types/components/list-page/use-sticky.d.ts +23 -0
  291. package/types/components/misc/index.d.ts +6 -1
  292. package/types/components/misc/types.d.ts +7 -0
  293. package/types/components/modal/ModalConfirm.vue.d.ts +29 -0
  294. package/types/components/modal/index.d.ts +7 -1
  295. package/types/components/modal/modal-shelf-core.d.ts +3 -0
  296. package/types/components/modal/modal-shelf-hierarchy.d.ts +4 -0
  297. package/types/components/modal/modal-shelf-types.d.ts +34 -0
  298. package/types/components/modal/types.d.ts +63 -2
  299. package/types/components/panel/PanelItemNestForm.vue.d.ts +6 -0
  300. package/types/components/panel/PanelItemNestPanel.vue.d.ts +5 -0
  301. package/types/components/panel/nest-panel-form.d.ts +21 -0
  302. package/types/components/panel/nest-panel-item.d.ts +14 -0
  303. package/types/components/panel/types.d.ts +52 -1
  304. package/types/components/slot-layout/SlotLayoutTemplate.vue.d.ts +21 -0
  305. package/types/components/slot-layout/types.d.ts +4 -0
  306. package/types/components/table/constants.d.ts +8 -0
  307. package/types/components/table/types.d.ts +140 -9
  308. package/types/components/table/use-fill-height.d.ts +14 -0
  309. package/types/components/table/use-table-skeleton.d.ts +16 -0
  310. package/types/config/list-model.d.ts +29 -0
  311. package/types/config/route.d.ts +2 -0
  312. package/types/helpers/form.d.ts +5 -0
  313. package/types/helpers/list-helper.d.ts +26 -0
  314. package/types/helpers/types.d.ts +11 -0
  315. package/types/hooks/activated.d.ts +23 -0
  316. package/types/hooks/feel-size.d.ts +2 -0
  317. package/types/hooks/menus-dispatch.d.ts +4 -0
  318. package/types/hooks/timeout.d.ts +4 -0
  319. package/types/hooks/use-channel-viewport-height.d.ts +8 -0
  320. package/types/hooks/use-custom-breakpoint.d.ts +19 -0
  321. package/types/hooks/use-observe-size.d.ts +29 -0
  322. package/types/hooks/use-theme-apply.d.ts +23 -0
  323. package/types/hooks/use-viewport-apply.d.ts +12 -0
  324. package/types/inject/key.d.ts +163 -0
  325. package/types/injectInfo.json.d.ts +1 -1
  326. package/types/router/group-redirect.d.ts +9 -0
  327. package/types/router/guard/index.d.ts +13 -0
  328. package/types/router/guard/login.d.ts +1 -0
  329. package/types/router/guard/permission.d.ts +1 -0
  330. package/types/router/guard/types.d.ts +3 -0
  331. package/types/store/app.d.ts +27 -0
  332. package/types/store/router-permission.d.ts +53 -0
  333. package/types/store/user.d.ts +24 -0
  334. package/types/types/dot-path.d.ts +8 -0
  335. package/types/types/route.d.ts +45 -0
  336. package/types/types/utility-types.d.ts +7 -0
  337. package/types/utils/dom.d.ts +22 -0
  338. package/types/utils/export.d.ts +16 -1
  339. package/types/utils/id.d.ts +1 -0
  340. package/types/utils/router.d.ts +2 -0
  341. package/types/utils/theme-scale.d.ts +31 -0
  342. package/types/utils/time.d.ts +1 -0
@@ -1,20 +1,26 @@
1
- const d = (t, r) => r.startsWith("/") ? r : `${t.replace(/\/$/, "")}/${r}`, a = (t, r) => t.map((p) => {
2
- var h, i;
3
- const e = { ...p };
4
- (h = e.children) != null && h.length && (e.children = a(e.children, r));
5
- const o = !!(e.component || e.components), c = !!((i = e.children) != null && i.length);
6
- if (c && o) {
7
- const n = `[admin-core] withGroupRedirect: 路由 "${e.path}" 同时含 children 与 component/components——当前范式不建议父路由承接视图(组壳会被 KeepAlive 误缓存、且需内层 router-view)。建议父路由不配 component(叶子经 vue-router 原生渲染到 AppBody 出口);如需与子路由共享父视图,请改用 teleport 方案。`;
8
- if (r === "error")
9
- throw new Error(n);
10
- console.warn(n);
1
+ const joinPath = (parent, child) => child.startsWith("/") ? child : `${parent.replace(/\/$/, "")}/${child}`;
2
+ const buildGroupRoutes = (routes, onParentComponent) => routes.map((route) => {
3
+ var _a, _b;
4
+ const node = { ...route };
5
+ if ((_a = node.children) == null ? void 0 : _a.length) {
6
+ node.children = buildGroupRoutes(node.children, onParentComponent);
11
7
  }
12
- if (!o && c && !e.redirect) {
13
- const n = e.children[0];
14
- e.redirect = (s) => n.name ? { name: n.name } : { path: d(s.path, n.path) };
8
+ const hasComponent = !!(node.component || node.components);
9
+ const hasChildren = !!((_b = node.children) == null ? void 0 : _b.length);
10
+ if (hasChildren && hasComponent) {
11
+ const message = `[admin-core] withGroupRedirect: 路由 "${node.path}" 同时含 children 与 component/components——当前范式不建议父路由承接视图(组壳会被 KeepAlive 误缓存、且需内层 router-view)。建议父路由不配 component(叶子经 vue-router 原生渲染到 AppBody 出口);如需与子路由共享父视图,请改用 teleport 方案。`;
12
+ if (onParentComponent === "error") {
13
+ throw new Error(message);
14
+ }
15
+ console.warn(message);
15
16
  }
16
- return e;
17
- }), l = (t, r) => a(t, (r == null ? void 0 : r.onParentComponent) ?? "warn");
17
+ if (!hasComponent && hasChildren && !node.redirect) {
18
+ const first = node.children[0];
19
+ node.redirect = (to) => first.name ? { name: first.name } : { path: joinPath(to.path, first.path) };
20
+ }
21
+ return node;
22
+ });
23
+ const withGroupRedirect = (routes, options) => buildGroupRoutes(routes, (options == null ? void 0 : options.onParentComponent) ?? "warn");
18
24
  export {
19
- l as withGroupRedirect
25
+ withGroupRedirect
20
26
  };
@@ -1,31 +1,36 @@
1
- import { checkLogin as P } from "./login.mjs";
2
- import { checkPermission as c } from "./permission.mjs";
3
- const p = (s, r) => {
4
- const { bridge: t, useRoutePermission: a } = r;
5
- s.beforeEach(async (e, n, o) => {
6
- const i = a();
7
- if (!await P(e, i))
8
- return o({
9
- path: t.APP_ROUTER_PATHS_CONFIG.loginPath,
1
+ import { checkLogin } from "./login.mjs";
2
+ import { checkPermission } from "./permission.mjs";
3
+ const createGuard = (router, options) => {
4
+ const { bridge, useRoutePermission } = options;
5
+ router.beforeEach(async (to, _from, next) => {
6
+ const store = useRoutePermission();
7
+ const loginPass = await checkLogin(to, store);
8
+ if (!loginPass) {
9
+ return next({
10
+ path: bridge.APP_ROUTER_PATHS_CONFIG.loginPath,
10
11
  query: {
11
- from: encodeURIComponent(e.fullPath)
12
+ from: encodeURIComponent(to.fullPath)
12
13
  }
13
14
  });
14
- if (!await c(e, i))
15
- return o({
16
- path: t.APP_ROUTER_PATHS_CONFIG.noPermissionPath,
15
+ }
16
+ const permissionPass = await checkPermission(to, store);
17
+ if (!permissionPass) {
18
+ return next({
19
+ path: bridge.APP_ROUTER_PATHS_CONFIG.noPermissionPath,
17
20
  query: {
18
- target: encodeURIComponent(e.fullPath)
21
+ target: encodeURIComponent(to.fullPath)
19
22
  }
20
23
  });
21
- o();
22
- }), s.beforeResolve((e) => {
23
- const n = e.meta;
24
- document.title = n.title;
24
+ }
25
+ next();
26
+ });
27
+ router.beforeResolve((to) => {
28
+ const meta = to.meta;
29
+ document.title = meta.title;
25
30
  });
26
31
  };
27
32
  export {
28
- P as checkLogin,
29
- c as checkPermission,
30
- p as createGuard
33
+ checkLogin,
34
+ checkPermission,
35
+ createGuard
31
36
  };
@@ -1,4 +1,6 @@
1
- const o = async (e, c) => !c.checkNeedGoToLoginPage(e);
1
+ const checkLogin = async (to, store) => {
2
+ return !store.checkNeedGoToLoginPage(to);
3
+ };
2
4
  export {
3
- o as checkLogin
5
+ checkLogin
4
6
  };
@@ -1,4 +1,6 @@
1
- const o = async (e, c) => !c.checkNeedGoToAuthPage(e);
1
+ const checkPermission = async (to, store) => {
2
+ return !store.checkNeedGoToAuthPage(to);
3
+ };
2
4
  export {
3
- o as checkPermission
5
+ checkPermission
4
6
  };
package/es/store/app.mjs CHANGED
@@ -1,166 +1,206 @@
1
- import { defineStore as Y } from "pinia";
2
- import { useRoute as k } from "vue-router";
3
- import { computed as o, ref as B } from "vue";
4
- function z(f) {
5
- const { bridge: a } = f;
6
- return Y("APP", () => {
7
- const n = o(() => a.APP_LAYOUT_HEADER_CONFIG.height), i = o(() => a.APP_LAYOUT_FOOTER_CONFIG.height), E = o(() => a.APP_BASE_INFO.name), P = B(!1), $ = o(() => a.layout.sidebarCollapsed.value ? a.APP_LAYOUT_SIDEBAR_CONFIG.collapseWidth : a.APP_LAYOUT_SIDEBAR_CONFIG.width), F = k(), d = o(() => a.themeColors.value), O = o(() => F.meta), s = o(() => O.value.layout), S = o(() => O.value.keepAlive), v = o(
1
+ import { defineStore } from "pinia";
2
+ import { useRoute } from "vue-router";
3
+ import { computed, ref } from "vue";
4
+ function createAppStore(deps) {
5
+ const { bridge } = deps;
6
+ const storeSetup = () => {
7
+ const headerHeight = computed(() => bridge.APP_LAYOUT_HEADER_CONFIG.height);
8
+ const footerHeight = computed(() => bridge.APP_LAYOUT_FOOTER_CONFIG.height);
9
+ const name = computed(() => bridge.APP_BASE_INFO.name);
10
+ const sidebarHasMenus = ref(false);
11
+ const sidebarWidth = computed(() => {
12
+ return bridge.layout.sidebarCollapsed.value ? bridge.APP_LAYOUT_SIDEBAR_CONFIG.collapseWidth : bridge.APP_LAYOUT_SIDEBAR_CONFIG.width;
13
+ });
14
+ const route = useRoute();
15
+ const theme = computed(() => bridge.themeColors.value);
16
+ const routeMeta = computed(() => route.meta);
17
+ const pageLayout = computed(() => routeMeta.value.layout);
18
+ const keepAlive = computed(() => routeMeta.value.keepAlive);
19
+ const showHeader = computed(
8
20
  () => {
9
- var e;
10
- return ((e = s.value) == null ? void 0 : e.header) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showHeader;
21
+ var _a;
22
+ return ((_a = pageLayout.value) == null ? void 0 : _a.header) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showHeader;
11
23
  }
12
- ), p = o(
24
+ );
25
+ const showFooter = computed(
13
26
  () => {
14
- var e;
15
- return ((e = s.value) == null ? void 0 : e.footer) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showFooter;
27
+ var _a;
28
+ return ((_a = pageLayout.value) == null ? void 0 : _a.footer) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showFooter;
16
29
  }
17
- ), h = o(
18
- () => v.value && n.value > 0
19
- ), _ = o(
20
- () => p.value && i.value > 0
21
- ), r = o(
30
+ );
31
+ const hasHeader = computed(
32
+ () => showHeader.value && headerHeight.value > 0
33
+ );
34
+ const hasFooter = computed(
35
+ () => showFooter.value && footerHeight.value > 0
36
+ );
37
+ const showSidebar = computed(
22
38
  () => {
23
- var e;
24
- return (((e = s.value) == null ? void 0 : e.sidebar) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showSidebar) && P.value;
39
+ var _a;
40
+ return (((_a = pageLayout.value) == null ? void 0 : _a.sidebar) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showSidebar) && sidebarHasMenus.value;
25
41
  }
26
- ), c = o(
42
+ );
43
+ const showAside = computed(
27
44
  () => {
28
- var e;
29
- return ((e = s.value) == null ? void 0 : e.aside) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showAside ?? !1;
45
+ var _a;
46
+ return ((_a = pageLayout.value) == null ? void 0 : _a.aside) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showAside ?? false;
30
47
  }
31
- ), y = o(
48
+ );
49
+ const showBreadcrumb = computed(
32
50
  () => {
33
- var e;
34
- return ((e = s.value) == null ? void 0 : e.breadcrumb) ?? a.APP_ROUTER_META_DEFAULT_CONFIG.showBreadcrumb;
51
+ var _a;
52
+ return ((_a = pageLayout.value) == null ? void 0 : _a.breadcrumb) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showBreadcrumb;
35
53
  }
36
- ), T = o(
54
+ );
55
+ const bodyShimPadding = computed(
37
56
  () => {
38
- var e;
39
- return ((e = s.value) == null ? void 0 : e.bodyShimPadding) ?? a.APP_LAYOUT_BODY_CONFIG.shimPadding;
57
+ var _a;
58
+ return ((_a = pageLayout.value) == null ? void 0 : _a.bodyShimPadding) ?? bridge.APP_LAYOUT_BODY_CONFIG.shimPadding;
40
59
  }
41
- ), l = o(() => ({
42
- top: `${a.APP_LAYOUT_VIEWPORT_CONFIG.paddingTop}px`,
43
- right: `${a.APP_LAYOUT_VIEWPORT_CONFIG.paddingRight}px`,
44
- bottom: `${a.APP_LAYOUT_VIEWPORT_CONFIG.paddingBottom}px`,
45
- left: `${a.APP_LAYOUT_VIEWPORT_CONFIG.paddingLeft}px`
46
- })), b = o(() => a.APP_LAYOUT_GAP_CONFIG.size), t = o(() => `${b.value}px`), g = o(() => {
47
- const e = a.APP_LAYOUT_HEADER_CONFIG;
60
+ );
61
+ const viewportPadding = computed(() => ({
62
+ top: `${bridge.APP_LAYOUT_VIEWPORT_CONFIG.paddingTop}px`,
63
+ right: `${bridge.APP_LAYOUT_VIEWPORT_CONFIG.paddingRight}px`,
64
+ bottom: `${bridge.APP_LAYOUT_VIEWPORT_CONFIG.paddingBottom}px`,
65
+ left: `${bridge.APP_LAYOUT_VIEWPORT_CONFIG.paddingLeft}px`
66
+ }));
67
+ const gapV = computed(() => bridge.APP_LAYOUT_GAP_CONFIG.size);
68
+ const gpx = computed(() => `${gapV.value}px`);
69
+ const headerStyle = computed(() => {
70
+ const cfg = bridge.APP_LAYOUT_HEADER_CONFIG;
48
71
  return {
49
- ...e.style,
72
+ ...cfg.style,
50
73
  position: "fixed",
51
74
  // 通栏悬浮:三外边各让外缝 gap(底边朝内容,由下方模块 top 让内缝)。
52
- top: `calc(${l.value.top} + ${t.value})`,
53
- left: `calc(${l.value.left} + ${t.value})`,
54
- right: `calc(${l.value.right} + ${t.value})`,
55
- height: `${v.value ? n.value : 0}px`,
56
- background: e.background ?? d.value.bodyColor,
57
- ...e.color ? { color: e.color } : {}
75
+ top: `calc(${viewportPadding.value.top} + ${gpx.value})`,
76
+ left: `calc(${viewportPadding.value.left} + ${gpx.value})`,
77
+ right: `calc(${viewportPadding.value.right} + ${gpx.value})`,
78
+ height: `${showHeader.value ? headerHeight.value : 0}px`,
79
+ background: cfg.background ?? theme.value.bodyColor,
80
+ ...cfg.color ? { color: cfg.color } : {}
58
81
  };
59
- }), A = o(
60
- () => h.value ? `calc(${l.value.top} + ${t.value} + ${g.value.height} + ${t.value})` : `calc(${l.value.top} + ${t.value})`
61
- ), C = o(() => {
62
- const e = a.APP_LAYOUT_FOOTER_CONFIG;
82
+ });
83
+ const contentRowTop = computed(
84
+ () => hasHeader.value ? `calc(${viewportPadding.value.top} + ${gpx.value} + ${headerStyle.value.height} + ${gpx.value})` : `calc(${viewportPadding.value.top} + ${gpx.value})`
85
+ );
86
+ const footerStyle = computed(() => {
87
+ const cfg = bridge.APP_LAYOUT_FOOTER_CONFIG;
63
88
  return {
64
- ...e.style,
65
- height: `${p.value ? i.value : 0}px`,
89
+ ...cfg.style,
90
+ height: `${showFooter.value ? footerHeight.value : 0}px`,
66
91
  // footer 在 body 流内:marginTop 与内容 shim 隔内缝;底边悬浮由 body paddingBottom 承担。
67
92
  // 用 hasFooter:footer 收起到 0 高时不留死内缝 gap(对称 hasHeader)。
68
- marginTop: _.value ? t.value : "0px",
69
- background: e.background ?? d.value.bodyColor,
70
- ...e.color ? { color: e.color } : {}
93
+ marginTop: hasFooter.value ? gpx.value : "0px",
94
+ background: cfg.background ?? theme.value.bodyColor,
95
+ ...cfg.color ? { color: cfg.color } : {}
71
96
  };
72
- }), m = o(() => {
73
- const e = a.APP_LAYOUT_SIDEBAR_CONFIG;
97
+ });
98
+ const sidebarStyle = computed(() => {
99
+ const cfg = bridge.APP_LAYOUT_SIDEBAR_CONFIG;
74
100
  return {
75
- ...e.style,
101
+ ...cfg.style,
76
102
  position: "fixed",
77
- width: `${r.value ? $.value : 0}px`,
103
+ width: `${showSidebar.value ? sidebarWidth.value : 0}px`,
78
104
  // 悬浮:左/下各让外缝 gap;顶 = 内容行顶(外缝 + header 高 + 内缝);paddingTop 归 0(让位已由 top 承担)。
79
- top: A.value,
80
- left: `calc(${l.value.left} + ${t.value})`,
81
- bottom: `calc(${l.value.bottom} + ${t.value})`,
105
+ top: contentRowTop.value,
106
+ left: `calc(${viewportPadding.value.left} + ${gpx.value})`,
107
+ bottom: `calc(${viewportPadding.value.bottom} + ${gpx.value})`,
82
108
  paddingTop: "0px",
83
- background: e.background ?? d.value.bodyColor,
84
- ...e.color ? { color: e.color } : {}
109
+ background: cfg.background ?? theme.value.bodyColor,
110
+ ...cfg.color ? { color: cfg.color } : {}
85
111
  };
86
- }), I = o(() => {
87
- const e = a.APP_LAYOUT_ASIDE_CONFIG;
112
+ });
113
+ const asideStyle = computed(() => {
114
+ const cfg = bridge.APP_LAYOUT_ASIDE_CONFIG;
88
115
  return {
89
- ...e.style,
116
+ ...cfg.style,
90
117
  position: "fixed",
91
118
  // 折叠双表达:外层宽收 0(收回空间)+ AppAside shim 绕 Y 轴翻转(视觉)。
92
119
  // showAside=false 整列收 0。
93
- width: `${c.value && !a.layout.asideCollapsed.value ? e.width : 0}px`,
120
+ width: `${showAside.value && !bridge.layout.asideCollapsed.value ? cfg.width : 0}px`,
94
121
  // 对称 sidebar:右/下各让外缝 gap;顶 = 内容行顶。
95
- top: A.value,
96
- right: `calc(${l.value.right} + ${t.value})`,
97
- bottom: `calc(${l.value.bottom} + ${t.value})`,
122
+ top: contentRowTop.value,
123
+ right: `calc(${viewportPadding.value.right} + ${gpx.value})`,
124
+ bottom: `calc(${viewportPadding.value.bottom} + ${gpx.value})`,
98
125
  paddingTop: "0px",
99
- background: e.background ?? d.value.bodyColor,
100
- ...e.color ? { color: e.color } : {}
126
+ background: cfg.background ?? theme.value.bodyColor,
127
+ ...cfg.color ? { color: cfg.color } : {}
101
128
  };
102
- }), R = o(() => ({
103
- // 内容左让位:外框左 + 外缝;有 sidebar 再加 sidebar 宽 + 内缝。
104
- paddingLeft: r.value ? `calc(${l.value.left} + ${t.value} + ${m.value.width} + ${t.value})` : `calc(${l.value.left} + ${t.value})`,
105
- // 顶让位 = 内容行顶(与 sidebar/aside 同行)。
106
- paddingTop: A.value,
107
- // 右让位(对称左):外框右 + 外缝;有 aside 再加 aside 宽 + 内缝。
108
- paddingRight: c.value ? `calc(${l.value.right} + ${t.value} + ${I.value.width} + ${t.value})` : `calc(${l.value.right} + ${t.value})`,
109
- // 底让位:外框下 + 外缝(footer 在流内,其底悬浮由此承担)。
110
- paddingBottom: `calc(${l.value.bottom} + ${t.value})`,
111
- backgroundColor: d.value.bodyColor
112
- })), L = o(() => {
113
- const e = b.value, u = a.APP_LAYOUT_VIEWPORT_CONFIG, D = c.value && !a.layout.asideCollapsed.value ? a.APP_LAYOUT_ASIDE_CONFIG.width : 0;
129
+ });
130
+ const bodyStyle = computed(() => {
114
131
  return {
115
- top: h.value ? u.paddingTop + e + n.value + e : u.paddingTop + e,
116
- bottom: _.value ? u.paddingBottom + e + i.value + e : u.paddingBottom + e,
117
- left: r.value ? u.paddingLeft + e + $.value + e : u.paddingLeft + e,
118
- right: c.value ? u.paddingRight + e + D + e : u.paddingRight + e
132
+ // 内容左让位:外框左 + 外缝;有 sidebar 再加 sidebar + 内缝。
133
+ paddingLeft: showSidebar.value ? `calc(${viewportPadding.value.left} + ${gpx.value} + ${sidebarStyle.value.width} + ${gpx.value})` : `calc(${viewportPadding.value.left} + ${gpx.value})`,
134
+ // 顶让位 = 内容行顶(与 sidebar/aside 同行)。
135
+ paddingTop: contentRowTop.value,
136
+ // 右让位(对称左):外框右 + 外缝;有 aside 再加 aside 宽 + 内缝。
137
+ paddingRight: showAside.value ? `calc(${viewportPadding.value.right} + ${gpx.value} + ${asideStyle.value.width} + ${gpx.value})` : `calc(${viewportPadding.value.right} + ${gpx.value})`,
138
+ // 底让位:外框下 + 外缝(footer 在流内,其底悬浮由此承担)。
139
+ paddingBottom: `calc(${viewportPadding.value.bottom} + ${gpx.value})`,
140
+ backgroundColor: theme.value.bodyColor
119
141
  };
120
- }), U = o(() => {
121
- const e = h.value ? ` - ${g.value.height} - ${t.value}` : "", u = _.value ? ` - ${C.value.height} - ${t.value}` : "";
142
+ });
143
+ const contentViewportInset = computed(() => {
144
+ const g = gapV.value;
145
+ const vpCfg = bridge.APP_LAYOUT_VIEWPORT_CONFIG;
146
+ const asideEffWidth = showAside.value && !bridge.layout.asideCollapsed.value ? bridge.APP_LAYOUT_ASIDE_CONFIG.width : 0;
122
147
  return {
123
- minHeight: `calc(100vh - ${l.value.top} - ${l.value.bottom} - ${t.value} - ${t.value}${e}${u})`,
124
- padding: `${T.value}px`
148
+ top: hasHeader.value ? vpCfg.paddingTop + g + headerHeight.value + g : vpCfg.paddingTop + g,
149
+ bottom: hasFooter.value ? vpCfg.paddingBottom + g + footerHeight.value + g : vpCfg.paddingBottom + g,
150
+ left: showSidebar.value ? vpCfg.paddingLeft + g + sidebarWidth.value + g : vpCfg.paddingLeft + g,
151
+ right: showAside.value ? vpCfg.paddingRight + g + asideEffWidth + g : vpCfg.paddingRight + g
125
152
  };
126
- }), G = (e) => {
127
- a.layout.setSidebarCollapse(e);
128
- }, N = (e) => {
129
- a.layout.setAsideCollapse(e);
130
- }, w = (e) => {
131
- P.value = e;
132
- }, x = (e) => {
133
- a.theme.setDark(e);
153
+ });
154
+ const bodyShimStyle = computed(() => {
155
+ const headerSub = hasHeader.value ? ` - ${headerStyle.value.height} - ${gpx.value}` : "";
156
+ const footerSub = hasFooter.value ? ` - ${footerStyle.value.height} - ${gpx.value}` : "";
157
+ return {
158
+ minHeight: `calc(100vh - ${viewportPadding.value.top} - ${viewportPadding.value.bottom} - ${gpx.value} - ${gpx.value}${headerSub}${footerSub})`,
159
+ padding: `${bodyShimPadding.value}px`
160
+ };
161
+ });
162
+ const changeSidebarCollapseStatus = (status) => {
163
+ bridge.layout.setSidebarCollapse(status);
164
+ };
165
+ const changeAsideCollapseStatus = (status) => {
166
+ bridge.layout.setAsideCollapse(status);
167
+ };
168
+ const changeSidebarHasMenusStatus = (status) => {
169
+ sidebarHasMenus.value = status;
170
+ };
171
+ const changeIsDarkTheme = (status) => {
172
+ bridge.theme.setDark(status);
134
173
  };
135
174
  return {
136
- name: E,
137
- isDarkTheme: o(() => a.themeIsDark.value),
138
- theme: d,
139
- showHeader: v,
140
- showFooter: p,
141
- showSidebar: r,
142
- showAside: c,
143
- showBreadcrumb: y,
144
- keepAlive: S,
145
- headerStyle: g,
146
- footerStyle: C,
147
- sidebarStyle: m,
148
- asideStyle: I,
149
- bodyStyle: R,
150
- contentViewportInset: L,
151
- bodyShimPadding: T,
152
- bodyShimStyle: U,
153
- viewportPadding: l,
175
+ name,
176
+ isDarkTheme: computed(() => bridge.themeIsDark.value),
177
+ theme,
178
+ showHeader,
179
+ showFooter,
180
+ showSidebar,
181
+ showAside,
182
+ showBreadcrumb,
183
+ keepAlive,
184
+ headerStyle,
185
+ footerStyle,
186
+ sidebarStyle,
187
+ asideStyle,
188
+ bodyStyle,
189
+ contentViewportInset,
190
+ bodyShimPadding,
191
+ bodyShimStyle,
192
+ viewportPadding,
154
193
  // 折叠态读 bridge 真相(架构反转,名字保留向后兼容);aside 对称新增。
155
- sidebarIsCollapse: o(() => a.layout.sidebarCollapsed.value),
156
- asideIsCollapse: o(() => a.layout.asideCollapsed.value),
157
- changeSidebarCollapseStatus: G,
158
- changeAsideCollapseStatus: N,
159
- changeSidebarHasMenusStatus: w,
160
- changeIsDarkTheme: x
194
+ sidebarIsCollapse: computed(() => bridge.layout.sidebarCollapsed.value),
195
+ asideIsCollapse: computed(() => bridge.layout.asideCollapsed.value),
196
+ changeSidebarCollapseStatus,
197
+ changeAsideCollapseStatus,
198
+ changeSidebarHasMenusStatus,
199
+ changeIsDarkTheme
161
200
  };
162
- });
201
+ };
202
+ return defineStore("APP", storeSetup);
163
203
  }
164
204
  export {
165
- z as createAppStore
205
+ createAppStore
166
206
  };
@@ -1,65 +1,94 @@
1
- import { defineStore as T } from "pinia";
2
- import { computed as a, watch as p } from "vue";
3
- import { useRoute as U, useRouter as C } from "vue-router";
4
- import { getRoutePermissionKey as N } from "../utils/router.mjs";
5
- function F(h) {
6
- const { bridge: u, useUserStore: l, paths: o } = h;
7
- return T("ROUTE_PERMISSION", () => {
8
- const t = U(), i = C(), s = l(), c = a(() => s.isLogin), f = (e) => {
9
- var r;
10
- if (o.loginNoCheck.includes(e.path))
11
- return !1;
12
- const n = e.meta;
13
- return !!N({
14
- path: e.path,
15
- permission: n.permission
16
- }) || (((r = n.permission) == null ? void 0 : r.login) ?? u.APP_ROUTER_META_DEFAULT_CONFIG.needLogin);
17
- }, m = (e) => f(e) && !c.value, P = a(() => m(t)), g = (e) => o.authNoCheck.includes(e.path) ? !1 : !s.havePermissionByPath(e.path), d = a(() => c.value && g(t)), R = (e = t, n = "replace") => {
18
- s.noApiLogout();
19
- const { fullPath: r, path: L } = e;
20
- L !== o.login && t.path !== o.login && i[n]({
21
- path: o.login,
1
+ import { defineStore } from "pinia";
2
+ import { computed, watch } from "vue";
3
+ import { useRoute, useRouter } from "vue-router";
4
+ import { getRoutePermissionKey } from "../utils/router.mjs";
5
+ function createRoutePermissionStore(deps) {
6
+ const { bridge, useUserStore, paths } = deps;
7
+ return defineStore("ROUTE_PERMISSION", () => {
8
+ const route = useRoute();
9
+ const router = useRouter();
10
+ const userStore = useUserStore();
11
+ const isLogin = computed(() => userStore.isLogin);
12
+ const checkRouteNeedLogin = (routeInfo) => {
13
+ var _a;
14
+ if (paths.loginNoCheck.includes(routeInfo.path)) {
15
+ return false;
16
+ }
17
+ const meta = routeInfo.meta;
18
+ return !!getRoutePermissionKey({
19
+ path: routeInfo.path,
20
+ permission: meta.permission
21
+ }) || (((_a = meta.permission) == null ? void 0 : _a.login) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.needLogin);
22
+ };
23
+ const checkNeedGoToLoginPage = (routeInfo) => {
24
+ return checkRouteNeedLogin(routeInfo) && !isLogin.value;
25
+ };
26
+ const needGoToLoginPage = computed(() => {
27
+ return checkNeedGoToLoginPage(route);
28
+ });
29
+ const checkNeedGoToAuthPage = (routeInfo) => {
30
+ if (paths.authNoCheck.includes(routeInfo.path)) {
31
+ return false;
32
+ }
33
+ return !userStore.havePermissionByPath(routeInfo.path);
34
+ };
35
+ const needGoToAuthPage = computed(() => {
36
+ return isLogin.value && checkNeedGoToAuthPage(route);
37
+ });
38
+ const goToLoginPage = (fromRoute = route, type = "replace") => {
39
+ userStore.noApiLogout();
40
+ const { fullPath: fromFullPath, path: fromPath } = fromRoute;
41
+ const isFromLoginRoute = fromPath === paths.login;
42
+ if (isFromLoginRoute) return;
43
+ if (route.path === paths.login) return;
44
+ router[type]({
45
+ path: paths.login,
22
46
  query: {
23
- from: encodeURIComponent(r)
47
+ from: encodeURIComponent(fromFullPath)
24
48
  }
25
49
  });
26
50
  };
27
- return u.register({ goToLogin: R }), p(
28
- P,
29
- (e) => {
30
- e && i.replace({
31
- path: o.login,
32
- query: {
33
- from: encodeURIComponent(t.fullPath)
34
- }
35
- });
51
+ bridge.register({ goToLogin: goToLoginPage });
52
+ watch(
53
+ needGoToLoginPage,
54
+ (n) => {
55
+ if (n) {
56
+ router.replace({
57
+ path: paths.login,
58
+ query: {
59
+ from: encodeURIComponent(route.fullPath)
60
+ }
61
+ });
62
+ }
36
63
  },
37
64
  {
38
- immediate: !0
65
+ immediate: true
39
66
  }
40
- ), p(
41
- d,
42
- (e) => {
43
- if (e) {
44
- const n = t.meta;
45
- i.replace({
46
- path: o.noPermission,
67
+ );
68
+ watch(
69
+ needGoToAuthPage,
70
+ (n) => {
71
+ if (n) {
72
+ const meta = route.meta;
73
+ router.replace({
74
+ path: paths.noPermission,
47
75
  query: {
48
- target: encodeURIComponent(t.fullPath),
49
- title: encodeURIComponent(n.title || "")
76
+ target: encodeURIComponent(route.fullPath),
77
+ title: encodeURIComponent(meta.title || "")
50
78
  }
51
79
  });
52
80
  }
53
81
  },
54
82
  {
55
- immediate: !0
83
+ immediate: true
56
84
  }
57
- ), {
58
- checkNeedGoToAuthPage: g,
59
- checkNeedGoToLoginPage: m
85
+ );
86
+ return {
87
+ checkNeedGoToAuthPage,
88
+ checkNeedGoToLoginPage
60
89
  };
61
90
  });
62
91
  }
63
92
  export {
64
- F as createRoutePermissionStore
93
+ createRoutePermissionStore
65
94
  };