@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,223 @@
|
|
|
1
|
+
import { Ref, VNode } from "vue";
|
|
2
|
+
import { BreakPoint, Responsive } from "../../../components/Grid/interface";
|
|
3
|
+
import type { Table } from "../../../hooks/interface";
|
|
4
|
+
import { TableColumnCtx } from "element-plus/es/components/table/src/table-column/defaults";
|
|
5
|
+
|
|
6
|
+
/** ProTable 默认行数据结构。 */
|
|
7
|
+
type DefaultRow = Record<string, any>;
|
|
8
|
+
|
|
9
|
+
/** 表格枚举选项结构,供搜索项、字典和状态列复用。 */
|
|
10
|
+
export interface EnumProps {
|
|
11
|
+
label?: string; // 选项框显示的文字
|
|
12
|
+
value?: string | number | boolean | any[]; // 选项框值
|
|
13
|
+
disabled?: boolean; // 是否禁用此选项
|
|
14
|
+
tagType?: string; // 当 tag 为 true 时,此选择会指定 tag 显示类型
|
|
15
|
+
children?: EnumProps[]; // 为树形选择时,可以通过 children 属性指定子选项
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Element Plus 表格内置列类型。 */
|
|
20
|
+
export type TypeProps = "index" | "selection" | "radio" | "expand" | "sort";
|
|
21
|
+
|
|
22
|
+
/** ProTable 搜索表单支持的控件类型。 */
|
|
23
|
+
export type SearchType =
|
|
24
|
+
| "input"
|
|
25
|
+
| "input-number"
|
|
26
|
+
| "select"
|
|
27
|
+
| "select-v2"
|
|
28
|
+
| "tree-select"
|
|
29
|
+
| "cascader"
|
|
30
|
+
| "date-picker"
|
|
31
|
+
| "time-picker"
|
|
32
|
+
| "time-select"
|
|
33
|
+
| "switch"
|
|
34
|
+
| "slider";
|
|
35
|
+
|
|
36
|
+
/** ProTable 组件属性。 */
|
|
37
|
+
export interface ProTableProps {
|
|
38
|
+
columns: ColumnProps[];
|
|
39
|
+
headerActions?: HeaderActionProps[];
|
|
40
|
+
data?: any[];
|
|
41
|
+
requestApi?: (params: any) => Promise<any>;
|
|
42
|
+
requestAuto?: boolean;
|
|
43
|
+
requestError?: (params: any) => void;
|
|
44
|
+
dataCallback?: (data: any) => any;
|
|
45
|
+
title?: string;
|
|
46
|
+
pagination?: boolean;
|
|
47
|
+
initParam?: any;
|
|
48
|
+
border?: boolean;
|
|
49
|
+
toolButton?: ("refresh" | "setting" | "search")[] | boolean;
|
|
50
|
+
rowKey?: string;
|
|
51
|
+
restoreSelectedRowKeys?: Array<string | number>;
|
|
52
|
+
searchCol?: number | Record<BreakPoint, number>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** 字典值在表格枚举中的目标类型。 */
|
|
56
|
+
export type DictValueType = "string" | "number";
|
|
57
|
+
|
|
58
|
+
/** 自定义搜索控件渲染时暴露的上下文。 */
|
|
59
|
+
export type SearchRenderScope = {
|
|
60
|
+
searchParam: { [key: string]: any };
|
|
61
|
+
placeholder: string;
|
|
62
|
+
clearable: boolean;
|
|
63
|
+
options: EnumProps[];
|
|
64
|
+
data: EnumProps[];
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/** ProTable 单列搜索配置。 */
|
|
68
|
+
export type SearchProps = {
|
|
69
|
+
el?: SearchType; // 当前项搜索框的类型
|
|
70
|
+
label?: string; // 当前项搜索框的 label
|
|
71
|
+
props?: any; // 搜索项参数,根据 element plus 官方文档来传递,该属性所有值会透传到组件
|
|
72
|
+
key?: string; // 当搜索项 key 不为 prop 属性时,可通过 key 指定
|
|
73
|
+
tooltip?: string; // 搜索提示
|
|
74
|
+
order?: number; // 搜索项排序(从大到小)
|
|
75
|
+
span?: number; // 搜索项所占用的列数,默认为 1 列
|
|
76
|
+
offset?: number; // 搜索字段左侧偏移列数
|
|
77
|
+
defaultValue?: string | number | boolean | any[] | Ref<any>; // 搜索项默认值
|
|
78
|
+
dictCode?: string; // 搜索项独立使用的字典编码
|
|
79
|
+
dictValueType?: DictValueType; // 搜索项字典值类型
|
|
80
|
+
enum?: EnumProps[] | Ref<EnumProps[]>; // 搜索项独立使用的枚举字典
|
|
81
|
+
render?: (scope: SearchRenderScope) => VNode; // 自定义搜索内容渲染(tsx语法)
|
|
82
|
+
} & Partial<Record<BreakPoint, Responsive>>;
|
|
83
|
+
|
|
84
|
+
/** 枚举或树形数据字段映射配置。 */
|
|
85
|
+
export type FieldNamesProps = {
|
|
86
|
+
label: string;
|
|
87
|
+
value: string;
|
|
88
|
+
children?: string;
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/** 单元格渲染和行内操作共享的上下文。 */
|
|
92
|
+
export type RenderScope<T extends DefaultRow = DefaultRow> = {
|
|
93
|
+
row: T;
|
|
94
|
+
$index: number;
|
|
95
|
+
column: TableColumnCtx<T>;
|
|
96
|
+
[key: string]: any;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/** 表头自定义渲染上下文。 */
|
|
100
|
+
export type HeaderRenderScope<T extends DefaultRow = DefaultRow> = {
|
|
101
|
+
$index: number;
|
|
102
|
+
column: TableColumnCtx<T>;
|
|
103
|
+
[key: string]: any;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/** ProTable 预置单元格渲染类型。 */
|
|
107
|
+
export type CellType = "image" | "status" | "actions" | "money";
|
|
108
|
+
|
|
109
|
+
/** 行内操作附加参数,支持静态对象或按行动态生成。 */
|
|
110
|
+
export type ColumnActionParams<T extends DefaultRow = DefaultRow> =
|
|
111
|
+
| Record<string, any>
|
|
112
|
+
| ((scope: RenderScope<T>) => Record<string, any>);
|
|
113
|
+
|
|
114
|
+
/** 表头操作按钮渲染和点击时的选择态上下文。 */
|
|
115
|
+
export type HeaderActionScope<T extends DefaultRow = DefaultRow> = {
|
|
116
|
+
selectedList: T[];
|
|
117
|
+
selectedListIds: Array<string | number>;
|
|
118
|
+
isSelected: boolean;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/** 表头操作附加参数,支持静态对象或按选择态动态生成。 */
|
|
122
|
+
export type HeaderActionParams<T extends DefaultRow = DefaultRow> =
|
|
123
|
+
| Record<string, any>
|
|
124
|
+
| ((scope: HeaderActionScope<T>) => Record<string, any>);
|
|
125
|
+
|
|
126
|
+
/** 图片列预置渲染配置。 */
|
|
127
|
+
export interface ImageCellProps<T extends DefaultRow = DefaultRow> {
|
|
128
|
+
src?: string | ((scope: RenderScope<T>) => string);
|
|
129
|
+
previewSrc?: string | ((scope: RenderScope<T>) => string);
|
|
130
|
+
width?: number | string;
|
|
131
|
+
height?: number | string;
|
|
132
|
+
previewWidth?: number | string;
|
|
133
|
+
previewHeight?: number | string;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** 状态列预置渲染和变更配置。 */
|
|
137
|
+
export interface StatusCellProps<T extends DefaultRow = DefaultRow> {
|
|
138
|
+
activeValue: string | number | boolean;
|
|
139
|
+
inactiveValue: string | number | boolean;
|
|
140
|
+
activeText?: string;
|
|
141
|
+
inactiveText?: string;
|
|
142
|
+
disabled?: boolean | ((scope: RenderScope<T>) => boolean);
|
|
143
|
+
beforeChange?: (scope: RenderScope<T>, params?: Record<string, any>) => boolean | Promise<boolean>;
|
|
144
|
+
onChange?: (value: string | number | boolean, scope: RenderScope<T>, params?: Record<string, any>) => void | Promise<void>;
|
|
145
|
+
params?: ColumnActionParams<T>;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** 金额列预置格式化配置。 */
|
|
149
|
+
export interface MoneyCellProps<T extends DefaultRow = DefaultRow> {
|
|
150
|
+
value?: number | string | ((scope: RenderScope<T>) => number | string | undefined | null);
|
|
151
|
+
prefix?: string;
|
|
152
|
+
suffix?: string;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** 行内操作按钮配置。 */
|
|
156
|
+
export interface TableActionProps<T extends DefaultRow = DefaultRow> {
|
|
157
|
+
label: string;
|
|
158
|
+
icon?: any;
|
|
159
|
+
type?: "primary" | "success" | "warning" | "danger" | "info";
|
|
160
|
+
link?: boolean;
|
|
161
|
+
disabled?: boolean | ((scope: RenderScope<T>) => boolean);
|
|
162
|
+
hidden?: boolean | ((scope: RenderScope<T>) => boolean);
|
|
163
|
+
params?: ColumnActionParams<T>;
|
|
164
|
+
onClick: (scope: RenderScope<T>, params?: Record<string, any>) => void | Promise<void>;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** 表头操作按钮配置。 */
|
|
168
|
+
export interface HeaderActionProps<T extends DefaultRow = DefaultRow> {
|
|
169
|
+
label: string;
|
|
170
|
+
icon?: any;
|
|
171
|
+
type?: "primary" | "success" | "warning" | "danger" | "info";
|
|
172
|
+
disabled?: boolean | ((scope: HeaderActionScope<T>) => boolean);
|
|
173
|
+
hidden?: boolean | ((scope: HeaderActionScope<T>) => boolean);
|
|
174
|
+
params?: HeaderActionParams<T>;
|
|
175
|
+
onClick: (scope: HeaderActionScope<T>, params?: Record<string, any>) => void | Promise<void>;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** ProTable 列配置,扩展 Element Plus 表格列能力。 */
|
|
179
|
+
export interface ColumnProps<T extends DefaultRow = DefaultRow> extends Partial<
|
|
180
|
+
Omit<TableColumnCtx<T>, "type" | "children" | "renderCell" | "renderHeader">
|
|
181
|
+
> {
|
|
182
|
+
type?: TypeProps; // 列类型
|
|
183
|
+
cellType?: CellType; // 预置单元格类型
|
|
184
|
+
tag?: boolean | Ref<boolean>; // 是否是标签展示
|
|
185
|
+
isShow?: boolean | Ref<boolean>; // 是否显示在表格当中
|
|
186
|
+
isSetting?: boolean | Ref<boolean>; // 是否在 ColSetting 中可配置
|
|
187
|
+
search?: SearchProps | undefined; // 搜索项配置
|
|
188
|
+
dictCode?: string; // 字典编码,配置后优先使用 Dict / DictLabel 组件
|
|
189
|
+
dictValueType?: DictValueType; // 字典值类型
|
|
190
|
+
enum?: EnumProps[] | Ref<EnumProps[]> | ((params?: any) => Promise<any>); // 枚举字典
|
|
191
|
+
isFilterEnum?: boolean | Ref<boolean>; // 当前单元格值是否根据 enum 格式化(示例:enum 只作为搜索项数据)
|
|
192
|
+
fieldNames?: FieldNamesProps; // 指定 label && value && children 的 key 值
|
|
193
|
+
headerRender?: (scope: HeaderRenderScope<T>) => VNode; // 自定义表头内容渲染(tsx语法)
|
|
194
|
+
render?: (scope: RenderScope<T>) => VNode | string; // 自定义单元格内容渲染(tsx语法)
|
|
195
|
+
imageProps?: ImageCellProps<T>; // 图片列配置
|
|
196
|
+
statusProps?: StatusCellProps<T>; // 状态列配置
|
|
197
|
+
moneyProps?: MoneyCellProps<T>; // 金额列配置
|
|
198
|
+
actions?: TableActionProps<T>[]; // 操作按钮配置
|
|
199
|
+
_children?: ColumnProps<T>[]; // 多级表头
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** ProTable 对外暴露的组件实例状态和方法。 */
|
|
203
|
+
export interface ProTableInstance<T extends DefaultRow = DefaultRow> {
|
|
204
|
+
element?: unknown;
|
|
205
|
+
loading: boolean;
|
|
206
|
+
tableData: T[];
|
|
207
|
+
radio: string;
|
|
208
|
+
pageable: Table.Pageable;
|
|
209
|
+
searchParam: Record<string, any>;
|
|
210
|
+
searchInitParam: Record<string, any>;
|
|
211
|
+
isSelected: boolean;
|
|
212
|
+
selectedList: T[];
|
|
213
|
+
selectedListIds: Array<string | number>;
|
|
214
|
+
enumMap: Map<string, Record<string, any>[]>;
|
|
215
|
+
getTableList: () => Promise<void>;
|
|
216
|
+
search: () => void;
|
|
217
|
+
reset: () => void;
|
|
218
|
+
handleSizeChange: (size: number) => void;
|
|
219
|
+
handleCurrentChange: (page: number) => void;
|
|
220
|
+
clearSelection: () => void;
|
|
221
|
+
getTotal: () => number;
|
|
222
|
+
refreshEnums: () => Promise<void>;
|
|
223
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DefineComponent } from "vue";
|
|
2
|
+
import type { ProTableInstance, ProTableProps } from "./ProTable/interface";
|
|
3
|
+
import ProTableImplementation from "./ProTable/index.vue";
|
|
4
|
+
|
|
5
|
+
/** ProTable 公共组件 Adapter。 */
|
|
6
|
+
const ProTable = ProTableImplementation as unknown as DefineComponent<ProTableProps, ProTableInstance>;
|
|
7
|
+
|
|
8
|
+
export default ProTable;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<Dict
|
|
3
|
+
v-if="shouldUseDictComponent"
|
|
4
|
+
v-model="_searchParam[column.search?.key ?? handleProp(column.prop!)]"
|
|
5
|
+
:code="column.search?.dictCode ?? column.dictCode!"
|
|
6
|
+
:code-type="column.search?.dictValueType ?? column.dictValueType ?? 'number'"
|
|
7
|
+
:placeholder="placeholder.placeholder"
|
|
8
|
+
v-bind="handleSearchProps"
|
|
9
|
+
:style="handleSearchStyle"
|
|
10
|
+
/>
|
|
11
|
+
<ElSelect
|
|
12
|
+
v-else-if="column.search?.el === 'select' && !column.search?.render"
|
|
13
|
+
v-bind="{ ...handleSearchProps, ...placeholder, searchParam: _searchParam, clearable }"
|
|
14
|
+
v-model="_searchParam[column.search?.key ?? handleProp(column.prop!)]"
|
|
15
|
+
:style="handleSearchStyle"
|
|
16
|
+
>
|
|
17
|
+
<el-option v-for="(col, index) in columnEnum" :key="index" :label="col[fieldNames.label]" :value="col[fieldNames.value]" />
|
|
18
|
+
</ElSelect>
|
|
19
|
+
<component
|
|
20
|
+
v-else
|
|
21
|
+
:is="searchComponent"
|
|
22
|
+
v-bind="{ ...handleSearchProps, ...placeholder, searchParam: _searchParam, clearable }"
|
|
23
|
+
v-model.trim="_searchParam[column.search?.key ?? handleProp(column.prop!)]"
|
|
24
|
+
:data="column.search?.el === 'tree-select' ? columnEnum : []"
|
|
25
|
+
:options="['cascader', 'select-v2'].includes(column.search?.el!) ? columnEnum : []"
|
|
26
|
+
>
|
|
27
|
+
<template v-if="column.search?.el === 'cascader'" #default="{ data }">
|
|
28
|
+
<span>{{ data[fieldNames.label] }}</span>
|
|
29
|
+
</template>
|
|
30
|
+
<slot v-if="column.search?.el !== 'cascader'"></slot>
|
|
31
|
+
</component>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<script setup lang="ts" name="SearchFormItem">
|
|
35
|
+
import { computed, inject, ref, unref, type Component } from "vue";
|
|
36
|
+
import {
|
|
37
|
+
ElCascader,
|
|
38
|
+
ElDatePicker,
|
|
39
|
+
ElInput,
|
|
40
|
+
ElInputNumber,
|
|
41
|
+
ElSelect,
|
|
42
|
+
ElSelectV2,
|
|
43
|
+
ElSlider,
|
|
44
|
+
ElSwitch,
|
|
45
|
+
ElTimePicker,
|
|
46
|
+
ElTimeSelect,
|
|
47
|
+
ElTreeSelect
|
|
48
|
+
} from "element-plus";
|
|
49
|
+
import Dict from "../../../components/Dict/index.vue";
|
|
50
|
+
import { handleProp } from "../../../utils";
|
|
51
|
+
import { ColumnProps, SearchType } from "../../../components/ProTable/interface";
|
|
52
|
+
|
|
53
|
+
/** 单个搜索表单项组件属性。 */
|
|
54
|
+
interface SearchFormItem {
|
|
55
|
+
column: ColumnProps;
|
|
56
|
+
searchParam: { [key: string]: any };
|
|
57
|
+
}
|
|
58
|
+
const props = defineProps<SearchFormItem>();
|
|
59
|
+
|
|
60
|
+
// Re receive SearchParam
|
|
61
|
+
const _searchParam = computed(() => props.searchParam);
|
|
62
|
+
|
|
63
|
+
const searchComponentMap: Record<SearchType, Component> = {
|
|
64
|
+
input: ElInput,
|
|
65
|
+
"input-number": ElInputNumber,
|
|
66
|
+
select: ElSelect,
|
|
67
|
+
"select-v2": ElSelectV2,
|
|
68
|
+
"tree-select": ElTreeSelect,
|
|
69
|
+
cascader: ElCascader,
|
|
70
|
+
"date-picker": ElDatePicker,
|
|
71
|
+
"time-picker": ElTimePicker,
|
|
72
|
+
"time-select": ElTimeSelect,
|
|
73
|
+
switch: ElSwitch,
|
|
74
|
+
slider: ElSlider
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 获取搜索项实际渲染组件,避免按需加载后动态字符串组件无法解析。
|
|
79
|
+
*/
|
|
80
|
+
const searchComponent = computed(() => {
|
|
81
|
+
const render = props.column.search?.render;
|
|
82
|
+
if (render) return render;
|
|
83
|
+
const searchEl = props.column.search?.el;
|
|
84
|
+
return searchEl ? searchComponentMap[searchEl] : ElInput;
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 判断当前搜索项是否应直接使用字典组件渲染。
|
|
89
|
+
*/
|
|
90
|
+
const shouldUseDictComponent = computed(() => {
|
|
91
|
+
return (
|
|
92
|
+
!!(props.column.search?.dictCode ?? props.column.dictCode) &&
|
|
93
|
+
props.column.search?.el === "select" &&
|
|
94
|
+
!props.column.search?.render
|
|
95
|
+
);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// 判断 fieldNames 设置 label && value && children 的 key 值
|
|
99
|
+
const fieldNames = computed(() => {
|
|
100
|
+
return {
|
|
101
|
+
label: props.column.fieldNames?.label ?? "label",
|
|
102
|
+
value: props.column.fieldNames?.value ?? "value",
|
|
103
|
+
children: props.column.fieldNames?.children ?? "children"
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// 接收 enumMap (el 为 select-v2 需单独处理 enumData)
|
|
108
|
+
const enumMap = inject("enumMap", ref(new Map()));
|
|
109
|
+
|
|
110
|
+
const columnEnum = computed(() => {
|
|
111
|
+
const searchEnum = unref(props.column.search?.enum);
|
|
112
|
+
if (Array.isArray(searchEnum)) return searchEnum;
|
|
113
|
+
const staticEnum = typeof props.column.enum !== "function" ? unref(props.column.enum) : undefined;
|
|
114
|
+
if (Array.isArray(staticEnum) && staticEnum.length) return staticEnum;
|
|
115
|
+
|
|
116
|
+
let enumData = enumMap.value.get(props.column.prop);
|
|
117
|
+
if (!enumData) return [];
|
|
118
|
+
if (props.column.search?.el === "select-v2" && props.column.fieldNames) {
|
|
119
|
+
enumData = enumData.map((item: { [key: string]: any }) => {
|
|
120
|
+
return { ...item, label: item[fieldNames.value.label], value: item[fieldNames.value.value] };
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return enumData;
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* 统一处理 Dict 搜索组件的宽度透传,避免覆盖组件默认宽度。
|
|
128
|
+
*/
|
|
129
|
+
const handleSearchStyle = computed(() => {
|
|
130
|
+
return props.column.search?.props?.style ?? { width: "100%" };
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
// 处理透传的 searchProps (el 为 tree-select、cascader 的时候需要给下默认 label && value && children)
|
|
134
|
+
const handleSearchProps = computed(() => {
|
|
135
|
+
const label = fieldNames.value.label;
|
|
136
|
+
const value = fieldNames.value.value;
|
|
137
|
+
const children = fieldNames.value.children;
|
|
138
|
+
const searchEl = props.column.search?.el;
|
|
139
|
+
let searchProps = props.column.search?.props ?? {};
|
|
140
|
+
if (searchEl === "tree-select") {
|
|
141
|
+
searchProps = { ...searchProps, props: { ...searchProps, label, children }, nodeKey: value };
|
|
142
|
+
}
|
|
143
|
+
if (searchEl === "cascader") {
|
|
144
|
+
searchProps = { ...searchProps, props: { ...searchProps, label, value, children } };
|
|
145
|
+
}
|
|
146
|
+
return searchProps;
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// 处理默认 placeholder
|
|
150
|
+
const placeholder = computed(() => {
|
|
151
|
+
const search = props.column.search;
|
|
152
|
+
if (["datetimerange", "daterange", "monthrange"].includes(search?.props?.type) || search?.props?.isRange) {
|
|
153
|
+
return {
|
|
154
|
+
rangeSeparator: search?.props?.rangeSeparator ?? "至",
|
|
155
|
+
startPlaceholder: search?.props?.startPlaceholder ?? "开始时间",
|
|
156
|
+
endPlaceholder: search?.props?.endPlaceholder ?? "结束时间"
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const placeholder = search?.props?.placeholder ?? (search?.el?.includes("input") ? "请输入" : "请选择");
|
|
160
|
+
return { placeholder };
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// 是否有清除按钮 (当搜索项有默认值时,清除按钮不显示)
|
|
164
|
+
const clearable = computed(() => {
|
|
165
|
+
const search = props.column.search;
|
|
166
|
+
return search?.props?.clearable ?? (search?.defaultValue == null || search?.defaultValue == undefined);
|
|
167
|
+
});
|
|
168
|
+
</script>
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div v-if="columns.length" class="card table-search" :class="{ 'table-search--no-operation': !showOperation }">
|
|
3
|
+
<el-form ref="formRef" :model="searchParam">
|
|
4
|
+
<Grid ref="gridRef" :collapsed="collapsed" :gap="[20, 0]" :cols="searchCol">
|
|
5
|
+
<GridItem v-for="(item, index) in columns" :key="item.prop" v-bind="getResponsive(item)" :index="index">
|
|
6
|
+
<el-form-item>
|
|
7
|
+
<template #label>
|
|
8
|
+
<el-space :size="4">
|
|
9
|
+
<span>{{ `${item.search?.label ?? item.label}` }}</span>
|
|
10
|
+
<el-tooltip v-if="item.search?.tooltip" effect="dark" :content="item.search?.tooltip" placement="top">
|
|
11
|
+
<i :class="'iconfont icon-yiwen'"></i>
|
|
12
|
+
</el-tooltip>
|
|
13
|
+
</el-space>
|
|
14
|
+
<span> :</span>
|
|
15
|
+
</template>
|
|
16
|
+
<SearchFormItem :column="item" :search-param="searchParam" />
|
|
17
|
+
</el-form-item>
|
|
18
|
+
</GridItem>
|
|
19
|
+
<GridItem v-if="showOperation" suffix>
|
|
20
|
+
<div class="operation">
|
|
21
|
+
<el-button type="primary" :icon="Search" @click="search"> 搜索 </el-button>
|
|
22
|
+
<el-button :icon="Delete" @click="reset"> 重置 </el-button>
|
|
23
|
+
<el-button v-if="showCollapse" type="primary" link class="search-isOpen" @click="collapsed = !collapsed">
|
|
24
|
+
{{ collapsed ? "展开" : "合并" }}
|
|
25
|
+
<el-icon class="el-icon--right">
|
|
26
|
+
<component :is="collapsed ? ArrowDown : ArrowUp"></component>
|
|
27
|
+
</el-icon>
|
|
28
|
+
</el-button>
|
|
29
|
+
</div>
|
|
30
|
+
</GridItem>
|
|
31
|
+
</Grid>
|
|
32
|
+
</el-form>
|
|
33
|
+
</div>
|
|
34
|
+
</template>
|
|
35
|
+
<script setup lang="ts" name="SearchForm">
|
|
36
|
+
import { computed, ref } from "vue";
|
|
37
|
+
import { ColumnProps } from "../../components/ProTable/interface";
|
|
38
|
+
import { BreakPoint } from "../../components/Grid/interface";
|
|
39
|
+
import { Delete, Search, ArrowDown, ArrowUp } from "@element-plus/icons-vue";
|
|
40
|
+
import SearchFormItem from "./components/SearchFormItem.vue";
|
|
41
|
+
import Grid from "../../components/Grid/index.vue";
|
|
42
|
+
import GridItem from "../../components/Grid/components/GridItem.vue";
|
|
43
|
+
|
|
44
|
+
/** ProTable 搜索表单组件属性。 */
|
|
45
|
+
interface ProTableProps {
|
|
46
|
+
columns?: ColumnProps[]; // 搜索配置列
|
|
47
|
+
searchParam?: { [key: string]: any }; // 搜索参数
|
|
48
|
+
searchCol: number | Record<BreakPoint, number>;
|
|
49
|
+
search: (params: any) => void; // 搜索方法
|
|
50
|
+
reset: (params: any) => void; // 重置方法
|
|
51
|
+
showOperation?: boolean; // 是否展示搜索、重置等操作按钮
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// 默认值
|
|
55
|
+
const props = withDefaults(defineProps<ProTableProps>(), {
|
|
56
|
+
columns: () => [],
|
|
57
|
+
searchParam: () => ({}),
|
|
58
|
+
showOperation: true
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// 获取响应式设置
|
|
62
|
+
const getResponsive = (item: ColumnProps) => {
|
|
63
|
+
return {
|
|
64
|
+
span: item.search?.span,
|
|
65
|
+
offset: item.search?.offset ?? 0,
|
|
66
|
+
xs: item.search?.xs,
|
|
67
|
+
sm: item.search?.sm,
|
|
68
|
+
md: item.search?.md,
|
|
69
|
+
lg: item.search?.lg,
|
|
70
|
+
xl: item.search?.xl
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// 是否默认折叠搜索项
|
|
75
|
+
const collapsed = ref(true);
|
|
76
|
+
|
|
77
|
+
// 获取响应式断点
|
|
78
|
+
const gridRef = ref();
|
|
79
|
+
const breakPoint = computed<BreakPoint>(() => gridRef.value?.breakPoint);
|
|
80
|
+
|
|
81
|
+
// 判断是否显示 展开/合并 按钮
|
|
82
|
+
const showCollapse = computed(() => {
|
|
83
|
+
let show = false;
|
|
84
|
+
props.columns.reduce((prev, current) => {
|
|
85
|
+
prev +=
|
|
86
|
+
(current.search![breakPoint.value]?.span ?? current.search?.span ?? 1) +
|
|
87
|
+
(current.search![breakPoint.value]?.offset ?? current.search?.offset ?? 0);
|
|
88
|
+
if (typeof props.searchCol !== "number") {
|
|
89
|
+
if (prev >= props.searchCol[breakPoint.value]) show = true;
|
|
90
|
+
} else {
|
|
91
|
+
if (prev >= props.searchCol) show = true;
|
|
92
|
+
}
|
|
93
|
+
return prev;
|
|
94
|
+
}, 0);
|
|
95
|
+
return show;
|
|
96
|
+
});
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<style scoped lang="scss">
|
|
100
|
+
.table-search--no-operation {
|
|
101
|
+
:deep(.el-form-item) {
|
|
102
|
+
margin-bottom: 0;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
</style>
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
.select-filter {
|
|
2
|
+
width: 100%;
|
|
3
|
+
.select-filter-item {
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
border-bottom: 1px dashed var(--el-border-color-light);
|
|
7
|
+
&:last-child {
|
|
8
|
+
border-bottom: none;
|
|
9
|
+
}
|
|
10
|
+
.select-filter-item-title {
|
|
11
|
+
margin-top: -2px;
|
|
12
|
+
span {
|
|
13
|
+
font-size: 14px;
|
|
14
|
+
color: var(--el-text-color-regular);
|
|
15
|
+
white-space: nowrap;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
.select-filter-notData {
|
|
19
|
+
margin: 18px 0;
|
|
20
|
+
font-size: 14px;
|
|
21
|
+
color: var(--el-text-color-regular);
|
|
22
|
+
}
|
|
23
|
+
.select-filter-list {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex: 1;
|
|
26
|
+
padding: 0;
|
|
27
|
+
margin: 13px 0;
|
|
28
|
+
li {
|
|
29
|
+
display: flex;
|
|
30
|
+
align-items: center;
|
|
31
|
+
padding: 5px 15px;
|
|
32
|
+
margin-right: 16px;
|
|
33
|
+
font-size: 13px;
|
|
34
|
+
color: var(--el-color-primary);
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
list-style: none;
|
|
37
|
+
background: var(--el-color-primary-light-9);
|
|
38
|
+
border: 1px solid var(--el-color-primary-light-5);
|
|
39
|
+
border-radius: 32px;
|
|
40
|
+
&:hover {
|
|
41
|
+
color: #ffffff;
|
|
42
|
+
background: var(--el-color-primary);
|
|
43
|
+
border-color: var(--el-color-primary);
|
|
44
|
+
transition: 0.1s;
|
|
45
|
+
}
|
|
46
|
+
&.active {
|
|
47
|
+
font-weight: bold;
|
|
48
|
+
color: #ffffff;
|
|
49
|
+
background: var(--el-color-primary);
|
|
50
|
+
border-color: var(--el-color-primary);
|
|
51
|
+
}
|
|
52
|
+
.el-icon {
|
|
53
|
+
margin-right: 4px;
|
|
54
|
+
font-size: 16px;
|
|
55
|
+
font-weight: bold;
|
|
56
|
+
}
|
|
57
|
+
span {
|
|
58
|
+
white-space: nowrap;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="select-filter">
|
|
3
|
+
<div v-for="item in data" :key="item.key" class="select-filter-item">
|
|
4
|
+
<div class="select-filter-item-title">
|
|
5
|
+
<span>{{ item.title }} :</span>
|
|
6
|
+
</div>
|
|
7
|
+
<span v-if="!item.options.length" class="select-filter-notData">暂无数据 ~</span>
|
|
8
|
+
<el-scrollbar>
|
|
9
|
+
<ul class="select-filter-list">
|
|
10
|
+
<li
|
|
11
|
+
v-for="option in item.options"
|
|
12
|
+
:key="option.value"
|
|
13
|
+
:class="{
|
|
14
|
+
active:
|
|
15
|
+
option.value === selected[item.key] ||
|
|
16
|
+
(Array.isArray(selected[item.key]) && selected[item.key].includes(option.value))
|
|
17
|
+
}"
|
|
18
|
+
@click="select(item, option)"
|
|
19
|
+
>
|
|
20
|
+
<slot :row="option">
|
|
21
|
+
<el-icon v-if="option.icon">
|
|
22
|
+
<component :is="option.icon" />
|
|
23
|
+
</el-icon>
|
|
24
|
+
<span>{{ option.label }}</span>
|
|
25
|
+
</slot>
|
|
26
|
+
</li>
|
|
27
|
+
</ul>
|
|
28
|
+
</el-scrollbar>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</template>
|
|
32
|
+
|
|
33
|
+
<script setup lang="ts" name="selectFilter">
|
|
34
|
+
import { ref, watch } from "vue";
|
|
35
|
+
|
|
36
|
+
/** 筛选项候选值。 */
|
|
37
|
+
interface OptionsProps {
|
|
38
|
+
value: string | number;
|
|
39
|
+
label: string;
|
|
40
|
+
icon?: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** 单组筛选配置。 */
|
|
44
|
+
interface SelectDataProps {
|
|
45
|
+
title: string; // 列表标题
|
|
46
|
+
key: string; // 当前筛选项 key 值
|
|
47
|
+
multiple?: boolean; // 是否为多选
|
|
48
|
+
options: OptionsProps[]; // 筛选数据
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** SelectFilter 组件属性。 */
|
|
52
|
+
interface SelectFilterProps {
|
|
53
|
+
data?: SelectDataProps[]; // 选择的列表数据
|
|
54
|
+
defaultValues?: { [key: string]: any }; // 默认值
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const props = withDefaults(defineProps<SelectFilterProps>(), {
|
|
58
|
+
data: () => [],
|
|
59
|
+
defaultValues: () => ({})
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// 重新接收默认值
|
|
63
|
+
const selected = ref<{ [key: string]: any }>({});
|
|
64
|
+
watch(
|
|
65
|
+
() => props.defaultValues,
|
|
66
|
+
() => {
|
|
67
|
+
props.data.forEach(item => {
|
|
68
|
+
if (item.multiple) selected.value[item.key] = props.defaultValues[item.key] ?? [""];
|
|
69
|
+
else selected.value[item.key] = props.defaultValues[item.key] ?? "";
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
{ deep: true, immediate: true }
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
// emit
|
|
76
|
+
const emit = defineEmits<{
|
|
77
|
+
change: [value: any];
|
|
78
|
+
}>();
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @description 选择筛选项
|
|
82
|
+
* @param {Object} item 选中的哪项列表
|
|
83
|
+
* @param {Object} option 选中的值
|
|
84
|
+
* @return void
|
|
85
|
+
* */
|
|
86
|
+
const select = (item: SelectDataProps, option: OptionsProps) => {
|
|
87
|
+
if (!item.multiple) {
|
|
88
|
+
// * 单选
|
|
89
|
+
if (selected.value[item.key] !== option.value) selected.value[item.key] = option.value;
|
|
90
|
+
} else {
|
|
91
|
+
// * 多选
|
|
92
|
+
// 如果选中的是第一个值,则直接设置
|
|
93
|
+
if (item.options[0].value === option.value) selected.value[item.key] = [option.value];
|
|
94
|
+
// 如果选择的值已经选中了,则删除选中的值
|
|
95
|
+
if (selected.value[item.key].includes(option.value)) {
|
|
96
|
+
let currentIndex = selected.value[item.key].findIndex((s: any) => s === option.value);
|
|
97
|
+
selected.value[item.key].splice(currentIndex, 1);
|
|
98
|
+
// 当全部删光时,把第第一个值选中
|
|
99
|
+
if (selected.value[item.key].length == 0) selected.value[item.key] = [item.options[0].value];
|
|
100
|
+
} else {
|
|
101
|
+
// 未选中点击值的时候,追加选中值
|
|
102
|
+
selected.value[item.key].push(option.value);
|
|
103
|
+
// 单选中全部并且点击到了未选中的值,把第一个值删除掉
|
|
104
|
+
if (selected.value[item.key].includes(item.options[0].value)) selected.value[item.key].splice(0, 1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
emit("change", selected.value);
|
|
108
|
+
};
|
|
109
|
+
</script>
|
|
110
|
+
|
|
111
|
+
<style scoped lang="scss">
|
|
112
|
+
@use "./index.scss" as *;
|
|
113
|
+
</style>
|