user.js 1.1KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { useState, useRef } from "react";
  2. import { defaultRoutes, authRoutes, mergeAuthRoutes } from '@/routes/routes';
  3. import { getMenuItems } from "@/routes/menus";
  4. import { getAuthedRoutes } from "@/routes/permissions";
  5. import { currentUser } from '@/service/sysuser';
  6. export default function useUser() {
  7. const [user, setUser] = useState();
  8. const menusRef = useRef();
  9. const routesRef = useRef();
  10. const getCurrentUser = () => new Promise((resolve, reject) => {
  11. currentUser().then(res => {
  12. const permissions = (res.resourcesList || []).map(x => x.code);
  13. // authRoutes 是所有待验证授权的路由
  14. // authedRoutes 是已经被授权的路由
  15. const authedRoutes = getAuthedRoutes(authRoutes, permissions);
  16. menusRef.current = getMenuItems(authedRoutes);
  17. routesRef.current = mergeAuthRoutes(defaultRoutes, authedRoutes);
  18. setUser(res);
  19. resolve(res);
  20. }).catch(reject);
  21. });
  22. return {
  23. user,
  24. setUser,
  25. getCurrentUser,
  26. menus: menusRef.current || [],
  27. routes: routesRef.current || [],
  28. }
  29. }