From c2004905859897b793d2bdff15ce7f3b0ee70f08 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Sun, 27 Apr 2025 18:10:45 +0800 Subject: [PATCH 01/29] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=20ContentW?= =?UTF-8?q?rap=20=E6=8F=90=E5=8D=87=E6=8B=93=E5=B1=95=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/content-wrap/content-wrap.vue | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/web-antd/src/components/content-wrap/content-wrap.vue b/apps/web-antd/src/components/content-wrap/content-wrap.vue index 306e0fa6d..761a312ea 100644 --- a/apps/web-antd/src/components/content-wrap/content-wrap.vue +++ b/apps/web-antd/src/components/content-wrap/content-wrap.vue @@ -5,25 +5,45 @@ -- Gitee From 5c4b95b01ecdd257353b81f61eb7806a7fdc48f2 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Sun, 27 Apr 2025 18:13:08 +0800 Subject: [PATCH 02/29] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20vxe=20table?= =?UTF-8?q?=20=E5=B7=A5=E5=85=B7=E6=A0=8F=E4=BA=8C=E6=AC=A1=E5=B0=81?= =?UTF-8?q?=E8=A3=85=EF=BC=8C=E6=8F=90=E4=BE=9B=E7=BB=99=20vxe=20=E5=8E=9F?= =?UTF-8?q?=E7=94=9F=E5=88=97=E8=A1=A8=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/table-toolbar/index.ts | 1 + .../table-toolbar/table-toolbar.vue | 54 +++++++++++++++++++ packages/@core/base/icons/src/lucide.ts | 3 +- .../effects/hooks/src/use-content-maximize.ts | 17 ++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 apps/web-antd/src/components/table-toolbar/index.ts create mode 100644 apps/web-antd/src/components/table-toolbar/table-toolbar.vue diff --git a/apps/web-antd/src/components/table-toolbar/index.ts b/apps/web-antd/src/components/table-toolbar/index.ts new file mode 100644 index 000000000..720e3224b --- /dev/null +++ b/apps/web-antd/src/components/table-toolbar/index.ts @@ -0,0 +1 @@ +export { default as TableToolbar } from './table-toolbar.vue'; diff --git a/apps/web-antd/src/components/table-toolbar/table-toolbar.vue b/apps/web-antd/src/components/table-toolbar/table-toolbar.vue new file mode 100644 index 000000000..099d3a8c9 --- /dev/null +++ b/apps/web-antd/src/components/table-toolbar/table-toolbar.vue @@ -0,0 +1,54 @@ + + + diff --git a/packages/@core/base/icons/src/lucide.ts b/packages/@core/base/icons/src/lucide.ts index 21ac04e2e..a4e6f0507 100644 --- a/packages/@core/base/icons/src/lucide.ts +++ b/packages/@core/base/icons/src/lucide.ts @@ -55,10 +55,12 @@ export { Pin, PinOff, Plus, + RefreshCw, RotateCw, Search, SearchX, Settings, + ShieldQuestion, Shrink, Square, SquareCheckBig, @@ -69,5 +71,4 @@ export { Upload, UserRoundPen, X, - RefreshCw, } from 'lucide-vue-next'; diff --git a/packages/effects/hooks/src/use-content-maximize.ts b/packages/effects/hooks/src/use-content-maximize.ts index 77d1fab35..142a254f0 100644 --- a/packages/effects/hooks/src/use-content-maximize.ts +++ b/packages/effects/hooks/src/use-content-maximize.ts @@ -17,8 +17,25 @@ export function useContentMaximize() { }, }); } + + function toggleMaximizeAndTabbarHidden() { + const isMaximize = contentIsMaximize.value; + updatePreferences({ + header: { + hidden: !isMaximize, + }, + sidebar: { + hidden: !isMaximize, + }, + tabbar: { + enable: isMaximize, + }, + }); + } + return { contentIsMaximize, toggleMaximize, + toggleMaximizeAndTabbarHidden, }; } -- Gitee From 994b4443199180561358335067775d2764a71646 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Sun, 27 Apr 2025 18:16:38 +0800 Subject: [PATCH 03/29] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=20antd=20?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B=E6=8F=90=E5=88=B0=E7=9A=84=E4=B8=80=E4=BA=9B=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/infra/demo/demo01/index.ts | 6 +- apps/web-antd/src/utils/date.ts | 2 +- .../views/infra/demo/general/demo01/index.vue | 67 +++++++++++-------- .../demo/general/demo01/modules/form.vue | 13 ++-- 4 files changed, 49 insertions(+), 39 deletions(-) diff --git a/apps/web-antd/src/api/infra/demo/demo01/index.ts b/apps/web-antd/src/api/infra/demo/demo01/index.ts index b03a2aef0..5a940a61d 100644 --- a/apps/web-antd/src/api/infra/demo/demo01/index.ts +++ b/apps/web-antd/src/api/infra/demo/demo01/index.ts @@ -1,3 +1,5 @@ +import type { Dayjs } from 'dayjs'; + import type { PageParam, PageResult } from '@vben/request'; import { requestClient } from '#/api/request'; @@ -7,8 +9,8 @@ export namespace Demo01ContactApi { export interface Demo01Contact { id: number; // 编号 name?: string; // 名字 - sex?: number; // 性别 - birthday?: Date; // 出生年 + sex?: boolean; // 性别 + birthday?: Dayjs | string; // 出生年 description?: string; // 简介 avatar: string; // 头像 } diff --git a/apps/web-antd/src/utils/date.ts b/apps/web-antd/src/utils/date.ts index 2c899a9f8..537fb9e73 100644 --- a/apps/web-antd/src/utils/date.ts +++ b/apps/web-antd/src/utils/date.ts @@ -3,7 +3,7 @@ import dayjs from 'dayjs'; // TODO @芋艿:后续整理下 迁移至 packages/core/base/shared/src/utils/date.ts,后续删除 使用 @vben/utils 的 getRangePickerDefaultProps /** 时间段选择器拓展 */ -export function getRangePickerDefaultProps() { +export function getRangePickerDefaultProps(): any { return { showTime: { format: 'HH:mm:ss', diff --git a/apps/web-antd/src/views/infra/demo/general/demo01/index.vue b/apps/web-antd/src/views/infra/demo/general/demo01/index.vue index d5136a881..bab52a84e 100644 --- a/apps/web-antd/src/views/infra/demo/general/demo01/index.vue +++ b/apps/web-antd/src/views/infra/demo/general/demo01/index.vue @@ -1,10 +1,12 @@ @@ -128,15 +142,10 @@ onMounted(() => { - + -
+ { placeholder="请输入名字" allow-clear @press-enter="handleQuery" - class="!w-240px" + class="w-full" /> @@ -152,7 +161,7 @@ onMounted(() => { v-model:value="queryParams.sex" placeholder="请选择性别" allow-clear - class="!w-240px" + class="w-full" > - - + - - + +
+
+ + + + + diff --git a/apps/web-antd/src/views/infra/demo/general/demo01/modules/form.vue b/apps/web-antd/src/views/infra/demo/general/demo01/modules/form.vue index a0862b012..2064f5513 100644 --- a/apps/web-antd/src/views/infra/demo/general/demo01/modules/form.vue +++ b/apps/web-antd/src/views/infra/demo/general/demo01/modules/form.vue @@ -26,11 +26,9 @@ import { ImageUpload } from '#/components/upload'; import { $t } from '#/locales'; import { DICT_TYPE, getDictOptions } from '#/utils/dict'; -const emit = defineEmits(['success']); // TODO @puhui999:emit 和下面空一行? +const emit = defineEmits(['success']); + const formRef = ref(); -// TODO @puhui999:labelCol、wrapperCol 直接写?不用单独定义变量, -const labelCol = { span: 5 }; -const wrapperCol = { span: 13 }; const formData = ref>({ id: undefined, name: undefined, @@ -90,8 +88,7 @@ const [Modal, modalApi] = useVbenModal({ resetForm(); return; } - - // 加载数据 TODO @puhui999:这里不用空行 + // 加载数据 let data = modalApi.getData(); if (!data) { return; @@ -115,8 +112,8 @@ const [Modal, modalApi] = useVbenModal({ ref="formRef" :model="formData" :rules="rules" - :label-col="labelCol" - :wrapper-col="wrapperCol" + :label-col="{ span: 5 }" + :wrapper-col="{ span: 18 }" > -- Gitee From add1e61b6f197d82724668e33a07ed2df0d612b1 Mon Sep 17 00:00:00 2001 From: Netfan Date: Wed, 30 Apr 2025 23:41:44 +0800 Subject: [PATCH 04/29] fix: show validation message as tooltip in compact form (#6087) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 紧凑模式表单的校验消息将显示为一个tooltip --- packages/@core/ui-kit/form-ui/package.json | 1 + .../form-ui/src/form-render/form-field.vue | 22 ++++++++++++++++++- pnpm-lock.yaml | 3 +++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/@core/ui-kit/form-ui/package.json b/packages/@core/ui-kit/form-ui/package.json index 09237896e..920b05764 100644 --- a/packages/@core/ui-kit/form-ui/package.json +++ b/packages/@core/ui-kit/form-ui/package.json @@ -38,6 +38,7 @@ }, "dependencies": { "@vben-core/composables": "workspace:*", + "@vben-core/icons": "workspace:*", "@vben-core/shadcn-ui": "workspace:*", "@vben-core/shared": "workspace:*", "@vben-core/typings": "workspace:*", diff --git a/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue b/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue index 61852aaeb..fd5fb5efa 100644 --- a/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue +++ b/packages/@core/ui-kit/form-ui/src/form-render/form-field.vue @@ -5,6 +5,7 @@ import type { FormSchema, MaybeComponentProps } from '../types'; import { computed, nextTick, onUnmounted, useTemplateRef, watch } from 'vue'; +import { CircleAlert } from '@vben-core/icons'; import { FormControl, FormDescription, @@ -12,6 +13,7 @@ import { FormItem, FormMessage, VbenRenderContent, + VbenTooltip, } from '@vben-core/shadcn-ui'; import { cn, isFunction, isObject, isString } from '@vben-core/shared/utils'; @@ -354,6 +356,24 @@ onUnmounted(() => { + + + + @@ -365,7 +385,7 @@ onUnmounted(() => { - + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5735c2d68..58cc8b56e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1335,6 +1335,9 @@ importers: '@vben-core/composables': specifier: workspace:* version: link:../../composables + '@vben-core/icons': + specifier: workspace:* + version: link:../../base/icons '@vben-core/shadcn-ui': specifier: workspace:* version: link:../shadcn-ui -- Gitee From 5de954baa42c0f09153e4fa5e2023508cb03ddf9 Mon Sep 17 00:00:00 2001 From: ming4762 Date: Thu, 1 May 2025 10:40:42 +0800 Subject: [PATCH 05/29] fix: fix `LoginExpiredModal` in some cases, `message` may be obscured (#6086) --- .../ui/authentication/login-expired-modal.vue | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue b/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue index 4b4f9b448..c337c29da 100644 --- a/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue +++ b/packages/effects/common-ui/src/ui/authentication/login-expired-modal.vue @@ -35,6 +35,16 @@ const getZIndex = computed(() => { return props.zIndex || calcZIndex(); }); +/** + * 排除ant-message和loading:9999的z-index + */ +const zIndexExcludeClass = ['ant-message', 'loading']; +function isZIndexExcludeClass(element: Element) { + return zIndexExcludeClass.some((className) => + element.classList.contains(className), + ); +} + /** * 获取最大的zIndex值 */ @@ -44,7 +54,11 @@ function calcZIndex() { [...elements].forEach((element) => { const style = window.getComputedStyle(element); const zIndex = style.getPropertyValue('z-index'); - if (zIndex && !Number.isNaN(Number.parseInt(zIndex))) { + if ( + zIndex && + !Number.isNaN(Number.parseInt(zIndex)) && + !isZIndexExcludeClass(element) + ) { maxZ = Math.max(maxZ, Number.parseInt(zIndex)); } }); -- Gitee From 3e6d608a2fb2ae09ca486075d4d5c462fccadea2 Mon Sep 17 00:00:00 2001 From: Netfan Date: Thu, 1 May 2025 14:09:37 +0800 Subject: [PATCH 06/29] fix: destroyOnClose incorrect default value, fixed #6092 (#6093) --- docs/src/components/common-ui/vben-drawer.md | 2 +- packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue | 2 +- packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts | 4 +--- packages/@core/ui-kit/popup-ui/src/modal/modal.vue | 2 +- packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts | 4 +--- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/docs/src/components/common-ui/vben-drawer.md b/docs/src/components/common-ui/vben-drawer.md index 0eedb01b7..b66bd3a07 100644 --- a/docs/src/components/common-ui/vben-drawer.md +++ b/docs/src/components/common-ui/vben-drawer.md @@ -78,7 +78,7 @@ const [Drawer, drawerApi] = useVbenDrawer({ | --- | --- | --- | --- | | appendToMain | 是否挂载到内容区域(默认挂载到body) | `boolean` | `false` | | connectedComponent | 连接另一个Modal组件 | `Component` | - | -| destroyOnClose | 关闭时销毁`connectedComponent` | `boolean` | `false` | +| destroyOnClose | 关闭时销毁 | `boolean` | `false` | | title | 标题 | `string\|slot` | - | | titleTooltip | 标题提示信息 | `string\|slot` | - | | description | 描述信息 | `string\|slot` | - | diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue index 250699799..ebd98fa2b 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue +++ b/packages/@core/ui-kit/popup-ui/src/drawer/drawer.vue @@ -35,7 +35,7 @@ interface Props extends DrawerProps { const props = withDefaults(defineProps(), { appendToMain: false, closeIconPlacement: 'right', - destroyOnClose: true, + destroyOnClose: false, drawerApi: undefined, submitting: false, zIndex: 1000, diff --git a/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts b/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts index 59bccbd8e..21b11c56f 100644 --- a/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts +++ b/packages/@core/ui-kit/popup-ui/src/drawer/use-drawer.ts @@ -21,9 +21,7 @@ import VbenDrawer from './drawer.vue'; const USER_DRAWER_INJECT_KEY = Symbol('VBEN_DRAWER_INJECT'); -const DEFAULT_DRAWER_PROPS: Partial = { - destroyOnClose: true, -}; +const DEFAULT_DRAWER_PROPS: Partial = {}; export function setDefaultDrawerProps(props: Partial) { Object.assign(DEFAULT_DRAWER_PROPS, props); diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue index 1f3e5468c..7fbc2be11 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue @@ -34,7 +34,7 @@ interface Props extends ModalProps { const props = withDefaults(defineProps(), { appendToMain: false, - destroyOnClose: true, + destroyOnClose: false, modalApi: undefined, }); diff --git a/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts b/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts index e2c709d0f..cafd7b876 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/use-modal.ts @@ -17,9 +17,7 @@ import VbenModal from './modal.vue'; const USER_MODAL_INJECT_KEY = Symbol('VBEN_MODAL_INJECT'); -const DEFAULT_MODAL_PROPS: Partial = { - destroyOnClose: true, -}; +const DEFAULT_MODAL_PROPS: Partial = {}; export function setDefaultModalProps(props: Partial) { Object.assign(DEFAULT_MODAL_PROPS, props); -- Gitee From 0517a7014fe2d413a1d4a69cc5481d6199f20834 Mon Sep 17 00:00:00 2001 From: Netfan Date: Thu, 1 May 2025 20:08:44 +0800 Subject: [PATCH 07/29] fix: add missing translation for preferences drawer (#6094) --- .../src/widgets/preferences/blocks/layout/sidebar.vue | 6 +++--- packages/locales/src/langs/en-US/preferences.json | 3 +++ packages/locales/src/langs/zh-CN/preferences.json | 3 +++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue b/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue index 1dbc4f99b..e8d84afa1 100644 --- a/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue +++ b/packages/effects/layouts/src/widgets/preferences/blocks/layout/sidebar.vue @@ -79,14 +79,14 @@ const handleCheckboxChange = () => { - 按钮配置 + {{ $t('preferences.sidebar.buttons') }} Date: Thu, 1 May 2025 21:40:45 +0800 Subject: [PATCH 08/29] fix: add triggerClass binding to PopoverTrigger and update icon-picker styles (#6095) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Popover支持设置trigger的样式 * 修正icon-picker的input值更新 --- .../ui-kit/shadcn-ui/src/components/popover/popover.vue | 4 +++- .../common-ui/src/components/icon-picker/icon-picker.vue | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue b/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue index 07d5d0621..c398bddc2 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/components/popover/popover.vue @@ -21,6 +21,7 @@ interface Props extends PopoverRootProps { class?: ClassType; contentClass?: ClassType; contentProps?: PopoverContentProps; + triggerClass?: ClassType; } const props = withDefaults(defineProps(), {}); @@ -32,6 +33,7 @@ const delegatedProps = computed(() => { class: _cls, contentClass: _, contentProps: _cProps, + triggerClass: _tClass, ...delegated } = props; @@ -43,7 +45,7 @@ const forwarded = useForwardPropsEmits(delegatedProps, emits);