@done-coding/admin-core 0.18.0 → 0.19.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.
- package/README.md +77 -1
- package/es/_virtual/_plugin-vue_export-helper.mjs +7 -6
- package/es/bridge/config-hook.mjs +49 -37
- package/es/bridge/index.mjs +152 -109
- package/es/bridge/layout.mjs +45 -31
- package/es/bridge/plugin.mjs +22 -12
- package/es/bridge/route.mjs +59 -50
- package/es/bridge/state.mjs +54 -39
- package/es/bridge/storage.mjs +18 -8
- package/es/bridge/theme/index.mjs +200 -97
- package/es/bridge/theme/persist.mjs +11 -7
- package/es/bridge/theme/system-dark.mjs +13 -6
- package/es/components/app-layout/AppAside.vue.mjs +4 -4
- package/es/components/app-layout/AppAside.vue2.mjs +37 -30
- package/es/components/app-layout/AppBody.vue.mjs +4 -4
- package/es/components/app-layout/AppBody.vue2.mjs +97 -60
- package/es/components/app-layout/AppBreadcrumb.vue.mjs +4 -4
- package/es/components/app-layout/AppBreadcrumb.vue2.mjs +59 -38
- package/es/components/app-layout/AppCollapseToggle.vue.mjs +4 -4
- package/es/components/app-layout/AppCollapseToggle.vue2.mjs +51 -42
- package/es/components/app-layout/AppFooter.vue.mjs +4 -4
- package/es/components/app-layout/AppFooter.vue2.mjs +15 -12
- package/es/components/app-layout/AppHeader.vue.mjs +4 -4
- package/es/components/app-layout/AppHeader.vue2.mjs +81 -58
- package/es/components/app-layout/AppLayout.vue.mjs +4 -4
- package/es/components/app-layout/AppLayout.vue2.mjs +148 -112
- package/es/components/app-layout/AppPage.vue.mjs +4 -4
- package/es/components/app-layout/AppPage.vue2.mjs +254 -197
- package/es/components/app-layout/AppShell.vue.mjs +44 -42
- package/es/components/app-layout/AppShell.vue2.mjs +2 -2
- package/es/components/app-layout/AppSidebar.vue.mjs +4 -4
- package/es/components/app-layout/AppSidebar.vue2.mjs +76 -59
- package/es/components/app-layout/AppTheme.vue.mjs +4 -4
- package/es/components/app-layout/AppTheme.vue2.mjs +69 -57
- package/es/components/app-layout/app-page-geometry.mjs +44 -42
- package/es/components/app-layout/keep-alive.mjs +27 -19
- package/es/components/app-layout/viewport.mjs +4 -3
- package/es/components/data-view/DataListView.vue.mjs +4 -4
- package/es/components/data-view/DataListView.vue2.mjs +133 -93
- package/es/components/data-view/DataListViewItem.vue.mjs +4 -4
- package/es/components/data-view/DataListViewItem.vue2.mjs +11 -9
- package/es/components/data-view/utils.mjs +36 -34
- package/es/components/display/ActionBtn.vue.mjs +94 -71
- package/es/components/display/ActionBtn.vue2.mjs +2 -2
- package/es/components/display/ActionBtnGroup.vue.mjs +54 -48
- package/es/components/display/ActionBtnGroup.vue2.mjs +2 -2
- package/es/components/display/ActionConfirm.vue.mjs +4 -4
- package/es/components/display/ActionConfirm.vue2.mjs +116 -92
- package/es/components/display/BooleanTag.vue.mjs +24 -18
- package/es/components/display/BooleanTag.vue2.mjs +2 -2
- package/es/components/display/HeightProvider.vue.mjs +37 -27
- package/es/components/display/HeightProvider.vue2.mjs +2 -2
- package/es/components/display/TabsHeader.vue.mjs +4 -4
- package/es/components/display/TabsHeader.vue2.mjs +86 -57
- package/es/components/display/TabsMain.vue.mjs +156 -125
- package/es/components/display/TabsMain.vue2.mjs +2 -2
- package/es/components/display/TabsNaturalFlow.vue.mjs +15 -11
- package/es/components/display/TabsNaturalFlow.vue2.mjs +2 -2
- package/es/components/display/TabsRefineFlow.vue.mjs +55 -42
- package/es/components/display/TabsRefineFlow.vue2.mjs +2 -2
- package/es/components/display/TabsTile.vue.mjs +4 -4
- package/es/components/display/TabsTile.vue2.mjs +204 -146
- package/es/components/display/WatchSize.vue.mjs +50 -30
- package/es/components/display/WatchSize.vue2.mjs +2 -2
- package/es/components/display/use-tabs-query-sync.mjs +21 -17
- package/es/components/form/FormItem.vue.mjs +4 -4
- package/es/components/form/FormItem.vue2.mjs +183 -121
- package/es/components/form/FormItemNestForm.vue.mjs +4 -4
- package/es/components/form/FormItemNestForm.vue2.mjs +38 -34
- package/es/components/form/FormItemNestFormList.vue.mjs +4 -4
- package/es/components/form/FormItemNestFormList.vue2.mjs +135 -106
- package/es/components/form/FormMain.vue.mjs +4 -4
- package/es/components/form/FormMain.vue2.mjs +226 -139
- package/es/components/form/FormRadioGroup.vue.mjs +67 -52
- package/es/components/form/FormRadioGroup.vue2.mjs +2 -2
- package/es/components/form/FormSearch.vue.mjs +4 -4
- package/es/components/form/FormSearch.vue2.mjs +194 -156
- package/es/components/form/FormSelect.vue.mjs +69 -42
- package/es/components/form/FormSelect.vue2.mjs +2 -2
- package/es/components/form/FormSubmitBtn.vue.mjs +30 -25
- package/es/components/form/FormSubmitBtn.vue2.mjs +2 -2
- package/es/components/form/FormSubmitPanel.vue.mjs +4 -4
- package/es/components/form/FormSubmitPanel.vue2.mjs +129 -96
- package/es/components/form/FormTree.vue.mjs +19 -16
- package/es/components/form/FormTree.vue2.mjs +2 -2
- package/es/components/form/FormVerifyCode.vue.mjs +58 -41
- package/es/components/form/FormVerifyCode.vue2.mjs +2 -2
- package/es/components/form/FormVerifyImage.vue.mjs +4 -4
- package/es/components/form/FormVerifyImage.vue2.mjs +62 -40
- package/es/components/form/form-search-utils.mjs +83 -52
- package/es/components/form/nest-form-item-list.mjs +63 -55
- package/es/components/form/nest-form-item.mjs +30 -30
- package/es/components/form/nest-registry.mjs +4 -4
- package/es/components/form/use-form-submit.mjs +18 -15
- package/es/components/form/use-layout-by-container.mjs +23 -15
- package/es/components/form/use-nest-form-list.mjs +19 -16
- package/es/components/form/use-nest-form.mjs +37 -28
- package/es/components/form/use-nest-layout-scale.mjs +11 -10
- package/es/components/form/utils.mjs +233 -145
- package/es/components/list-page/ListPage.vue.mjs +4 -4
- package/es/components/list-page/ListPage.vue2.mjs +313 -207
- package/es/components/list-page/use-sticky.mjs +45 -33
- package/es/components/menu/MenuItemSub.vue.mjs +47 -43
- package/es/components/menu/MenuItemSub.vue2.mjs +2 -2
- package/es/components/menu/MenuTree.vue.mjs +84 -61
- package/es/components/menu/MenuTree.vue2.mjs +2 -2
- package/es/components/misc/AutoRefresh.vue.mjs +4 -4
- package/es/components/misc/AutoRefresh.vue2.mjs +78 -53
- package/es/components/misc/AutoRefreshGroup.vue.mjs +4 -4
- package/es/components/misc/AutoRefreshGroup.vue2.mjs +54 -51
- package/es/components/misc/SelectModule.vue.mjs +54 -45
- package/es/components/misc/SelectModule.vue2.mjs +2 -2
- package/es/components/misc/TriggerAutoImport.vue.mjs +7 -5
- package/es/components/misc/TriggerAutoImport.vue2.mjs +2 -2
- package/es/components/modal/ModalConfirm.vue.mjs +4 -4
- package/es/components/modal/ModalConfirm.vue2.mjs +160 -125
- package/es/components/modal/ModalDetail.vue.mjs +50 -39
- package/es/components/modal/ModalDetail.vue2.mjs +2 -2
- package/es/components/modal/ModalForm.vue.mjs +63 -52
- package/es/components/modal/ModalForm.vue2.mjs +2 -2
- package/es/components/modal/ModalPorter.vue.mjs +51 -36
- package/es/components/modal/ModalPorter.vue2.mjs +2 -2
- package/es/components/modal/ModalShelf.vue.mjs +38 -28
- package/es/components/modal/ModalShelf.vue2.mjs +2 -2
- package/es/components/modal/modal-shelf-core.mjs +52 -36
- package/es/components/modal/modal-shelf-hierarchy.mjs +11 -9
- package/es/components/panel/PanelEditSwitch.vue.mjs +4 -4
- package/es/components/panel/PanelEditSwitch.vue2.mjs +88 -66
- package/es/components/panel/PanelItem.vue.mjs +4 -4
- package/es/components/panel/PanelItem.vue2.mjs +103 -77
- package/es/components/panel/PanelItemNestForm.vue.mjs +4 -4
- package/es/components/panel/PanelItemNestForm.vue2.mjs +61 -52
- package/es/components/panel/PanelItemNestPanel.vue.mjs +22 -20
- package/es/components/panel/PanelItemNestPanel.vue2.mjs +2 -2
- package/es/components/panel/PanelMain.vue.mjs +4 -4
- package/es/components/panel/PanelMain.vue2.mjs +92 -74
- package/es/components/panel/nest-panel-form.mjs +44 -38
- package/es/components/panel/nest-panel-item.mjs +18 -17
- package/es/components/slot-layout/SlotLayoutFlowAside.vue.mjs +4 -4
- package/es/components/slot-layout/SlotLayoutFlowAside.vue2.mjs +55 -42
- package/es/components/slot-layout/SlotLayoutTemplate.vue.mjs +11 -9
- package/es/components/slot-layout/SlotLayoutTemplate.vue2.mjs +2 -2
- package/es/components/table/TableMain.vue.mjs +4 -4
- package/es/components/table/TableMain.vue2.mjs +378 -275
- package/es/components/table/TableSkeleton.vue.mjs +4 -4
- package/es/components/table/TableSkeleton.vue2.mjs +95 -74
- package/es/components/table/TableToolbar.vue.mjs +4 -4
- package/es/components/table/TableToolbar.vue2.mjs +170 -154
- package/es/components/table/ToolbarButtons.vue.mjs +12 -10
- package/es/components/table/ToolbarButtons.vue2.mjs +2 -2
- package/es/components/table/constants.mjs +4 -3
- package/es/components/table/use-fill-height.mjs +12 -10
- package/es/components/table/use-table-skeleton.mjs +19 -15
- package/es/config/list-model.mjs +2 -2
- package/es/config/route.mjs +4 -3
- package/es/helpers/form.mjs +35 -25
- package/es/helpers/list-helper.mjs +59 -44
- package/es/hooks/activated.mjs +49 -33
- package/es/hooks/feel-size.mjs +39 -23
- package/es/hooks/menus-dispatch.mjs +68 -35
- package/es/hooks/timeout.mjs +29 -14
- package/es/hooks/use-breakpoint.mjs +35 -23
- package/es/hooks/use-channel-viewport-height.mjs +30 -20
- package/es/hooks/use-custom-breakpoint.mjs +48 -31
- package/es/hooks/use-observe-size.mjs +37 -20
- package/es/hooks/use-theme-apply.mjs +175 -124
- package/es/hooks/use-viewport-apply.mjs +39 -27
- package/es/index.mjs +239 -239
- package/es/inject/key.mjs +52 -41
- package/es/injectInfo.json.mjs +2 -2
- package/es/router/group-redirect.mjs +22 -16
- package/es/router/guard/index.mjs +26 -21
- package/es/router/guard/login.mjs +4 -2
- package/es/router/guard/permission.mjs +4 -2
- package/es/store/app.mjs +163 -123
- package/es/store/router-permission.mjs +75 -46
- package/es/store/user.mjs +100 -71
- package/es/style.css +769 -1
- package/es/utils/dom.mjs +20 -16
- package/es/utils/export.mjs +34 -18
- package/es/utils/id.mjs +5 -3
- package/es/utils/router.mjs +21 -14
- package/es/utils/theme-scale.mjs +50 -35
- package/es/utils/time.mjs +20 -14
- package/package.json +4 -3
- package/src/bridge/README.md +5 -0
- package/src/bridge/docs/README.md +72 -0
- package/src/components/README.md +84 -0
- package/src/components/app-layout/README.md +46 -0
- package/src/components/app-layout/docs/README-AppAside.md +69 -0
- package/src/components/app-layout/docs/README-AppBody.md +81 -0
- package/src/components/app-layout/docs/README-AppBreadcrumb.md +71 -0
- package/src/components/app-layout/docs/README-AppFooter.md +41 -0
- package/src/components/app-layout/docs/README-AppHeader.md +73 -0
- package/src/components/app-layout/docs/README-AppLayout.md +83 -0
- package/src/components/app-layout/docs/README-AppPage.md +80 -0
- package/src/components/app-layout/docs/README-AppSidebar.md +70 -0
- package/src/components/app-layout/docs/README-AppTheme.md +66 -0
- package/src/components/data-view/README.md +19 -0
- package/src/components/data-view/docs/README-DataListView.md +114 -0
- package/src/components/display/README.md +23 -0
- package/src/components/display/docs/README-ActionBtn.md +84 -0
- package/src/components/display/docs/README-ActionBtnGroup.md +96 -0
- package/src/components/display/docs/README-ActionConfirm.md +77 -0
- package/src/components/display/docs/README-BooleanTag.md +76 -0
- package/src/components/display/docs/README-HeightProvider.md +74 -0
- package/src/components/display/docs/README-TabsMain.md +99 -0
- package/src/components/display/docs/README-WatchSize.md +70 -0
- package/src/components/form/README.md +24 -0
- package/src/components/form/docs/README-FormItemNestForm.md +86 -0
- package/src/components/form/docs/README-FormItemNestFormList.md +93 -0
- package/src/components/form/docs/README-FormMain.md +101 -0
- package/src/components/form/docs/README-FormSearch.md +89 -0
- package/src/components/form/docs/README-FormSubmitBtn.md +72 -0
- package/src/components/form/docs/README-FormSubmitPanel.md +97 -0
- package/src/components/list-page/README.md +16 -0
- package/src/components/list-page/docs/README-ListPage.md +136 -0
- package/src/components/menu/README.md +19 -0
- package/src/components/menu/docs/README-MenuItemSub.md +53 -0
- package/src/components/menu/docs/README-MenuTree.md +76 -0
- package/src/components/misc/README.md +21 -0
- package/src/components/misc/docs/README-AutoRefresh.md +74 -0
- package/src/components/misc/docs/README-AutoRefreshGroup.md +74 -0
- package/src/components/misc/docs/README-SelectModule.md +72 -0
- package/src/components/modal/README.md +21 -0
- package/src/components/modal/docs/README-ModalConfirm.md +105 -0
- package/src/components/modal/docs/README-ModalDetail.md +103 -0
- package/src/components/modal/docs/README-ModalForm.md +97 -0
- package/src/components/modal/docs/README-ModalPorter.md +92 -0
- package/src/components/modal/docs/README-ModalShelf.md +115 -0
- package/src/components/panel/README.md +19 -0
- package/src/components/panel/docs/README-PanelMain.md +149 -0
- package/src/components/slot-layout/README.md +17 -0
- package/src/components/slot-layout/docs/README-SlotLayoutFlowAside.md +83 -0
- package/src/components/slot-layout/docs/README-SlotLayoutTemplate.md +73 -0
- package/src/components/table/README.md +17 -0
- package/src/components/table/docs/README-TableMain.md +140 -0
- package/src/hooks/README.md +5 -0
- package/src/hooks/docs/README.md +49 -0
- package/types/bridge/config-hook.d.ts +68 -0
- package/types/bridge/index.d.ts +411 -0
- package/types/bridge/layout.d.ts +40 -0
- package/types/bridge/plugin.d.ts +18 -0
- package/types/bridge/route.d.ts +20 -1
- package/types/bridge/state.d.ts +14 -0
- package/types/bridge/storage.d.ts +9 -0
- package/types/bridge/theme/index.d.ts +7 -0
- package/types/bridge/theme/persist.d.ts +12 -0
- package/types/bridge/theme/system-dark.d.ts +12 -0
- package/types/bridge/theme/types.d.ts +238 -0
- package/types/components/app-layout/AppAside.vue.d.ts +1 -0
- package/types/components/app-layout/AppCollapseToggle.vue.d.ts +3 -0
- package/types/components/app-layout/AppHeader.vue.d.ts +3 -0
- package/types/components/app-layout/AppLayout.vue.d.ts +12 -0
- package/types/components/app-layout/AppPage.vue.d.ts +17 -0
- package/types/components/app-layout/AppSidebar.vue.d.ts +2 -0
- package/types/components/app-layout/app-page-geometry.d.ts +48 -0
- package/types/components/app-layout/keep-alive.d.ts +17 -0
- package/types/components/app-layout/types.d.ts +125 -0
- package/types/components/app-layout/viewport.d.ts +28 -0
- package/types/components/data-view/DataListViewItem.vue.d.ts +8 -0
- package/types/components/data-view/index.d.ts +4 -0
- package/types/components/data-view/types.d.ts +42 -0
- package/types/components/data-view/utils.d.ts +3 -0
- package/types/components/display/TabsHeader.vue.d.ts +2 -0
- package/types/components/display/TabsMain.vue.d.ts +2 -0
- package/types/components/display/TabsRefineFlow.vue.d.ts +1 -0
- package/types/components/display/TabsTile.vue.d.ts +247 -12
- package/types/components/display/WatchSize.vue.d.ts +9 -0
- package/types/components/display/index.d.ts +37 -1
- package/types/components/display/types.d.ts +163 -0
- package/types/components/display/use-tabs-query-sync.d.ts +29 -0
- package/types/components/form/FormItemNestForm.vue.d.ts +5 -0
- package/types/components/form/FormItemNestFormList.vue.d.ts +17 -0
- package/types/components/form/FormVerifyCode.vue.d.ts +9 -0
- package/types/components/form/FormVerifyImage.vue.d.ts +1 -0
- package/types/components/form/form-search-utils.d.ts +34 -0
- package/types/components/form/nest-form-item-list.d.ts +28 -0
- package/types/components/form/nest-form-item.d.ts +21 -0
- package/types/components/form/nest-registry.d.ts +14 -0
- package/types/components/form/types.d.ts +208 -8
- package/types/components/form/use-form-submit.d.ts +13 -0
- package/types/components/form/use-layout-by-container.d.ts +23 -0
- package/types/components/form/use-nest-form-list.d.ts +13 -0
- package/types/components/form/use-nest-form.d.ts +15 -0
- package/types/components/form/use-nest-layout-scale.d.ts +12 -0
- package/types/components/form/utils.d.ts +56 -1
- package/types/components/list-page/ListPage.vue.d.ts +6 -0
- package/types/components/list-page/types.d.ts +50 -2
- package/types/components/list-page/use-sticky.d.ts +23 -0
- package/types/components/misc/index.d.ts +6 -1
- package/types/components/misc/types.d.ts +7 -0
- package/types/components/modal/ModalConfirm.vue.d.ts +29 -0
- package/types/components/modal/index.d.ts +7 -1
- package/types/components/modal/modal-shelf-core.d.ts +3 -0
- package/types/components/modal/modal-shelf-hierarchy.d.ts +4 -0
- package/types/components/modal/modal-shelf-types.d.ts +34 -0
- package/types/components/modal/types.d.ts +63 -2
- package/types/components/panel/PanelItemNestForm.vue.d.ts +6 -0
- package/types/components/panel/PanelItemNestPanel.vue.d.ts +5 -0
- package/types/components/panel/nest-panel-form.d.ts +21 -0
- package/types/components/panel/nest-panel-item.d.ts +14 -0
- package/types/components/panel/types.d.ts +52 -1
- package/types/components/slot-layout/SlotLayoutTemplate.vue.d.ts +21 -0
- package/types/components/slot-layout/types.d.ts +4 -0
- package/types/components/table/constants.d.ts +8 -0
- package/types/components/table/types.d.ts +140 -9
- package/types/components/table/use-fill-height.d.ts +14 -0
- package/types/components/table/use-table-skeleton.d.ts +16 -0
- package/types/config/list-model.d.ts +29 -0
- package/types/config/route.d.ts +2 -0
- package/types/helpers/form.d.ts +5 -0
- package/types/helpers/list-helper.d.ts +26 -0
- package/types/helpers/types.d.ts +11 -0
- package/types/hooks/activated.d.ts +23 -0
- package/types/hooks/feel-size.d.ts +2 -0
- package/types/hooks/menus-dispatch.d.ts +4 -0
- package/types/hooks/timeout.d.ts +4 -0
- package/types/hooks/use-channel-viewport-height.d.ts +8 -0
- package/types/hooks/use-custom-breakpoint.d.ts +19 -0
- package/types/hooks/use-observe-size.d.ts +29 -0
- package/types/hooks/use-theme-apply.d.ts +23 -0
- package/types/hooks/use-viewport-apply.d.ts +12 -0
- package/types/inject/key.d.ts +163 -0
- package/types/injectInfo.json.d.ts +1 -1
- package/types/router/group-redirect.d.ts +9 -0
- package/types/router/guard/index.d.ts +13 -0
- package/types/router/guard/login.d.ts +1 -0
- package/types/router/guard/permission.d.ts +1 -0
- package/types/router/guard/types.d.ts +3 -0
- package/types/store/app.d.ts +27 -0
- package/types/store/router-permission.d.ts +53 -0
- package/types/store/user.d.ts +24 -0
- package/types/types/dot-path.d.ts +8 -0
- package/types/types/route.d.ts +45 -0
- package/types/types/utility-types.d.ts +7 -0
- package/types/utils/dom.d.ts +22 -0
- package/types/utils/export.d.ts +16 -1
- package/types/utils/id.d.ts +1 -0
- package/types/utils/router.d.ts +2 -0
- package/types/utils/theme-scale.d.ts +31 -0
- package/types/utils/time.d.ts +1 -0
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
25
|
+
withGroupRedirect
|
|
20
26
|
};
|
|
@@ -1,31 +1,36 @@
|
|
|
1
|
-
import { checkLogin
|
|
2
|
-
import { checkPermission
|
|
3
|
-
const
|
|
4
|
-
const { bridge
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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(
|
|
12
|
+
from: encodeURIComponent(to.fullPath)
|
|
12
13
|
}
|
|
13
14
|
});
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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(
|
|
21
|
+
target: encodeURIComponent(to.fullPath)
|
|
19
22
|
}
|
|
20
23
|
});
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
checkLogin,
|
|
34
|
+
checkPermission,
|
|
35
|
+
createGuard
|
|
31
36
|
};
|
package/es/store/app.mjs
CHANGED
|
@@ -1,166 +1,206 @@
|
|
|
1
|
-
import { defineStore
|
|
2
|
-
import { useRoute
|
|
3
|
-
import { computed
|
|
4
|
-
function
|
|
5
|
-
const { bridge
|
|
6
|
-
|
|
7
|
-
const
|
|
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
|
|
10
|
-
return ((
|
|
21
|
+
var _a;
|
|
22
|
+
return ((_a = pageLayout.value) == null ? void 0 : _a.header) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showHeader;
|
|
11
23
|
}
|
|
12
|
-
)
|
|
24
|
+
);
|
|
25
|
+
const showFooter = computed(
|
|
13
26
|
() => {
|
|
14
|
-
var
|
|
15
|
-
return ((
|
|
27
|
+
var _a;
|
|
28
|
+
return ((_a = pageLayout.value) == null ? void 0 : _a.footer) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showFooter;
|
|
16
29
|
}
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
|
24
|
-
return (((
|
|
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
|
-
)
|
|
42
|
+
);
|
|
43
|
+
const showAside = computed(
|
|
27
44
|
() => {
|
|
28
|
-
var
|
|
29
|
-
return ((
|
|
45
|
+
var _a;
|
|
46
|
+
return ((_a = pageLayout.value) == null ? void 0 : _a.aside) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showAside ?? false;
|
|
30
47
|
}
|
|
31
|
-
)
|
|
48
|
+
);
|
|
49
|
+
const showBreadcrumb = computed(
|
|
32
50
|
() => {
|
|
33
|
-
var
|
|
34
|
-
return ((
|
|
51
|
+
var _a;
|
|
52
|
+
return ((_a = pageLayout.value) == null ? void 0 : _a.breadcrumb) ?? bridge.APP_ROUTER_META_DEFAULT_CONFIG.showBreadcrumb;
|
|
35
53
|
}
|
|
36
|
-
)
|
|
54
|
+
);
|
|
55
|
+
const bodyShimPadding = computed(
|
|
37
56
|
() => {
|
|
38
|
-
var
|
|
39
|
-
return ((
|
|
57
|
+
var _a;
|
|
58
|
+
return ((_a = pageLayout.value) == null ? void 0 : _a.bodyShimPadding) ?? bridge.APP_LAYOUT_BODY_CONFIG.shimPadding;
|
|
40
59
|
}
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
...
|
|
72
|
+
...cfg.style,
|
|
50
73
|
position: "fixed",
|
|
51
74
|
// 通栏悬浮:三外边各让外缝 gap(底边朝内容,由下方模块 top 让内缝)。
|
|
52
|
-
top: `calc(${
|
|
53
|
-
left: `calc(${
|
|
54
|
-
right: `calc(${
|
|
55
|
-
height: `${
|
|
56
|
-
background:
|
|
57
|
-
...
|
|
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
|
-
})
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
...
|
|
65
|
-
height: `${
|
|
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:
|
|
69
|
-
background:
|
|
70
|
-
...
|
|
93
|
+
marginTop: hasFooter.value ? gpx.value : "0px",
|
|
94
|
+
background: cfg.background ?? theme.value.bodyColor,
|
|
95
|
+
...cfg.color ? { color: cfg.color } : {}
|
|
71
96
|
};
|
|
72
|
-
})
|
|
73
|
-
|
|
97
|
+
});
|
|
98
|
+
const sidebarStyle = computed(() => {
|
|
99
|
+
const cfg = bridge.APP_LAYOUT_SIDEBAR_CONFIG;
|
|
74
100
|
return {
|
|
75
|
-
...
|
|
101
|
+
...cfg.style,
|
|
76
102
|
position: "fixed",
|
|
77
|
-
width: `${
|
|
103
|
+
width: `${showSidebar.value ? sidebarWidth.value : 0}px`,
|
|
78
104
|
// 悬浮:左/下各让外缝 gap;顶 = 内容行顶(外缝 + header 高 + 内缝);paddingTop 归 0(让位已由 top 承担)。
|
|
79
|
-
top:
|
|
80
|
-
left: `calc(${
|
|
81
|
-
bottom: `calc(${
|
|
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:
|
|
84
|
-
...
|
|
109
|
+
background: cfg.background ?? theme.value.bodyColor,
|
|
110
|
+
...cfg.color ? { color: cfg.color } : {}
|
|
85
111
|
};
|
|
86
|
-
})
|
|
87
|
-
|
|
112
|
+
});
|
|
113
|
+
const asideStyle = computed(() => {
|
|
114
|
+
const cfg = bridge.APP_LAYOUT_ASIDE_CONFIG;
|
|
88
115
|
return {
|
|
89
|
-
...
|
|
116
|
+
...cfg.style,
|
|
90
117
|
position: "fixed",
|
|
91
118
|
// 折叠双表达:外层宽收 0(收回空间)+ AppAside shim 绕 Y 轴翻转(视觉)。
|
|
92
119
|
// showAside=false 整列收 0。
|
|
93
|
-
width: `${
|
|
120
|
+
width: `${showAside.value && !bridge.layout.asideCollapsed.value ? cfg.width : 0}px`,
|
|
94
121
|
// 对称 sidebar:右/下各让外缝 gap;顶 = 内容行顶。
|
|
95
|
-
top:
|
|
96
|
-
right: `calc(${
|
|
97
|
-
bottom: `calc(${
|
|
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:
|
|
100
|
-
...
|
|
126
|
+
background: cfg.background ?? theme.value.bodyColor,
|
|
127
|
+
...cfg.color ? { color: cfg.color } : {}
|
|
101
128
|
};
|
|
102
|
-
})
|
|
103
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
})
|
|
121
|
-
|
|
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
|
-
|
|
124
|
-
|
|
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
|
-
})
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
|
137
|
-
isDarkTheme:
|
|
138
|
-
theme
|
|
139
|
-
showHeader
|
|
140
|
-
showFooter
|
|
141
|
-
showSidebar
|
|
142
|
-
showAside
|
|
143
|
-
showBreadcrumb
|
|
144
|
-
keepAlive
|
|
145
|
-
headerStyle
|
|
146
|
-
footerStyle
|
|
147
|
-
sidebarStyle
|
|
148
|
-
asideStyle
|
|
149
|
-
bodyStyle
|
|
150
|
-
contentViewportInset
|
|
151
|
-
bodyShimPadding
|
|
152
|
-
bodyShimStyle
|
|
153
|
-
viewportPadding
|
|
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:
|
|
156
|
-
asideIsCollapse:
|
|
157
|
-
changeSidebarCollapseStatus
|
|
158
|
-
changeAsideCollapseStatus
|
|
159
|
-
changeSidebarHasMenusStatus
|
|
160
|
-
changeIsDarkTheme
|
|
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
|
-
|
|
205
|
+
createAppStore
|
|
166
206
|
};
|
|
@@ -1,65 +1,94 @@
|
|
|
1
|
-
import { defineStore
|
|
2
|
-
import { computed
|
|
3
|
-
import { useRoute
|
|
4
|
-
import { getRoutePermissionKey
|
|
5
|
-
function
|
|
6
|
-
const { bridge
|
|
7
|
-
return
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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(
|
|
47
|
+
from: encodeURIComponent(fromFullPath)
|
|
24
48
|
}
|
|
25
49
|
});
|
|
26
50
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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:
|
|
65
|
+
immediate: true
|
|
39
66
|
}
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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(
|
|
49
|
-
title: encodeURIComponent(
|
|
76
|
+
target: encodeURIComponent(route.fullPath),
|
|
77
|
+
title: encodeURIComponent(meta.title || "")
|
|
50
78
|
}
|
|
51
79
|
});
|
|
52
80
|
}
|
|
53
81
|
},
|
|
54
82
|
{
|
|
55
|
-
immediate:
|
|
83
|
+
immediate: true
|
|
56
84
|
}
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
|
|
85
|
+
);
|
|
86
|
+
return {
|
|
87
|
+
checkNeedGoToAuthPage,
|
|
88
|
+
checkNeedGoToLoginPage
|
|
60
89
|
};
|
|
61
90
|
});
|
|
62
91
|
}
|
|
63
92
|
export {
|
|
64
|
-
|
|
93
|
+
createRoutePermissionStore
|
|
65
94
|
};
|