From e8b70b78d783152c926d2b2bb634cc6b5daab6f4 Mon Sep 17 00:00:00 2001 From: Kagol Date: Fri, 8 Apr 2022 12:01:32 +0800 Subject: [PATCH 1/4] =?UTF-8?q?feat(tree):=20=E5=A2=9E=E5=8A=A0check?= =?UTF-8?q?=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devui/tree/src/components/tree-node.tsx | 10 +- .../devui/tree/src/new-tree-types.ts | 19 +++ .../devui-vue/devui/tree/src/new-tree.tsx | 33 ++--- .../devui-vue/docs/components/tree/index.md | 135 +----------------- 4 files changed, 46 insertions(+), 151 deletions(-) create mode 100644 packages/devui-vue/devui/tree/src/new-tree-types.ts diff --git a/packages/devui-vue/devui/tree/src/components/tree-node.tsx b/packages/devui-vue/devui/tree/src/components/tree-node.tsx index dac5a072c3..7376de247d 100644 --- a/packages/devui-vue/devui/tree/src/components/tree-node.tsx +++ b/packages/devui-vue/devui/tree/src/components/tree-node.tsx @@ -12,9 +12,13 @@ export default defineComponent({ data: { type: Object as PropType, }, + check: { + type: Boolean, + default: false + } }, setup(props, { slots }) { - const { data } = toRefs(props); + const { data, check } = toRefs(props); const { selectNode, toggleCheckNode, toggleNode } = inject(USE_TREE_TOKEN); const { @@ -38,13 +42,13 @@ export default defineComponent({ : }
- { toggleCheckNode(data.value); }} onClick={(event: MouseEvent) => { event.stopPropagation(); }} - /> + /> } { slots.default ? renderSlot(useSlots(), 'default', { nodeData: data }) diff --git a/packages/devui-vue/devui/tree/src/new-tree-types.ts b/packages/devui-vue/devui/tree/src/new-tree-types.ts new file mode 100644 index 0000000000..50656454f9 --- /dev/null +++ b/packages/devui-vue/devui/tree/src/new-tree-types.ts @@ -0,0 +1,19 @@ +import { ExtractPropTypes, PropType } from 'vue'; +import { ITreeNode } from './core/use-tree-types'; + +export type ICheckStrategy = 'upward' | 'downward' | 'both' | 'none'; + +export type ICheck = boolean | ICheckStrategy; + +export const treeProps = { + data: { + type: Object as PropType, + default: [] + }, + check: { + type: Object as PropType, + default: false + }, +}; + +export type TreeProps = ExtractPropTypes; diff --git a/packages/devui-vue/devui/tree/src/new-tree.tsx b/packages/devui-vue/devui/tree/src/new-tree.tsx index f1681d085f..d7da233445 100644 --- a/packages/devui-vue/devui/tree/src/new-tree.tsx +++ b/packages/devui-vue/devui/tree/src/new-tree.tsx @@ -9,31 +9,26 @@ import useSelect from './core/use-select'; import { USE_TREE_TOKEN } from './const'; import './tree.scss'; import useOperate from './core/use-operate'; +import { TreeProps, treeProps } from './new-tree-types'; export default defineComponent({ name: 'DNewTree', - props: { - data: { - type: Object as PropType, - default: [] - }, - plugins: { - type: Object as PropType, - default: [] - }, - }, - setup(props, { slots }) { - const { data } = toRefs(props); + props: treeProps, + setup(props: TreeProps, { slots }) { + const { data, check } = toRefs(props); + + const userPlugins = [ + useSelect(), + useOperate(), + ]; + + if (check) { + userPlugins.push(useCheck()); + } const treeFactory = useTree( data.value, - [ - useSelect(), - useCheck({ - checkStrategy: 'none', - }), - useOperate(), - ] + userPlugins ); const { diff --git a/packages/devui-vue/docs/components/tree/index.md b/packages/devui-vue/docs/components/tree/index.md index 031dbab100..82433ef0c1 100644 --- a/packages/devui-vue/docs/components/tree/index.md +++ b/packages/devui-vue/docs/components/tree/index.md @@ -12,7 +12,7 @@ ```vue - -``` -::: - -### 可勾选树 - -:::demo 可以进行勾选的树。 - -```vue - - - -``` -::: - -### 控制父子check关系 - -:::demo 通过 checkableRelation 控制check时父子节点的表现。 - -```vue - - - ``` ::: -### 添加子节点,编辑、删除节点 +### 禁用状态 -:::demo 通过 checkableRelation 控制check时父子节点的表现。 +:::demo 通过`disableToggle`/`disableSelect`/`disableCheck`分别禁用展开/收起、点击选择、勾选状态。 ```vue - - -``` -::: - - -### 可拖拽树 - -:::demo 通过OperableTree的 draggable 属性配置节点的拖拽功能,并支持外部元素拖拽入树。 - -```vue -