123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  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, Form, TreeSelect, Input, InputNumber, Modal, Button, message } 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 FormItem = Form.Item;
  188. //-----------------------------------
  189. const onAdd = (key) => {
  190. if (expandedKeys.indexOf(key) === -1) {
  191. expandedKeyArr.push(key);
  192. }
  193. expandedKeys(expandedKeyArr.slice());
  194. addNode(key, treeData);//添加节点 树形
  195. setData(treeData.slice());//添加子项
  196. };
  197. //-----------------------------------
  198. const confirm = data => {
  199. // {...data,isPublish}
  200. if (data.key !== 0) {
  201. Modal.confirm({
  202. title: '确认删除吗?',
  203. okText: '确认',
  204. cancelText: '取消',
  205. onOk() {
  206. message.error('失败');
  207. },
  208. });
  209. }else{
  210. message.error('error')
  211. }
  212. }
  213. // function uuid() {
  214. // var s = [];
  215. // var hexDigits = "0123456789";
  216. // for (var i = 0; i < 18; i++) {
  217. // s[i] = hexDigits.substr(Math.floor(Math.random() * 1*10), 1);
  218. // }
  219. // var uuid = s.join("");
  220. // return uuid;
  221. // }
  222. // const [treeData, settreeData] = useState([])
  223. const treeData = [
  224. {
  225. title: '分厂厂长管理',
  226. key: '0',
  227. children: [
  228. { title: '郎岩',phone:'15920583224', cardId:'511502199103223189',sex:1,id:'0212',belon:1,homeaddres:1, key: '0-0-0-1' },
  229. { title: '柯琼彦',phone:'13184013427', cardId:'210203197503102721', sex:2 ,id:'4242',belon:2,homeaddres:2, key: '0-0-0-2' ,},
  230. ],
  231. },
  232. {
  233. title: '分厂员工管理',
  234. key: '0-0-1',
  235. children: [
  236. { title: '伏佳', phone:'18613523527', cardId:'520323197806058856',sex:1 ,id:'1124', belon:4,homeaddres:4,key: '0-0-1-0' },
  237. { title: '舒宏', phone:'14736632088', cardId:'610729197408202551', sex:1 ,id:'4534', belon:3,homeaddres:2,key: '0-0-1-1' },
  238. { title: '狄莉珍',phone:'17604898508', cardId:'820000195008115837', sex:1 ,id:'4242',belon:1,homeaddres:5, key: '0-0-1-2' },
  239. ],
  240. },
  241. ];
  242. class TreeDemo extends React.Component {
  243. formRef = React.createRef();
  244. constructor(props){
  245. super(props)
  246. this.state = {
  247. expandedKeys: ['0-0-0', '0-0-1'],
  248. autoExpandParent: false,
  249. checkedKeys: ['0-0-0'],
  250. selectedKeys: [],
  251. treeTitle:[],
  252. checked:true
  253. };
  254. }
  255. onExpand = expandedKeys => {
  256. console.log('onExpand', expandedKeys);
  257. // 如果没有将 autoExpandParent 设置为 false,如果子项展开,父项不能折叠。
  258. // 或者,您可以删除所有扩展的子键。
  259. this.setState({
  260. expandedKeys,
  261. autoExpandParent: false,
  262. });
  263. };
  264. handelSex = e => {
  265. this.setState({
  266. sex: e.target.value
  267. });
  268. console.log(valeu);
  269. };
  270. onSelect=(value,info)=>{
  271. this.setState({value},()=>{
  272. this.formRef.current.setFieldsValue({
  273. ...info.node.props,
  274. })
  275. console.log(this.state.treeTitle);
  276. })
  277. }
  278. // if(info.node.props.sex===0){
  279. // this.state.checked=true
  280. // }else{
  281. // this.state.checked=false
  282. // }
  283. // console.log(this.state.checked);
  284. renderTreeNodes = data =>
  285. data.map(item => {
  286. if (item.children) {
  287. return (
  288. <TreeNode title={item.title} key={item.key} dataRef={item} >
  289. {this.renderTreeNodes(item.children)}
  290. </TreeNode>
  291. );
  292. }
  293. return <TreeNode key={item.key} {...item} />;
  294. });
  295. render() {
  296. return (
  297. <Card>
  298. <Row >
  299. <Col xs={{ span: 5, offset: 1 }} lg={{ span: 6, offset: 0 }}>
  300. <Card>
  301. <FormItem
  302. label="管辖部门"
  303. >
  304. <Button type="primary" style={{marginRight:'20px'}} onClick={onAdd} >
  305. 增加
  306. </Button>
  307. <Button type="danger" onClick={confirm}>
  308. 删除
  309. </Button>
  310. <Tree
  311. // showSearch
  312. style={{ width: '100%' }}
  313. value={this.state.value}
  314. dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
  315. placeholder="Please select"
  316. allowClear
  317. treeDefaultExpandAll
  318. treeData={this.state.treeData}
  319. showLine={true}
  320. onExpand={this.onExpand}
  321. expandedKeys={this.state.expandedKeys}
  322. autoExpandParent={this.state.autoExpandParent}
  323. onCheck={this.onCheck}
  324. checkedKeys={this.state.checkedKeys}
  325. onSelect={this.onSelect}
  326. selectedKeys={this.state.selectedKeys}
  327. >
  328. {this.renderTreeNodes(treeData)}
  329. </Tree >
  330. </FormItem>
  331. </Card>
  332. </Col>
  333. <Col xs={{ span: 10, offset: 10 }} lg={{ span: 10, offset: 4 }}>
  334. <Card>
  335. <TreedataFrom
  336. // treeTitle={this.state.treeTitle}
  337. ref={this.formRef}
  338. // handelSex={this.handelSex}
  339. // onFinish={this.state.onFinish}
  340. />
  341. </Card>
  342. </Col>
  343. </Row>
  344. </Card>
  345. );
  346. }
  347. }
  348. export default TreeDemo