From 672c7c4b9ec052464e9b865b3ca27fea4076be4e Mon Sep 17 00:00:00 2001 From: dongxingbin Date: Mon, 13 Jan 2020 11:34:17 +0800 Subject: [PATCH 1/4] =?UTF-8?q?img:=E6=B7=BB=E5=8A=A0=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- img/3.png | Bin 0 -> 9371 bytes img/4.png | Bin 0 -> 6068 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/3.png create mode 100644 img/4.png diff --git a/img/3.png b/img/3.png new file mode 100644 index 0000000000000000000000000000000000000000..bfded19abf0477e80379957ed10b8717a8e2bd1c GIT binary patch literal 9371 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 Lccv8Ke&;^`l~AKI literal 0 HcmV?d00001 From 8cd061b550a8928ab456566c052ed30daf95373b Mon Sep 17 00:00:00 2001 From: dongxingbin Date: Mon, 13 Jan 2020 11:35:01 +0800 Subject: [PATCH 2/4] =?UTF-8?q?feat:=E6=B7=BB=E5=8A=A0=E5=8F=AF=E6=8A=98?= =?UTF-8?q?=E5=8F=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org_tree.js | 27 +++++++++++++++++++++++++-- src/org_tree.jsx | 27 ++++++++++++++++++++++----- src/org_tree.less | 39 ++++++++++++++++++++++++++++++++++----- 3 files changed, 81 insertions(+), 12 deletions(-) diff --git a/src/org_tree.js b/src/org_tree.js index eb3caab..b39e0e9 100644 --- a/src/org_tree.js +++ b/src/org_tree.js @@ -14,11 +14,13 @@ export const renderNode = (data, prop) => { if (isLeaf(data, prop)) { cls.push('is-leaf'); + } else if (prop.collapsable && !data[node.expand]) { + cls.push('collapsed'); } childNodes.push(renderLabel(data, prop)); - if (data[node.expand]) { + if (!prop.collapsable || data[node.expand]) { childNodes.push(renderChildren(data.children, prop)); } @@ -28,6 +30,23 @@ export const renderNode = (data, prop) => { }, childNodes); }; +// 创建展开折叠按钮 +export const renderBtn = (data, prop ) => { + const { onExpand } = prop; + const node = prop.node; + + let cls = ['org-tree-node-btn']; + + if (data[node.expand]) { + cls.push('expanded'); + } + + return React.createElement('span', { + className: cls.join(' '), + onClick: (e) => typeof onExpand === 'function' && onExpand(e, data) + }); +}; + // 创建 label 节点 export const renderLabel = (data, prop) => { const node = prop.node; @@ -43,12 +62,16 @@ export const renderLabel = (data, prop) => { childNodes.push(label); } + if (prop.collapsable && !isLeaf(data, prop)) { + childNodes.push(renderBtn(data, prop)); + } + const cls = ['org-tree-node-label-inner']; return React.createElement('div', { className: 'org-tree-node-label', }, [React.createElement('div', { - className: cls.join(' ') + className: cls.join(' '), }, childNodes)]); }; diff --git a/src/org_tree.jsx b/src/org_tree.jsx index 1d624b3..fe4f529 100644 --- a/src/org_tree.jsx +++ b/src/org_tree.jsx @@ -2,24 +2,38 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; -import TreeNode from './org_tree.js'; +import TreeNode from './org_tree'; //组件 class OrgTree extends Component { constructor(props) { super(props); + this.handleExpand = this.handleExpand.bind(this); this.collapse = this.collapse.bind(this); this.toggleExpand = this.toggleExpand.bind(this); } componentDidMount() { - const { data } = this.props; - this.toggleExpand(data, true); + const { expandAll, data } = this.props; + if(expandAll) this.toggleExpand(data, true); } componentWillUnmount() { } + handleExpand(e, nodeData) { + if ('expand' in nodeData) { + nodeData.expand = !nodeData.expand; + if (!nodeData.expand && nodeData.children) { + this.collapse(nodeData.children); + } + this.forceUpdate(); + }else { + nodeData.expand = true; + this.forceUpdate(); + } + } + collapse(list) { let _this = this; list.forEach(function(child) { @@ -49,7 +63,7 @@ class OrgTree extends Component { } render() { - const { data, node, horizontal, renderContent } = this.props; + const { horizontal, node, data } = this.props; return
this.handleExpand(e, nodeData)} + {...this.props} />
; @@ -68,6 +83,8 @@ OrgTree.propTypes = { data: PropTypes.object, node: PropTypes.object, horizontal: PropTypes.bool, + collapsable: PropTypes.bool, + expandAll: PropTypes.bool, renderContent: PropTypes.func }; diff --git a/src/org_tree.less b/src/org_tree.less index 1eaa31c..a1ec4a3 100644 --- a/src/org_tree.less +++ b/src/org_tree.less @@ -91,7 +91,7 @@ display: table-cell; vertical-align: top; - &.is-leaf { + &.is-leaf, &.collapsed { padding-left: 10px; padding-right: 10px; } @@ -116,6 +116,19 @@ } } +.collapsable .org-tree-node.collapsed { + padding-bottom: 30px; + + .org-tree-node-label:after { + content: ''; + position: absolute; + top: 100%; + left: 0; + width: 50%; + height: 20px; + border-right: 1px solid #ddd; + } +} .org-tree > .org-tree-node { padding-top: 0; @@ -193,6 +206,26 @@ vertical-align: middle; } + &.collapsable .org-tree-node.collapsed { + padding-right: 30px; + + .org-tree-node-label:after { + top: 0; + left: 100%; + width: 20px; + height: 50%; + border-right: 0; + border-bottom: 1px solid #ddd; + } + } + + .org-tree-node-btn { + top: 50%; + left: 100%; + margin-top: -11px; + margin-left: 9px; + } + & > .org-tree-node:only-child:before { border-bottom: 0; } @@ -223,8 +256,4 @@ .text-center { text-align: center; -} - -.org-tree-node-label { - white-space: nowrap; } \ No newline at end of file From d25fdd8559ee8674557532438ca8d0c6704531e8 Mon Sep 17 00:00:00 2001 From: dongxingbin Date: Mon, 13 Jan 2020 11:35:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?doc:=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 81763f7..7c5015b 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,9 @@ yarn add react-org-tree import OrgTree from 'react-org-tree'; const horizontal = false; // true:横向 false:纵向 +const collapsable = true; // true:可折叠 false:不可折叠 +const expandAll = true; // true: 全部展开 false:全部折叠 + const data = { id: 0, label: 'XXX股份有限公司', @@ -45,18 +48,28 @@ const data = { ``` ### Preview -`horizontal` +`横向(horizontal)` + + + +`纵向(vertical)` + + + +`部分展开(expand)` - + -`vertical` +`全部展开(expandAll)` - + From d1964de7c46d7b85162feeae96cf257d442a96e0 Mon Sep 17 00:00:00 2001 From: dongxingbin Date: Mon, 13 Jan 2020 11:36:11 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6677d04..743c313 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-org-tree", - "version": "0.1.0", + "version": "0.2.0", "description": "a simple organization tree component based on react", "main": "dist/bundle.js", "files": [