in packages/element/src/form-tab/index.ts [66:148]
setup(props, { attrs, listeners }) {
const field = useField().value
const formTabRef = computed(() => props.formTab ?? createFormTab())
const prefixCls = `${stylePrefix}-form-tab`
return () => {
const formTab = formTabRef.value
const tabs = useTabs()
const activeKey = props.value || formTab?.activeKey || tabs?.[0]?.name
const badgedTab = (key: SchemaKey, props: any) => {
const errors = field.form.queryFeedbacks({
type: 'error',
address: `${field.address.concat(key)}.*`,
})
if (errors.length) {
return () =>
h(
Badge,
{
class: [`${prefixCls}-errors-badge`],
props: {
value: errors.length,
},
},
{ default: () => props.label }
)
}
return () => props.label
}
const getTabs = (tabs) => {
return tabs.map(({ props, schema, name }, key) => {
return h(
TabPane,
{
key,
props,
},
{
default: () => [
h(
RecursionField,
{
props: {
schema,
name,
},
},
{}
),
],
label: () => [
h('div', {}, { default: badgedTab(name, props) }),
],
}
)
})
}
return h(
Tabs,
{
class: [prefixCls],
style: attrs.style,
props: {
...attrs,
value: activeKey,
},
on: {
...listeners,
input: (key) => {
listeners.input?.(key)
formTab.setActiveKey?.(key)
},
},
},
{
default: () => getTabs(tabs),
}
)
}
},