From 8b62fa0cb0559ec3ea8a1b82a2d44165b2337522 Mon Sep 17 00:00:00 2001 From: Vben Date: Tue, 2 Mar 2021 23:57:35 +0800 Subject: [PATCH] feat(tree): actionItem added show attribute close #314 --- CHANGELOG.zh_CN.md | 1 + src/components/Tree/src/index.vue | 12 ++++++++++-- src/components/Tree/src/types.ts | 3 ++- src/views/demo/tree/EditTree.vue | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 6c534fc9..cb9c924d 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -12,6 +12,7 @@ - 新增部门管理示例界面 - 新增 WebSocket 示例和服务脚本 - BasicTree 组件新增 `renderIcon` 属性用于控制层级图标显示 +- BasicTree->actionItem 新增 show 属性,用于动态控制按钮显示 ### ⚡ Performance Improvements diff --git a/src/components/Tree/src/index.vue b/src/components/Tree/src/index.vue index 27a29b62..194fb4de 100644 --- a/src/components/Tree/src/index.vue +++ b/src/components/Tree/src/index.vue @@ -16,7 +16,7 @@ // import { DownOutlined } from '@ant-design/icons-vue'; import { omit, get } from 'lodash-es'; - import { isFunction } from '/@/utils/is'; + import { isBoolean, isFunction } from '/@/utils/is'; import { extendSlots } from '/@/utils/helper/tsxHelper'; import { useTree } from './useTree'; @@ -116,6 +116,14 @@ const { actionList } = props; if (!actionList || actionList.length === 0) return; return actionList.map((item, index) => { + if (isFunction(item.show)) { + return item.show?.(node); + } + + if (isBoolean(item.show)) { + return item.show; + } + return ( {item.render(node)} @@ -147,7 +155,7 @@ > {get(item, titleField)} - {renderAction(item)} + {renderAction({ ...item, level })} ), default: () => diff --git a/src/components/Tree/src/types.ts b/src/components/Tree/src/types.ts index 54105b3e..0d1ea796 100644 --- a/src/components/Tree/src/types.ts +++ b/src/components/Tree/src/types.ts @@ -1,6 +1,7 @@ import type { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; export interface ActionItem { - render: (record: any) => any; + render: (record: Recordable) => any; + show?: boolean | ((record: Recordable) => boolean); } export interface TreeItem extends TreeDataItem { diff --git a/src/views/demo/tree/EditTree.vue b/src/views/demo/tree/EditTree.vue index 30624bdd..b31789a8 100644 --- a/src/views/demo/tree/EditTree.vue +++ b/src/views/demo/tree/EditTree.vue @@ -46,6 +46,7 @@ } const actionList: ActionItem[] = [ { + // show:()=>boolean; render: (node) => { return h(PlusOutlined, { class: 'ml-2', -- GitLab