From c4a587fcda184d4d01ef3428a108830c70e249c7 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 7 Feb 2025 09:46:12 +0800 Subject: [PATCH] :arrow_up: chore: update vben --- apps/vben5/.lintstagedrc.mjs | 14 +- apps/vben5/apps/app-antd/.env.development | 4 +- apps/vben5/apps/app-antd/package.json | 16 +- apps/vben5/apps/app-antd/src/bootstrap.ts | 4 + apps/vben5/apps/app-antd/src/locales/index.ts | 9 +- .../apps/app-antd/src/router/routes/core.ts | 10 +- .../app-antd/src/router/routes/modules/abp.ts | 2 - .../src/router/routes/modules/dashboard.ts | 4 +- .../src/router/routes/modules/demos.ts | 2 - .../src/router/routes/modules/vben.ts | 24 +- .../dashboard/analytics/analytics-trends.vue | 8 +- .../analytics/analytics-visits-data.vue | 8 +- .../analytics/analytics-visits-sales.vue | 8 +- .../analytics/analytics-visits-source.vue | 8 +- .../dashboard/analytics/analytics-visits.vue | 8 +- .../src/views/dashboard/analytics/index.vue | 2 +- .../apps/backend-mock/utils/mock-data.ts | 4 +- apps/vben5/apps/web-antd/package.json | 2 +- .../web-antd/src/adapter/component/index.ts | 3 +- apps/vben5/apps/web-antd/src/api/request.ts | 31 +- apps/vben5/apps/web-antd/src/bootstrap.ts | 13 + apps/vben5/apps/web-antd/src/locales/index.ts | 4 +- .../apps/web-antd/src/router/routes/core.ts | 10 +- .../src/router/routes/modules/dashboard.ts | 4 +- .../src/router/routes/modules/demos.ts | 2 - .../src/router/routes/modules/vben.ts | 24 +- .../dashboard/analytics/analytics-trends.vue | 8 +- .../analytics/analytics-visits-data.vue | 8 +- .../analytics/analytics-visits-sales.vue | 8 +- .../analytics/analytics-visits-source.vue | 8 +- .../dashboard/analytics/analytics-visits.vue | 8 +- .../src/views/dashboard/analytics/index.vue | 2 +- apps/vben5/apps/web-ele/package.json | 2 +- .../web-ele/src/adapter/component/index.ts | 3 +- apps/vben5/apps/web-ele/src/api/request.ts | 30 +- apps/vben5/apps/web-ele/src/bootstrap.ts | 12 + apps/vben5/apps/web-ele/src/locales/index.ts | 4 +- .../apps/web-ele/src/router/routes/core.ts | 10 +- .../src/router/routes/modules/dashboard.ts | 4 +- .../src/router/routes/modules/demos.ts | 2 - .../web-ele/src/router/routes/modules/vben.ts | 24 +- .../dashboard/analytics/analytics-trends.vue | 8 +- .../analytics/analytics-visits-data.vue | 8 +- .../analytics/analytics-visits-sales.vue | 8 +- .../analytics/analytics-visits-source.vue | 8 +- .../dashboard/analytics/analytics-visits.vue | 8 +- .../src/views/dashboard/analytics/index.vue | 2 +- apps/vben5/apps/web-naive/package.json | 2 +- .../web-naive/src/adapter/component/index.ts | 3 +- apps/vben5/apps/web-naive/src/api/request.ts | 30 +- apps/vben5/apps/web-naive/src/bootstrap.ts | 15 + .../vben5/apps/web-naive/src/locales/index.ts | 4 +- .../apps/web-naive/src/router/routes/core.ts | 10 +- .../src/router/routes/modules/dashboard.ts | 4 +- .../src/router/routes/modules/demos.ts | 2 - .../src/router/routes/modules/vben.ts | 24 +- .../dashboard/analytics/analytics-trends.vue | 8 +- .../analytics/analytics-visits-data.vue | 8 +- .../analytics/analytics-visits-sales.vue | 8 +- .../analytics/analytics-visits-source.vue | 8 +- .../dashboard/analytics/analytics-visits.vue | 8 +- .../src/views/dashboard/analytics/index.vue | 2 +- .../web-naive/src/views/demos/form/basic.vue | 18 +- .../web-naive/src/views/demos/naive/index.vue | 3 +- .../.vitepress/components/preview-group.vue | 4 +- apps/vben5/docs/.vitepress/config/en.mts | 4 +- apps/vben5/docs/.vitepress/config/zh.mts | 4 +- .../theme/components/site-layout.vue | 1 - apps/vben5/docs/package.json | 2 +- apps/vben5/docs/src/_env/adapter/component.ts | 3 +- .../common-ui/vben-api-component.md | 13 +- .../src/components/common-ui/vben-drawer.md | 30 +- .../src/components/common-ui/vben-form.md | 15 +- .../src/components/common-ui/vben-modal.md | 31 +- .../src/demos/vben-drawer/dynamic/index.vue | 3 +- .../demos/vben-drawer/shared-data/index.vue | 11 +- .../src/demos/vben-modal/dynamic/index.vue | 3 +- .../demos/vben-modal/shared-data/index.vue | 11 +- .../docs/src/en/guide/essentials/route.md | 3 - apps/vben5/docs/src/guide/essentials/route.md | 18 +- .../vben5/docs/src/guide/essentials/server.md | 24 +- apps/vben5/docs/src/guide/in-depth/access.md | 2 +- .../src/guide/introduction/quick-start.md | 2 +- .../commitlint-config/package.json | 2 +- .../eslint-config/src/configs/import.ts | 1 + .../eslint-config/src/configs/javascript.ts | 1 - .../src/configs/perfectionist.ts | 61 ++-- .../stylelint-config/package.json | 2 +- apps/vben5/internal/node-utils/package.json | 2 +- apps/vben5/internal/node-utils/src/index.ts | 2 +- apps/vben5/internal/node-utils/src/spinner.ts | 4 +- .../internal/tailwind-config/package.json | 2 +- .../internal/tailwind-config/src/index.ts | 2 +- apps/vben5/internal/tsconfig/package.json | 2 +- apps/vben5/internal/vite-config/package.json | 2 +- .../vite-config/src/plugins/importmap.ts | 4 +- .../src/plugins/inject-app-loading/index.ts | 4 +- .../internal/vite-config/src/utils/env.ts | 4 +- apps/vben5/package.json | 8 +- apps/vben5/packages/@abp/account/package.json | 2 +- .../vben5/packages/@abp/auditing/package.json | 2 +- apps/vben5/packages/@abp/core/package.json | 2 +- .../vben5/packages/@abp/identity/package.json | 2 +- .../packages/@abp/notifications/package.json | 2 +- .../packages/@abp/openiddict/package.json | 2 +- apps/vben5/packages/@abp/request/package.json | 2 +- .../@abp/request/src/hooks/useRequest.ts | 2 +- apps/vben5/packages/@abp/request/src/index.ts | 8 +- .../vben5/packages/@abp/settings/package.json | 2 +- apps/vben5/packages/@abp/signalr/package.json | 2 +- apps/vben5/packages/@abp/ui/package.json | 2 +- .../@abp/ui/src/adapter/component/index.ts | 3 +- .../@abp/ui/src/components/vxe-table/api.ts | 11 +- .../ui/src/components/vxe-table/extends.ts | 3 +- .../@abp/ui/src/components/vxe-table/init.ts | 2 +- .../@abp/ui/src/components/vxe-table/types.ts | 14 +- .../src/components/vxe-table/use-vxe-grid.vue | 19 +- .../packages/@core/base/design/package.json | 2 +- .../packages/@core/base/design/src/css/ui.css | 4 + .../base/design/src/design-tokens/dark.css | 6 +- .../base/design/src/design-tokens/default.css | 2 + .../packages/@core/base/icons/package.json | 2 +- .../packages/@core/base/icons/src/lucide.ts | 6 +- .../packages/@core/base/shared/package.json | 4 +- .../base/shared/src/cache/storage-manager.ts | 18 +- .../shared/src/utils/__tests__/util.test.ts | 12 +- .../@core/base/shared/src/utils/cn.ts | 4 +- .../@core/base/shared/src/utils/download.ts | 1 + .../base/shared/src/utils/state-handler.ts | 12 +- .../packages/@core/base/typings/package.json | 2 +- .../packages/@core/base/typings/src/app.d.ts | 4 + .../@core/base/typings/src/helper.d.ts | 5 +- .../@core/base/typings/src/menu-record.ts | 7 +- .../@core/base/typings/src/vue-router.d.ts | 14 +- .../packages/@core/composables/package.json | 2 +- .../@core/composables/src/use-layout-style.ts | 8 +- .../composables/src/use-priority-value.ts | 1 + .../src/use-simple-locale/index.ts | 4 +- .../__snapshots__/config.test.ts.snap | 5 +- .../packages/@core/preferences/package.json | 2 +- .../packages/@core/preferences/src/config.ts | 5 +- .../@core/preferences/src/preferences.ts | 168 +++++----- .../packages/@core/preferences/src/types.ts | 7 + .../@core/preferences/src/use-preferences.ts | 24 +- .../@core/ui-kit/form-ui/package.json | 2 +- .../form-ui/src/components/form-actions.vue | 55 +--- .../@core/ui-kit/form-ui/src/config.ts | 3 +- .../@core/ui-kit/form-ui/src/form-api.ts | 136 +++++--- .../form-ui/src/form-render/form-field.vue | 19 +- .../ui-kit/form-ui/src/form-render/form.vue | 11 +- .../ui-kit/form-ui/src/form-render/index.ts | 2 +- .../@core/ui-kit/form-ui/src/index.ts | 2 +- .../@core/ui-kit/form-ui/src/types.ts | 35 +- .../ui-kit/form-ui/src/use-form-context.ts | 14 +- .../ui-kit/form-ui/src/vben-use-form.vue | 12 +- .../@core/ui-kit/layout-ui/package.json | 2 +- .../src/components/layout-content.vue | 3 +- .../src/components/layout-footer.vue | 1 + .../src/components/layout-header.vue | 1 + .../src/components/layout-sidebar.vue | 1 + .../src/components/layout-tabbar.vue | 1 + .../ui-kit/layout-ui/src/hooks/use-layout.ts | 14 +- .../ui-kit/layout-ui/src/vben-layout.vue | 26 +- .../@core/ui-kit/menu-ui/package.json | 2 +- .../ui-kit/menu-ui/src/components/index.ts | 2 +- .../ui-kit/menu-ui/src/components/menu.vue | 10 +- .../@core/ui-kit/menu-ui/src/types.ts | 4 +- .../@core/ui-kit/menu-ui/src/utils/index.ts | 1 + .../src/drawer/__tests__/drawer-api.test.ts | 30 +- .../ui-kit/popup-ui/src/drawer/drawer-api.ts | 50 ++- .../ui-kit/popup-ui/src/drawer/drawer.ts | 38 ++- .../ui-kit/popup-ui/src/drawer/drawer.vue | 36 ++- .../@core/ui-kit/popup-ui/src/drawer/index.ts | 2 +- .../ui-kit/popup-ui/src/drawer/use-drawer.ts | 40 ++- .../src/modal/__tests__/modal-api.test.ts | 19 +- .../@core/ui-kit/popup-ui/src/modal/index.ts | 2 +- .../ui-kit/popup-ui/src/modal/modal-api.ts | 41 ++- .../@core/ui-kit/popup-ui/src/modal/modal.ts | 24 +- .../@core/ui-kit/popup-ui/src/modal/modal.vue | 30 +- .../popup-ui/src/modal/use-modal-draggable.ts | 3 +- .../ui-kit/popup-ui/src/modal/use-modal.ts | 36 ++- .../@core/ui-kit/shadcn-ui/package.json | 2 +- .../src/components/avatar/avatar.vue | 5 +- .../src/components/back-top/back-top.vue | 2 +- .../components/breadcrumb/breadcrumb-view.vue | 2 +- .../src/components/breadcrumb/types.ts | 4 +- .../shadcn-ui/src/components/button/button.ts | 4 +- .../components/context-menu/context-menu.vue | 9 +- .../src/components/hover-card/hover-card.vue | 5 +- .../shadcn-ui/src/components/icon/icon.vue | 4 +- .../src/components/popover/popover.vue | 5 +- .../render-content/render-content.vue | 1 + .../components/segmented/tabs-indicator.vue | 2 +- .../src/components/select/select.vue | 6 + .../src/components/spinner/spinner.vue | 11 + .../src/components/tooltip/tooltip.vue | 3 +- .../shadcn-ui/src/ui/accordion/Accordion.vue | 9 +- .../src/ui/accordion/AccordionContent.vue | 6 +- .../src/ui/accordion/AccordionItem.vue | 10 +- .../src/ui/accordion/AccordionTrigger.vue | 10 +- .../ui-kit/shadcn-ui/src/ui/avatar/Avatar.vue | 4 +- .../src/ui/avatar/AvatarFallback.vue | 4 +- .../shadcn-ui/src/ui/avatar/AvatarImage.vue | 4 +- .../ui-kit/shadcn-ui/src/ui/avatar/avatar.ts | 4 +- .../ui-kit/shadcn-ui/src/ui/badge/Badge.vue | 4 +- .../ui-kit/shadcn-ui/src/ui/badge/badge.ts | 4 +- .../src/ui/breadcrumb/BreadcrumbLink.vue | 6 +- .../ui-kit/shadcn-ui/src/ui/button/Button.vue | 4 +- .../shadcn-ui/src/ui/checkbox/Checkbox.vue | 2 +- .../context-menu/ContextMenuCheckboxItem.vue | 9 +- .../ui/context-menu/ContextMenuContent.vue | 11 +- .../src/ui/context-menu/ContextMenuGroup.vue | 4 +- .../src/ui/context-menu/ContextMenuItem.vue | 11 +- .../src/ui/context-menu/ContextMenuLabel.vue | 6 +- .../src/ui/context-menu/ContextMenuPortal.vue | 4 +- .../ui/context-menu/ContextMenuRadioGroup.vue | 10 +- .../ui/context-menu/ContextMenuRadioItem.vue | 9 +- .../ui/context-menu/ContextMenuSeparator.vue | 9 +- .../src/ui/context-menu/ContextMenuSub.vue | 9 +- .../ui/context-menu/ContextMenuSubContent.vue | 14 +- .../ui/context-menu/ContextMenuSubTrigger.vue | 12 +- .../ui/context-menu/ContextMenuTrigger.vue | 8 +- .../ui-kit/shadcn-ui/src/ui/dialog/Dialog.vue | 9 +- .../shadcn-ui/src/ui/dialog/DialogClose.vue | 4 +- .../shadcn-ui/src/ui/dialog/DialogContent.vue | 24 +- .../src/ui/dialog/DialogDescription.vue | 10 +- .../shadcn-ui/src/ui/dialog/DialogOverlay.vue | 2 +- .../src/ui/dialog/DialogScrollContent.vue | 6 +- .../shadcn-ui/src/ui/dialog/DialogTitle.vue | 6 +- .../shadcn-ui/src/ui/dialog/DialogTrigger.vue | 4 +- .../src/ui/dropdown-menu/DropdownMenu.vue | 9 +- .../DropdownMenuCheckboxItem.vue | 9 +- .../ui/dropdown-menu/DropdownMenuContent.vue | 11 +- .../ui/dropdown-menu/DropdownMenuGroup.vue | 4 +- .../src/ui/dropdown-menu/DropdownMenuItem.vue | 10 +- .../ui/dropdown-menu/DropdownMenuLabel.vue | 10 +- .../dropdown-menu/DropdownMenuRadioGroup.vue | 10 +- .../dropdown-menu/DropdownMenuRadioItem.vue | 9 +- .../dropdown-menu/DropdownMenuSeparator.vue | 11 +- .../src/ui/dropdown-menu/DropdownMenuSub.vue | 9 +- .../dropdown-menu/DropdownMenuSubContent.vue | 14 +- .../dropdown-menu/DropdownMenuSubTrigger.vue | 10 +- .../ui/dropdown-menu/DropdownMenuTrigger.vue | 8 +- .../shadcn-ui/src/ui/form/FormLabel.vue | 2 +- .../ui-kit/shadcn-ui/src/ui/form/index.ts | 2 +- .../shadcn-ui/src/ui/hover-card/HoverCard.vue | 9 +- .../src/ui/hover-card/HoverCardContent.vue | 13 +- .../src/ui/hover-card/HoverCardTrigger.vue | 4 +- .../ui-kit/shadcn-ui/src/ui/label/Label.vue | 6 +- .../src/ui/number-field/NumberField.vue | 2 +- .../ui/number-field/NumberFieldDecrement.vue | 2 +- .../ui/number-field/NumberFieldIncrement.vue | 2 +- .../src/ui/pagination/PaginationEllipsis.vue | 6 +- .../src/ui/pagination/PaginationFirst.vue | 6 +- .../src/ui/pagination/PaginationLast.vue | 6 +- .../src/ui/pagination/PaginationNext.vue | 6 +- .../src/ui/pagination/PaginationPrev.vue | 6 +- .../shadcn-ui/src/ui/pagination/index.ts | 2 +- .../shadcn-ui/src/ui/pin-input/PinInput.vue | 11 +- .../src/ui/pin-input/PinInputGroup.vue | 6 +- .../src/ui/pin-input/PinInputInput.vue | 10 +- .../src/ui/pin-input/PinInputSeparator.vue | 4 +- .../src/ui/popover/PopoverContent.vue | 12 +- .../src/ui/popover/PopoverTrigger.vue | 4 +- .../src/ui/radio-group/RadioGroup.vue | 11 +- .../src/ui/radio-group/RadioGroupItem.vue | 5 +- .../src/ui/resizable/ResizableHandle.vue | 20 +- .../src/ui/resizable/ResizablePanelGroup.vue | 15 +- .../src/ui/scroll-area/ScrollArea.vue | 7 +- .../src/ui/scroll-area/ScrollBar.vue | 10 +- .../shadcn-ui/src/ui/select/SelectContent.vue | 8 +- .../shadcn-ui/src/ui/select/SelectGroup.vue | 6 +- .../shadcn-ui/src/ui/select/SelectItem.vue | 5 +- .../src/ui/select/SelectItemText.vue | 4 +- .../shadcn-ui/src/ui/select/SelectLabel.vue | 6 +- .../src/ui/select/SelectScrollDownButton.vue | 10 +- .../src/ui/select/SelectScrollUpButton.vue | 10 +- .../src/ui/select/SelectSeparator.vue | 6 +- .../shadcn-ui/src/ui/select/SelectTrigger.vue | 13 +- .../shadcn-ui/src/ui/select/SelectValue.vue | 4 +- .../shadcn-ui/src/ui/separator/Separator.vue | 6 +- .../ui-kit/shadcn-ui/src/ui/sheet/Sheet.vue | 9 +- .../shadcn-ui/src/ui/sheet/SheetClose.vue | 4 +- .../shadcn-ui/src/ui/sheet/SheetContent.vue | 52 ++- .../src/ui/sheet/SheetDescription.vue | 6 +- .../shadcn-ui/src/ui/sheet/SheetOverlay.vue | 2 +- .../shadcn-ui/src/ui/sheet/SheetTitle.vue | 6 +- .../shadcn-ui/src/ui/sheet/SheetTrigger.vue | 4 +- .../ui-kit/shadcn-ui/src/ui/sheet/sheet.ts | 4 +- .../ui-kit/shadcn-ui/src/ui/switch/Switch.vue | 12 +- .../shadcn-ui/src/ui/tabs/TabsContent.vue | 6 +- .../ui-kit/shadcn-ui/src/ui/tabs/TabsList.vue | 6 +- .../shadcn-ui/src/ui/tabs/TabsTrigger.vue | 6 +- .../src/ui/toggle-group/ToggleGroup.vue | 12 +- .../src/ui/toggle-group/ToggleGroupItem.vue | 11 +- .../ui-kit/shadcn-ui/src/ui/toggle/Toggle.vue | 17 +- .../ui-kit/shadcn-ui/src/ui/toggle/toggle.ts | 4 +- .../shadcn-ui/src/ui/tooltip/Tooltip.vue | 9 +- .../src/ui/tooltip/TooltipContent.vue | 14 +- .../src/ui/tooltip/TooltipProvider.vue | 4 +- .../src/ui/tooltip/TooltipTrigger.vue | 4 +- .../@core/ui-kit/tabs-ui/package.json | 2 +- .../ui-kit/tabs-ui/src/components/index.ts | 2 +- .../src/components/tabs-chrome/tabs.vue | 15 + .../tabs-ui/src/components/tabs/tabs.vue | 15 + .../@core/ui-kit/tabs-ui/src/types.ts | 7 +- .../@core/ui-kit/tabs-ui/src/use-tabs-drag.ts | 7 +- .../tabs-ui/src/use-tabs-view-scroll.ts | 2 +- apps/vben5/packages/constants/package.json | 2 +- .../packages/effects/access/package.json | 2 +- .../packages/effects/access/src/accessible.ts | 20 +- .../packages/effects/common-ui/package.json | 6 +- .../api-component/api-component.vue | 33 +- .../captcha/point-selection-captcha/index.vue | 1 + .../point-selection-captcha-card.vue | 1 + .../captcha/slider-captcha/index.vue | 1 + .../slider-captcha/slider-captcha-action.vue | 2 + .../slider-captcha/slider-captcha-bar.vue | 4 +- .../slider-captcha/slider-captcha-content.vue | 1 + .../common-ui/src/components/captcha/types.ts | 4 +- .../ellipsis-text/ellipsis-text.vue | 4 +- .../components/icon-picker/icon-picker.vue | 102 +++++- .../src/components/icon-picker/icons.ts | 56 ++++ .../effects/common-ui/src/components/index.ts | 1 + .../components/page/__tests__/page.test.ts | 1 + .../common-ui/src/components/page/page.vue | 11 +- .../src/components/tippy/directive.ts | 100 ++++++ .../common-ui/src/components/tippy/index.ts | 67 ++++ .../effects/common-ui/src/ui/about/about.vue | 1 + .../src/ui/authentication/code-login.vue | 2 + .../src/ui/authentication/forget-password.vue | 1 + .../common-ui/src/ui/authentication/index.ts | 2 +- .../common-ui/src/ui/authentication/login.vue | 2 + .../src/ui/authentication/qrcode-login.vue | 1 + .../src/ui/authentication/register.vue | 2 + .../ui/authentication/third-party-login.vue | 1 + .../common-ui/src/ui/fallback/fallback.vue | 1 + .../vben5/packages/effects/hooks/package.json | 2 +- .../effects/hooks/src/use-design-tokens.ts | 1 + .../effects/hooks/src/use-hover-toggle.ts | 3 +- .../effects/hooks/src/use-pagination.ts | 1 + .../packages/effects/hooks/src/use-tabs.ts | 4 +- .../packages/effects/layouts/package.json | 2 +- .../layouts/src/basic/content/content.vue | 2 +- .../layouts/src/basic/content/index.ts | 2 +- .../layouts/src/basic/header/header.vue | 19 +- .../effects/layouts/src/basic/layout.vue | 48 +-- .../layouts/src/basic/menu/extra-menu.vue | 1 + .../effects/layouts/src/basic/menu/menu.vue | 1 + .../layouts/src/basic/menu/mixed-menu.vue | 2 + .../layouts/src/basic/menu/use-extra-menu.ts | 54 ++-- .../layouts/src/basic/menu/use-mixed-menu.ts | 17 +- .../layouts/src/basic/menu/use-navigation.ts | 4 +- .../layouts/src/basic/tabbar/tabbar.vue | 2 + .../layouts/src/basic/tabbar/use-tabbar.ts | 4 +- .../layouts/src/iframe/iframe-router-view.vue | 1 + .../layouts/src/widgets/breadcrumb.vue | 2 + .../widgets/check-updates/check-updates.vue | 1 + .../layouts/src/widgets/color-toggle.vue | 1 + .../widgets/global-search/global-search.vue | 1 + .../widgets/global-search/search-panel.vue | 1 + .../layouts/src/widgets/language-toggle.vue | 1 + .../layouts/src/widgets/layout-toggle.vue | 2 + .../layouts/src/widgets/lock-screen/index.ts | 2 +- .../widgets/lock-screen/lock-screen-modal.vue | 1 + .../src/widgets/lock-screen/lock-screen.vue | 1 + .../src/widgets/notification/notification.vue | 1 + .../widgets/preferences/blocks/input-item.vue | 1 + .../preferences/blocks/layout/content.vue | 4 +- .../preferences/blocks/layout/header.vue | 31 +- .../preferences/blocks/layout/layout.vue | 19 +- .../preferences/blocks/layout/sidebar.vue | 2 +- .../preferences/blocks/layout/tabbar.vue | 18 ++ .../preferences/blocks/number-field-item.vue | 13 +- .../preferences/blocks/select-item.vue | 1 + .../preferences/blocks/switch-item.vue | 1 + .../preferences/blocks/theme/builtin.vue | 29 +- .../preferences/blocks/theme/theme.vue | 4 +- .../preferences/icons/header-mixed-nav.vue | 202 ++++++++++++ .../preferences/icons/header-sidebar-nav.vue | 177 ++++++++++ .../src/widgets/preferences/icons/index.ts | 2 + .../layouts/src/widgets/preferences/index.ts | 2 +- .../preferences/preferences-button.vue | 1 + .../preferences/preferences-drawer.vue | 16 +- .../src/widgets/preferences/preferences.vue | 1 + .../src/widgets/theme-toggle/theme-toggle.vue | 1 + .../widgets/user-dropdown/user-dropdown.vue | 4 +- .../packages/effects/plugins/package.json | 2 +- .../plugins/src/echarts/use-echarts.ts | 18 +- .../effects/plugins/src/vxe-table/api.ts | 11 +- .../effects/plugins/src/vxe-table/extends.ts | 3 +- .../effects/plugins/src/vxe-table/init.ts | 2 +- .../effects/plugins/src/vxe-table/types.ts | 14 +- .../plugins/src/vxe-table/use-vxe-grid.vue | 19 +- .../packages/effects/request/package.json | 2 +- .../request-client/modules/downloader.test.ts | 2 + .../src/request-client/modules/downloader.ts | 34 +- .../src/request-client/modules/uploader.ts | 13 +- .../src/request-client/preset-interceptors.ts | 39 +++ .../src/request-client/request-client.ts | 35 +- .../request/src/request-client/types.ts | 28 +- apps/vben5/packages/icons/package.json | 2 +- apps/vben5/packages/icons/src/svg/load.ts | 2 +- apps/vben5/packages/locales/package.json | 2 +- apps/vben5/packages/locales/src/i18n.ts | 3 +- .../locales/src/langs/en-US/preferences.json | 13 +- .../locales/src/langs/zh-CN/preferences.json | 15 +- apps/vben5/packages/preferences/package.json | 2 +- apps/vben5/packages/stores/package.json | 3 +- .../packages/stores/src/modules/access.ts | 3 +- .../packages/stores/src/modules/tabbar.ts | 13 +- apps/vben5/packages/styles/package.json | 5 +- apps/vben5/packages/styles/src/antd/index.css | 25 +- apps/vben5/packages/styles/src/ele/index.css | 4 + .../vben5/packages/styles/src/naive/index.css | 20 ++ apps/vben5/packages/types/package.json | 2 +- apps/vben5/packages/utils/package.json | 2 +- .../utils/src/helpers/find-menu-by-path.ts | 4 +- .../utils/src/helpers/generate-menus.ts | 3 +- .../src/helpers/generate-routes-backend.ts | 3 +- apps/vben5/playground/package.json | 2 +- .../playground/src/adapter/component/index.ts | 3 +- .../playground/src/api/examples/download.ts | 28 ++ apps/vben5/playground/src/api/request.ts | 31 +- apps/vben5/playground/src/bootstrap.ts | 13 + apps/vben5/playground/src/locales/index.ts | 4 +- .../playground/src/router/routes/core.ts | 10 +- .../src/router/routes/modules/dashboard.ts | 4 +- .../src/router/routes/modules/demos.ts | 3 +- .../src/router/routes/modules/examples.ts | 11 +- .../src/router/routes/modules/vben.ts | 24 +- .../dashboard/analytics/analytics-trends.vue | 8 +- .../analytics/analytics-visits-data.vue | 8 +- .../analytics/analytics-visits-sales.vue | 8 +- .../analytics/analytics-visits-source.vue | 8 +- .../dashboard/analytics/analytics-visits.vue | 8 +- .../src/views/dashboard/analytics/index.vue | 2 +- .../src/views/demos/badge/index.vue | 1 + .../demos/features/file-download/index.vue | 26 ++ .../src/views/demos/features/icons/index.vue | 25 +- .../features/vue-query/paginated-queries.vue | 4 +- .../src/views/examples/drawer/base-demo.vue | 3 + .../src/views/examples/drawer/index.vue | 50 +-- .../src/views/examples/form/basic.vue | 54 +++- .../src/views/examples/form/custom.vue | 31 +- .../examples/form/modules/two-fields.vue | 42 +++ .../src/views/examples/modal/blur-demo.vue | 23 ++ .../views/examples/modal/form-modal-demo.vue | 21 +- .../src/views/examples/modal/index.vue | 159 ++++++--- .../src/views/examples/modal/nested-demo.vue | 24 ++ .../src/views/examples/tippy/index.vue | 303 ++++++++++++++++++ .../src/views/examples/vxe-table/form.vue | 7 +- apps/vben5/pnpm-workspace.yaml | 148 ++++----- apps/vben5/scripts/turbo-run/package.json | 2 +- apps/vben5/scripts/vsh/package.json | 2 +- apps/vben5/scripts/vsh/src/publint/index.ts | 4 +- apps/vben5/vben-admin.code-workspace | 4 + 457 files changed, 3846 insertions(+), 1675 deletions(-) create mode 100644 apps/vben5/packages/effects/common-ui/src/components/icon-picker/icons.ts create mode 100644 apps/vben5/packages/effects/common-ui/src/components/tippy/directive.ts create mode 100644 apps/vben5/packages/effects/common-ui/src/components/tippy/index.ts create mode 100644 apps/vben5/packages/effects/layouts/src/widgets/preferences/icons/header-mixed-nav.vue create mode 100644 apps/vben5/packages/effects/layouts/src/widgets/preferences/icons/header-sidebar-nav.vue create mode 100644 apps/vben5/packages/styles/src/naive/index.css create mode 100644 apps/vben5/playground/src/api/examples/download.ts create mode 100644 apps/vben5/playground/src/views/examples/form/modules/two-fields.vue create mode 100644 apps/vben5/playground/src/views/examples/modal/blur-demo.vue create mode 100644 apps/vben5/playground/src/views/examples/modal/nested-demo.vue create mode 100644 apps/vben5/playground/src/views/examples/tippy/index.vue diff --git a/apps/vben5/.lintstagedrc.mjs b/apps/vben5/.lintstagedrc.mjs index e68d8a3e0..94b0192a7 100644 --- a/apps/vben5/.lintstagedrc.mjs +++ b/apps/vben5/.lintstagedrc.mjs @@ -1,4 +1,10 @@ export default { + '*.md': ['prettier --cache --ignore-unknown --write'], + '*.vue': [ + 'prettier --write', + 'eslint --cache --fix', + 'stylelint --fix --allow-empty-input', + ], '*.{js,jsx,ts,tsx}': [ 'prettier --cache --ignore-unknown --write', 'eslint --cache --fix', @@ -7,14 +13,8 @@ export default { 'prettier --cache --ignore-unknown --write', 'stylelint --fix --allow-empty-input', ], - '*.md': ['prettier --cache --ignore-unknown --write'], - '*.vue': [ - 'prettier --write', - 'eslint --cache --fix', - 'stylelint --fix --allow-empty-input', - ], + 'package.json': ['prettier --cache --write'], '{!(package)*.json,*.code-snippets,.!(browserslist)*rc}': [ 'prettier --cache --write--parser json', ], - 'package.json': ['prettier --cache --write'], }; diff --git a/apps/vben5/apps/app-antd/.env.development b/apps/vben5/apps/app-antd/.env.development index ea36fef54..d7204a13d 100644 --- a/apps/vben5/apps/app-antd/.env.development +++ b/apps/vben5/apps/app-antd/.env.development @@ -7,10 +7,10 @@ VITE_BASE=/ VITE_GLOB_API_URL=/ # 是否开启 Nitro Mock服务,true 为开启,false 为关闭 -VITE_NITRO_MOCK=true +VITE_NITRO_MOCK=false # 是否打开 devtools,true 为打开,false 为关闭 -VITE_DEVTOOLS=true +VITE_DEVTOOLS=false # 是否注入全局loading VITE_INJECT_APP_LOADING=true diff --git a/apps/vben5/apps/app-antd/package.json b/apps/vben5/apps/app-antd/package.json index 675f638eb..c49b42bd0 100644 --- a/apps/vben5/apps/app-antd/package.json +++ b/apps/vben5/apps/app-antd/package.json @@ -1,18 +1,18 @@ { - "name": "@vben/app-antd", - "version": "5.5.1", - "homepage": "https://vben.pro", - "bugs": "https://github.com/vbenjs/vue-vben-admin/issues", + "name": "@abp/app-antd", + "version": "8.3.4", + "homepage": "https://github.com/colinin/abp-next-admin", + "bugs": "https://github.com/colinin/abp-next-admin/issues", "repository": { "type": "git", - "url": "git+https://github.com/vbenjs/vue-vben-admin.git", + "url": "git+https://github.com/colinin/abp-next-admin.git", "directory": "apps/app-antd" }, "license": "MIT", "author": { - "name": "vben", - "email": "ann.vben@gmail.com", - "url": "https://github.com/anncwb" + "name": "colin", + "email": "colin.in@foxmail.com", + "url": "https://github.com/colinin" }, "type": "module", "scripts": { diff --git a/apps/vben5/apps/app-antd/src/bootstrap.ts b/apps/vben5/apps/app-antd/src/bootstrap.ts index a0af6fcfe..1967cea94 100644 --- a/apps/vben5/apps/app-antd/src/bootstrap.ts +++ b/apps/vben5/apps/app-antd/src/bootstrap.ts @@ -1,6 +1,7 @@ import { createApp, watchEffect } from 'vue'; import { registerAccessDirective } from '@vben/access'; +import { initTippy } from '@vben/common-ui'; import { preferences } from '@vben/preferences'; import { initStores } from '@vben/stores'; import '@vben/styles'; @@ -31,6 +32,9 @@ async function bootstrap(namespace: string) { // 安装权限指令 registerAccessDirective(app); + // 初始化 tippy + initTippy(app); + // 配置路由及路由守卫 app.use(router); diff --git a/apps/vben5/apps/app-antd/src/locales/index.ts b/apps/vben5/apps/app-antd/src/locales/index.ts index 60e61112a..d9d3c867e 100644 --- a/apps/vben5/apps/app-antd/src/locales/index.ts +++ b/apps/vben5/apps/app-antd/src/locales/index.ts @@ -1,7 +1,9 @@ -import type { LocaleSetupOptions, SupportedLanguagesType } from '@vben/locales'; import type { Locale } from 'ant-design-vue/es/locale'; import type { App } from 'vue'; + +import type { LocaleSetupOptions, SupportedLanguagesType } from '@vben/locales'; + import { ref } from 'vue'; import { @@ -15,6 +17,7 @@ import { useAbpStore } from '@abp/core'; import antdEnLocale from 'ant-design-vue/es/locale/en_US'; import antdDefaultLocale from 'ant-design-vue/es/locale/zh_CN'; import dayjs from 'dayjs'; +import localizedFormat from 'dayjs/plugin/localizedFormat'; import { useAbpConfigApi } from '#/api/core/useAbpConfigApi'; @@ -73,6 +76,7 @@ async function loadDayjsLocale(lang: SupportedLanguagesType) { } if (locale) { dayjs.locale(locale); + dayjs.extend(localizedFormat); } else { console.error(`Failed to load dayjs locale for ${lang}`); } @@ -119,8 +123,7 @@ async function setupI18n(app: App, options: LocaleSetupOptions = {}) { await coreSetup(app, { defaultLocale: preferences.app.locale, loadMessages, - // missingWarn: !import.meta.env.PROD, - missingWarn: false, + missingWarn: !import.meta.env.PROD, ...options, }); } diff --git a/apps/vben5/apps/app-antd/src/router/routes/core.ts b/apps/vben5/apps/app-antd/src/router/routes/core.ts index fe030a9a2..7218da228 100644 --- a/apps/vben5/apps/app-antd/src/router/routes/core.ts +++ b/apps/vben5/apps/app-antd/src/router/routes/core.ts @@ -2,7 +2,7 @@ import type { RouteRecordRaw } from 'vue-router'; import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants'; -import { AuthPageLayout } from '#/layouts'; +import { AuthPageLayout, BasicLayout } from '#/layouts'; import { $t } from '#/locales'; import Login from '#/views/_core/authentication/login.vue'; @@ -21,13 +21,21 @@ const fallbackNotFoundRoute: RouteRecordRaw = { /** 基本路由,这些路由是必须存在的 */ const coreRoutes: RouteRecordRaw[] = [ + /** + * 根路由 + * 使用基础布局,作为所有页面的父级容器,子级就不必配置BasicLayout。 + * 此路由必须存在,且不应修改 + */ { + component: BasicLayout, meta: { + hideInBreadcrumb: true, title: 'Root', }, name: 'Root', path: '/', redirect: DEFAULT_HOME_PATH, + children: [], }, { component: AuthPageLayout, diff --git a/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts b/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts index 1b7ec5c4f..0b3f7f404 100644 --- a/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts +++ b/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts @@ -1,11 +1,9 @@ import type { RouteRecordRaw } from 'vue-router'; -import { BasicLayout } from '#/layouts'; import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { icon: 'https://abp.io/assets/favicon.ico/favicon-16x16.png', keepAlive: true, diff --git a/apps/vben5/apps/app-antd/src/router/routes/modules/dashboard.ts b/apps/vben5/apps/app-antd/src/router/routes/modules/dashboard.ts index 1bddab9db..5254dc65d 100644 --- a/apps/vben5/apps/app-antd/src/router/routes/modules/dashboard.ts +++ b/apps/vben5/apps/app-antd/src/router/routes/modules/dashboard.ts @@ -1,18 +1,16 @@ import type { RouteRecordRaw } from 'vue-router'; -import { BasicLayout } from '#/layouts'; import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { icon: 'lucide:layout-dashboard', order: -1, title: $t('page.dashboard.title'), }, name: 'Dashboard', - path: '/', + path: '/dashboard', children: [ { name: 'Analytics', diff --git a/apps/vben5/apps/app-antd/src/router/routes/modules/demos.ts b/apps/vben5/apps/app-antd/src/router/routes/modules/demos.ts index 32bb338e0..55ade09c9 100644 --- a/apps/vben5/apps/app-antd/src/router/routes/modules/demos.ts +++ b/apps/vben5/apps/app-antd/src/router/routes/modules/demos.ts @@ -1,11 +1,9 @@ import type { RouteRecordRaw } from 'vue-router'; -import { BasicLayout } from '#/layouts'; import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { icon: 'ic:baseline-view-in-ar', keepAlive: true, diff --git a/apps/vben5/apps/app-antd/src/router/routes/modules/vben.ts b/apps/vben5/apps/app-antd/src/router/routes/modules/vben.ts index 210e8610f..98acf5821 100644 --- a/apps/vben5/apps/app-antd/src/router/routes/modules/vben.ts +++ b/apps/vben5/apps/app-antd/src/router/routes/modules/vben.ts @@ -8,30 +8,20 @@ import { VBEN_NAIVE_PREVIEW_URL, } from '@vben/constants'; -import { BasicLayout, IFrameView } from '#/layouts'; +import { IFrameView } from '#/layouts'; import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { badgeType: 'dot', icon: VBEN_LOGO_URL, - order: 9999, + order: 9998, title: $t('demos.vben.title'), }, name: 'VbenProject', path: '/vben-admin', children: [ - { - name: 'VbenAbout', - path: '/vben-admin/about', - component: () => import('#/views/_core/about/index.vue'), - meta: { - icon: 'lucide:copyright', - title: $t('demos.vben.about'), - }, - }, { name: 'VbenDocument', path: '/vben-admin/document', @@ -76,6 +66,16 @@ const routes: RouteRecordRaw[] = [ }, ], }, + { + name: 'VbenAbout', + path: '/vben-admin/about', + component: () => import('#/views/_core/about/index.vue'), + meta: { + icon: 'lucide:copyright', + title: $t('demos.vben.about'), + order: 9999, + }, + }, ]; export default routes; diff --git a/apps/vben5/apps/app-antd/src/views/dashboard/analytics/analytics-trends.vue b/apps/vben5/apps/app-antd/src/views/dashboard/analytics/analytics-trends.vue index fadfc917c..f1f0b232a 100644 --- a/apps/vben5/apps/app-antd/src/views/dashboard/analytics/analytics-trends.vue +++ b/apps/vben5/apps/app-antd/src/views/dashboard/analytics/analytics-trends.vue @@ -1,11 +1,9 @@ diff --git a/apps/vben5/docs/src/demos/vben-drawer/shared-data/index.vue b/apps/vben5/docs/src/demos/vben-drawer/shared-data/index.vue index 04885f157..fef6cb058 100644 --- a/apps/vben5/docs/src/demos/vben-drawer/shared-data/index.vue +++ b/apps/vben5/docs/src/demos/vben-drawer/shared-data/index.vue @@ -9,11 +9,12 @@ const [Drawer, drawerApi] = useVbenDrawer({ }); function open() { - drawerApi.setData({ - content: '外部传递的数据 content', - payload: '外部传递的数据 payload', - }); - drawerApi.open(); + drawerApi + .setData({ + content: '外部传递的数据 content', + payload: '外部传递的数据 payload', + }) + .open(); } diff --git a/apps/vben5/docs/src/demos/vben-modal/dynamic/index.vue b/apps/vben5/docs/src/demos/vben-modal/dynamic/index.vue index 718e532bc..1b0255459 100644 --- a/apps/vben5/docs/src/demos/vben-modal/dynamic/index.vue +++ b/apps/vben5/docs/src/demos/vben-modal/dynamic/index.vue @@ -13,8 +13,7 @@ function openModal() { } function handleUpdateTitle() { - modalApi.setState({ title: '外部动态标题' }); - modalApi.open(); + modalApi.setState({ title: '外部动态标题' }).open(); } diff --git a/apps/vben5/docs/src/demos/vben-modal/shared-data/index.vue b/apps/vben5/docs/src/demos/vben-modal/shared-data/index.vue index 58c35e24d..91afeb70d 100644 --- a/apps/vben5/docs/src/demos/vben-modal/shared-data/index.vue +++ b/apps/vben5/docs/src/demos/vben-modal/shared-data/index.vue @@ -9,11 +9,12 @@ const [Modal, modalApi] = useVbenModal({ }); function openModal() { - modalApi.setData({ - content: '外部传递的数据 content', - payload: '外部传递的数据 payload', - }); - modalApi.open(); + modalApi + .setData({ + content: '外部传递的数据 content', + payload: '外部传递的数据 payload', + }) + .open(); } diff --git a/apps/vben5/docs/src/en/guide/essentials/route.md b/apps/vben5/docs/src/en/guide/essentials/route.md index bef40d691..8fb0a6d1c 100644 --- a/apps/vben5/docs/src/en/guide/essentials/route.md +++ b/apps/vben5/docs/src/en/guide/essentials/route.md @@ -73,7 +73,6 @@ import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { badgeType: 'dot', badgeVariants: 'destructive', @@ -124,7 +123,6 @@ import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { icon: 'ic:baseline-view-in-ar', keepAlive: true, @@ -249,7 +247,6 @@ import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { icon: 'mdi:home', title: $t('page.home.title'), diff --git a/apps/vben5/docs/src/guide/essentials/route.md b/apps/vben5/docs/src/guide/essentials/route.md index 0eb74aea4..d8a938dda 100644 --- a/apps/vben5/docs/src/guide/essentials/route.md +++ b/apps/vben5/docs/src/guide/essentials/route.md @@ -62,12 +62,10 @@ import type { RouteRecordRaw } from 'vue-router'; import { VBEN_LOGO_URL } from '@vben/constants'; -import { BasicLayout } from '#/layouts'; import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { badgeType: 'dot', badgeVariants: 'destructive', @@ -103,7 +101,6 @@ export default routes; ::: tip -- 多级路由的父级路由无需设置 `component` 属性,只需设置 `children` 属性即可。除非你真的需要在父级路由嵌套下显示内容。 - 如果没有特殊情况,父级路由的 `redirect` 属性,不需要指定,默认会指向第一个子路由。 ::: @@ -113,12 +110,10 @@ export default routes; ```ts import type { RouteRecordRaw } from 'vue-router'; -import { BasicLayout } from '#/layouts'; import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { icon: 'ic:baseline-view-in-ar', keepAlive: true, @@ -238,12 +233,10 @@ import type { RouteRecordRaw } from 'vue-router'; import { VBEN_LOGO_URL } from '@vben/constants'; -import { BasicLayout } from '#/layouts'; import { $t } from '#/locales'; const routes: RouteRecordRaw[] = [ { - component: BasicLayout, meta: { icon: 'mdi:home', title: $t('page.home.title'), @@ -400,6 +393,10 @@ interface RouteMeta { * 菜单可以看到,但是访问会被重定向到403 */ menuVisibleWithForbidden?: boolean; + /** + * 当前路由不使用基础布局(仅在顶级生效) + */ + noBasicLayout?: boolean; /** * 在新窗口打开 */ @@ -584,6 +581,13 @@ _注意:_ 排序仅针对一级菜单有效,二级菜单的排序需要在对 用于配置页面的菜单参数,会在菜单中传递给页面。 +### noBasicLayout + +- 类型:`boolean` +- 默认值:`false` + +用于配置当前路由不使用基础布局,仅在顶级时生效。默认情况下,所有的路由都会被包裹在基础布局中(包含顶部以及侧边等导航部件),如果你的页面不需要这些部件,可以设置 `noBasicLayout` 为 `true`。 + ## 路由刷新 路由刷新方式如下: diff --git a/apps/vben5/docs/src/guide/essentials/server.md b/apps/vben5/docs/src/guide/essentials/server.md index 74a45d2ee..fedfbae25 100644 --- a/apps/vben5/docs/src/guide/essentials/server.md +++ b/apps/vben5/docs/src/guide/essentials/server.md @@ -231,19 +231,17 @@ function createRequestClient(baseURL: string) { }, }); - // response数据解构 - client.addResponseInterceptor({ - fulfilled: (response) => { - const { data: responseData, status } = response; - - const { code, data } = responseData; - - if (status >= 200 && status < 400 && code === 0) { - return data; - } - throw Object.assign({}, response, { response }); - }, - }); + // 处理返回的响应数据格式。会根据responseReturn指定的类型返回对应的数据 + client.addResponseInterceptor( + defaultResponseInterceptor({ + // 指定接口返回的数据中的 code 字段名 + codeField: 'code', + // 指定接口返回的数据中装载了主要数据的字段名 + dataField: 'data', + // 请求成功的 code 值,如果接口返回的 code 等于 successCode 则会认为是成功的请求 + successCode: 0, + }), + ); // token过期的处理 client.addResponseInterceptor( diff --git a/apps/vben5/docs/src/guide/in-depth/access.md b/apps/vben5/docs/src/guide/in-depth/access.md index c0c4bc991..be7d2ba0a 100644 --- a/apps/vben5/docs/src/guide/in-depth/access.md +++ b/apps/vben5/docs/src/guide/in-depth/access.md @@ -296,7 +296,7 @@ const { hasAccessByRoles } = useAccess(); #### 指令方式 -> 指令支持绑定单个或多个权限码。单个时可以直接传入字符串或数组中包含一个权限码,多个权限码则传入数组。 +> 指令支持绑定单个或多个角色。单个时可以直接传入字符串或数组中包含一个角色,多个角色均可访问则传入数组。 ```vue