index.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { FC } from "react";
  2. import { Button, TreeDataNode } from "antd";
  3. import { DataNode } from "antd/es/tree";
  4. import { useNavigate } from "react-router-dom";
  5. import { DageTreeActions } from "@dage/pc-components";
  6. import { PlusOutlined } from "@ant-design/icons";
  7. import style from "../../index.module.scss";
  8. export interface SidebarProps {
  9. /**
  10. * 勾选模式
  11. */
  12. checkable?: boolean;
  13. }
  14. const treeData: TreeDataNode[] = [
  15. {
  16. title: "parent 1",
  17. key: "0-0",
  18. children: [
  19. {
  20. title: "leaf",
  21. key: "0-0-0",
  22. },
  23. {
  24. title: "leaf",
  25. key: "0-0-1",
  26. children: [
  27. {
  28. title: "leaf leaf",
  29. key: "0-1-1",
  30. },
  31. ],
  32. },
  33. ],
  34. },
  35. ];
  36. let key = 0;
  37. export const Sidebar: FC<SidebarProps> = ({ checkable }) => {
  38. const navigate = useNavigate();
  39. const handleAddNode = async (item: DataNode) => {
  40. return new Promise((res) => {
  41. setTimeout(() => {
  42. if (!item.children) {
  43. item.children = [
  44. {
  45. title: "leaf",
  46. key: "0-0-0" + key++,
  47. },
  48. ];
  49. }
  50. res(true);
  51. }, 1000);
  52. });
  53. };
  54. return (
  55. <div className={style.sidebar}>
  56. <div className={style.sidebarHeader}>
  57. <h4>指标列表</h4>
  58. {!checkable && (
  59. <Button
  60. type="primary"
  61. icon={<PlusOutlined />}
  62. onClick={() => navigate("/assessment/index/create")}
  63. >
  64. 新增指标
  65. </Button>
  66. )}
  67. </div>
  68. <DageTreeActions
  69. treeData={treeData}
  70. onAdd={checkable ? undefined : handleAddNode}
  71. />
  72. </div>
  73. );
  74. };