From d7abf780c4d6dcffd87f72ac7f7f11545c280aff Mon Sep 17 00:00:00 2001 From: gxuud Date: Mon, 18 Oct 2021 01:16:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=AF=E5=8B=BE=E9=80=89=E6=A0=91?= =?UTF-8?q?=E3=80=81=E6=8E=A7=E5=88=B6=E7=88=B6=E5=AD=90check=E5=85=B3?= =?UTF-8?q?=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devui/tree/src/config.ts | 9 ++ devui/tree/src/tree-types.ts | 19 +++ devui/tree/src/tree.tsx | 119 ----------------- docs/components/tree/index.md | 233 ++++++++++++++++++++++++++++++++++ 4 files changed, 261 insertions(+), 119 deletions(-) create mode 100644 devui/tree/src/config.ts delete mode 100644 devui/tree/src/tree.tsx diff --git a/devui/tree/src/config.ts b/devui/tree/src/config.ts new file mode 100644 index 00000000..dbd834d3 --- /dev/null +++ b/devui/tree/src/config.ts @@ -0,0 +1,9 @@ +export const CHECK_CONFIG = { + none: {}, + half: { + halfchecked: true + }, + select: { + checked: true, + }, +} diff --git a/devui/tree/src/tree-types.ts b/devui/tree/src/tree-types.ts index cec8a0d9..93a5c120 100644 --- a/devui/tree/src/tree-types.ts +++ b/devui/tree/src/tree-types.ts @@ -9,14 +9,33 @@ export interface TreeItem { children?: TreeData [key: string]: any } +export interface SelectType { + [key: string]: 'none' | 'half' | 'select' +} + +export interface ReverseTree { + id?: string + children?: string[] + parent?: ReverseTree +} export type TreeData = Array +export type CheckableRelationType = 'upward' | 'downward' | 'both' | 'none' + export const treeProps = { data: { type: Array as PropType, required: true, default: () => [], + }, + checkable: { + type: Boolean, + default: false + }, + checkableRelation: { + type: String as () => CheckableRelationType, + default: 'none', } } as const diff --git a/devui/tree/src/tree.tsx b/devui/tree/src/tree.tsx deleted file mode 100644 index 0ea203d1..00000000 --- a/devui/tree/src/tree.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import { defineComponent, toRefs, provide } from 'vue' -import { treeProps, TreeProps, TreeItem, TreeRootType } from './tree-types' -import { flatten, precheckTree } from './util' -import Loading from '../../loading/src/service' -import useToggle from './composables/use-toggle' -import useMergeNode from './composables/use-merge-node' -import useHighlightNode from './composables/use-highlight' -import useLazy from './composables/use-lazy' -import IconOpen from './assets/open.svg' -import IconClose from './assets/close.svg' -import NodeContent from './tree-node-content' -import './tree.scss' - -export default defineComponent({ - name: 'DTree', - props: treeProps, - emits: [], - setup(props: TreeProps, ctx) { - const { data } = toRefs({ ...props, data: precheckTree(props.data) }) - const flatData = flatten(data.value) - - const { mergeData } = useMergeNode(data.value) - const { openedData, toggle } = useToggle(mergeData.value) - const { nodeClassNameReflect, handleInitNodeClassNameReflect, handleClickOnNode } = useHighlightNode() - const { lazyNodesReflect, handleInitLazyNodeReflect, getLazyData } = useLazy() - - provide('treeRoot', { ctx, props }); - const Indent = () => { - return - } - const renderNode = (item: TreeItem) => { - const { id = '', label, disabled, open, isParent, level, children } = item - handleInitNodeClassNameReflect(disabled, id) - handleInitLazyNodeReflect(item, { - id, - onGetNodeData: async () => { - return new Promise((resolve) => { - setTimeout(() => { - resolve([ - { - id: `It is a test Node-1 ID = ${id}`, - label: `It is a test Node-1 ID = ${id}`, - level: item.level + 1 - }, { - id: `It is a test Node-2 ID = ${id}`, - label: `It is a test Node-2 ID = ${id}`, - level: item.level + 1 - } - ]) - }, 4000) - }) - }, - renderLoading: (id) => { - return Loading.open({ - target: document.getElementById(id), - message: '加载中...', - positionType: 'relative', - zIndex: 1, - }) - } - }) - const renderNodeWithIcon = (item: TreeItem) => { - const handleClick = async (target: MouseEvent) => { - if (item.isParent) { - item.children = await getLazyData(id) // item 按引用传递 - } - return toggle(target, item) - } - return ( - isParent || children - ? open - ? - : - : - ) - } - return ( -
-
handleClickOnNode(id)} - > -
- {renderNodeWithIcon(item)} - - {item.isParent &&
} -
-
-
- ) - } - - const renderTree = (tree) => { - return tree.map(item => { - if (!item.children) { - return renderNode(item) - } else { - return ( - <> - {renderNode(item)} - {renderTree(item.children)} - - ) - } - }) - } - return () => { - return ( -
- {/* { renderTree(data.value) } */} - { openedData.value.map(item => renderNode(item)) } -
- ) - } - } -}) diff --git a/docs/components/tree/index.md b/docs/components/tree/index.md index 3599119a..3251f147 100644 --- a/docs/components/tree/index.md +++ b/docs/components/tree/index.md @@ -304,6 +304,7 @@ export default defineComponent({