index.jsx 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import React from "react";
  2. import { PlusOutlined, DeleteOutlined } from "@ant-design/icons";
  3. import { Button, Card, Row, Col, Tree, Tooltip, Popconfirm, Spin } from "antd";
  4. import Page from "@/components/Page";
  5. import { getTdSceneMgtList, deleteTdSceneMgt } from "@/service/tdSceneMgt";
  6. import { arr2Tree } from "@/utils/array";
  7. import useBool from "@/utils/hooks/useBool";
  8. import Form from "./components/Form";
  9. import styles from "./styles.module.less";
  10. export default (props) => {
  11. const [loading, startLoading, stopLoading] = useBool();
  12. const [list, setList] = React.useState([]);
  13. const [current, setCurrernt] = React.useState({});
  14. const [parentId, setParentId] = React.useState();
  15. const [parentList, treeData] = React.useMemo(() => {
  16. const plist = [{ sceneId: "-1", sceneName: "根节点" }].concat(list);
  17. const [tree] = arr2Tree(
  18. (list || []).map((x) => ({
  19. title: x.sceneName,
  20. key: x.sceneId,
  21. parentId: x.parentId,
  22. raw: x,
  23. }))
  24. );
  25. return [plist, tree];
  26. }, [list]);
  27. const changeCurrent = (row) => {
  28. setCurrernt(row);
  29. setParentId(row?.parentId || "-1");
  30. };
  31. const onSelect = (selectedKeys, e) => {
  32. changeCurrent(e.node.raw);
  33. };
  34. const onClick = (row) => {
  35. changeCurrent(row);
  36. };
  37. // console.log(current)
  38. // console.log(parentList)
  39. const onAdd = (parent = "-1") => {
  40. console.log(111);
  41. const a = {};
  42. setParentId(parent);
  43. setCurrernt(a);
  44. };
  45. const onDelete = (row) => {
  46. deleteTdSceneMgt(row.sceneId).then(() => {
  47. queryList();
  48. });
  49. };
  50. const queryList = React.useCallback(() => {
  51. startLoading();
  52. getTdSceneMgtList({ pageSize: 500 }).then((res) => {
  53. setList(res.records || []);
  54. stopLoading();
  55. // changeCurrent();
  56. // const list = [];
  57. });
  58. }, []);
  59. const onFormChange = () => {
  60. // 重新查一次数据
  61. queryList();
  62. };
  63. React.useEffect(() => {
  64. queryList();
  65. }, []);
  66. return (
  67. <Page>
  68. <Row gutter={24} className={styles.treeRow}>
  69. <Col span={8} style={{ overflow: "hidden" }}>
  70. <Card
  71. title="场景"
  72. onSelect={onSelect}
  73. extra={
  74. <Button type="link" onClick={() => onAdd()}>
  75. 新增
  76. </Button>
  77. }
  78. >
  79. <Spin spinning={loading}>
  80. <Tree
  81. height="100%"
  82. blockNode
  83. defaultExpandParent={true}
  84. treeData={treeData}
  85. // onSelect={onSelect}
  86. titleRender={(node) => (
  87. <div
  88. style={{ display: "flex" }}
  89. onClick={(e) => e.stopPropagation()}
  90. >
  91. <div
  92. style={{
  93. lineHeight: "32px",
  94. flex: 1,
  95. width: 0,
  96. }}
  97. onClick={() => onClick(node.raw)}
  98. >
  99. <div
  100. style={{
  101. overflow: "hidden",
  102. whiteSpace: "nowrap",
  103. textOverflow: "ellipsis",
  104. }}
  105. >
  106. {node.title}
  107. </div>
  108. </div>
  109. <div style={{ width: "80px", flex: "none" }}>
  110. <Tooltip title="新增子节点">
  111. <Button
  112. type="link"
  113. icon={<PlusOutlined />}
  114. onClick={() => onAdd(node.raw.sceneId)}
  115. ></Button>
  116. </Tooltip>
  117. <Tooltip title="删除节点">
  118. <Popconfirm
  119. title="确认进行删除操作?"
  120. onConfirm={() => onDelete(node.raw)}
  121. >
  122. <Button
  123. type="link"
  124. danger
  125. icon={<DeleteOutlined />}
  126. ></Button>
  127. </Popconfirm>
  128. </Tooltip>
  129. </div>
  130. </div>
  131. )}
  132. />
  133. </Spin>
  134. </Card>
  135. </Col>
  136. <Col span={16}>
  137. {parentId && (
  138. <Card>
  139. <Form
  140. row={current}
  141. parentId={parentId}
  142. list={parentList}
  143. onChange={onFormChange}
  144. />
  145. </Card>
  146. )}
  147. </Col>
  148. </Row>
  149. </Page>
  150. );
  151. };