@liujitcn/kratos-admin-core 0.0.1
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 +168 -0
- package/build/getEnv.ts +46 -0
- package/build/plugins.ts +206 -0
- package/build/proxy.ts +29 -0
- package/dist/package/declarations/build/getEnv.d.ts +13 -0
- package/dist/package/declarations/build/plugins.d.ts +20 -0
- package/dist/package/declarations/build/proxy.d.ts +10 -0
- package/dist/package/declarations/index.d.ts +7 -0
- package/dist/package/declarations/src/App.vue.d.ts +3 -0
- package/dist/package/declarations/src/api/base/config.d.ts +7 -0
- package/dist/package/declarations/src/api/base/file.d.ts +11 -0
- package/dist/package/declarations/src/api/base/login.d.ts +18 -0
- package/dist/package/declarations/src/api/base/oauth.d.ts +12 -0
- package/dist/package/declarations/src/api/system/auth.d.ts +13 -0
- package/dist/package/declarations/src/api/system/base_dict.d.ts +8 -0
- package/dist/package/declarations/src/api/system/base_tenant.d.ts +9 -0
- package/dist/package/declarations/src/auth.d.ts +1 -0
- package/dist/package/declarations/src/bootstrap.d.ts +23 -0
- package/dist/package/declarations/src/components/Card/DataPanelCard.vue.d.ts +23 -0
- package/dist/package/declarations/src/components/CronExpression/index.vue.d.ts +15 -0
- package/dist/package/declarations/src/components/Dialog/FormDialog.vue.d.ts +74 -0
- package/dist/package/declarations/src/components/Dialog/ProDialog.vue.d.ts +58 -0
- package/dist/package/declarations/src/components/Dict/DictLabel.vue.d.ts +11 -0
- package/dist/package/declarations/src/components/Dict/index.vue.d.ts +30 -0
- package/dist/package/declarations/src/components/ECharts/config/index.d.ts +7 -0
- package/dist/package/declarations/src/components/ECharts/index.vue.d.ts +22 -0
- package/dist/package/declarations/src/components/ErrorMessage/index.vue.d.ts +12 -0
- package/dist/package/declarations/src/components/Grid/components/GridItem.vue.d.ts +34 -0
- package/dist/package/declarations/src/components/Grid/index.vue.d.ts +28 -0
- package/dist/package/declarations/src/components/Grid/interface/index.d.ts +7 -0
- package/dist/package/declarations/src/components/ImportExcel/index.vue.d.ts +26 -0
- package/dist/package/declarations/src/components/Loading/fullScreen.d.ts +5 -0
- package/dist/package/declarations/src/components/Loading/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/components/PasswordStrength/index.vue.d.ts +13 -0
- package/dist/package/declarations/src/components/ProForm/components/DynamicList.vue.d.ts +15 -0
- package/dist/package/declarations/src/components/ProForm/components/KvList.vue.d.ts +26 -0
- package/dist/package/declarations/src/components/ProForm/components/ProFormItem.vue.d.ts +28 -0
- package/dist/package/declarations/src/components/ProForm/index.vue.d.ts +36 -0
- package/dist/package/declarations/src/components/ProForm/interface/index.d.ts +47 -0
- package/dist/package/declarations/src/components/ProTable/components/ColSetting.vue.d.ts +9 -0
- package/dist/package/declarations/src/components/ProTable/components/Pagination.vue.d.ts +15 -0
- package/dist/package/declarations/src/components/ProTable/components/TableColumn.vue.d.ts +9 -0
- package/dist/package/declarations/src/components/ProTable/interface/index.d.ts +187 -0
- package/dist/package/declarations/src/components/ProTable.d.ts +5 -0
- package/dist/package/declarations/src/components/SearchForm/components/SearchFormItem.vue.d.ts +21 -0
- package/dist/package/declarations/src/components/SearchForm/index.vue.d.ts +22 -0
- package/dist/package/declarations/src/components/SelectFilter/index.vue.d.ts +44 -0
- package/dist/package/declarations/src/components/SelectIcon/index.vue.d.ts +19 -0
- package/dist/package/declarations/src/components/SvgIcon/index.vue.d.ts +15 -0
- package/dist/package/declarations/src/components/SwitchDark/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/components/TreeFilter/index.vue.d.ts +5866 -0
- package/dist/package/declarations/src/components/Upload/File.vue.d.ts +24 -0
- package/dist/package/declarations/src/components/Upload/Files.vue.d.ts +26 -0
- package/dist/package/declarations/src/components/Upload/Img.vue.d.ts +43 -0
- package/dist/package/declarations/src/components/Upload/Imgs.vue.d.ts +46 -0
- package/dist/package/declarations/src/components/WangEditor/index.vue.d.ts +29 -0
- package/dist/package/declarations/src/config/index.d.ts +6 -0
- package/dist/package/declarations/src/config/nprogress.d.ts +3 -0
- package/dist/package/declarations/src/directives/index.d.ts +5 -0
- package/dist/package/declarations/src/directives/modules/auth.d.ts +3 -0
- package/dist/package/declarations/src/directives/modules/copy.d.ts +8 -0
- package/dist/package/declarations/src/directives/modules/debounce.d.ts +8 -0
- package/dist/package/declarations/src/directives/modules/draggable.d.ts +3 -0
- package/dist/package/declarations/src/directives/modules/longpress.d.ts +7 -0
- package/dist/package/declarations/src/directives/modules/throttle.d.ts +3 -0
- package/dist/package/declarations/src/directives/modules/waterMarker.d.ts +5 -0
- package/dist/package/declarations/src/enums/httpEnum.d.ts +29 -0
- package/dist/package/declarations/src/format.d.ts +1 -0
- package/dist/package/declarations/src/hooks/interface/index.d.ts +36 -0
- package/dist/package/declarations/src/hooks/useAuthButtons.d.ts +8 -0
- package/dist/package/declarations/src/hooks/useDownload.d.ts +9 -0
- package/dist/package/declarations/src/hooks/useHandleData.d.ts +10 -0
- package/dist/package/declarations/src/hooks/useOnline.d.ts +6 -0
- package/dist/package/declarations/src/hooks/useSelection.d.ts +10 -0
- package/dist/package/declarations/src/hooks/useTable.d.ts +46 -0
- package/dist/package/declarations/src/hooks/useTheme.d.ts +12 -0
- package/dist/package/declarations/src/hooks/useTime.d.ts +13 -0
- package/dist/package/declarations/src/index.d.ts +3 -0
- package/dist/package/declarations/src/layouts/LayoutClassic/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/LayoutColumns/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/LayoutTransverse/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/LayoutVertical/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Footer/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/ToolBarLeft.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/ToolBarRight.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/components/AssemblySize.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/components/Avatar.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/components/Breadcrumb.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/components/CollapseIcon.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/components/Fullscreen.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/components/InfoDialog.vue.d.ts +5 -0
- package/dist/package/declarations/src/layouts/components/Header/components/PasswordDialog.vue.d.ts +5 -0
- package/dist/package/declarations/src/layouts/components/Header/components/SearchMenu.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Header/components/ThemeSetting.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Main/components/Maximize.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Main/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Menu/SubMenu.vue.d.ts +7 -0
- package/dist/package/declarations/src/layouts/components/Tabs/components/MoreButton.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/Tabs/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/components/ThemeDrawer/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/index.vue.d.ts +3 -0
- package/dist/package/declarations/src/layouts/indexAsync.vue.d.ts +3 -0
- package/dist/package/declarations/src/modules/index.d.ts +117 -0
- package/dist/package/declarations/src/modules/kratosAdmin.d.ts +4 -0
- package/dist/package/declarations/src/navigation.d.ts +2 -0
- package/dist/package/declarations/src/request.d.ts +2 -0
- package/dist/package/declarations/src/routers/index.d.ts +21 -0
- package/dist/package/declarations/src/routers/modules/dynamicRouter.d.ts +4 -0
- package/dist/package/declarations/src/routers/modules/staticRouter.d.ts +25 -0
- package/dist/package/declarations/src/rpc/base/v1/config.d.ts +23 -0
- package/dist/package/declarations/src/rpc/base/v1/file.d.ts +52 -0
- package/dist/package/declarations/src/rpc/base/v1/login.d.ts +107 -0
- package/dist/package/declarations/src/rpc/base/v1/oauth.d.ts +167 -0
- package/dist/package/declarations/src/rpc/common/v1/common.d.ts +57 -0
- package/dist/package/declarations/src/rpc/common/v1/enum.d.ts +58 -0
- package/dist/package/declarations/src/rpc/common/v1/types.d.ts +60 -0
- package/dist/package/declarations/src/rpc/google/protobuf/empty.d.ts +11 -0
- package/dist/package/declarations/src/rpc/google/protobuf/wrappers.d.ts +108 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/auth.d.ts +156 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/base_dict.d.ts +215 -0
- package/dist/package/declarations/src/rpc/system/admin/v1/base_tenant.d.ts +112 -0
- package/dist/package/declarations/src/rpc/system/common/v1/enum.d.ts +67 -0
- package/dist/package/declarations/src/security.d.ts +3 -0
- package/dist/package/declarations/src/stores/helper/persist.d.ts +9 -0
- package/dist/package/declarations/src/stores/index.d.ts +2 -0
- package/dist/package/declarations/src/stores/interface/index.d.ts +90 -0
- package/dist/package/declarations/src/stores/modules/auth.d.ts +168 -0
- package/dist/package/declarations/src/stores/modules/config.d.ts +26 -0
- package/dist/package/declarations/src/stores/modules/dict.d.ts +32 -0
- package/dist/package/declarations/src/stores/modules/global.d.ts +4 -0
- package/dist/package/declarations/src/stores/modules/keepAlive.d.ts +6 -0
- package/dist/package/declarations/src/stores/modules/tabs.d.ts +13 -0
- package/dist/package/declarations/src/stores/modules/user.d.ts +29 -0
- package/dist/package/declarations/src/stores/runtime.d.ts +4 -0
- package/dist/package/declarations/src/styles/theme/aside.d.ts +4 -0
- package/dist/package/declarations/src/styles/theme/header.d.ts +4 -0
- package/dist/package/declarations/src/styles/theme/menu.d.ts +4 -0
- package/dist/package/declarations/src/table.d.ts +1 -0
- package/dist/package/declarations/src/tenant.d.ts +1 -0
- package/dist/package/declarations/src/utils/color.d.ts +28 -0
- package/dist/package/declarations/src/utils/dict.d.ts +15 -0
- package/dist/package/declarations/src/utils/eleValidate.d.ts +4 -0
- package/dist/package/declarations/src/utils/errorHandler.d.ts +5 -0
- package/dist/package/declarations/src/utils/index.d.ts +192 -0
- package/dist/package/declarations/src/utils/is/index.d.ts +72 -0
- package/dist/package/declarations/src/utils/mittBus.d.ts +2 -0
- package/dist/package/declarations/src/utils/oauthProvider.d.ts +19 -0
- package/dist/package/declarations/src/utils/passwordCrypto.d.ts +6 -0
- package/dist/package/declarations/src/utils/passwordStrength.d.ts +36 -0
- package/dist/package/declarations/src/utils/proTable.d.ts +44 -0
- package/dist/package/declarations/src/utils/request.d.ts +11 -0
- package/dist/package/declarations/src/utils/router.d.ts +14 -0
- package/dist/package/declarations/src/utils/svg.d.ts +4 -0
- package/dist/package/declarations/src/utils/tenant.d.ts +6 -0
- package/dist/package/declarations/src/utils/utils.d.ts +12 -0
- package/dist/package/declarations/src/views/error/403.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/error/404.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/error/500.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/error/pending.vue.d.ts +3 -0
- package/dist/package/declarations/src/views/login/components/LoginForm.vue.d.ts +4 -0
- package/dist/package/declarations/src/views/login/index.vue.d.ts +3 -0
- package/dist/package/declarations/vite.config.d.ts +13 -0
- package/dist/package/src/App.vue +25 -0
- package/dist/package/src/api/base/config.ts +19 -0
- package/dist/package/src/api/base/file.ts +75 -0
- package/dist/package/src/api/base/login.ts +81 -0
- package/dist/package/src/api/base/oauth.ts +50 -0
- package/dist/package/src/api/system/auth.ts +45 -0
- package/dist/package/src/api/system/base_dict.ts +19 -0
- package/dist/package/src/api/system/base_tenant.ts +20 -0
- package/dist/package/src/assets/fonts/DIN.otf +0 -0
- package/dist/package/src/assets/fonts/MetroDF.ttf +0 -0
- package/dist/package/src/assets/fonts/YouSheBiaoTiHei.ttf +0 -0
- package/dist/package/src/assets/fonts/font.scss +14 -0
- package/dist/package/src/assets/iconfont/iconfont.scss +47 -0
- package/dist/package/src/assets/iconfont/iconfont.ttf +0 -0
- package/dist/package/src/assets/images/403.png +0 -0
- package/dist/package/src/assets/images/404.png +0 -0
- package/dist/package/src/assets/images/500.png +0 -0
- package/dist/package/src/assets/images/avatar.png +0 -0
- package/dist/package/src/assets/images/login_bg.svg +33 -0
- package/dist/package/src/assets/images/login_left.png +0 -0
- package/dist/package/src/assets/images/logo.svg +1 -0
- package/dist/package/src/assets/images/notData.png +0 -0
- package/dist/package/src/assets/images/oauth/dingtalk.png +0 -0
- package/dist/package/src/assets/images/oauth/feishu.png +0 -0
- package/dist/package/src/assets/images/oauth/gitee.png +0 -0
- package/dist/package/src/assets/images/oauth/github.png +0 -0
- package/dist/package/src/assets/images/oauth/google.png +0 -0
- package/dist/package/src/assets/images/oauth/wechat.png +0 -0
- package/dist/package/src/assets/images/oauth/wechatwork.png +0 -0
- package/dist/package/src/auth.ts +1 -0
- package/dist/package/src/bootstrap.ts +69 -0
- package/dist/package/src/components/Card/DataPanelCard.vue +67 -0
- package/dist/package/src/components/CronExpression/index.vue +713 -0
- package/dist/package/src/components/Dialog/FormDialog.vue +160 -0
- package/dist/package/src/components/Dialog/ProDialog.vue +96 -0
- package/dist/package/src/components/Dict/DictLabel.vue +62 -0
- package/dist/package/src/components/Dict/index.vue +157 -0
- package/dist/package/src/components/ECharts/config/index.ts +45 -0
- package/dist/package/src/components/ECharts/index.vue +108 -0
- package/dist/package/src/components/ErrorMessage/index.vue +63 -0
- package/dist/package/src/components/Grid/components/GridItem.vue +69 -0
- package/dist/package/src/components/Grid/index.vue +169 -0
- package/dist/package/src/components/Grid/interface/index.ts +8 -0
- package/dist/package/src/components/ImportExcel/index.scss +3 -0
- package/dist/package/src/components/ImportExcel/index.vue +150 -0
- package/dist/package/src/components/Loading/fullScreen.ts +45 -0
- package/dist/package/src/components/Loading/index.scss +67 -0
- package/dist/package/src/components/Loading/index.vue +13 -0
- package/dist/package/src/components/PasswordStrength/index.vue +127 -0
- package/dist/package/src/components/ProForm/components/DynamicList.vue +59 -0
- package/dist/package/src/components/ProForm/components/KvList.vue +73 -0
- package/dist/package/src/components/ProForm/components/ProFormItem.vue +191 -0
- package/dist/package/src/components/ProForm/index.vue +120 -0
- package/dist/package/src/components/ProForm/interface/index.ts +74 -0
- package/dist/package/src/components/ProTable/components/ColSetting.vue +45 -0
- package/dist/package/src/components/ProTable/components/Pagination.vue +58 -0
- package/dist/package/src/components/ProTable/components/TableColumn.vue +234 -0
- package/dist/package/src/components/ProTable/index.vue +567 -0
- package/dist/package/src/components/ProTable/interface/index.ts +223 -0
- package/dist/package/src/components/ProTable.ts +8 -0
- package/dist/package/src/components/SearchForm/components/SearchFormItem.vue +168 -0
- package/dist/package/src/components/SearchForm/index.vue +105 -0
- package/dist/package/src/components/SelectFilter/index.scss +63 -0
- package/dist/package/src/components/SelectFilter/index.vue +113 -0
- package/dist/package/src/components/SelectIcon/index.scss +39 -0
- package/dist/package/src/components/SelectIcon/index.vue +105 -0
- package/dist/package/src/components/SvgIcon/index.vue +35 -0
- package/dist/package/src/components/SwitchDark/index.vue +12 -0
- package/dist/package/src/components/TreeFilter/index.scss +44 -0
- package/dist/package/src/components/TreeFilter/index.vue +207 -0
- package/dist/package/src/components/Upload/File.vue +201 -0
- package/dist/package/src/components/Upload/Files.vue +234 -0
- package/dist/package/src/components/Upload/Img.vue +306 -0
- package/dist/package/src/components/Upload/Imgs.vue +320 -0
- package/dist/package/src/components/WangEditor/index.scss +28 -0
- package/dist/package/src/components/WangEditor/index.vue +154 -0
- package/dist/package/src/config/index.ts +19 -0
- package/dist/package/src/config/nprogress.ts +12 -0
- package/dist/package/src/directives/index.ts +28 -0
- package/dist/package/src/directives/modules/auth.ts +25 -0
- package/dist/package/src/directives/modules/copy.ts +39 -0
- package/dist/package/src/directives/modules/debounce.ts +32 -0
- package/dist/package/src/directives/modules/draggable.ts +50 -0
- package/dist/package/src/directives/modules/longpress.ts +49 -0
- package/dist/package/src/directives/modules/throttle.ts +42 -0
- package/dist/package/src/directives/modules/waterMarker.ts +36 -0
- package/dist/package/src/enums/httpEnum.ts +35 -0
- package/dist/package/src/format.ts +1 -0
- package/dist/package/src/hooks/interface/index.ts +38 -0
- package/dist/package/src/hooks/useAuthButtons.ts +25 -0
- package/dist/package/src/hooks/useDownload.ts +44 -0
- package/dist/package/src/hooks/useHandleData.ts +38 -0
- package/dist/package/src/hooks/useOnline.ts +27 -0
- package/dist/package/src/hooks/useSelection.ts +34 -0
- package/dist/package/src/hooks/useTable.ts +151 -0
- package/dist/package/src/hooks/useTheme.ts +111 -0
- package/dist/package/src/hooks/useTime.ts +38 -0
- package/dist/package/src/index.ts +9 -0
- package/dist/package/src/layouts/LayoutClassic/index.scss +60 -0
- package/dist/package/src/layouts/LayoutClassic/index.vue +64 -0
- package/dist/package/src/layouts/LayoutColumns/index.scss +95 -0
- package/dist/package/src/layouts/LayoutColumns/index.vue +113 -0
- package/dist/package/src/layouts/LayoutTransverse/index.scss +60 -0
- package/dist/package/src/layouts/LayoutTransverse/index.vue +70 -0
- package/dist/package/src/layouts/LayoutVertical/index.scss +70 -0
- package/dist/package/src/layouts/LayoutVertical/index.vue +119 -0
- package/dist/package/src/layouts/components/Footer/index.scss +11 -0
- package/dist/package/src/layouts/components/Footer/index.vue +21 -0
- package/dist/package/src/layouts/components/Header/ToolBarLeft.vue +23 -0
- package/dist/package/src/layouts/components/Header/ToolBarRight.vue +44 -0
- package/dist/package/src/layouts/components/Header/components/AssemblySize.vue +39 -0
- package/dist/package/src/layouts/components/Header/components/Avatar.vue +226 -0
- package/dist/package/src/layouts/components/Header/components/Breadcrumb.vue +117 -0
- package/dist/package/src/layouts/components/Header/components/CollapseIcon.vue +21 -0
- package/dist/package/src/layouts/components/Header/components/Fullscreen.vue +28 -0
- package/dist/package/src/layouts/components/Header/components/InfoDialog.vue +22 -0
- package/dist/package/src/layouts/components/Header/components/PasswordDialog.vue +22 -0
- package/dist/package/src/layouts/components/Header/components/SearchMenu.vue +207 -0
- package/dist/package/src/layouts/components/Header/components/ThemeSetting.vue +14 -0
- package/dist/package/src/layouts/components/Main/components/Maximize.vue +39 -0
- package/dist/package/src/layouts/components/Main/index.scss +14 -0
- package/dist/package/src/layouts/components/Main/index.vue +90 -0
- package/dist/package/src/layouts/components/Menu/SubMenu.vue +132 -0
- package/dist/package/src/layouts/components/Tabs/components/MoreButton.vue +83 -0
- package/dist/package/src/layouts/components/Tabs/index.scss +69 -0
- package/dist/package/src/layouts/components/Tabs/index.vue +111 -0
- package/dist/package/src/layouts/components/ThemeDrawer/index.scss +137 -0
- package/dist/package/src/layouts/components/ThemeDrawer/index.vue +191 -0
- package/dist/package/src/layouts/index.vue +50 -0
- package/dist/package/src/layouts/indexAsync.vue +54 -0
- package/dist/package/src/modules/index.ts +233 -0
- package/dist/package/src/modules/kratosAdmin.ts +17 -0
- package/dist/package/src/navigation.ts +2 -0
- package/dist/package/src/request.ts +2 -0
- package/dist/package/src/routers/index.ts +143 -0
- package/dist/package/src/routers/modules/dynamicRouter.ts +160 -0
- package/dist/package/src/routers/modules/staticRouter.ts +73 -0
- package/dist/package/src/rpc/base/v1/config.ts +34 -0
- package/dist/package/src/rpc/base/v1/file.ts +66 -0
- package/dist/package/src/rpc/base/v1/login.ts +128 -0
- package/dist/package/src/rpc/base/v1/oauth.ts +199 -0
- package/dist/package/src/rpc/common/v1/common.ts +71 -0
- package/dist/package/src/rpc/common/v1/enum.ts +71 -0
- package/dist/package/src/rpc/common/v1/types.ts +77 -0
- package/dist/package/src/rpc/google/protobuf/empty.ts +19 -0
- package/dist/package/src/rpc/google/protobuf/wrappers.ts +124 -0
- package/dist/package/src/rpc/system/admin/v1/auth.ts +208 -0
- package/dist/package/src/rpc/system/admin/v1/base_dict.ts +249 -0
- package/dist/package/src/rpc/system/admin/v1/base_tenant.ts +134 -0
- package/dist/package/src/rpc/system/common/v1/enum.ts +80 -0
- package/dist/package/src/security.ts +3 -0
- package/dist/package/src/stores/helper/persist.ts +19 -0
- package/dist/package/src/stores/index.ts +8 -0
- package/dist/package/src/stores/interface/index.ts +102 -0
- package/dist/package/src/stores/modules/auth.ts +73 -0
- package/dist/package/src/stores/modules/config.ts +119 -0
- package/dist/package/src/stores/modules/dict.ts +65 -0
- package/dist/package/src/stores/modules/global.ts +54 -0
- package/dist/package/src/stores/modules/keepAlive.ts +22 -0
- package/dist/package/src/stores/modules/tabs.ts +77 -0
- package/dist/package/src/stores/modules/user.ts +109 -0
- package/dist/package/src/stores/runtime.ts +4 -0
- package/dist/package/src/styles/common.scss +144 -0
- package/dist/package/src/styles/element-dark.scss +46 -0
- package/dist/package/src/styles/element.scss +333 -0
- package/dist/package/src/styles/reset.scss +143 -0
- package/dist/package/src/styles/theme/aside.ts +16 -0
- package/dist/package/src/styles/theme/header.ts +25 -0
- package/dist/package/src/styles/theme/menu.ts +31 -0
- package/dist/package/src/styles/var.scss +2 -0
- package/dist/package/src/table.ts +1 -0
- package/dist/package/src/tenant.ts +1 -0
- package/dist/package/src/typings/global.d.ts +74 -0
- package/dist/package/src/typings/utils.d.ts +17 -0
- package/dist/package/src/typings/window.d.ts +8 -0
- package/dist/package/src/utils/color.ts +59 -0
- package/dist/package/src/utils/dict.ts +17 -0
- package/dist/package/src/utils/eleValidate.ts +14 -0
- package/dist/package/src/utils/errorHandler.ts +27 -0
- package/dist/package/src/utils/index.ts +403 -0
- package/dist/package/src/utils/is/index.ts +125 -0
- package/dist/package/src/utils/mittBus.ts +5 -0
- package/dist/package/src/utils/oauthProvider.ts +79 -0
- package/dist/package/src/utils/passwordCrypto.ts +71 -0
- package/dist/package/src/utils/passwordStrength.ts +86 -0
- package/dist/package/src/utils/proTable.ts +124 -0
- package/dist/package/src/utils/request.ts +296 -0
- package/dist/package/src/utils/router.ts +43 -0
- package/dist/package/src/utils/svg.ts +13 -0
- package/dist/package/src/utils/tenant.ts +10 -0
- package/dist/package/src/utils/utils.ts +40 -0
- package/dist/package/src/views/error/403.vue +8 -0
- package/dist/package/src/views/error/404.vue +8 -0
- package/dist/package/src/views/error/500.vue +8 -0
- package/dist/package/src/views/error/pending.vue +16 -0
- package/dist/package/src/views/login/components/LoginForm.vue +797 -0
- package/dist/package/src/views/login/index.scss +103 -0
- package/dist/package/src/views/login/index.vue +108 -0
- package/dist/package/src/vite-env.d.ts +3 -0
- package/dist/package/types/generated/auto-imports.d.ts +124 -0
- package/dist/package/types/generated/components.d.ts +151 -0
- package/package.json +199 -0
- package/tsconfig.json +21 -0
- package/types/generated/auto-imports.d.ts +124 -0
- package/types/generated/components.d.ts +151 -0
- package/vite.config.ts +239 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div v-show="isShow" :style="style">
|
|
3
|
+
<slot></slot>
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
<script setup lang="ts" name="GridItem">
|
|
7
|
+
import { computed, inject, Ref, ref, useAttrs, watch } from "vue";
|
|
8
|
+
import { BreakPoint, Responsive } from "../interface/index";
|
|
9
|
+
|
|
10
|
+
/** GridItem 属性,控制不同断点下的占位和偏移。 */
|
|
11
|
+
type Props = {
|
|
12
|
+
offset?: number;
|
|
13
|
+
span?: number;
|
|
14
|
+
suffix?: boolean;
|
|
15
|
+
xs?: Responsive;
|
|
16
|
+
sm?: Responsive;
|
|
17
|
+
md?: Responsive;
|
|
18
|
+
lg?: Responsive;
|
|
19
|
+
xl?: Responsive;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
23
|
+
offset: 0,
|
|
24
|
+
span: 1,
|
|
25
|
+
suffix: false,
|
|
26
|
+
xs: undefined,
|
|
27
|
+
sm: undefined,
|
|
28
|
+
md: undefined,
|
|
29
|
+
lg: undefined,
|
|
30
|
+
xl: undefined
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const attrs = useAttrs() as { index: string };
|
|
34
|
+
const isShow = ref(true);
|
|
35
|
+
|
|
36
|
+
// 注入断点
|
|
37
|
+
const breakPoint = inject<Ref<BreakPoint>>("breakPoint", ref("xl"));
|
|
38
|
+
const shouldHiddenIndex = inject<Ref<number>>("shouldHiddenIndex", ref(-1));
|
|
39
|
+
watch(
|
|
40
|
+
() => [shouldHiddenIndex.value, breakPoint.value],
|
|
41
|
+
n => {
|
|
42
|
+
if (!!attrs.index) {
|
|
43
|
+
isShow.value = !(n[0] !== -1 && parseInt(attrs.index) >= Number(n[0]));
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
{ immediate: true }
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const gap = inject("gap", 0);
|
|
50
|
+
const cols = inject("cols", ref(4));
|
|
51
|
+
const style = computed(() => {
|
|
52
|
+
let span = props[breakPoint.value]?.span ?? props.span;
|
|
53
|
+
let offset = props[breakPoint.value]?.offset ?? props.offset;
|
|
54
|
+
if (props.suffix) {
|
|
55
|
+
return {
|
|
56
|
+
gridColumnStart: cols.value - span - offset + 1,
|
|
57
|
+
gridColumnEnd: `span ${span + offset}`,
|
|
58
|
+
marginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : "unset"
|
|
59
|
+
};
|
|
60
|
+
} else {
|
|
61
|
+
return {
|
|
62
|
+
gridColumn: `span ${span + offset > cols.value ? cols.value : span + offset}/span ${
|
|
63
|
+
span + offset > cols.value ? cols.value : span + offset
|
|
64
|
+
}`,
|
|
65
|
+
marginLeft: offset !== 0 ? `calc(((100% + ${gap}px) / ${span + offset}) * ${offset})` : "unset"
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
</script>
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div :style="style">
|
|
3
|
+
<slot></slot>
|
|
4
|
+
</div>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts" name="Grid">
|
|
8
|
+
import {
|
|
9
|
+
ref,
|
|
10
|
+
watch,
|
|
11
|
+
useSlots,
|
|
12
|
+
computed,
|
|
13
|
+
provide,
|
|
14
|
+
onBeforeMount,
|
|
15
|
+
onMounted,
|
|
16
|
+
onUnmounted,
|
|
17
|
+
onDeactivated,
|
|
18
|
+
onActivated,
|
|
19
|
+
VNodeArrayChildren,
|
|
20
|
+
VNode
|
|
21
|
+
} from "vue";
|
|
22
|
+
import type { BreakPoint } from "./interface/index";
|
|
23
|
+
|
|
24
|
+
/** Grid 容器属性,控制列数、折叠行数和间距。 */
|
|
25
|
+
type Props = {
|
|
26
|
+
cols?: number | Record<BreakPoint, number>;
|
|
27
|
+
collapsed?: boolean;
|
|
28
|
+
collapsedRows?: number;
|
|
29
|
+
gap?: [number, number] | number;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
33
|
+
cols: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 }),
|
|
34
|
+
collapsed: false,
|
|
35
|
+
collapsedRows: 1,
|
|
36
|
+
gap: 0
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
onBeforeMount(() => props.collapsed && findIndex());
|
|
40
|
+
onMounted(() => {
|
|
41
|
+
resize({ target: { innerWidth: window.innerWidth } } as unknown as UIEvent);
|
|
42
|
+
window.addEventListener("resize", resize);
|
|
43
|
+
});
|
|
44
|
+
onActivated(() => {
|
|
45
|
+
resize({ target: { innerWidth: window.innerWidth } } as unknown as UIEvent);
|
|
46
|
+
window.addEventListener("resize", resize);
|
|
47
|
+
});
|
|
48
|
+
onUnmounted(() => {
|
|
49
|
+
window.removeEventListener("resize", resize);
|
|
50
|
+
});
|
|
51
|
+
onDeactivated(() => {
|
|
52
|
+
window.removeEventListener("resize", resize);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// 监听屏幕变化
|
|
56
|
+
const resize = (e: UIEvent) => {
|
|
57
|
+
let width = (e.target as Window).innerWidth;
|
|
58
|
+
switch (!!width) {
|
|
59
|
+
case width < 768:
|
|
60
|
+
breakPoint.value = "xs";
|
|
61
|
+
break;
|
|
62
|
+
case width >= 768 && width < 992:
|
|
63
|
+
breakPoint.value = "sm";
|
|
64
|
+
break;
|
|
65
|
+
case width >= 992 && width < 1200:
|
|
66
|
+
breakPoint.value = "md";
|
|
67
|
+
break;
|
|
68
|
+
case width >= 1200 && width < 1920:
|
|
69
|
+
breakPoint.value = "lg";
|
|
70
|
+
break;
|
|
71
|
+
case width >= 1920:
|
|
72
|
+
breakPoint.value = "xl";
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// 注入 gap 间距
|
|
78
|
+
provide("gap", Array.isArray(props.gap) ? props.gap[0] : props.gap);
|
|
79
|
+
|
|
80
|
+
// 注入响应式断点
|
|
81
|
+
let breakPoint = ref<BreakPoint>("xl");
|
|
82
|
+
provide("breakPoint", breakPoint);
|
|
83
|
+
|
|
84
|
+
// 注入要开始折叠的 index
|
|
85
|
+
const hiddenIndex = ref(-1);
|
|
86
|
+
provide("shouldHiddenIndex", hiddenIndex);
|
|
87
|
+
|
|
88
|
+
// 注入 cols
|
|
89
|
+
const gridCols = computed(() => {
|
|
90
|
+
if (typeof props.cols === "object") return props.cols[breakPoint.value] ?? props.cols;
|
|
91
|
+
return props.cols;
|
|
92
|
+
});
|
|
93
|
+
provide("cols", gridCols);
|
|
94
|
+
|
|
95
|
+
// 寻找需要开始折叠的字段 index
|
|
96
|
+
const slots = useSlots().default!();
|
|
97
|
+
|
|
98
|
+
/** 计算折叠模式下从哪个 GridItem 开始隐藏。 */
|
|
99
|
+
const findIndex = () => {
|
|
100
|
+
let fields: VNodeArrayChildren = [];
|
|
101
|
+
let suffix: VNode | null = null;
|
|
102
|
+
slots.forEach((slot: any) => {
|
|
103
|
+
// suffix
|
|
104
|
+
if (typeof slot.type === "object" && slot.type.name === "GridItem" && slot.props?.suffix !== undefined) suffix = slot;
|
|
105
|
+
// slot children
|
|
106
|
+
if (typeof slot.type === "symbol" && Array.isArray(slot.children)) fields.push(...slot.children);
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// 计算 suffix 所占用的列
|
|
110
|
+
let suffixCols = 0;
|
|
111
|
+
if (suffix) {
|
|
112
|
+
suffixCols =
|
|
113
|
+
((suffix as VNode).props![breakPoint.value]?.span ?? (suffix as VNode).props?.span ?? 1) +
|
|
114
|
+
((suffix as VNode).props![breakPoint.value]?.offset ?? (suffix as VNode).props?.offset ?? 0);
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
let find = false;
|
|
118
|
+
fields.reduce((prev = 0, current, index) => {
|
|
119
|
+
prev +=
|
|
120
|
+
((current as VNode)!.props![breakPoint.value]?.span ?? (current as VNode)!.props?.span ?? 1) +
|
|
121
|
+
((current as VNode)!.props![breakPoint.value]?.offset ?? (current as VNode)!.props?.offset ?? 0);
|
|
122
|
+
if (Number(prev) > props.collapsedRows * gridCols.value - suffixCols) {
|
|
123
|
+
hiddenIndex.value = index;
|
|
124
|
+
find = true;
|
|
125
|
+
throw "find it";
|
|
126
|
+
}
|
|
127
|
+
return prev;
|
|
128
|
+
}, 0);
|
|
129
|
+
if (!find) hiddenIndex.value = -1;
|
|
130
|
+
} catch (e) {
|
|
131
|
+
// console.warn(e);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// 断点变化时执行 findIndex
|
|
136
|
+
watch(
|
|
137
|
+
() => breakPoint.value,
|
|
138
|
+
() => {
|
|
139
|
+
if (props.collapsed) findIndex();
|
|
140
|
+
}
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
// 监听 collapsed
|
|
144
|
+
watch(
|
|
145
|
+
() => props.collapsed,
|
|
146
|
+
value => {
|
|
147
|
+
if (value) return findIndex();
|
|
148
|
+
hiddenIndex.value = -1;
|
|
149
|
+
}
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
// 设置间距
|
|
153
|
+
const gridGap = computed(() => {
|
|
154
|
+
if (typeof props.gap === "number") return `${props.gap}px`;
|
|
155
|
+
if (Array.isArray(props.gap)) return `${props.gap[1]}px ${props.gap[0]}px`;
|
|
156
|
+
return "unset";
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// 设置 style
|
|
160
|
+
const style = computed(() => {
|
|
161
|
+
return {
|
|
162
|
+
display: "grid",
|
|
163
|
+
gridGap: gridGap.value,
|
|
164
|
+
gridTemplateColumns: `repeat(${gridCols.value}, minmax(0, 1fr))`
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
defineExpose({ breakPoint });
|
|
169
|
+
</script>
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-dialog v-model="dialogVisible" :title="`批量添加${parameter.title}`" :destroy-on-close="true" width="580px" draggable>
|
|
3
|
+
<el-form class="drawer-multiColumn-form" label-width="100px">
|
|
4
|
+
<el-form-item label="模板下载 :">
|
|
5
|
+
<el-button type="primary" :icon="Download" @click="downloadTemp"> 点击下载 </el-button>
|
|
6
|
+
</el-form-item>
|
|
7
|
+
<el-form-item label="文件上传 :">
|
|
8
|
+
<el-upload
|
|
9
|
+
action="#"
|
|
10
|
+
class="upload"
|
|
11
|
+
:drag="true"
|
|
12
|
+
:limit="excelLimit"
|
|
13
|
+
:multiple="true"
|
|
14
|
+
:show-file-list="true"
|
|
15
|
+
:http-request="uploadExcel"
|
|
16
|
+
:before-upload="beforeExcelUpload"
|
|
17
|
+
:on-exceed="handleExceed"
|
|
18
|
+
:on-success="excelUploadSuccess"
|
|
19
|
+
:on-error="excelUploadError"
|
|
20
|
+
:accept="parameter.fileType!.join(',')"
|
|
21
|
+
>
|
|
22
|
+
<slot name="empty">
|
|
23
|
+
<el-icon class="el-icon--upload">
|
|
24
|
+
<upload-filled />
|
|
25
|
+
</el-icon>
|
|
26
|
+
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
|
27
|
+
</slot>
|
|
28
|
+
<template #tip>
|
|
29
|
+
<slot name="tip">
|
|
30
|
+
<div class="el-upload__tip">请上传 .xls , .xlsx 标准格式文件,文件最大为 {{ parameter.fileSize }}M</div>
|
|
31
|
+
</slot>
|
|
32
|
+
</template>
|
|
33
|
+
</el-upload>
|
|
34
|
+
</el-form-item>
|
|
35
|
+
<el-form-item label="数据覆盖 :">
|
|
36
|
+
<el-switch v-model="isCover" />
|
|
37
|
+
</el-form-item>
|
|
38
|
+
</el-form>
|
|
39
|
+
</el-dialog>
|
|
40
|
+
</template>
|
|
41
|
+
|
|
42
|
+
<script setup lang="ts" name="ImportExcel">
|
|
43
|
+
import { ref } from "vue";
|
|
44
|
+
import { useDownload } from "../../hooks/useDownload";
|
|
45
|
+
import { Download } from "@element-plus/icons-vue";
|
|
46
|
+
import { ElNotification, UploadRequestOptions, UploadRawFile } from "element-plus";
|
|
47
|
+
|
|
48
|
+
/** Excel 导入弹窗参数。 */
|
|
49
|
+
export interface ExcelParameterProps {
|
|
50
|
+
title: string; // 标题
|
|
51
|
+
fileSize?: number; // 上传文件的大小
|
|
52
|
+
fileType?: File.ExcelMimeType[]; // 上传文件的类型
|
|
53
|
+
tempApi?: (params: any) => Promise<any>; // 下载模板的Api
|
|
54
|
+
importApi?: (params: any) => Promise<any>; // 批量导入的Api
|
|
55
|
+
getTableList?: () => void; // 获取表格数据的Api
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 是否覆盖数据
|
|
59
|
+
const isCover = ref(false);
|
|
60
|
+
// 最大文件上传数
|
|
61
|
+
const excelLimit = ref(1);
|
|
62
|
+
// dialog状态
|
|
63
|
+
const dialogVisible = ref(false);
|
|
64
|
+
// 父组件传过来的参数
|
|
65
|
+
const parameter = ref<ExcelParameterProps>({
|
|
66
|
+
title: "",
|
|
67
|
+
fileSize: 5,
|
|
68
|
+
fileType: ["application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// 接收父组件参数
|
|
72
|
+
const acceptParams = (params: ExcelParameterProps) => {
|
|
73
|
+
parameter.value = { ...parameter.value, ...params };
|
|
74
|
+
dialogVisible.value = true;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// Excel 导入模板下载
|
|
78
|
+
const downloadTemp = () => {
|
|
79
|
+
if (!parameter.value.tempApi) return;
|
|
80
|
+
useDownload(parameter.value.tempApi, `${parameter.value.title}模板`);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
// 文件上传
|
|
84
|
+
const uploadExcel = async (param: UploadRequestOptions) => {
|
|
85
|
+
let excelFormData = new FormData();
|
|
86
|
+
excelFormData.append("file", param.file);
|
|
87
|
+
excelFormData.append("isCover", isCover.value as unknown as Blob);
|
|
88
|
+
await parameter.value.importApi!(excelFormData);
|
|
89
|
+
parameter.value.getTableList && parameter.value.getTableList();
|
|
90
|
+
dialogVisible.value = false;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @description 文件上传之前判断
|
|
95
|
+
* @param file 上传的文件
|
|
96
|
+
* */
|
|
97
|
+
const beforeExcelUpload = (file: UploadRawFile) => {
|
|
98
|
+
const isExcel = parameter.value.fileType!.includes(file.type as File.ExcelMimeType);
|
|
99
|
+
const fileSize = file.size / 1024 / 1024 < parameter.value.fileSize!;
|
|
100
|
+
if (!isExcel)
|
|
101
|
+
ElNotification({
|
|
102
|
+
title: "温馨提示",
|
|
103
|
+
message: "上传文件只能是 xls / xlsx 格式!",
|
|
104
|
+
type: "warning"
|
|
105
|
+
});
|
|
106
|
+
if (!fileSize)
|
|
107
|
+
setTimeout(() => {
|
|
108
|
+
ElNotification({
|
|
109
|
+
title: "温馨提示",
|
|
110
|
+
message: `上传文件大小不能超过 ${parameter.value.fileSize}MB!`,
|
|
111
|
+
type: "warning"
|
|
112
|
+
});
|
|
113
|
+
}, 0);
|
|
114
|
+
return isExcel && fileSize;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
// 文件数超出提示
|
|
118
|
+
const handleExceed = () => {
|
|
119
|
+
ElNotification({
|
|
120
|
+
title: "温馨提示",
|
|
121
|
+
message: "最多只能上传一个文件!",
|
|
122
|
+
type: "warning"
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// 上传错误提示
|
|
127
|
+
const excelUploadError = () => {
|
|
128
|
+
ElNotification({
|
|
129
|
+
title: "温馨提示",
|
|
130
|
+
message: `批量添加${parameter.value.title}失败,请您重新上传!`,
|
|
131
|
+
type: "error"
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// 上传成功提示
|
|
136
|
+
const excelUploadSuccess = () => {
|
|
137
|
+
ElNotification({
|
|
138
|
+
title: "温馨提示",
|
|
139
|
+
message: `批量添加${parameter.value.title}成功!`,
|
|
140
|
+
type: "success"
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
defineExpose({
|
|
145
|
+
acceptParams
|
|
146
|
+
});
|
|
147
|
+
</script>
|
|
148
|
+
<style lang="scss" scoped>
|
|
149
|
+
@use "./index.scss" as *;
|
|
150
|
+
</style>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ElLoading } from "element-plus";
|
|
2
|
+
|
|
3
|
+
/* 全局请求 loading */
|
|
4
|
+
let loadingInstance: ReturnType<typeof ElLoading.service>;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @description 开启 Loading
|
|
8
|
+
* */
|
|
9
|
+
const startLoading = () => {
|
|
10
|
+
loadingInstance = ElLoading.service({
|
|
11
|
+
fullscreen: true,
|
|
12
|
+
lock: true,
|
|
13
|
+
text: "Loading",
|
|
14
|
+
background: "rgba(0, 0, 0, 0.7)"
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @description 结束 Loading
|
|
20
|
+
* */
|
|
21
|
+
const endLoading = () => {
|
|
22
|
+
loadingInstance.close();
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @description 显示全屏加载
|
|
27
|
+
* */
|
|
28
|
+
let needLoadingRequestCount = 0;
|
|
29
|
+
export const showFullScreenLoading = () => {
|
|
30
|
+
if (needLoadingRequestCount === 0) {
|
|
31
|
+
startLoading();
|
|
32
|
+
}
|
|
33
|
+
needLoadingRequestCount++;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @description 隐藏全屏加载
|
|
38
|
+
* */
|
|
39
|
+
export const tryHideFullScreenLoading = () => {
|
|
40
|
+
if (needLoadingRequestCount <= 0) return;
|
|
41
|
+
needLoadingRequestCount--;
|
|
42
|
+
if (needLoadingRequestCount === 0) {
|
|
43
|
+
endLoading();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
.loading-box {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
align-items: center;
|
|
5
|
+
justify-content: center;
|
|
6
|
+
width: 100%;
|
|
7
|
+
height: 100%;
|
|
8
|
+
.loading-wrap {
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
padding: 98px;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
.dot {
|
|
16
|
+
position: relative;
|
|
17
|
+
box-sizing: border-box;
|
|
18
|
+
display: inline-block;
|
|
19
|
+
width: 32px;
|
|
20
|
+
height: 32px;
|
|
21
|
+
font-size: 32px;
|
|
22
|
+
transform: rotate(45deg);
|
|
23
|
+
animation: ant-rotate 1.2s infinite linear;
|
|
24
|
+
}
|
|
25
|
+
.dot i {
|
|
26
|
+
position: absolute;
|
|
27
|
+
display: block;
|
|
28
|
+
width: 14px;
|
|
29
|
+
height: 14px;
|
|
30
|
+
background-color: var(--el-color-primary);
|
|
31
|
+
border-radius: 100%;
|
|
32
|
+
opacity: 0.3;
|
|
33
|
+
transform: scale(0.75);
|
|
34
|
+
transform-origin: 50% 50%;
|
|
35
|
+
animation: ant-spin-move 1s infinite linear alternate;
|
|
36
|
+
}
|
|
37
|
+
.dot i:nth-child(1) {
|
|
38
|
+
top: 0;
|
|
39
|
+
left: 0;
|
|
40
|
+
}
|
|
41
|
+
.dot i:nth-child(2) {
|
|
42
|
+
top: 0;
|
|
43
|
+
right: 0;
|
|
44
|
+
animation-delay: 0.4s;
|
|
45
|
+
}
|
|
46
|
+
.dot i:nth-child(3) {
|
|
47
|
+
right: 0;
|
|
48
|
+
bottom: 0;
|
|
49
|
+
animation-delay: 0.8s;
|
|
50
|
+
}
|
|
51
|
+
.dot i:nth-child(4) {
|
|
52
|
+
bottom: 0;
|
|
53
|
+
left: 0;
|
|
54
|
+
animation-delay: 1.2s;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@keyframes ant-rotate {
|
|
58
|
+
to {
|
|
59
|
+
transform: rotate(405deg);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@keyframes ant-spin-move {
|
|
64
|
+
to {
|
|
65
|
+
opacity: 1;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="loading-box">
|
|
3
|
+
<div class="loading-wrap">
|
|
4
|
+
<span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
|
|
5
|
+
</div>
|
|
6
|
+
</div>
|
|
7
|
+
</template>
|
|
8
|
+
|
|
9
|
+
<script setup lang="ts" name="Loading"></script>
|
|
10
|
+
|
|
11
|
+
<style scoped lang="scss">
|
|
12
|
+
@use "./index.scss" as *;
|
|
13
|
+
</style>
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="password-strength">
|
|
3
|
+
<div class="password-strength__header">
|
|
4
|
+
<span>密码强度</span>
|
|
5
|
+
<strong :class="`password-strength__label password-strength__label--${strength.level}`">
|
|
6
|
+
{{ strength.text }}
|
|
7
|
+
</strong>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="password-strength__bars">
|
|
10
|
+
<span
|
|
11
|
+
v-for="segment in segments"
|
|
12
|
+
:key="segment"
|
|
13
|
+
class="password-strength__bar"
|
|
14
|
+
:class="{
|
|
15
|
+
'password-strength__bar--active': segment <= strength.strengthScore,
|
|
16
|
+
[`password-strength__bar--${strength.level}`]: segment <= strength.strengthScore
|
|
17
|
+
}"
|
|
18
|
+
/>
|
|
19
|
+
</div>
|
|
20
|
+
<p class="password-strength__tip">{{ tip }}</p>
|
|
21
|
+
</div>
|
|
22
|
+
</template>
|
|
23
|
+
|
|
24
|
+
<script setup lang="ts">
|
|
25
|
+
import { computed } from "vue";
|
|
26
|
+
import { getPasswordStrength, PASSWORD_STRENGTH_TIP } from "../../utils/passwordStrength";
|
|
27
|
+
|
|
28
|
+
/** 密码强度组件属性。 */
|
|
29
|
+
interface PasswordStrengthProps {
|
|
30
|
+
/** 当前密码值。 */
|
|
31
|
+
password?: string;
|
|
32
|
+
/** 底部提示文案。 */
|
|
33
|
+
tip?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const props = withDefaults(defineProps<PasswordStrengthProps>(), {
|
|
37
|
+
password: "",
|
|
38
|
+
tip: PASSWORD_STRENGTH_TIP
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
/** 强度条固定为三段,保持所有页面一致。 */
|
|
42
|
+
const segments = [1, 2, 3];
|
|
43
|
+
|
|
44
|
+
/** 根据输入密码实时输出强度结果。 */
|
|
45
|
+
const strength = computed(() => getPasswordStrength(props.password));
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<style scoped lang="scss">
|
|
49
|
+
.password-strength {
|
|
50
|
+
padding: 14px 16px;
|
|
51
|
+
background: #fafbfd;
|
|
52
|
+
border: 1px solid #ebeef5;
|
|
53
|
+
border-radius: 10px;
|
|
54
|
+
}
|
|
55
|
+
.password-strength__header {
|
|
56
|
+
display: flex;
|
|
57
|
+
gap: 12px;
|
|
58
|
+
align-items: center;
|
|
59
|
+
justify-content: space-between;
|
|
60
|
+
}
|
|
61
|
+
.password-strength__header span {
|
|
62
|
+
font-size: 13px;
|
|
63
|
+
color: #606266;
|
|
64
|
+
}
|
|
65
|
+
.password-strength__label {
|
|
66
|
+
font-size: 13px;
|
|
67
|
+
font-weight: 600;
|
|
68
|
+
transition: color 0.2s ease;
|
|
69
|
+
}
|
|
70
|
+
.password-strength__label--empty {
|
|
71
|
+
color: #909399;
|
|
72
|
+
}
|
|
73
|
+
.password-strength__label--low {
|
|
74
|
+
color: #f56c6c;
|
|
75
|
+
}
|
|
76
|
+
.password-strength__label--medium {
|
|
77
|
+
color: #e6a23c;
|
|
78
|
+
}
|
|
79
|
+
.password-strength__label--high {
|
|
80
|
+
color: #67c23a;
|
|
81
|
+
}
|
|
82
|
+
.password-strength__bars {
|
|
83
|
+
display: grid;
|
|
84
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
85
|
+
gap: 8px;
|
|
86
|
+
margin-top: 10px;
|
|
87
|
+
}
|
|
88
|
+
.password-strength__bar {
|
|
89
|
+
height: 8px;
|
|
90
|
+
background: #ebeef5;
|
|
91
|
+
border-radius: 999px;
|
|
92
|
+
transform: scaleX(0.92);
|
|
93
|
+
transform-origin: left center;
|
|
94
|
+
transition:
|
|
95
|
+
background-color 0.25s ease,
|
|
96
|
+
transform 0.25s ease,
|
|
97
|
+
box-shadow 0.25s ease;
|
|
98
|
+
}
|
|
99
|
+
.password-strength__bar:nth-child(1) {
|
|
100
|
+
transition-delay: 0s;
|
|
101
|
+
}
|
|
102
|
+
.password-strength__bar:nth-child(2) {
|
|
103
|
+
transition-delay: 0.08s;
|
|
104
|
+
}
|
|
105
|
+
.password-strength__bar:nth-child(3) {
|
|
106
|
+
transition-delay: 0.16s;
|
|
107
|
+
}
|
|
108
|
+
.password-strength__bar--active {
|
|
109
|
+
box-shadow: 0 0 0 1px rgb(255 255 255 / 18%) inset;
|
|
110
|
+
transform: scaleX(1);
|
|
111
|
+
}
|
|
112
|
+
.password-strength__bar--low {
|
|
113
|
+
background: #f56c6c;
|
|
114
|
+
}
|
|
115
|
+
.password-strength__bar--medium {
|
|
116
|
+
background: #e6a23c;
|
|
117
|
+
}
|
|
118
|
+
.password-strength__bar--high {
|
|
119
|
+
background: #67c23a;
|
|
120
|
+
}
|
|
121
|
+
.password-strength__tip {
|
|
122
|
+
margin: 10px 0 0;
|
|
123
|
+
font-size: 12px;
|
|
124
|
+
line-height: 1.6;
|
|
125
|
+
color: #909399;
|
|
126
|
+
}
|
|
127
|
+
</style>
|