index.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. "use client";
  2. import { useState, useEffect } from "react";
  3. import { useRouter } from "next/navigation";
  4. import ThemeMode from "@/components/ThemeMode";
  5. import { useGlobalContext } from "@/providers/GlobalProvider";
  6. import { getUserSession } from "@/utils/user";
  7. import { getUserInfo } from "@/api/client";
  8. export default function Header({ name }: { name: string }) {
  9. const router = useRouter();
  10. const { loginShow, changeLoginShow,uploadUserInfoState } = useGlobalContext();
  11. const [isLogin, setIsLogin] = useState(false);
  12. const [nickName, setNickName] = useState("");
  13. const Login = () => {
  14. changeLoginShow(true);
  15. };
  16. useEffect(() => {
  17. if (getUserSession()) {
  18. getUserInfo().then((data) => {
  19. if (data.code === 0) {
  20. setIsLogin(true);
  21. setNickName(data.data.nickname);
  22. }
  23. });
  24. }
  25. }, [loginShow,uploadUserInfoState]);
  26. return (
  27. <header className="sticky w-full flex gap-4 justify-between items-center top-0 shadow dark:shadow-none backdrop-blur dark:bg-transparent transition-all py-2 px-1 z-50">
  28. <div className="flex gap-3 justify-between items-center grow-0 shrink-0">
  29. <img src="/logo.png" alt="logo" width={40} height={40} />
  30. <div className="hidden md:block">
  31. <h1 className="global-txt-color text-xl">{name}</h1>
  32. </div>
  33. </div>
  34. <div className="absolute top-2/4 left-1/2 -translate-x-1/2 -translate-y-2/4 max-md:hidden"></div>
  35. <div className="flex justify-between items-center grow-0 shrink-0">
  36. {isLogin && (
  37. <a
  38. onClick={() => router.push("/user-center.html")}
  39. className="cursor-pointer ease-in-out p-2 rounded-md text-gray-700 dark:text-gray-200 hover:text-gray-900 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-gray-800"
  40. >
  41. {nickName}
  42. </a>
  43. )}
  44. {!isLogin && (
  45. <button
  46. className="inline-flex py-2 px-2 rounded-lg items-center text-white global-bg-color border-0 focus:outline-none mr-3"
  47. onClick={Login}
  48. >
  49. <span className="ml-1 pr-2 flex items-start flex-col leading-none">
  50. <span className="title-font font-medium">用户登录</span>
  51. </span>
  52. </button>
  53. )}
  54. <ThemeMode />
  55. </div>
  56. </header>
  57. );
  58. }