in packages/element/src/form-collapse/index.ts [109:191]
setup(props, { attrs, emit }) {
const field = useField()
const schema = useFieldSchema()
const prefixCls = `${stylePrefix}-form-collapse`
const _formCollapse = computed(
() => props.formCollapse ?? createFormCollapse()
)
const takeActiveKeys = (panels: Panels) => {
if (props.activeKey) return props.activeKey
if (_formCollapse.value?.activeKeys)
return _formCollapse.value?.activeKeys
if (attrs.accordion) return panels[0]?.name
return panels.map((item) => item.name)
}
const badgedHeader = (key: SchemaKey, props: any) => {
const errors = field.value.form.queryFeedbacks({
type: 'error',
address: `${field.value.address.concat(key)}.*`,
})
if (errors.length) {
return h(
Badge,
{
class: [`${prefixCls}-errors-badge`],
props: {
value: errors.length,
},
},
{ default: () => props.title }
)
}
return props.title
}
return () => {
const panels = usePanels(field.value, schema.value)
const activeKey = takeActiveKeys(panels)
return h(
Collapse,
{
class: prefixCls,
props: {
value: activeKey,
},
on: {
change: (key: string | string[]) => {
emit('input', key)
_formCollapse.value.setActiveKeys(key)
},
},
},
{
default: () => {
return panels.map(({ props, schema, name }, index) => {
return h(
CollapseItem,
{
key: index,
props: {
...props,
name,
},
},
{
default: () => [
h(RecursionField, { props: { schema, name } }, {}),
],
title: () =>
h(
'span',
{},
{ default: () => badgedHeader(name, props) }
),
}
)
})
},
}
)
}
},