From 93f0eea4e7026258d7cd7d6993595f8191d3475e Mon Sep 17 00:00:00 2001 From: ming4762 Date: Thu, 21 Aug 2025 12:41:04 +0800 Subject: [PATCH 01/11] fix: fix the issue of excessive line spacing in vbenForm (#6653) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gap-2和 pb-4/2 重叠导致间距过宽,gap-x只保留列间距 --- packages/@core/ui-kit/form-ui/src/form-render/form.vue | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/@core/ui-kit/form-ui/src/form-render/form.vue b/packages/@core/ui-kit/form-ui/src/form-render/form.vue index ff18972ad..752fc6928 100644 --- a/packages/@core/ui-kit/form-ui/src/form-render/form.vue +++ b/packages/@core/ui-kit/form-ui/src/form-render/form.vue @@ -43,12 +43,10 @@ const emits = defineEmits<{ const wrapperClass = computed(() => { const cls = ['flex']; - if (props.layout === 'vertical') { - cls.push(props.compact ? 'gap-x-2' : 'gap-x-4', 'flex-col grid'); - } else if (props.layout === 'inline') { - cls.push('flex-wrap gap-2'); + if (props.layout === 'inline') { + cls.push('flex-wrap gap-x-2'); } else { - cls.push('gap-2 flex-col grid'); + cls.push(props.compact ? 'gap-x-2' : 'gap-x-4', 'flex-col grid'); } return cn(...cls, props.wrapperClass); }); -- Gitee From 2cc78f925f34bbbebe8d3b0c57086f9307c0ba06 Mon Sep 17 00:00:00 2001 From: panda7 Date: Thu, 21 Aug 2025 15:17:55 +0800 Subject: [PATCH 02/11] fix: the bug in the lock method of the vbenModal component (#6648) --- packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts index 18dc90c4a..f60870b3f 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts @@ -107,7 +107,6 @@ export class ModalApi { this.store.setState((prev) => ({ ...prev, isOpen: false, - submitting: false, })); } } @@ -162,7 +161,11 @@ export class ModalApi { } open() { - this.store.setState((prev) => ({ ...prev, isOpen: true })); + this.store.setState((prev) => ({ + ...prev, + isOpen: true, + submitting: false, + })); } setData(payload: T) { -- Gitee From ffaf85c8f3c1c86d3c8aef83cc32f035944282ff Mon Sep 17 00:00:00 2001 From: Ken Hai Date: Thu, 21 Aug 2025 15:30:58 +0800 Subject: [PATCH 03/11] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E4=BF=AE=E6=94=B9=E6=97=B6VbenTree=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=9B=9E=E6=98=BE=E9=80=89=E4=B8=AD=20(#6662?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 修复角色修改时VbenTree组件没有回显选中 * chore: use nextTick Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: merge * chore: 更新 --------- Co-authored-by: haiyinlong Co-authored-by: Jin Mao <50581550+jinmao88@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- playground/src/views/system/role/modules/form.vue | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/playground/src/views/system/role/modules/form.vue b/playground/src/views/system/role/modules/form.vue index cae54a1c6..e3c1d02dc 100644 --- a/playground/src/views/system/role/modules/form.vue +++ b/playground/src/views/system/role/modules/form.vue @@ -5,7 +5,7 @@ import type { Recordable } from '@vben/types'; import type { SystemRoleApi } from '#/api/system/role'; -import { computed, ref } from 'vue'; +import { computed, nextTick, ref } from 'vue'; import { useVbenDrawer, VbenTree } from '@vben/common-ui'; import { IconifyIcon } from '@vben/icons'; @@ -47,20 +47,26 @@ const [Drawer, drawerApi] = useVbenDrawer({ drawerApi.unlock(); }); }, - onOpenChange(isOpen) { + + async onOpenChange(isOpen) { if (isOpen) { const data = drawerApi.getData(); formApi.resetForm(); + if (data) { formData.value = data; id.value = data.id; - formApi.setValues(data); } else { id.value = undefined; } if (permissions.value.length === 0) { - loadPermissions(); + await loadPermissions(); + } + // Wait for Vue to flush DOM updates (form fields mounted) + await nextTick(); + if (data) { + formApi.setValues(data); } } }, -- Gitee From cf6c4c9aae1edf6eb0b7e285a218504ec56ed773 Mon Sep 17 00:00:00 2001 From: LinaBell <15891557205@163.com> Date: Thu, 21 Aug 2025 22:26:10 +0800 Subject: [PATCH 04/11] fix: cannot read properties of null (reading 'nextSibling') (#6667) --- .../ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue | 11 +++-------- .../ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue | 6 +++--- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue index 22ed845af..719df0323 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue @@ -8,12 +8,7 @@ import { computed, ref } from 'vue'; import { cn } from '@vben-core/shared/utils'; import { X } from 'lucide-vue-next'; -import { - DialogClose, - DialogContent, - DialogPortal, - useForwardPropsEmits, -} from 'radix-vue'; +import { DialogClose, DialogContent, useForwardPropsEmits } from 'radix-vue'; import DialogOverlay from './DialogOverlay.vue'; @@ -87,7 +82,7 @@ defineExpose({ diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue index b9d8baf40..d067f70af 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue @@ -7,7 +7,7 @@ import { computed, ref } from 'vue'; import { cn } from '@vben-core/shared/utils'; -import { DialogContent, DialogPortal, useForwardPropsEmits } from 'radix-vue'; +import { DialogContent, useForwardPropsEmits } from 'radix-vue'; import { sheetVariants } from './sheet'; import SheetOverlay from './SheetOverlay.vue'; @@ -73,7 +73,7 @@ function onAnimationEnd(event: AnimationEvent) { -- Gitee From adbf793e79898e7e0b5d4ac791d9d58b344c6648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=9E=83=E8=9F=B9?= <52234099+pangxie231@users.noreply.github.com> Date: Mon, 25 Aug 2025 11:03:54 +0800 Subject: [PATCH 05/11] fix(@vben/web-ele): the main color tone for switching between dark and light themes has been reset (#6678) --- .../src/widgets/preferences/blocks/theme/builtin.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue b/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue index 27dfd28ae..d70bb2321 100644 --- a/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue +++ b/packages/effects/layouts/src/widgets/preferences/blocks/theme/builtin.vue @@ -104,7 +104,7 @@ function selectColor() { watch( () => [modelValue.value, props.isDark] as [BuiltinThemeType, boolean], - ([themeType, isDark]) => { + ([themeType, isDark], [_, isDarkPrev]) => { const theme = builtinThemePresets.value.find( (item) => item.type === themeType, ); @@ -113,7 +113,9 @@ watch( ? theme.darkPrimaryColor || theme.primaryColor : theme.primaryColor; - themeColorPrimary.value = primaryColor || theme.color; + if (!(theme.type === 'custom' && isDark !== isDarkPrev)) { + themeColorPrimary.value = primaryColor || theme.color; + } } }, ); -- Gitee From 566d3bdf7c5abaf1562c03b5ca8d96a37fdf838c Mon Sep 17 00:00:00 2001 From: LinaBell <15891557205@163.com> Date: Mon, 25 Aug 2025 21:25:29 +0800 Subject: [PATCH 06/11] fix: appendToMain warning (#6684) --- packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue | 2 +- packages/@core/ui-kit/shadcn-ui/src/ui/sheet/SheetContent.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue index 719df0323..ae656b979 100644 --- a/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue +++ b/packages/@core/ui-kit/shadcn-ui/src/ui/dialog/DialogContent.vue @@ -82,7 +82,7 @@ defineExpose({ .includes(propertyId!)) { - skuPropertyIds.push(propertyId!); - } - }), - ); - const propertyIds = propertyList.map((item) => item.id); - return skuPropertyIds.length === propertyIds.length; -}; - -/** 构建所有排列组合 */ -const build = ( - propertyValuesList: MallSpuApi.Property[][], -): MallSpuApi.Property[] | MallSpuApi.Property[][] => { - if (!propertyValuesList || propertyValuesList.length === 0) { - return []; - } else if (propertyValuesList.length === 1) { - return propertyValuesList[0] || []; - } else { - const result: MallSpuApi.Property[][] = []; - const rest = build(propertyValuesList.slice(1)); - if (propertyValuesList[0] && Array.isArray(rest)) { - for (let i = 0; i < propertyValuesList[0].length; i++) { - for (const restItem of rest) { - const currentItem = propertyValuesList[0][i]; - // 第一次不是数组结构,后面的都是数组结构 - if (Array.isArray(restItem)) { - result.push([currentItem!, ...restItem]); - } else if (restItem) { - // 确保restItem不是undefined,并进行类型断言 - result.push([currentItem!, restItem as MallSpuApi.Property]); - } - } - } - } - return result; - } -}; - -/** 监听属性列表,生成相关参数和表头 */ -watch( - () => props.propertyList, - (propertyList: PropertyAndValues[]) => { - // 如果不是多规格则结束 - if (!formData.value!.specType) { - return; - } - // 如果当前组件作为批量添加数据使用,则重置表数据 - if (props.isBatch) { - skuList.value = [ - { - price: 0, - marketPrice: 0, - costPrice: 0, - barCode: '', - picUrl: '', - stock: 0, - weight: 0, - volume: 0, - firstBrokeragePrice: 0, - secondBrokeragePrice: 0, - }, - ]; - } - - // 判断代理对象是否为空 - if (JSON.stringify(propertyList) === '[]') { - return; - } - // 重置表头 - tableHeaders.value = []; - // 生成表头 - propertyList.forEach((item, index) => { - // name加属性项index区分属性值 - tableHeaders.value.push({ prop: `name${index}`, label: item.name }); - }); - // 如果回显的 sku 属性和添加的属性一致则不处理 - if (validateData(propertyList)) { - return; - } - // 添加新属性没有属性值也不做处理 - if (propertyList.some((item) => !item.values || isEmpty(item.values))) { - return; - } - // 生成 table 数据,即 sku 列表 - generateTableData(propertyList); - }, - { - deep: true, - immediate: true, - }, -); -const activitySkuListRef = ref>(); - -const getSkuTableRef = () => { - return activitySkuListRef.value; -}; -// 暴露出生成 sku 方法,给添加属性成功时调用 -defineExpose({ generateTableData, validateSku, getSkuTableRef }); - -