menus.jsx 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import React from 'react';
  2. import { Button, Card, Tree, Modal } from 'antd';
  3. import useBool from '@/utils/hooks/useBool';
  4. import arr2Tree from '@/utils/arr2Tree';
  5. import { getResourceList } from '@/services/role';
  6. export default (props) => {
  7. const { role } = props;
  8. const [loading, startLoading, cancelLoading] = useBool();
  9. const [list, setList] = React.useState([]);
  10. const [treeData, setTreeData] = React.useState([]);
  11. const treeDictRef = React.useRef();
  12. const title = role ? `${role.name} - 授权菜单` : '授权菜单';
  13. const onSelect = (selectedKeys, info) => {
  14. console.log('selected', selectedKeys, info);
  15. };
  16. const onCheck = (checkedKeys, info) => {
  17. console.log('onCheck', checkedKeys, info);
  18. };
  19. React.useEffect(() => {
  20. startLoading();
  21. getResourceList({ pageSize: 500, type: 'menu' }).then((res) => {
  22. cancelLoading();
  23. setList(res.records || []);
  24. }).catch(() => {
  25. cancelLoading();
  26. })
  27. }, []);
  28. React.useEffect(() => {
  29. if (!role) {
  30. setList([]);
  31. }
  32. }, [role]);
  33. React.useEffect(() => {
  34. // 先转为需要的格式
  35. const arr = list.map(x => ({ title: x.name, key: x.id, parentId: x.parentId }));
  36. // 再转为 tree
  37. const [tree, dict] = arr2Tree(arr);
  38. setTreeData(tree);
  39. treeDictRef.current = dict;
  40. }, [list]);
  41. return (
  42. <Card
  43. loading={loading}
  44. title={title}
  45. extra={<Button type='primary' ghost>保存</Button>}
  46. >
  47. <Tree
  48. checkable
  49. selectable={false}
  50. onCheck={onCheck}
  51. treeData={treeData}
  52. />
  53. </Card>
  54. )
  55. }