From 9651a8d406e7e6097dd7472b3bfffe4a5e7e3b1f Mon Sep 17 00:00:00 2001 From: Liuzj <530604689@qq.com> Date: Mon, 7 Nov 2022 17:08:06 +0800 Subject: [PATCH] feat(comp:select,comp:tree-select,comp:cascader): add selectedItem slot (#1257) --- .../_private/selector/src/Selector.tsx | 4 ++ packages/components/cascader/docs/Api.zh.md | 13 +++++++ packages/components/select/demo/SelectAll.vue | 37 ++++++++++++++++++- packages/components/select/docs/Api.zh.md | 13 +++++++ .../components/tree-select/docs/Api.zh.md | 13 +++++++ 5 files changed, 79 insertions(+), 1 deletion(-) diff --git a/packages/components/_private/selector/src/Selector.tsx b/packages/components/_private/selector/src/Selector.tsx index 321bd1261..34fdb64c1 100644 --- a/packages/components/_private/selector/src/Selector.tsx +++ b/packages/components/_private/selector/src/Selector.tsx @@ -162,6 +162,10 @@ export default defineComponent({ onRemove: props.onItemRemove, } + const selectedItemSlot = slots.selectedItem + if (selectedItemSlot) { + return selectedItemSlot(itemProps) + } const slotOrName = slots.selectedLabel || slots.label || rawData.customLabel || props.defaultLabelSlotName const selectedLabelRender = isString(slotOrName) ? slots[slotOrName] : slotOrName const labelNode = selectedLabelRender ? selectedLabelRender(rawData) : label diff --git a/packages/components/cascader/docs/Api.zh.md b/packages/components/cascader/docs/Api.zh.md index be5973f15..42a5941b9 100644 --- a/packages/components/cascader/docs/Api.zh.md +++ b/packages/components/cascader/docs/Api.zh.md @@ -64,10 +64,23 @@ | 名称 | 说明 | 参数类型 | 备注 | | --- | --- | --- | --- | +| `selectedItem` | 自定义选中项 | `data: SelectedItemProps` | 使用该插槽后`selectedLabel`将无效 | | `selectedLabel` | 自定义选中的标签 | `data: CascaderData` | | | `overflowedLabel` | 自定义超出最多显示多少个标签的内容 | `data: CascaderData[]` | 参数为超出的数组 | | `optionLabel` | 自定义选项的文本 | `data: SelectOption` | - | +```ts +interface SelectedItemProps { + disabled: boolean + key: VKey + prefixCls: string + removable: boolean + label: string + value: unknown + onRemove: (key: VKey) => void +} +``` + #### CascaderMethods | 名称 | 说明 | 参数类型 | 备注 | diff --git a/packages/components/select/demo/SelectAll.vue b/packages/components/select/demo/SelectAll.vue index 443aa87b3..85fe7264e 100644 --- a/packages/components/select/demo/SelectAll.vue +++ b/packages/components/select/demo/SelectAll.vue @@ -1,10 +1,29 @@ + diff --git a/packages/components/select/docs/Api.zh.md b/packages/components/select/docs/Api.zh.md index 8d76ed9a4..2d6a0977f 100644 --- a/packages/components/select/docs/Api.zh.md +++ b/packages/components/select/docs/Api.zh.md @@ -76,11 +76,24 @@ export type SelectSearchFn = (data: SelectData, searchValue: string) => boolean | 名称 | 说明 | 参数类型 | 备注 | | -- | -- | -- | -- | | `default` | 选项内容 | - | - | +| `selectedItem` | 自定义选中项 | `data: SelectedItemProps` | 使用该插槽后`selectedLabel`将无效 | | `selectedLabel` | 自定义选中的标签 | `data: SelectOption` | | | `overflowedLabel` | 自定义超出最多显示多少个标签的内容 | `data: SelectOption[]` | 参数为超出的数组 | | `optionLabel` | 自定义选项的文本 | `data: SelectOption` | - | | `optionGroupLabel` | 自定义选项组的文本 | `data: SelectOptionGroup` | - | +```ts +interface SelectedItemProps { + disabled: boolean + key: VKey + prefixCls: string + removable: boolean + label: string + value: unknown + onRemove: (key: VKey) => void +} +``` + #### SelectMethods | 名称 | 说明 | 参数类型 | 备注 | diff --git a/packages/components/tree-select/docs/Api.zh.md b/packages/components/tree-select/docs/Api.zh.md index d18496787..965998fbe 100644 --- a/packages/components/tree-select/docs/Api.zh.md +++ b/packages/components/tree-select/docs/Api.zh.md @@ -84,6 +84,7 @@ | --- | --- | --- | --- | | `empty` | 自定义当下拉列表为空时显示的内容 | - | - | | `expandIcon` | 节点展开图标 | `{key: VKey, expanded: boolean, node: TreeSelectNode}` | - | +| `selectedItem` | 自定义选中项 | `{node: SelectedItemProps}` | 使用该插槽后`selectedLabel`将无效 | | `selectedLabel` | 自定义选中的标签 | `{node: RawNode}` | `RawNode`为用户传入的数据结构 | | `leafLineIcon` | 叶子节点的图标,用于替换默认的连接线 | - | 仅在 `showLine 时生效` | | `overflowedLabel` | 自定义超出最多显示多少个标签的内容 | `{nodes: RawNode[]}` | 参数为超出的数组 | @@ -93,6 +94,18 @@ | `treePrefix` | 自定义节点的前缀图标 | `{key: VKey, selected: boolean, node: TreeSelectNode}` | - | | `treeSuffix` | 自定义节点的后缀图标 | `{key: VKey, selected: boolean, node: TreeSelectNode}` | - | +```ts +interface SelectedItemProps { + disabled: boolean + key: VKey + prefixCls: string + removable: boolean + label: string + value: unknown + onRemove: (key: VKey) => void +} +``` + #### TreeSelectMethods | 名称 | 说明 | 参数类型 | 备注 |