@cfmm/umi-plugins-ui-v2 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 +29 -0
- package/dist/cjs/components/ActionLogDrawer.tpl +148 -0
- package/dist/cjs/components/AddDrawerForm.tpl +38 -0
- package/dist/cjs/components/AuthorizeRender.tpl +11 -0
- package/dist/cjs/components/Authorized.tpl +39 -0
- package/dist/cjs/components/AuthorizedRoute.tpl +33 -0
- package/dist/cjs/components/AvatarDropdown.tpl +101 -0
- package/dist/cjs/components/CheckPermissions.tpl +100 -0
- package/dist/cjs/components/CopyButton.tpl +49 -0
- package/dist/cjs/components/CrudTable.tpl +650 -0
- package/dist/cjs/components/DicDropDownList.tpl +60 -0
- package/dist/cjs/components/DndTabs.tpl +159 -0
- package/dist/cjs/components/DndTag.tpl +89 -0
- package/dist/cjs/components/DropdownButton.tpl +123 -0
- package/dist/cjs/components/DynamicIcon.tpl +73 -0
- package/dist/cjs/components/DynamicIconModal.tpl +196 -0
- package/dist/cjs/components/EditMultiLangForm.tpl +366 -0
- package/dist/cjs/components/ExportPageWrapper.tpl +224 -0
- package/dist/cjs/components/FlieListModal.tpl +79 -0
- package/dist/cjs/components/FormUpload.tpl +561 -0
- package/dist/cjs/components/GlobalFooter.tpl +21 -0
- package/dist/cjs/components/GlobalHeader.less +51 -0
- package/dist/cjs/components/GlobalHeader.tpl +313 -0
- package/dist/cjs/components/HeaderSearch.less +32 -0
- package/dist/cjs/components/HeaderSearch.tpl +92 -0
- package/dist/cjs/components/HighlightStr.tpl +41 -0
- package/dist/cjs/components/ImportDataUpload.tpl +94 -0
- package/dist/cjs/components/ImportExecl.less +10 -0
- package/dist/cjs/components/ImportExecl.tpl +108 -0
- package/dist/cjs/components/KeepAliveDndTabs.tpl +151 -0
- package/dist/cjs/components/KeepAliveTabs.less +23 -0
- package/dist/cjs/components/KeepAliveTabs.tpl +136 -0
- package/dist/cjs/components/Loading.css +19 -0
- package/dist/cjs/components/LoadingSvg.tpl +14 -0
- package/dist/cjs/components/MenuFooter.css +13 -0
- package/dist/cjs/components/MenuFooter.tpl +24 -0
- package/dist/cjs/components/MyColorPicker.tpl +19 -0
- package/dist/cjs/components/MyFooterToolbar.css +6 -0
- package/dist/cjs/components/MyFooterToolbar.tpl +56 -0
- package/dist/cjs/components/MyPageContainer.tpl +43 -0
- package/dist/cjs/components/MyReactEcharts.tpl +11 -0
- package/dist/cjs/components/MySelect.tpl +267 -0
- package/dist/cjs/components/MySelectLang.tpl +22 -0
- package/dist/cjs/components/MySetps.tpl +85 -0
- package/dist/cjs/components/MyTagList.tpl +57 -0
- package/dist/cjs/components/MyUpload.less +39 -0
- package/dist/cjs/components/MyUpload.tpl +609 -0
- package/dist/cjs/components/NoFoundPage.tpl +46 -0
- package/dist/cjs/components/PDFWrapper.tpl +96 -0
- package/dist/cjs/components/PageLoading.tpl +16 -0
- package/dist/cjs/components/PermissionSelect.tpl +230 -0
- package/dist/cjs/components/ProFormUTCDatePicker.tpl +20 -0
- package/dist/cjs/components/ProFormUTCRangePicker.tpl +20 -0
- package/dist/cjs/components/PromiseRender.tpl +93 -0
- package/dist/cjs/components/QrCodeModal.tpl +19 -0
- package/dist/cjs/components/RandomAvatar.tpl +34 -0
- package/dist/cjs/components/RefDrawerForm.tpl +75 -0
- package/dist/cjs/components/ReportTable.tpl +336 -0
- package/dist/cjs/components/Secured.tpl +66 -0
- package/dist/cjs/components/ThemeSwitch.tpl +74 -0
- package/dist/cjs/components/TimeTypeSelect.tpl +35 -0
- package/dist/cjs/components/TipsTableTitle.tpl +37 -0
- package/dist/cjs/components/UTCDatePicker.tpl +107 -0
- package/dist/cjs/components/UTCRangePicker.tpl +142 -0
- package/dist/cjs/components/UpdateForm.tpl +32 -0
- package/dist/cjs/components/UserDisable.tpl +58 -0
- package/dist/cjs/components/UserNoPagePermission.tpl +58 -0
- package/dist/cjs/components/UserNoPermission.tpl +58 -0
- package/dist/cjs/components/ViewTableItemDrawer.tpl +29 -0
- package/dist/cjs/components/VolumeFormItem.tpl +59 -0
- package/dist/cjs/components/WangEditor.css +53 -0
- package/dist/cjs/components/WangEditor.tpl +174 -0
- package/dist/cjs/components/WangEditorView.tpl +24 -0
- package/dist/cjs/components/fileTypeMap.tpl +96 -0
- package/dist/cjs/components/renderAuthorize.tpl +44 -0
- package/dist/cjs/context/KeepAliveTabs.tpl +13 -0
- package/dist/cjs/context/index.tpl +1 -0
- package/dist/cjs/hooks/useAction.tpl +126 -0
- package/dist/cjs/hooks/useActionLocales.tpl +108 -0
- package/dist/cjs/hooks/useAuthority.tpl +27 -0
- package/dist/cjs/hooks/useColumnTitle.tpl +47 -0
- package/dist/cjs/hooks/useFormatLocale.tpl +82 -0
- package/dist/cjs/hooks/useKeepAliveTabs.tpl +255 -0
- package/dist/cjs/hooks/useMatchRoute.tpl +76 -0
- package/dist/cjs/hooks/useMemoizedFn.tpl +32 -0
- package/dist/cjs/hooks/useOutlet.tpl +20 -0
- package/dist/cjs/hooks/usePageExport.tpl +155 -0
- package/dist/cjs/hooks/useQueryTableList.tpl +91 -0
- package/dist/cjs/hooks/useRouteAuth.tpl +122 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.js +122 -0
- package/dist/cjs/locales/en-US.d.ts +163 -0
- package/dist/cjs/locales/en-US.js +16 -0
- package/dist/cjs/locales/enUS/ActionLogDrawer.d.ts +6 -0
- package/dist/cjs/locales/enUS/ActionLogDrawer.js +11 -0
- package/dist/cjs/locales/enUS/DynamicIconModal.d.ts +4 -0
- package/dist/cjs/locales/enUS/DynamicIconModal.js +9 -0
- package/dist/cjs/locales/enUS/EditMultiLangForm.d.ts +16 -0
- package/dist/cjs/locales/enUS/EditMultiLangForm.js +21 -0
- package/dist/cjs/locales/enUS/File.d.ts +54 -0
- package/dist/cjs/locales/enUS/File.js +60 -0
- package/dist/cjs/locales/enUS/GlobalFooter.d.ts +4 -0
- package/dist/cjs/locales/enUS/GlobalFooter.js +9 -0
- package/dist/cjs/locales/enUS/GlobalHeader.d.ts +10 -0
- package/dist/cjs/locales/enUS/GlobalHeader.js +15 -0
- package/dist/cjs/locales/enUS/MyFooterToolbar.d.ts +5 -0
- package/dist/cjs/locales/enUS/MyFooterToolbar.js +10 -0
- package/dist/cjs/locales/enUS/PermissionSelect.d.ts +4 -0
- package/dist/cjs/locales/enUS/PermissionSelect.js +9 -0
- package/dist/cjs/locales/enUS/TimeTypeSelect.d.ts +6 -0
- package/dist/cjs/locales/enUS/TimeTypeSelect.js +11 -0
- package/dist/cjs/locales/enUS/common.d.ts +74 -0
- package/dist/cjs/locales/enUS/common.js +82 -0
- package/dist/cjs/locales/enUS/index.d.ts +163 -0
- package/dist/cjs/locales/enUS/index.js +25 -0
- package/dist/cjs/locales/enUS/pages.d.ts +10 -0
- package/dist/cjs/locales/enUS/pages.js +15 -0
- package/dist/cjs/locales/th-TH.d.ts +163 -0
- package/dist/cjs/locales/th-TH.js +16 -0
- package/dist/cjs/locales/zh-CN.d.ts +163 -0
- package/dist/cjs/locales/zh-CN.js +16 -0
- package/dist/cjs/locales/zh-TW.d.ts +162 -0
- package/dist/cjs/locales/zh-TW.js +16 -0
- package/dist/cjs/locales/zhCN/ActionLogDrawer.d.ts +6 -0
- package/dist/cjs/locales/zhCN/ActionLogDrawer.js +11 -0
- package/dist/cjs/locales/zhCN/DynamicIconModal.d.ts +4 -0
- package/dist/cjs/locales/zhCN/DynamicIconModal.js +9 -0
- package/dist/cjs/locales/zhCN/EditMultiLangForm.d.ts +16 -0
- package/dist/cjs/locales/zhCN/EditMultiLangForm.js +21 -0
- package/dist/cjs/locales/zhCN/File.d.ts +54 -0
- package/dist/cjs/locales/zhCN/File.js +60 -0
- package/dist/cjs/locales/zhCN/GlobalFooter.d.ts +4 -0
- package/dist/cjs/locales/zhCN/GlobalFooter.js +9 -0
- package/dist/cjs/locales/zhCN/GlobalHeader.d.ts +10 -0
- package/dist/cjs/locales/zhCN/GlobalHeader.js +15 -0
- package/dist/cjs/locales/zhCN/MyFooterToolbar.d.ts +5 -0
- package/dist/cjs/locales/zhCN/MyFooterToolbar.js +10 -0
- package/dist/cjs/locales/zhCN/PermissionSelect.d.ts +4 -0
- package/dist/cjs/locales/zhCN/PermissionSelect.js +9 -0
- package/dist/cjs/locales/zhCN/TimeTypeSelect.d.ts +6 -0
- package/dist/cjs/locales/zhCN/TimeTypeSelect.js +11 -0
- package/dist/cjs/locales/zhCN/common.d.ts +74 -0
- package/dist/cjs/locales/zhCN/common.js +82 -0
- package/dist/cjs/locales/zhCN/index.d.ts +163 -0
- package/dist/cjs/locales/zhCN/index.js +25 -0
- package/dist/cjs/locales/zhCN/pages.d.ts +10 -0
- package/dist/cjs/locales/zhCN/pages.js +15 -0
- package/dist/cjs/locales/zhTW/ActionLogDrawer.d.ts +6 -0
- package/dist/cjs/locales/zhTW/ActionLogDrawer.js +11 -0
- package/dist/cjs/locales/zhTW/DynamicIconModal.d.ts +4 -0
- package/dist/cjs/locales/zhTW/DynamicIconModal.js +9 -0
- package/dist/cjs/locales/zhTW/EditMultiLangForm.d.ts +16 -0
- package/dist/cjs/locales/zhTW/EditMultiLangForm.js +21 -0
- package/dist/cjs/locales/zhTW/File.d.ts +53 -0
- package/dist/cjs/locales/zhTW/File.js +59 -0
- package/dist/cjs/locales/zhTW/GlobalFooter.d.ts +4 -0
- package/dist/cjs/locales/zhTW/GlobalFooter.js +9 -0
- package/dist/cjs/locales/zhTW/GlobalHeader.d.ts +10 -0
- package/dist/cjs/locales/zhTW/GlobalHeader.js +15 -0
- package/dist/cjs/locales/zhTW/MyFooterToolbar.d.ts +5 -0
- package/dist/cjs/locales/zhTW/MyFooterToolbar.js +10 -0
- package/dist/cjs/locales/zhTW/PermissionSelect.d.ts +4 -0
- package/dist/cjs/locales/zhTW/PermissionSelect.js +9 -0
- package/dist/cjs/locales/zhTW/TimeTypeSelect.d.ts +6 -0
- package/dist/cjs/locales/zhTW/TimeTypeSelect.js +11 -0
- package/dist/cjs/locales/zhTW/common.d.ts +74 -0
- package/dist/cjs/locales/zhTW/common.js +82 -0
- package/dist/cjs/locales/zhTW/index.d.ts +162 -0
- package/dist/cjs/locales/zhTW/index.js +25 -0
- package/dist/cjs/locales/zhTW/pages.d.ts +10 -0
- package/dist/cjs/locales/zhTW/pages.js +15 -0
- package/dist/cjs/services/index.tpl +160 -0
- package/dist/cjs/types/ActionLogDrawerTypes.d.ts +1 -0
- package/dist/cjs/types/ActionLogDrawerTypes.js +7 -0
- package/dist/cjs/types/AvatarDropdownTypes.d.ts +1 -0
- package/dist/cjs/types/AvatarDropdownTypes.js +7 -0
- package/dist/cjs/types/CrudTableTypes.d.ts +1 -0
- package/dist/cjs/types/CrudTableTypes.js +7 -0
- package/dist/cjs/types/DatePickerTypes.d.ts +1 -0
- package/dist/cjs/types/DatePickerTypes.js +7 -0
- package/dist/cjs/types/DicDropDownListTypes.d.ts +1 -0
- package/dist/cjs/types/DicDropDownListTypes.js +7 -0
- package/dist/cjs/types/DndTabsTypes.d.ts +1 -0
- package/dist/cjs/types/DndTabsTypes.js +7 -0
- package/dist/cjs/types/DndTagTypes.d.ts +1 -0
- package/dist/cjs/types/DndTagTypes.js +7 -0
- package/dist/cjs/types/DropdownButtonTypes.d.ts +2 -0
- package/dist/cjs/types/DropdownButtonTypes.js +8 -0
- package/dist/cjs/types/DynamicIconTypes.d.ts +1 -0
- package/dist/cjs/types/DynamicIconTypes.js +7 -0
- package/dist/cjs/types/EditMultiLangFormTypes.d.ts +1 -0
- package/dist/cjs/types/EditMultiLangFormTypes.js +7 -0
- package/dist/cjs/types/ExportPageWrapperTypes.d.ts +1 -0
- package/dist/cjs/types/ExportPageWrapperTypes.js +7 -0
- package/dist/cjs/types/GlobalHeaderTypes.d.ts +1 -0
- package/dist/cjs/types/GlobalHeaderTypes.js +7 -0
- package/dist/cjs/types/HeaderSearchTypes.d.ts +1 -0
- package/dist/cjs/types/HeaderSearchTypes.js +7 -0
- package/dist/cjs/types/HighlightStrTypes.d.ts +1 -0
- package/dist/cjs/types/HighlightStrTypes.js +7 -0
- package/dist/cjs/types/ImportDataUploadTypes.d.ts +1 -0
- package/dist/cjs/types/ImportDataUploadTypes.js +7 -0
- package/dist/cjs/types/ImportExeclTypes.d.ts +1 -0
- package/dist/cjs/types/ImportExeclTypes.js +7 -0
- package/dist/cjs/types/KeepAliveTabsTypes.d.ts +1 -0
- package/dist/cjs/types/KeepAliveTabsTypes.js +7 -0
- package/dist/cjs/types/MenuFooterTypes.d.ts +1 -0
- package/dist/cjs/types/MenuFooterTypes.js +7 -0
- package/dist/cjs/types/MyFooterToolbarTypes.d.ts +1 -0
- package/dist/cjs/types/MyFooterToolbarTypes.js +7 -0
- package/dist/cjs/types/MyPageContainerTypes.d.ts +1 -0
- package/dist/cjs/types/MyPageContainerTypes.js +7 -0
- package/dist/cjs/types/MySelectLangTypes.d.ts +1 -0
- package/dist/cjs/types/MySelectLangTypes.js +7 -0
- package/dist/cjs/types/MySelectTypes.d.ts +1 -0
- package/dist/cjs/types/MySelectTypes.js +7 -0
- package/dist/cjs/types/MySetpsTypes.d.ts +1 -0
- package/dist/cjs/types/MySetpsTypes.js +7 -0
- package/dist/cjs/types/MyTagListTypes.d.ts +1 -0
- package/dist/cjs/types/MyTagListTypes.js +7 -0
- package/dist/cjs/types/MyUploadTypes.d.ts +1 -0
- package/dist/cjs/types/MyUploadTypes.js +7 -0
- package/dist/cjs/types/PermissionSelectTypes.d.ts +1 -0
- package/dist/cjs/types/PermissionSelectTypes.js +7 -0
- package/dist/cjs/types/QrCodeModalTypes.d.ts +1 -0
- package/dist/cjs/types/QrCodeModalTypes.js +7 -0
- package/dist/cjs/types/RandomAvatarTypes.d.ts +1 -0
- package/dist/cjs/types/RandomAvatarTypes.js +7 -0
- package/dist/cjs/types/RefDrawerFormTypes.d.ts +1 -0
- package/dist/cjs/types/RefDrawerFormTypes.js +7 -0
- package/dist/cjs/types/ReportTableTypes.d.ts +1 -0
- package/dist/cjs/types/ReportTableTypes.js +7 -0
- package/dist/cjs/types/ThemeSwitchTypes.d.ts +1 -0
- package/dist/cjs/types/ThemeSwitchTypes.js +7 -0
- package/dist/cjs/types/ViewTableItemDrawerTypes.d.ts +1 -0
- package/dist/cjs/types/ViewTableItemDrawerTypes.js +7 -0
- package/dist/cjs/types/VolumeFormItemTypes.d.ts +1 -0
- package/dist/cjs/types/VolumeFormItemTypes.js +7 -0
- package/dist/cjs/types/WangEditorTypes.d.ts +1 -0
- package/dist/cjs/types/WangEditorTypes.js +7 -0
- package/dist/cjs/types/index.d.ts +35 -0
- package/dist/cjs/types/index.js +250 -0
- package/dist/cjs/types/servicesTypes.d.ts +1 -0
- package/dist/cjs/types/servicesTypes.js +7 -0
- package/dist/cjs/utils/Authorized.tpl +17 -0
- package/dist/cjs/utils/authority.tpl +51 -0
- package/dist/cjs/utils/authorityFunction.tpl +17 -0
- package/dist/cjs/utils/excelHelper.tpl +825 -0
- package/dist/cjs/utils/exportPage.tpl +784 -0
- package/dist/cjs/utils/fileHelper.tpl +251 -0
- package/dist/cjs/utils/importHelper.tpl +283 -0
- package/dist/cjs/utils/utils.tpl +26 -0
- package/dist/cjs/utils/xmlRequest.tpl +92 -0
- package/dist/cjs/writeTmpFile/index.d.ts +5 -0
- package/dist/cjs/writeTmpFile/index.js +34 -0
- package/dist/cjs/writeTmpFile/runtime.d.ts +5 -0
- package/dist/cjs/writeTmpFile/runtime.js +15 -0
- package/dist/cjs/writeTmpFile/writeConstants.d.ts +6 -0
- package/dist/cjs/writeTmpFile/writeConstants.js +13 -0
- package/dist/cjs/writeTmpFile/writeIndex.d.ts +5 -0
- package/dist/cjs/writeTmpFile/writeIndex.js +10 -0
- package/dist/cjs/writeTmpFile/writeTypes.d.ts +5 -0
- package/dist/cjs/writeTmpFile/writeTypes.js +12 -0
- package/dist/esm/components/ActionLogDrawer.tpl +148 -0
- package/dist/esm/components/AddDrawerForm.tpl +38 -0
- package/dist/esm/components/AuthorizeRender.tpl +11 -0
- package/dist/esm/components/Authorized.tpl +39 -0
- package/dist/esm/components/AuthorizedRoute.tpl +33 -0
- package/dist/esm/components/AvatarDropdown.tpl +101 -0
- package/dist/esm/components/CheckPermissions.tpl +100 -0
- package/dist/esm/components/CopyButton.tpl +49 -0
- package/dist/esm/components/CrudTable.tpl +650 -0
- package/dist/esm/components/DicDropDownList.tpl +60 -0
- package/dist/esm/components/DndTabs.tpl +159 -0
- package/dist/esm/components/DndTag.tpl +89 -0
- package/dist/esm/components/DropdownButton.tpl +123 -0
- package/dist/esm/components/DynamicIcon.tpl +73 -0
- package/dist/esm/components/DynamicIconModal.tpl +196 -0
- package/dist/esm/components/EditMultiLangForm.tpl +366 -0
- package/dist/esm/components/ExportPageWrapper.tpl +224 -0
- package/dist/esm/components/FlieListModal.tpl +79 -0
- package/dist/esm/components/FormUpload.tpl +561 -0
- package/dist/esm/components/GlobalFooter.tpl +21 -0
- package/dist/esm/components/GlobalHeader.less +51 -0
- package/dist/esm/components/GlobalHeader.tpl +313 -0
- package/dist/esm/components/HeaderSearch.less +32 -0
- package/dist/esm/components/HeaderSearch.tpl +92 -0
- package/dist/esm/components/HighlightStr.tpl +41 -0
- package/dist/esm/components/ImportDataUpload.tpl +94 -0
- package/dist/esm/components/ImportExecl.less +10 -0
- package/dist/esm/components/ImportExecl.tpl +108 -0
- package/dist/esm/components/KeepAliveDndTabs.tpl +151 -0
- package/dist/esm/components/KeepAliveTabs.less +23 -0
- package/dist/esm/components/KeepAliveTabs.tpl +136 -0
- package/dist/esm/components/Loading.css +19 -0
- package/dist/esm/components/LoadingSvg.tpl +14 -0
- package/dist/esm/components/MenuFooter.css +13 -0
- package/dist/esm/components/MenuFooter.tpl +24 -0
- package/dist/esm/components/MyColorPicker.tpl +19 -0
- package/dist/esm/components/MyFooterToolbar.css +6 -0
- package/dist/esm/components/MyFooterToolbar.tpl +56 -0
- package/dist/esm/components/MyPageContainer.tpl +43 -0
- package/dist/esm/components/MyReactEcharts.tpl +11 -0
- package/dist/esm/components/MySelect.tpl +267 -0
- package/dist/esm/components/MySelectLang.tpl +22 -0
- package/dist/esm/components/MySetps.tpl +85 -0
- package/dist/esm/components/MyTagList.tpl +57 -0
- package/dist/esm/components/MyUpload.less +39 -0
- package/dist/esm/components/MyUpload.tpl +609 -0
- package/dist/esm/components/NoFoundPage.tpl +46 -0
- package/dist/esm/components/PDFWrapper.tpl +96 -0
- package/dist/esm/components/PageLoading.tpl +16 -0
- package/dist/esm/components/PermissionSelect.tpl +230 -0
- package/dist/esm/components/ProFormUTCDatePicker.tpl +20 -0
- package/dist/esm/components/ProFormUTCRangePicker.tpl +20 -0
- package/dist/esm/components/PromiseRender.tpl +93 -0
- package/dist/esm/components/QrCodeModal.tpl +19 -0
- package/dist/esm/components/RandomAvatar.tpl +34 -0
- package/dist/esm/components/RefDrawerForm.tpl +75 -0
- package/dist/esm/components/ReportTable.tpl +336 -0
- package/dist/esm/components/Secured.tpl +66 -0
- package/dist/esm/components/ThemeSwitch.tpl +74 -0
- package/dist/esm/components/TimeTypeSelect.tpl +35 -0
- package/dist/esm/components/TipsTableTitle.tpl +37 -0
- package/dist/esm/components/UTCDatePicker.tpl +107 -0
- package/dist/esm/components/UTCRangePicker.tpl +142 -0
- package/dist/esm/components/UpdateForm.tpl +32 -0
- package/dist/esm/components/UserDisable.tpl +58 -0
- package/dist/esm/components/UserNoPagePermission.tpl +58 -0
- package/dist/esm/components/UserNoPermission.tpl +58 -0
- package/dist/esm/components/ViewTableItemDrawer.tpl +29 -0
- package/dist/esm/components/VolumeFormItem.tpl +59 -0
- package/dist/esm/components/WangEditor.css +53 -0
- package/dist/esm/components/WangEditor.tpl +174 -0
- package/dist/esm/components/WangEditorView.tpl +24 -0
- package/dist/esm/components/fileTypeMap.tpl +96 -0
- package/dist/esm/components/renderAuthorize.tpl +44 -0
- package/dist/esm/context/KeepAliveTabs.tpl +13 -0
- package/dist/esm/context/index.tpl +1 -0
- package/dist/esm/hooks/useAction.tpl +126 -0
- package/dist/esm/hooks/useActionLocales.tpl +108 -0
- package/dist/esm/hooks/useAuthority.tpl +27 -0
- package/dist/esm/hooks/useColumnTitle.tpl +47 -0
- package/dist/esm/hooks/useFormatLocale.tpl +82 -0
- package/dist/esm/hooks/useKeepAliveTabs.tpl +255 -0
- package/dist/esm/hooks/useMatchRoute.tpl +76 -0
- package/dist/esm/hooks/useMemoizedFn.tpl +32 -0
- package/dist/esm/hooks/useOutlet.tpl +20 -0
- package/dist/esm/hooks/usePageExport.tpl +155 -0
- package/dist/esm/hooks/useQueryTableList.tpl +91 -0
- package/dist/esm/hooks/useRouteAuth.tpl +122 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +115 -0
- package/dist/esm/locales/en-US.d.ts +163 -0
- package/dist/esm/locales/en-US.js +9 -0
- package/dist/esm/locales/enUS/ActionLogDrawer.d.ts +6 -0
- package/dist/esm/locales/enUS/ActionLogDrawer.js +5 -0
- package/dist/esm/locales/enUS/DynamicIconModal.d.ts +4 -0
- package/dist/esm/locales/enUS/DynamicIconModal.js +3 -0
- package/dist/esm/locales/enUS/EditMultiLangForm.d.ts +16 -0
- package/dist/esm/locales/enUS/EditMultiLangForm.js +15 -0
- package/dist/esm/locales/enUS/File.d.ts +54 -0
- package/dist/esm/locales/enUS/File.js +54 -0
- package/dist/esm/locales/enUS/GlobalFooter.d.ts +4 -0
- package/dist/esm/locales/enUS/GlobalFooter.js +3 -0
- package/dist/esm/locales/enUS/GlobalHeader.d.ts +10 -0
- package/dist/esm/locales/enUS/GlobalHeader.js +9 -0
- package/dist/esm/locales/enUS/MyFooterToolbar.d.ts +5 -0
- package/dist/esm/locales/enUS/MyFooterToolbar.js +4 -0
- package/dist/esm/locales/enUS/PermissionSelect.d.ts +4 -0
- package/dist/esm/locales/enUS/PermissionSelect.js +3 -0
- package/dist/esm/locales/enUS/TimeTypeSelect.d.ts +6 -0
- package/dist/esm/locales/enUS/TimeTypeSelect.js +5 -0
- package/dist/esm/locales/enUS/common.d.ts +74 -0
- package/dist/esm/locales/enUS/common.js +76 -0
- package/dist/esm/locales/enUS/index.d.ts +163 -0
- package/dist/esm/locales/enUS/index.js +18 -0
- package/dist/esm/locales/enUS/pages.d.ts +10 -0
- package/dist/esm/locales/enUS/pages.js +9 -0
- package/dist/esm/locales/th-TH.d.ts +163 -0
- package/dist/esm/locales/th-TH.js +9 -0
- package/dist/esm/locales/zh-CN.d.ts +163 -0
- package/dist/esm/locales/zh-CN.js +9 -0
- package/dist/esm/locales/zh-TW.d.ts +162 -0
- package/dist/esm/locales/zh-TW.js +9 -0
- package/dist/esm/locales/zhCN/ActionLogDrawer.d.ts +6 -0
- package/dist/esm/locales/zhCN/ActionLogDrawer.js +5 -0
- package/dist/esm/locales/zhCN/DynamicIconModal.d.ts +4 -0
- package/dist/esm/locales/zhCN/DynamicIconModal.js +3 -0
- package/dist/esm/locales/zhCN/EditMultiLangForm.d.ts +16 -0
- package/dist/esm/locales/zhCN/EditMultiLangForm.js +15 -0
- package/dist/esm/locales/zhCN/File.d.ts +54 -0
- package/dist/esm/locales/zhCN/File.js +54 -0
- package/dist/esm/locales/zhCN/GlobalFooter.d.ts +4 -0
- package/dist/esm/locales/zhCN/GlobalFooter.js +3 -0
- package/dist/esm/locales/zhCN/GlobalHeader.d.ts +10 -0
- package/dist/esm/locales/zhCN/GlobalHeader.js +9 -0
- package/dist/esm/locales/zhCN/MyFooterToolbar.d.ts +5 -0
- package/dist/esm/locales/zhCN/MyFooterToolbar.js +4 -0
- package/dist/esm/locales/zhCN/PermissionSelect.d.ts +4 -0
- package/dist/esm/locales/zhCN/PermissionSelect.js +3 -0
- package/dist/esm/locales/zhCN/TimeTypeSelect.d.ts +6 -0
- package/dist/esm/locales/zhCN/TimeTypeSelect.js +5 -0
- package/dist/esm/locales/zhCN/common.d.ts +74 -0
- package/dist/esm/locales/zhCN/common.js +76 -0
- package/dist/esm/locales/zhCN/index.d.ts +163 -0
- package/dist/esm/locales/zhCN/index.js +18 -0
- package/dist/esm/locales/zhCN/pages.d.ts +10 -0
- package/dist/esm/locales/zhCN/pages.js +9 -0
- package/dist/esm/locales/zhTW/ActionLogDrawer.d.ts +6 -0
- package/dist/esm/locales/zhTW/ActionLogDrawer.js +5 -0
- package/dist/esm/locales/zhTW/DynamicIconModal.d.ts +4 -0
- package/dist/esm/locales/zhTW/DynamicIconModal.js +3 -0
- package/dist/esm/locales/zhTW/EditMultiLangForm.d.ts +16 -0
- package/dist/esm/locales/zhTW/EditMultiLangForm.js +15 -0
- package/dist/esm/locales/zhTW/File.d.ts +53 -0
- package/dist/esm/locales/zhTW/File.js +53 -0
- package/dist/esm/locales/zhTW/GlobalFooter.d.ts +4 -0
- package/dist/esm/locales/zhTW/GlobalFooter.js +3 -0
- package/dist/esm/locales/zhTW/GlobalHeader.d.ts +10 -0
- package/dist/esm/locales/zhTW/GlobalHeader.js +9 -0
- package/dist/esm/locales/zhTW/MyFooterToolbar.d.ts +5 -0
- package/dist/esm/locales/zhTW/MyFooterToolbar.js +4 -0
- package/dist/esm/locales/zhTW/PermissionSelect.d.ts +4 -0
- package/dist/esm/locales/zhTW/PermissionSelect.js +3 -0
- package/dist/esm/locales/zhTW/TimeTypeSelect.d.ts +6 -0
- package/dist/esm/locales/zhTW/TimeTypeSelect.js +5 -0
- package/dist/esm/locales/zhTW/common.d.ts +74 -0
- package/dist/esm/locales/zhTW/common.js +76 -0
- package/dist/esm/locales/zhTW/index.d.ts +162 -0
- package/dist/esm/locales/zhTW/index.js +18 -0
- package/dist/esm/locales/zhTW/pages.d.ts +10 -0
- package/dist/esm/locales/zhTW/pages.js +9 -0
- package/dist/esm/services/index.tpl +160 -0
- package/dist/esm/types/ActionLogDrawerTypes.d.ts +1 -0
- package/dist/esm/types/ActionLogDrawerTypes.js +1 -0
- package/dist/esm/types/AvatarDropdownTypes.d.ts +1 -0
- package/dist/esm/types/AvatarDropdownTypes.js +1 -0
- package/dist/esm/types/CrudTableTypes.d.ts +1 -0
- package/dist/esm/types/CrudTableTypes.js +1 -0
- package/dist/esm/types/DatePickerTypes.d.ts +1 -0
- package/dist/esm/types/DatePickerTypes.js +1 -0
- package/dist/esm/types/DicDropDownListTypes.d.ts +1 -0
- package/dist/esm/types/DicDropDownListTypes.js +1 -0
- package/dist/esm/types/DndTabsTypes.d.ts +1 -0
- package/dist/esm/types/DndTabsTypes.js +1 -0
- package/dist/esm/types/DndTagTypes.d.ts +1 -0
- package/dist/esm/types/DndTagTypes.js +1 -0
- package/dist/esm/types/DropdownButtonTypes.d.ts +2 -0
- package/dist/esm/types/DropdownButtonTypes.js +2 -0
- package/dist/esm/types/DynamicIconTypes.d.ts +1 -0
- package/dist/esm/types/DynamicIconTypes.js +1 -0
- package/dist/esm/types/EditMultiLangFormTypes.d.ts +1 -0
- package/dist/esm/types/EditMultiLangFormTypes.js +1 -0
- package/dist/esm/types/ExportPageWrapperTypes.d.ts +1 -0
- package/dist/esm/types/ExportPageWrapperTypes.js +1 -0
- package/dist/esm/types/GlobalHeaderTypes.d.ts +1 -0
- package/dist/esm/types/GlobalHeaderTypes.js +1 -0
- package/dist/esm/types/HeaderSearchTypes.d.ts +1 -0
- package/dist/esm/types/HeaderSearchTypes.js +1 -0
- package/dist/esm/types/HighlightStrTypes.d.ts +1 -0
- package/dist/esm/types/HighlightStrTypes.js +1 -0
- package/dist/esm/types/ImportDataUploadTypes.d.ts +1 -0
- package/dist/esm/types/ImportDataUploadTypes.js +1 -0
- package/dist/esm/types/ImportExeclTypes.d.ts +1 -0
- package/dist/esm/types/ImportExeclTypes.js +1 -0
- package/dist/esm/types/KeepAliveTabsTypes.d.ts +1 -0
- package/dist/esm/types/KeepAliveTabsTypes.js +1 -0
- package/dist/esm/types/MenuFooterTypes.d.ts +1 -0
- package/dist/esm/types/MenuFooterTypes.js +1 -0
- package/dist/esm/types/MyFooterToolbarTypes.d.ts +1 -0
- package/dist/esm/types/MyFooterToolbarTypes.js +1 -0
- package/dist/esm/types/MyPageContainerTypes.d.ts +1 -0
- package/dist/esm/types/MyPageContainerTypes.js +1 -0
- package/dist/esm/types/MySelectLangTypes.d.ts +1 -0
- package/dist/esm/types/MySelectLangTypes.js +1 -0
- package/dist/esm/types/MySelectTypes.d.ts +1 -0
- package/dist/esm/types/MySelectTypes.js +1 -0
- package/dist/esm/types/MySetpsTypes.d.ts +1 -0
- package/dist/esm/types/MySetpsTypes.js +1 -0
- package/dist/esm/types/MyTagListTypes.d.ts +1 -0
- package/dist/esm/types/MyTagListTypes.js +1 -0
- package/dist/esm/types/MyUploadTypes.d.ts +1 -0
- package/dist/esm/types/MyUploadTypes.js +1 -0
- package/dist/esm/types/PermissionSelectTypes.d.ts +1 -0
- package/dist/esm/types/PermissionSelectTypes.js +1 -0
- package/dist/esm/types/QrCodeModalTypes.d.ts +1 -0
- package/dist/esm/types/QrCodeModalTypes.js +1 -0
- package/dist/esm/types/RandomAvatarTypes.d.ts +1 -0
- package/dist/esm/types/RandomAvatarTypes.js +1 -0
- package/dist/esm/types/RefDrawerFormTypes.d.ts +1 -0
- package/dist/esm/types/RefDrawerFormTypes.js +1 -0
- package/dist/esm/types/ReportTableTypes.d.ts +1 -0
- package/dist/esm/types/ReportTableTypes.js +1 -0
- package/dist/esm/types/ThemeSwitchTypes.d.ts +1 -0
- package/dist/esm/types/ThemeSwitchTypes.js +1 -0
- package/dist/esm/types/ViewTableItemDrawerTypes.d.ts +1 -0
- package/dist/esm/types/ViewTableItemDrawerTypes.js +1 -0
- package/dist/esm/types/VolumeFormItemTypes.d.ts +1 -0
- package/dist/esm/types/VolumeFormItemTypes.js +1 -0
- package/dist/esm/types/WangEditorTypes.d.ts +1 -0
- package/dist/esm/types/WangEditorTypes.js +1 -0
- package/dist/esm/types/index.d.ts +35 -0
- package/dist/esm/types/index.js +35 -0
- package/dist/esm/types/servicesTypes.d.ts +1 -0
- package/dist/esm/types/servicesTypes.js +1 -0
- package/dist/esm/utils/Authorized.tpl +17 -0
- package/dist/esm/utils/authority.tpl +51 -0
- package/dist/esm/utils/authorityFunction.tpl +17 -0
- package/dist/esm/utils/excelHelper.tpl +825 -0
- package/dist/esm/utils/exportPage.tpl +784 -0
- package/dist/esm/utils/fileHelper.tpl +251 -0
- package/dist/esm/utils/importHelper.tpl +283 -0
- package/dist/esm/utils/utils.tpl +26 -0
- package/dist/esm/utils/xmlRequest.tpl +92 -0
- package/dist/esm/writeTmpFile/index.d.ts +5 -0
- package/dist/esm/writeTmpFile/index.js +5 -0
- package/dist/esm/writeTmpFile/runtime.d.ts +5 -0
- package/dist/esm/writeTmpFile/runtime.js +8 -0
- package/dist/esm/writeTmpFile/writeConstants.d.ts +6 -0
- package/dist/esm/writeTmpFile/writeConstants.js +7 -0
- package/dist/esm/writeTmpFile/writeIndex.d.ts +5 -0
- package/dist/esm/writeTmpFile/writeIndex.js +4 -0
- package/dist/esm/writeTmpFile/writeTypes.d.ts +5 -0
- package/dist/esm/writeTmpFile/writeTypes.js +7 -0
- package/package.json +58 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
// This file is generated by Umi automatically
|
|
3
|
+
// DO NOT CHANGE IT MANUALLY!
|
|
4
|
+
import type { DragEndEvent, DragStartEvent } from '@dnd-kit/core';
|
|
5
|
+
import {
|
|
6
|
+
closestCenter,
|
|
7
|
+
defaultDropAnimationSideEffects,
|
|
8
|
+
DndContext,
|
|
9
|
+
DragOverlay,
|
|
10
|
+
PointerSensor,
|
|
11
|
+
useSensor,
|
|
12
|
+
} from '@dnd-kit/core';
|
|
13
|
+
import { arrayMove, horizontalListSortingStrategy, SortableContext, useSortable } from '@dnd-kit/sortable';
|
|
14
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
15
|
+
import { Tabs } from 'antd';
|
|
16
|
+
import React, { useCallback, useMemo, useState } from 'react';
|
|
17
|
+
import { DndTabsProps } from "../types";
|
|
18
|
+
|
|
19
|
+
interface DraggableTabPaneProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
20
|
+
'data-node-key': string;
|
|
21
|
+
'data-disabled'?: boolean;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const DraggableTabNode: React.FC<Readonly<DraggableTabPaneProps>> = (props) => {
|
|
25
|
+
const isDisabled = props['data-disabled'];
|
|
26
|
+
|
|
27
|
+
// 如果禁用拖动,直接返回原始节点
|
|
28
|
+
if (isDisabled) {
|
|
29
|
+
return React.cloneElement(props.children as React.ReactElement, {
|
|
30
|
+
style: {
|
|
31
|
+
...props.style,
|
|
32
|
+
cursor: 'default',
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
|
|
38
|
+
id: props['data-node-key'],
|
|
39
|
+
animateLayoutChanges: () => false, // 禁用布局动画可提高流畅度
|
|
40
|
+
disabled: isDisabled,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const style: React.CSSProperties = {
|
|
44
|
+
...props.style,
|
|
45
|
+
transform: CSS.Translate.toString(transform),
|
|
46
|
+
transition,
|
|
47
|
+
cursor: 'pointer', // 改为指针样式
|
|
48
|
+
opacity: isDragging ? 0.4 : 1, // 拖动时降低透明度
|
|
49
|
+
zIndex: isDragging ? 1 : 0,
|
|
50
|
+
position: 'relative',
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
return React.cloneElement(props.children as React.ReactElement, {
|
|
54
|
+
ref: setNodeRef,
|
|
55
|
+
style,
|
|
56
|
+
...attributes,
|
|
57
|
+
...listeners,
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* 拖动排序的Tabs组件
|
|
63
|
+
* @param param onDragSorted 拖拽排序后的回调, 修改items回显
|
|
64
|
+
*/
|
|
65
|
+
const DndTabs: React.FC<DndTabsProps> = (props) => {
|
|
66
|
+
const { items = [], onDragSorted, disabledKeys = [], ...restProps } = props;
|
|
67
|
+
const [activeId, setActiveId] = useState<string | null>(null);
|
|
68
|
+
|
|
69
|
+
// 创建传感器,优化拖拽体验
|
|
70
|
+
const pointerSensor = useSensor(PointerSensor, {
|
|
71
|
+
activationConstraint: {
|
|
72
|
+
distance: 8,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const sensors = useMemo(() => [pointerSensor], [pointerSensor]);
|
|
77
|
+
|
|
78
|
+
// 拖拽开始时的处理
|
|
79
|
+
const handleDragStart = useCallback((event: DragStartEvent) => {
|
|
80
|
+
if (event.active?.id) {
|
|
81
|
+
setActiveId(String(event.active.id));
|
|
82
|
+
}
|
|
83
|
+
}, []);
|
|
84
|
+
|
|
85
|
+
// 拖拽结束时的处理
|
|
86
|
+
const onDragEnd = useCallback(
|
|
87
|
+
(event: DragEndEvent) => {
|
|
88
|
+
setActiveId(null);
|
|
89
|
+
|
|
90
|
+
const { active, over } = event;
|
|
91
|
+
if (active?.id !== over?.id && items?.length && over?.id) {
|
|
92
|
+
const activeIndex = items.findIndex((i) => i.key === active.id);
|
|
93
|
+
const overIndex = items.findIndex((i) => i.key === over.id);
|
|
94
|
+
|
|
95
|
+
if (activeIndex !== -1 && overIndex !== -1) {
|
|
96
|
+
const newItems = arrayMove([...items], activeIndex, overIndex);
|
|
97
|
+
onDragSorted?.(newItems);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
[items, onDragSorted],
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
// 优化的drop动画配置
|
|
105
|
+
const dropAnimation = useMemo(
|
|
106
|
+
() => ({
|
|
107
|
+
sideEffects: defaultDropAnimationSideEffects({
|
|
108
|
+
styles: {
|
|
109
|
+
active: {
|
|
110
|
+
opacity: '0.4',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
}),
|
|
114
|
+
}),
|
|
115
|
+
[],
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
// 预先计算sortable项目的ID列表,排除禁用拖动的项
|
|
119
|
+
const sortableItems = useMemo(
|
|
120
|
+
() => items.filter(item => !disabledKeys.includes(item.key!)).map(i => i.key!),
|
|
121
|
+
[items, disabledKeys]
|
|
122
|
+
);
|
|
123
|
+
|
|
124
|
+
const renderTabBar = useCallback(
|
|
125
|
+
(tabBarProps: any, DefaultTabBar: any) => (
|
|
126
|
+
<DndContext
|
|
127
|
+
sensors={sensors}
|
|
128
|
+
onDragStart={handleDragStart}
|
|
129
|
+
onDragEnd={onDragEnd}
|
|
130
|
+
collisionDetection={closestCenter}
|
|
131
|
+
>
|
|
132
|
+
<SortableContext items={sortableItems} strategy={horizontalListSortingStrategy}>
|
|
133
|
+
<DefaultTabBar {...tabBarProps}>
|
|
134
|
+
{(node: any) => (
|
|
135
|
+
<DraggableTabNode
|
|
136
|
+
{...(node as React.ReactElement<DraggableTabPaneProps>).props}
|
|
137
|
+
key={node.key}
|
|
138
|
+
data-disabled={disabledKeys.includes(node.key)}
|
|
139
|
+
>
|
|
140
|
+
{node}
|
|
141
|
+
</DraggableTabNode>
|
|
142
|
+
)}
|
|
143
|
+
</DefaultTabBar>
|
|
144
|
+
</SortableContext>
|
|
145
|
+
<DragOverlay>
|
|
146
|
+
{activeId && !disabledKeys.includes(activeId) ? (
|
|
147
|
+
<div style={{ opacity: 0.8 }}>{items.find((item) => item.key === activeId)?.label}</div>
|
|
148
|
+
) : null}
|
|
149
|
+
</DragOverlay>
|
|
150
|
+
</DndContext>
|
|
151
|
+
),
|
|
152
|
+
[sensors, handleDragStart, onDragEnd, sortableItems, activeId, items, disabledKeys],
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
return <Tabs {...restProps} items={items} renderTabBar={renderTabBar} />;
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
// 使用React.memo优化渲染性能
|
|
159
|
+
export default React.memo(DndTabs);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { DragEndEvent } from '@dnd-kit/core';
|
|
2
|
+
import { closestCenter, DndContext, PointerSensor, useSensor, useSensors } from '@dnd-kit/core';
|
|
3
|
+
import { arrayMove, horizontalListSortingStrategy, SortableContext, useSortable } from '@dnd-kit/sortable';
|
|
4
|
+
import { Flex, Tag } from 'antd';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { DndTagProps, DraggableTagProps } from '../types';
|
|
7
|
+
|
|
8
|
+
const commonStyle: React.CSSProperties = {
|
|
9
|
+
cursor: 'move',
|
|
10
|
+
transition: 'unset', // Prevent element from shaking after drag
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const DraggableTag = <T extends Array<any>>(props: DraggableTagProps<T>) => {
|
|
14
|
+
const { keyNames, tag, tagProps = {}, itemRender } = props;
|
|
15
|
+
const { id, label } = keyNames;
|
|
16
|
+
const { listeners, transform, transition, isDragging, setNodeRef } = useSortable({ id: String(tag[id]) });
|
|
17
|
+
|
|
18
|
+
const style = transform
|
|
19
|
+
? {
|
|
20
|
+
...commonStyle,
|
|
21
|
+
transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,
|
|
22
|
+
transition: isDragging ? 'unset' : transition, // Improve performance/visual effect when dragging
|
|
23
|
+
}
|
|
24
|
+
: commonStyle;
|
|
25
|
+
|
|
26
|
+
const handleClose = (e: React.MouseEvent<HTMLSpanElement>) => {
|
|
27
|
+
tagProps.onClose?.(e, tag);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
return itemRender ? (
|
|
31
|
+
<div style={style} ref={setNodeRef} {...listeners}>
|
|
32
|
+
{React.cloneElement(itemRender(tag))}
|
|
33
|
+
</div>
|
|
34
|
+
) : (
|
|
35
|
+
<Tag {...tagProps} style={style} ref={setNodeRef} {...listeners} onClose={handleClose}>
|
|
36
|
+
{tag[label] as React.ReactNode}
|
|
37
|
+
</Tag>
|
|
38
|
+
);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const DndTag = <T extends Array<any>>(props: DndTagProps<T>) => {
|
|
42
|
+
const { keyNames, items, flexProps, tagProps, itemRender, onDragEnd, onBeforeDragEnd } = props;
|
|
43
|
+
const { id } = keyNames;
|
|
44
|
+
const sensors = useSensors(
|
|
45
|
+
useSensor(PointerSensor, {
|
|
46
|
+
// 鼠标激活距离,拖动超过5px才激活,避免覆盖Tag组件的点击(关闭)事件
|
|
47
|
+
activationConstraint: {
|
|
48
|
+
distance: 5,
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const handleDragEnd = (event: DragEndEvent) => {
|
|
54
|
+
// 自定义拖动逻辑
|
|
55
|
+
if (onBeforeDragEnd) {
|
|
56
|
+
onBeforeDragEnd(event);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const { active, over } = event;
|
|
61
|
+
if (!over) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (active.id !== over.id) {
|
|
66
|
+
// 处理好拖动顺序,返回外部更新items实现排序
|
|
67
|
+
const data = [...items];
|
|
68
|
+
const oldIndex = data.findIndex((item) => String(item[id]) === active.id);
|
|
69
|
+
const newIndex = data.findIndex((item) => String(item[id]) === over.id);
|
|
70
|
+
const newItems = arrayMove(items, oldIndex, newIndex);
|
|
71
|
+
|
|
72
|
+
onDragEnd?.(newItems as T);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<DndContext sensors={sensors} onDragEnd={handleDragEnd} collisionDetection={closestCenter}>
|
|
78
|
+
<SortableContext items={items.map((item) => String(item[id]))} strategy={horizontalListSortingStrategy}>
|
|
79
|
+
<Flex gap="4px 0" wrap {...flexProps}>
|
|
80
|
+
{items.map<React.ReactNode>((item) => (
|
|
81
|
+
<DraggableTag keyNames={keyNames} tag={item} key={String(item[id])} tagProps={tagProps} itemRender={itemRender}/>
|
|
82
|
+
))}
|
|
83
|
+
</Flex>
|
|
84
|
+
</SortableContext>
|
|
85
|
+
</DndContext>
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export default React.memo(DndTag) as <T extends Array<any>>(props: DndTagProps<T>) => JSX.Element;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { DeleteOutlined, EditOutlined, EyeOutlined, AlignLeftOutlined } from '@ant-design/icons';
|
|
2
|
+
import { useIntl, useModel } from '@umijs/max';
|
|
3
|
+
import { Dropdown, MenuProps } from 'antd';
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import { getAuthorityFunction } from '../index';
|
|
6
|
+
import { DropdownButtonProps } from '../types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 下拉按钮组
|
|
10
|
+
* @param {DropdownButtonProps} props
|
|
11
|
+
*/
|
|
12
|
+
const DropdownButton: React.FC<DropdownButtonProps> = (props) => {
|
|
13
|
+
const {
|
|
14
|
+
viewButtonIcon,
|
|
15
|
+
viewButtonTitle,
|
|
16
|
+
editButtonTitle,
|
|
17
|
+
actionLogTitle,
|
|
18
|
+
removeButtonTitle,
|
|
19
|
+
viewAuth,
|
|
20
|
+
editAuth,
|
|
21
|
+
actionLogAuth,
|
|
22
|
+
removeAuth,
|
|
23
|
+
extraButtonList,
|
|
24
|
+
onView,
|
|
25
|
+
onEdit,
|
|
26
|
+
onRemove,
|
|
27
|
+
onActionLog,
|
|
28
|
+
} = props;
|
|
29
|
+
|
|
30
|
+
const { formatMessage } = useIntl();
|
|
31
|
+
let { currentUser = {} } = window.__POWERED_BY_QIANKUN__
|
|
32
|
+
? useModel('@@qiankunStateFromMaster')
|
|
33
|
+
: useModel('@@initialState')?.initialState;
|
|
34
|
+
|
|
35
|
+
// 判断是布尔值还是其他值,返回布尔值判断是否显示按钮
|
|
36
|
+
const isShowButton = (buttonAuth: string | boolean | undefined): boolean => {
|
|
37
|
+
return typeof buttonAuth === 'boolean' ? buttonAuth : getAuthorityFunction(buttonAuth, currentUser);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const defautlTtems: MenuProps['items'] | any = [
|
|
41
|
+
{
|
|
42
|
+
auth: isShowButton(viewAuth),
|
|
43
|
+
key: 'view',
|
|
44
|
+
label: (
|
|
45
|
+
<a onClick={onView}>
|
|
46
|
+
<span style={{ marginRight: 6 }}>{viewButtonIcon ? viewButtonIcon : <EyeOutlined />}</span>
|
|
47
|
+
{viewButtonTitle ? viewButtonTitle : formatMessage({ id: 'cfmmUI.common.button.view', defaultMessage: '查看' })}
|
|
48
|
+
</a>
|
|
49
|
+
),
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
auth: isShowButton(editAuth),
|
|
53
|
+
key: 'edit',
|
|
54
|
+
label: (
|
|
55
|
+
<a onClick={onEdit} key="edit">
|
|
56
|
+
<EditOutlined style={{ marginRight: 6 }} />
|
|
57
|
+
{editButtonTitle ? editButtonTitle : formatMessage({ id: 'cfmmUI.common.button.edit', defaultMessage: '修改' })}
|
|
58
|
+
</a>
|
|
59
|
+
),
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
auth: isShowButton(actionLogAuth),
|
|
63
|
+
key: 'actionLog',
|
|
64
|
+
label: (
|
|
65
|
+
<a onClick={onActionLog} key="actionLog">
|
|
66
|
+
<AlignLeftOutlined style={{ marginRight: 6 }} />
|
|
67
|
+
{actionLogTitle ? actionLogTitle : formatMessage({ id: 'cfmmUI.common.button.actionLog', defaultMessage: '操作记录' })}
|
|
68
|
+
</a>
|
|
69
|
+
),
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
auth: isShowButton(removeAuth),
|
|
73
|
+
key: 'remove',
|
|
74
|
+
danger: true,
|
|
75
|
+
label: (
|
|
76
|
+
<a onClick={onRemove} key="remove">
|
|
77
|
+
<DeleteOutlined style={{ marginRight: 6 }} />
|
|
78
|
+
{removeButtonTitle ? removeButtonTitle : formatMessage({ id: 'cfmmUI.common.button.delete', defaultMessage: '删除' })}
|
|
79
|
+
</a>
|
|
80
|
+
),
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
const handleButtonList = () => {
|
|
85
|
+
let renderList = [...defautlTtems];
|
|
86
|
+
|
|
87
|
+
// 将额外的按钮按指定位置放入渲染列表
|
|
88
|
+
if (extraButtonList?.length) {
|
|
89
|
+
extraButtonList.forEach((v, idx) => {
|
|
90
|
+
const item = {
|
|
91
|
+
key: typeof v.auth === 'string' ? v.auth : 'extra-' + idx,
|
|
92
|
+
label: v.label,
|
|
93
|
+
icon: v.icon,
|
|
94
|
+
auth: isShowButton(v.auth),
|
|
95
|
+
};
|
|
96
|
+
if (v.position === 'start') {
|
|
97
|
+
renderList.unshift(item);
|
|
98
|
+
}
|
|
99
|
+
if (v.position === 'end') {
|
|
100
|
+
renderList.push(item);
|
|
101
|
+
}
|
|
102
|
+
if (typeof v.position === 'number') {
|
|
103
|
+
renderList.splice(v.position, 0, item);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return renderList.filter((item) => item.auth).map((item) => ({ ...item, auth: undefined }));
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const items = handleButtonList();
|
|
112
|
+
|
|
113
|
+
if (!items.length) return;
|
|
114
|
+
|
|
115
|
+
return (
|
|
116
|
+
<Dropdown.Button menu={{ items: items.slice(1) }}>
|
|
117
|
+
{items[0].icon}
|
|
118
|
+
{items[0].label}
|
|
119
|
+
</Dropdown.Button>
|
|
120
|
+
);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default React.memo(DropdownButton);
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { FrownOutlined, ReloadOutlined } from '@ant-design/icons';
|
|
2
|
+
import { IconComponentProps } from '@ant-design/icons/lib/components/Icon';
|
|
3
|
+
import React, { Suspense, lazy } from 'react';
|
|
4
|
+
import { DynamicIconItemType, DynamicIconNameType, DynamicIconProps } from '../types';
|
|
5
|
+
|
|
6
|
+
const isIcon = (module: Record<DynamicIconNameType, any>, key: DynamicIconNameType) => {
|
|
7
|
+
return (
|
|
8
|
+
typeof module[key] === 'object' &&
|
|
9
|
+
module[key].render &&
|
|
10
|
+
!['default', 'create', 'createFromIconfontCN', 'getTwoToneColor', 'setTwoToneColor'].includes(key)
|
|
11
|
+
);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 获取antd图标列表
|
|
16
|
+
* @param props IconComponentProps
|
|
17
|
+
*/
|
|
18
|
+
export const getAntdIconList = async (props?: IconComponentProps): Promise<DynamicIconItemType[]> => {
|
|
19
|
+
return await import(`@ant-design/icons`)
|
|
20
|
+
.then((module: any) => {
|
|
21
|
+
if (module) {
|
|
22
|
+
return Object.keys(module)
|
|
23
|
+
.filter((key) => isIcon(module, key as DynamicIconNameType))
|
|
24
|
+
.map((iconName) => {
|
|
25
|
+
return {
|
|
26
|
+
value: iconName as DynamicIconNameType,
|
|
27
|
+
label: iconName as DynamicIconNameType,
|
|
28
|
+
icon: React.createElement(module[iconName], { props }),
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return [];
|
|
33
|
+
})
|
|
34
|
+
.catch(() => {
|
|
35
|
+
return [];
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// 动态引入图标的函数
|
|
40
|
+
const loadIcon = (iconName: DynamicIconNameType) => {
|
|
41
|
+
return lazy(() =>
|
|
42
|
+
import(`@ant-design/icons`).then((module) => {
|
|
43
|
+
if (isIcon(module, iconName)) {
|
|
44
|
+
const IconComponent = (module as Record<DynamicIconNameType, any>)[iconName];
|
|
45
|
+
if (IconComponent) {
|
|
46
|
+
return { default: IconComponent };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
default: (props: IconComponentProps) => <FrownOutlined {...props} style={{ color: 'red', ...props.style }} />,
|
|
52
|
+
};
|
|
53
|
+
}),
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* 传入antd icon组件的名称,即可动态导入图标
|
|
59
|
+
* @param {DynamicIconNameType} iconName antd icon name
|
|
60
|
+
* @param {IconComponentProps} props antd icon props
|
|
61
|
+
* @returns
|
|
62
|
+
*/
|
|
63
|
+
const DynamicIcon: React.FC<DynamicIconProps> = ({ iconName, ...props }) => {
|
|
64
|
+
const IconComponent = loadIcon(iconName);
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<Suspense fallback={<ReloadOutlined />}>
|
|
68
|
+
<IconComponent {...props} />
|
|
69
|
+
</Suspense>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export default React.memo(DynamicIcon);
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { useIntl } from '@umijs/max';
|
|
2
|
+
import { Card, Input, message, Modal, Radio, Tag } from 'antd';
|
|
3
|
+
import { CheckboxOptionType } from 'antd/es/checkbox';
|
|
4
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
5
|
+
import HighlightStr from './HighlightStr';
|
|
6
|
+
import { getAntdIconList } from './DynamicIcon';
|
|
7
|
+
import { DynamicIconModalProps, DynamicIconItemType } from '../types';
|
|
8
|
+
|
|
9
|
+
const options: CheckboxOptionType[] = [
|
|
10
|
+
{ label: 'Outlined', value: 'Outlined' },
|
|
11
|
+
{ label: 'Filled', value: 'Filled' },
|
|
12
|
+
{ label: 'TwoTone', value: 'TwoTone' },
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 选择antd图标的弹窗组件
|
|
17
|
+
* @param type 单选/多选
|
|
18
|
+
* @param initValue 初始值[数组]
|
|
19
|
+
* @param localIconList 本地列表
|
|
20
|
+
* @param onOk 点击确认回调
|
|
21
|
+
* @param onDataLoad 获取列表完成,可以拿到列表
|
|
22
|
+
* @param {ModalProps} modalReset modal配置
|
|
23
|
+
*/
|
|
24
|
+
const DynamicIconModal: React.FC<DynamicIconModalProps> = (props) => {
|
|
25
|
+
const { type = 'single', localIconList, onOk, onDataLoad, initValue, highlightStrProps, ...reset } = props;
|
|
26
|
+
|
|
27
|
+
const { formatMessage } = useIntl();
|
|
28
|
+
const [allIconList, setAllIconList] = useState<DynamicIconItemType[]>([]);
|
|
29
|
+
const [selectItemList, setSelectItemList] = useState<DynamicIconItemType[]>([]);
|
|
30
|
+
const [searchValue, setSearchValue] = useState<string | null>();
|
|
31
|
+
const [iconType, setIconType] = useState<CheckboxOptionType['value']>('Outlined');
|
|
32
|
+
|
|
33
|
+
// 过滤后的列表
|
|
34
|
+
const iconList = useMemo(() => {
|
|
35
|
+
return allIconList
|
|
36
|
+
.filter((item) => {
|
|
37
|
+
const { value } = item;
|
|
38
|
+
return value.endsWith(iconType) && value?.toLocaleLowerCase().includes(searchValue?.toLocaleLowerCase() || '');
|
|
39
|
+
})
|
|
40
|
+
.map((item) => {
|
|
41
|
+
if (!searchValue) return item;
|
|
42
|
+
|
|
43
|
+
return {
|
|
44
|
+
...item,
|
|
45
|
+
label: <HighlightStr value={item.value} highlightValue={searchValue} {...highlightStrProps}/>,
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
}, [allIconList, searchValue, iconType]);
|
|
49
|
+
|
|
50
|
+
// 初始选中
|
|
51
|
+
const handleSetInitSelect = useCallback((list: DynamicIconItemType[], values?: DynamicIconModalProps['initValue']) => {
|
|
52
|
+
if (!values) return;
|
|
53
|
+
const v = Array.isArray(values) ? values : [values];
|
|
54
|
+
setSelectItemList(() => list.filter((item) => v.some((vv) => vv === item.value)));
|
|
55
|
+
}, []);
|
|
56
|
+
|
|
57
|
+
// 获取icon列表
|
|
58
|
+
const loadAntdIconList = useCallback(async () => {
|
|
59
|
+
const list = await getAntdIconList();
|
|
60
|
+
setAllIconList(list);
|
|
61
|
+
onDataLoad?.(list);
|
|
62
|
+
return list;
|
|
63
|
+
}, []);
|
|
64
|
+
|
|
65
|
+
// 点击选中卡片或者取消选中
|
|
66
|
+
const handleCardClick = useCallback(
|
|
67
|
+
(event: React.MouseEvent<HTMLDivElement>) => {
|
|
68
|
+
const card = (event.target as HTMLElement).closest('[data-icon-value]');
|
|
69
|
+
if (!card) return;
|
|
70
|
+
const value = card.getAttribute('data-icon-value');
|
|
71
|
+
|
|
72
|
+
// 如果已经选中,则取消选中
|
|
73
|
+
const selected = selectItemList.find((item) => item.value === value);
|
|
74
|
+
if (selected) {
|
|
75
|
+
setSelectItemList((selectItemList) => selectItemList.filter((item) => item.value !== selected.value));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const selectedIcon = iconList.find((item) => item.value === value);
|
|
80
|
+
if (!selectedIcon) return;
|
|
81
|
+
|
|
82
|
+
// 处理单选多选逻辑
|
|
83
|
+
if (type === 'single') {
|
|
84
|
+
setSelectItemList([selectedIcon]);
|
|
85
|
+
} else {
|
|
86
|
+
setSelectItemList((selectItemList) => [...selectItemList, selectedIcon]);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
[iconList, selectItemList],
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
// 点击标签关闭按钮取消选中
|
|
93
|
+
const handleRemoveSelectedItem = (value: React.Key) => {
|
|
94
|
+
const list = selectItemList.filter((item) => item.value !== value);
|
|
95
|
+
setSelectItemList(list);
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// 点击确认
|
|
99
|
+
const handleOk = useCallback(() => {
|
|
100
|
+
if (!selectItemList) {
|
|
101
|
+
message.error(formatMessage({ id: 'cfmmUI.DynamicIconModal.title', defaultMessage: '请选择图标' }));
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
onOk?.(selectItemList, iconList);
|
|
105
|
+
}, [selectItemList, onOk]);
|
|
106
|
+
|
|
107
|
+
// 初始化列表
|
|
108
|
+
useEffect(() => {
|
|
109
|
+
if (localIconList) {
|
|
110
|
+
setAllIconList(localIconList);
|
|
111
|
+
} else {
|
|
112
|
+
loadAntdIconList();
|
|
113
|
+
}
|
|
114
|
+
}, [localIconList]);
|
|
115
|
+
|
|
116
|
+
// 初始化选中
|
|
117
|
+
useEffect(() => {
|
|
118
|
+
if (props.open) {
|
|
119
|
+
handleSetInitSelect(allIconList, initValue);
|
|
120
|
+
} else {
|
|
121
|
+
setSearchValue(null);
|
|
122
|
+
setSelectItemList([]);
|
|
123
|
+
}
|
|
124
|
+
}, [props.open, allIconList]);
|
|
125
|
+
|
|
126
|
+
return (
|
|
127
|
+
<Modal
|
|
128
|
+
width={800}
|
|
129
|
+
zIndex={1001}
|
|
130
|
+
maskClosable={false}
|
|
131
|
+
onOk={handleOk}
|
|
132
|
+
title={formatMessage({ id: 'cfmmUI.DynamicIconModal.title', defaultMessage: '请选择图标' })}
|
|
133
|
+
{...reset}
|
|
134
|
+
>
|
|
135
|
+
<div style={{ display: 'flex' }}>
|
|
136
|
+
<Radio.Group
|
|
137
|
+
style={{ width: 400 }}
|
|
138
|
+
options={options}
|
|
139
|
+
defaultValue={iconType}
|
|
140
|
+
optionType="button"
|
|
141
|
+
buttonStyle="solid"
|
|
142
|
+
onChange={(e) => {
|
|
143
|
+
setIconType(e.target?.value);
|
|
144
|
+
}}
|
|
145
|
+
/>
|
|
146
|
+
<Input.Search
|
|
147
|
+
onInput={(e: any) => {
|
|
148
|
+
setSearchValue(e.target?.value);
|
|
149
|
+
}}
|
|
150
|
+
/>
|
|
151
|
+
</div>
|
|
152
|
+
<div style={{ marginTop: 10 }}>
|
|
153
|
+
{selectItemList.map((item) => (
|
|
154
|
+
<Tag key={item.value} color="processing" closeIcon onClose={() => handleRemoveSelectedItem(item.value)}>
|
|
155
|
+
{item.label}
|
|
156
|
+
</Tag>
|
|
157
|
+
))}
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<div
|
|
161
|
+
style={{
|
|
162
|
+
display: 'grid',
|
|
163
|
+
direction: 'ltr',
|
|
164
|
+
gridTemplateColumns: 'repeat(auto-fill, minmax(150px, 1fr))',
|
|
165
|
+
maxHeight: 500,
|
|
166
|
+
gap: 10,
|
|
167
|
+
marginTop: 20,
|
|
168
|
+
overflowY: 'auto',
|
|
169
|
+
}}
|
|
170
|
+
onClick={handleCardClick}
|
|
171
|
+
>
|
|
172
|
+
{iconList.map((item) => {
|
|
173
|
+
const isSelect = selectItemList.find((selectItem) => selectItem.value === item.value);
|
|
174
|
+
return (
|
|
175
|
+
<Card
|
|
176
|
+
key={item.value}
|
|
177
|
+
data-icon-value={item.value} // 添加数据属性用于标识
|
|
178
|
+
style={{
|
|
179
|
+
textAlign: 'center',
|
|
180
|
+
cursor: 'pointer',
|
|
181
|
+
transition: 'all 0.3s',
|
|
182
|
+
backgroundColor: isSelect ? '#1677ff' : '',
|
|
183
|
+
color: isSelect ? '#fff' : '',
|
|
184
|
+
}}
|
|
185
|
+
>
|
|
186
|
+
<div style={{ fontSize: 30 }}>{item.icon}</div>
|
|
187
|
+
<div style={{ fontSize: 12 }}>{item.label}</div>
|
|
188
|
+
</Card>
|
|
189
|
+
);
|
|
190
|
+
})}
|
|
191
|
+
</div>
|
|
192
|
+
</Modal>
|
|
193
|
+
);
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
export default React.memo(DynamicIconModal);
|