hooks.ts 895 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import {getRoleMenu} from '@apis';
  2. import {menuStore, userStore} from '@stores';
  3. import {useQuery} from '@tanstack/react-query';
  4. import {sortMenu} from '@utils';
  5. import {useMemo} from 'react';
  6. import {useStore} from 'zustand';
  7. export function useMenu() {
  8. const setMenus = useStore(menuStore, state => state.setMenu);
  9. const menus = useStore(
  10. userStore,
  11. state => state.menu,
  12. );
  13. const {data} = useQuery(
  14. [getRoleMenu.name],
  15. async function() {
  16. if (!menus)
  17. throw new Error('未配置菜单信息');
  18. const data = await getRoleMenu();
  19. if (data.msg === '200') {
  20. setMenus(data.data);
  21. return data.data;
  22. }
  23. throw new Error(data.errMsg);
  24. },
  25. {
  26. suspense: true,
  27. },
  28. );
  29. const parseMenus = useMemo(function() {
  30. if (data)
  31. return sortMenu(data);
  32. return [];
  33. }, [data]);
  34. return parseMenus;
  35. }