diff --git a/packages/crud/src/components/form/index.tsx b/packages/crud/src/components/form/index.tsx index a458d1a..5c60139 100644 --- a/packages/crud/src/components/form/index.tsx +++ b/packages/crud/src/components/form/index.tsx @@ -1,8 +1,8 @@ import { defineComponent, h, nextTick } from "vue"; -import { cloneDeep, isBoolean, isEmpty, merge } from "lodash-es"; +import { cloneDeep, isBoolean, isEmpty } from "lodash-es"; import { useAction, useForm, usePlugins, useTabs } from "./helper"; -import { useBrowser, useConfig, useElApi } from "../../hooks"; -import { getValue } from "../../utils"; +import { useBrowser, useConfig, useElApi, useRefs } from "../../hooks"; +import { getValue, merge } from "../../utils"; import formHook from "../../utils/form-hook"; import { renderNode } from "../../utils/vnode"; import { parseFormHidden } from "../../utils/parse"; @@ -16,6 +16,7 @@ export default defineComponent({ }, setup(props, { expose, slots }) { + const { refs, setRefs } = useRefs(); const { style, dict } = useConfig(); const browser = useBrowser(); const { Form, config, form, visible, saving, loading, disabled } = useForm(); @@ -184,10 +185,11 @@ export default defineComponent({ const keys = Object.keys(error); if (Tabs.active.value) { - const item = config.items.find((e) => e.prop === keys[0]); + const el = refs.form.querySelector(`[data-prop="${keys[0]}"]`); - if (item) { - Tabs.set(item.group); + if (el) { + const group = el.getAttribute("data-group"); + Tabs.set(group); } } } @@ -352,6 +354,8 @@ export default defineComponent({ "no-label": !(e.renderLabel || e.label), "has-children": !!e.children }} + data-group={e.group} + data-prop={e.prop} label-width={props.inline ? "auto" : ""} label={e.label} prop={e.prop} @@ -454,7 +458,7 @@ export default defineComponent({ const children = config.items.map(renderFormItem); return ( -
+
{h( { - const Form = ( -
- {renderContainer()} - {renderFooter()} -
- ); - if (props.inner) { - return visible.value && Form; + return ( + visible.value && ( +
+ {renderContainer()} + {renderFooter()} +
+ ) + ); } else { return h( ,