sso.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import {LoginApis, SSOReq} from "../../api/user.ts";
  2. import {useEffect, useState} from "react";
  3. import {Message} from "auto-antd";
  4. import {getFirst, getLastTo, parseQuery} from "../../utils";
  5. import {EmptyLoading} from "../../components/empty";
  6. /**
  7. * 对接SSO登录
  8. * @param children
  9. * @constructor
  10. */
  11. export const SSOWrapper = ({children}: any)=>{
  12. const [loading,setLoading] = useState(true)
  13. const onSSOCallback = ()=>{
  14. const { query, url} = parseQuery<SSOReq & {to?: string}>() ?? {}
  15. if (!query?.code){
  16. setLoading(false)
  17. return
  18. }
  19. Object.keys(query).forEach(k=>{
  20. query[k] = getFirst(query[k])
  21. })
  22. setLoading(true);
  23. LoginApis.oauth2Callback(query)
  24. .then(({data})=>{
  25. if (data.code === 0){
  26. Message.success(data.msg);
  27. }else {
  28. Message.warning(data.msg);
  29. }
  30. })
  31. .catch(e=>{
  32. console.log('oauth2Callback error',e)
  33. Message.error('登录失败,请重新登录!');
  34. })
  35. .finally(()=>{
  36. const lastTo = getLastTo();
  37. window.location.href = `${url}#${lastTo}`;
  38. setLoading(false)
  39. })
  40. }
  41. useEffect(()=>{
  42. onSSOCallback()
  43. },[])
  44. if (loading){
  45. return (<EmptyLoading />)
  46. }
  47. return children
  48. }