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 ff18972a..752fc692 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); }); 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 1d5b4c26..f8069fb6 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, })); } } @@ -172,7 +171,11 @@ export class ModalApi { } open() { - this.store.setState((prev) => ({ ...prev, isOpen: true })); + this.store.setState((prev) => ({ + ...prev, + isOpen: true, + submitting: false, + })); } setData(payload: T) { diff --git a/playground/src/views/system/role/modules/form.vue b/playground/src/views/system/role/modules/form.vue index cae54a1c..e3c1d02d 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); } } },