From 418252c652aafaf09bd67c52c176448d3746f6dd Mon Sep 17 00:00:00 2001 From: Vben Date: Thu, 4 Mar 2021 23:42:32 +0800 Subject: [PATCH] feat(tree): add clickRowToExpand option close #318 --- CHANGELOG.zh_CN.md | 6 ++++ src/components/Tree/src/index.vue | 32 ++++++++++++++----- src/components/Tree/src/props.ts | 1 + src/components/Tree/src/types.ts | 7 ++-- .../demo/system/account/AccountModal.vue | 3 +- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 65c70e85fc3..8eeaa0b7f3a 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -1,10 +1,16 @@ ## Wip +### ✨ Features + +- `BasicTree` 新增`clickRowToExpand`,用于单击树节点展开 + ### 🐛 Bug Fixes - 修复`Description`已知问题 - 修复`BasicForm`已知问题 - 修复`BasicTree`下 ActionItem 的 show 属性逻辑问题 +- 修复树组件 demo 示例样式错误 +- 修复账号管理新增未清空旧数据 ## 2.0.2 (2021-03-04) diff --git a/src/components/Tree/src/index.vue b/src/components/Tree/src/index.vue index c4714f53825..f4b3136389e 100644 --- a/src/components/Tree/src/index.vue +++ b/src/components/Tree/src/index.vue @@ -121,7 +121,7 @@ return icon; } - async function handleRightClick({ event, node }: any) { + async function handleRightClick({ event, node }: Recordable) { const { rightMenuList: menuList = [], beforeRightClick } = props; let rightMenuList: ContextMenuItem[] = []; @@ -137,14 +137,14 @@ }); } - function setExpandedKeys(keys: string[]) { + function setExpandedKeys(keys: Keys) { state.expandedKeys = keys; } function getExpandedKeys() { return state.expandedKeys; } - function setSelectedKeys(keys: string[]) { + function setSelectedKeys(keys: Keys) { state.selectedKeys = keys; } @@ -182,10 +182,23 @@ searchState.searchData = filter(unref(treeDataRef), (node) => { const { title } = node; return title?.includes(searchValue) ?? false; - // || key?.includes(searchValue); }); } + function handleClickNode(key: string, children: TreeItem[]) { + if (!props.clickRowToExpand || !children || children.length === 0) return; + if (!state.expandedKeys.includes(key)) { + setExpandedKeys([...state.expandedKeys, key]); + } else { + const keys = [...state.expandedKeys]; + const index = keys.findIndex((item) => item === key); + if (index !== -1) { + keys.splice(index, 1); + } + setExpandedKeys(keys); + } + } + watchEffect(() => { treeDataRef.value = props.treeData as TreeItem[]; state.expandedKeys = props.expandedKeys; @@ -264,11 +277,15 @@ const propsData = omit(item, 'title'); const icon = getIcon({ ...item, level }, item.icon); + const children = get(item, childrenField) || []; return ( {{ title: () => ( - + {icon && } {renderAction({ ...item, level })} ), - default: () => - renderTreeNode({ data: get(item, childrenField) || [], level: level + 1 }), + default: () => renderTreeNode({ data: children, level: level + 1 }), }} ); @@ -289,7 +305,7 @@ return () => { const { title, helpMessage, toolbar, search } = props; return ( -
+
{(title || toolbar || search) && ( , diff --git a/src/components/Tree/src/types.ts b/src/components/Tree/src/types.ts index d7a8aa5b62e..95af95fb4fd 100644 --- a/src/components/Tree/src/types.ts +++ b/src/components/Tree/src/types.ts @@ -14,11 +14,10 @@ export interface ReplaceFields { key?: string; } -export type Keys = string[] | number[]; +export type Keys = (string | number)[]; export type CheckKeys = - | string[] - | number[] - | { checked: string[] | number[]; halfChecked: string[] | number[] }; + | (string | number)[] + | { checked: (string | number)[]; halfChecked: (string | number)[] }; export interface TreeActionType { checkAll: (checkAll: boolean) => void; diff --git a/src/views/demo/system/account/AccountModal.vue b/src/views/demo/system/account/AccountModal.vue index b3e8c672842..f549871ae44 100644 --- a/src/views/demo/system/account/AccountModal.vue +++ b/src/views/demo/system/account/AccountModal.vue @@ -17,7 +17,7 @@ setup(_, { emit }) { const isUpdate = ref(true); - const [registerForm, { setFieldsValue, updateSchema, validate }] = useForm({ + const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({ labelWidth: 100, schemas: accountFormSchema, showActionButtonGroup: false, @@ -27,6 +27,7 @@ }); const [registerModal, { setModalProps }] = useModalInner(async (data) => { + resetFields(); setModalProps({ confirmLoading: false }); isUpdate.value = !!data?.isUpdate;