index.jsx 8.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. // import React, { useState } from "react";
  2. // import { Tree, Icon, Card } from "antd";
  3. // import { nanoid } from "nanoid";//生成唯一id
  4. // import { duration } from "moment";
  5. // import TreeTitle from './TreeTitle'
  6. // const { TreeNode } = Tree;
  7. // //树形数据
  8. // const treeData = [
  9. // {
  10. // value: "0",
  11. // defaultValue: "0",
  12. // key: "0",
  13. // parentKey: '0',
  14. // isEditable: false,
  15. // children: [
  16. // {
  17. // value: "0",
  18. // key: "0-1",
  19. // defaultValue: "0-1",
  20. // isEditable: false,
  21. // },
  22. // ],
  23. // },
  24. // ];
  25. // const expandedKeyArr = ["0"];
  26. // export default function TreeDemo() {
  27. // const [data, setData] = useState(treeData);//获取值,及时更新被修改的值。变量
  28. // const [expandedKeys, setExpandedKeys] = useState(expandedKeyArr);//状态
  29. // // const onExpand = (expandedKeys) => {
  30. // // //记录折叠的key值
  31. // // setExpandedKeys(expandedKeys);
  32. // // };
  33. // //开始渲染树形节点 data拿到数据
  34. // const renderTreeNodes = (data) => {
  35. // //遍历项目
  36. // let nodeArr = data.map((item) => {
  37. // const Title = (
  38. // <TreeTitle
  39. // value={item.value}
  40. // isDelete={item.parentKey !== "0"}
  41. // onAdd={() => onAdd(item.key)}
  42. // onDelete={() => onDelete(item.key)}
  43. // onChange={(val) => onChange(val, item.key)}
  44. // />
  45. // );
  46. // if (item.children) {
  47. // return (
  48. // <TreeNode title={Title} key={item.key} dataRef={item}>
  49. // {/* 渲染 */}
  50. // {renderTreeNodes(item.children)}
  51. // </TreeNode>
  52. // );
  53. // }
  54. // //返回他的标题,和key值
  55. // return <TreeNode title={Title} key={item.key} />;
  56. // });
  57. // //返回节点
  58. // return nodeArr;
  59. // }
  60. // //新增
  61. // const onAdd = (key) => {
  62. // if (expandedKeys.indexOf(key) === -1) {
  63. // expandedKeyArr.push(key);
  64. // }
  65. // setExpandedKeys(expandedKeyArr.slice());
  66. // addNode(key, treeData);//添加节点 树形
  67. // //useState里数据务必为immutable (不可赋值的对象),所以必须加上slice()返回一个新的数组对象
  68. // setData(treeData.slice());//添加子项
  69. // };
  70. // //编辑
  71. // //拿到key treeData数据--setData设置数据---slice删除数据中已返回的元素 [aa,bb,cc,dd,ee]--slice(2)输出[cc,dd,ee]
  72. // const onEdit = (key) => {
  73. // editNode(key, treeData);
  74. // setData(treeData.slice());
  75. // };
  76. // const editNode = (key, data) =>
  77. // data.forEach((item) => {
  78. // if (item.key === key) {
  79. // //编辑状态 true
  80. // item.isEditable = true;
  81. // } else {
  82. // //编辑状态 false
  83. // item.isEditable = false;
  84. // }
  85. // item.value = item.defaultValue; // 当某节点处于编辑状态,并改变数据,点击编辑其他节点时,此节点变成不可编辑状态,value 需要回退到 defaultvalue
  86. // //当某子项处于编辑状态,改变数据,点击其他时候,此项变成不可编辑
  87. // if (item.children) {
  88. // editNode(key, item.children);
  89. // //编辑子节点
  90. // }
  91. // });
  92. // const addNode = (key, data) =>
  93. // data.forEach((item) => {
  94. // if (item.key === key) {//如果拿到的key相同则判断子项
  95. // if (item.children) {
  96. // item.children.push({
  97. // value: "default",//创建新的子项默认值
  98. // key: nanoid(), // 这个 key 应该是唯一的
  99. // });
  100. // } else {
  101. // item.children = [];
  102. // item.children.push({
  103. // value: "default",
  104. // key: nanoid(),
  105. // });
  106. // }
  107. // return;
  108. // }
  109. // if (item.children) {
  110. // addNode(key, item.children);
  111. // }
  112. // });
  113. // const onChange = (val, key) => {
  114. // changeNode(key, val, treeData);
  115. // setData(treeData.slice());
  116. // };
  117. // const changeNode = (key, value, data) =>
  118. // data.forEach((item) => {
  119. // if (item.key === key) {//新增子项内容赋值
  120. // item.value = value;
  121. // }
  122. // if (item.children) {
  123. // changeNode(key, value, item.children);//子项
  124. // }
  125. // });
  126. // //确认保存节点
  127. // const saveNode = (key, data) =>
  128. // data.forEach((item) => {
  129. // if (item.key === key) {
  130. // item.defaultValue = item.value;//item.value内容赋值给defaultValue
  131. // }
  132. // //子项保存不能编辑
  133. // if (item.children) {
  134. // saveNode(key, item.children);
  135. // }
  136. // //项目是否能编辑
  137. // item.isEditable = false;
  138. // });
  139. // //取消确认
  140. // const closeNode = (key, defaultValue, data) =>
  141. // data.forEach((item) => {
  142. // item.isEditable = false;
  143. // if (item.key === key) {
  144. // item.value = defaultValue;
  145. // }
  146. // if (item.children) {
  147. // closeNode(key, defaultValue, item.children);
  148. // }
  149. // });
  150. // // slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
  151. // const onDelete = (key) => {
  152. // deleteNode(key, treeData);
  153. // setData(treeData.slice());
  154. // };
  155. // //删除节点
  156. // const deleteNode = (key, data) =>
  157. // //拿到每个key数据, 如果要删除的key相同,则删除,并返回。如果不同判断子项
  158. // data.forEach((item, index) => {
  159. // if (item.key === key) {
  160. // data.splice(index, 1);//从某个位置开始删除元素
  161. // return;
  162. // } else {
  163. // if (item.children) {
  164. // deleteNode(key, item.children);
  165. // }
  166. // }
  167. // });
  168. // return (
  169. // <div>
  170. // <Card style={{ width: '90%' }}>
  171. // <Tree
  172. // switcherIcon={<Icon type="down-square" theme="filled" />}
  173. // expandedKeys={expandedKeys}
  174. // // onExpand={onExpand}
  175. // >
  176. // {renderTreeNodes(data)}
  177. // </Tree>
  178. // </Card>
  179. // </div>
  180. // );
  181. // }
  182. import { Row, Col, Card, Tree, DatePicker, Form, Input, InputNumber, Radio, Button } from 'antd'
  183. import { title } from 'echarts/lib/theme/dark';
  184. import React, { useEffect, useState, useCallback,useRef } from 'react';
  185. import TreedataFrom from './form';
  186. const { TreeNode,DirectoryTree } = Tree;
  187. // const [treeData, settreeData] = useState([])
  188. const treeData = [
  189. {
  190. title: '分厂厂长管理',
  191. key: '0-0',
  192. children: [
  193. { title: '刘厂长', key: '0-0-0-1' },
  194. { title: '王副厂长', key: '0-0-0-2' },
  195. ],
  196. },
  197. {
  198. title: '分厂员工管理',
  199. key: '0-0-1',
  200. children: [
  201. { title: '王王王', key: '0-0-1-0' },
  202. { title: '张张张', key: '0-0-1-1' },
  203. { title: '刘刘刘', key: '0-0-1-2' },
  204. ],
  205. },
  206. ];
  207. class Demo extends React.Component {
  208. state = {
  209. expandedKeys: ['0-0', '0-0-1'],
  210. autoExpandParent: false,
  211. checkedKeys: ['0-0-1'],
  212. selectedKeys: [],
  213. };
  214. onExpand = expandedKeys => {
  215. //自动展开
  216. console.log('onExpand', expandedKeys);
  217. // 如果没有将 autoExpandParent 设置为 false,如果子项展开,父项不能折叠。
  218. // 或者,您可以删除所有扩展的子键。
  219. this.setState({
  220. expandedKeys,
  221. autoExpandParent: false,
  222. });
  223. };
  224. onCheck = checkedKeys => {
  225. //单击复选框
  226. console.log('onCheck', checkedKeys);
  227. this.setState({ checkedKeys });
  228. };
  229. onSelect = (selectedKeys, info) => {
  230. //单击姓名
  231. for (let i = 0; i < selectedKeys.length; i++) {
  232. const element = selectedKeys[i];
  233. console.log(element);
  234. }
  235. console.log('onSelect',info);
  236. this.setState({ selectedKeys });
  237. };
  238. renderTreeNodes = data =>
  239. data.map(item => {
  240. if (item.children) {
  241. return (
  242. <TreeNode title={item.title} key={item.key} dataRef={item} >
  243. {this.renderTreeNodes(item.children)}
  244. </TreeNode>
  245. );
  246. }
  247. return <TreeNode key={item.key} {...item} />;
  248. });
  249. render() {
  250. return (
  251. <Card>
  252. <Row>
  253. <Col xs={{ span: 5, offset: 1 }} lg={{ span: 6, offset: 0 }}>
  254. <Card>
  255. <Tree
  256. // checkable
  257. showLine={true}
  258. onExpand={this.onExpand}
  259. expandedKeys={this.state.expandedKeys}
  260. autoExpandParent={this.state.autoExpandParent}
  261. onCheck={this.onCheck}
  262. checkedKeys={this.state.checkedKeys}
  263. onSelect={this.onSelect}
  264. selectedKeys={this.state.selectedKeys}
  265. >
  266. {this.renderTreeNodes(treeData)}
  267. </Tree >
  268. </Card>
  269. </Col>
  270. <Col xs={{ span: 10, offset: 10 }} lg={{ span: 10, offset: 4 }}>
  271. <Card>
  272. <TreedataFrom />
  273. </Card>
  274. </Col>
  275. </Row>
  276. </Card>
  277. );
  278. }
  279. }
  280. export default Demo