fix(cascader): fix When using slots in cascader-panel, the mf template will error (#3537)

This commit is contained in:
申君健 2025-06-26 14:04:48 +08:00 committed by GitHub
parent 80cb2c3047
commit 768fc7b709
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 17 additions and 2 deletions

View File

@ -45,6 +45,7 @@ export const renderless = (
inActivePath: computed(() => api.isInPath(parent.state.activePath)), inActivePath: computed(() => api.isInPath(parent.state.activePath)),
inCheckedPath: computed(() => api.comptCheckPath()), inCheckedPath: computed(() => api.comptCheckPath()),
value: computed(() => props.node.getValueByOption()), value: computed(() => props.node.getValueByOption()),
// 仅 mf 用到nodeLabel
nodeLabel: computed(() => { nodeLabel: computed(() => {
return parent.state.renderLabelFn return parent.state.renderLabelFn
? parent.state.renderLabelFn({ node: props.node, data: props.node.data }) ? parent.state.renderLabelFn({ node: props.node, data: props.node.data })

View File

@ -16,7 +16,12 @@
) )
" "
> >
<span :class="[node ? gcls('cascader-node__label_disabled') : '']">{{ state.nodeLabel }}</span> <span v-if="typeof state.nodeLabel === 'string'" :class="[node ? gcls('cascader-node__label_disabled') : '']">
{{ state.nodeLabel }}
</span>
<span v-else :class="[node ? gcls('cascader-node__label_disabled') : '']">
<render-node-label :vnode="state.nodeLabel" />
</span>
<icon-loading v-if="node.loading" :class="gcls('cascader-node__postfix')"></icon-loading> <icon-loading v-if="node.loading" :class="gcls('cascader-node__postfix')"></icon-loading>
<icon-chevron-right <icon-chevron-right
v-else-if="!state.isLeaf" v-else-if="!state.isLeaf"
@ -43,7 +48,15 @@ export default defineComponent({
name: $prefix + 'CascaderNode', name: $prefix + 'CascaderNode',
components: { components: {
IconLoading: IconLoading(), IconLoading: IconLoading(),
IconChevronRight: IconChevronRight() IconChevronRight: IconChevronRight(),
RenderNodeLabel: {
name: 'AnyNode',
functional: true,
props: ['vnode'],
render(h, ctx) {
return h.vnode || ctx.props?.vnode // vue2,3
}
}
}, },
inheritAttrs: false, inheritAttrs: false,
emits: ['expand', 'update:modelValue', 'expand-change', 'active-item-change', 'change'], emits: ['expand', 'update:modelValue', 'expand-change', 'active-item-change', 'change'],

View File

@ -119,6 +119,7 @@ export default defineComponent({
const vnode = render ? render({ node, data: node.data }) : null const vnode = render ? render({ node, data: node.data }) : null
// state.nodeLabel
return <span class="tiny-cascader-node__label">{vnode || node.label}</span> return <span class="tiny-cascader-node__label">{vnode || node.label}</span>
} }