page.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. "use client";
  2. import { useState, useEffect } from "react";
  3. import MatchDays from "./ui/MatchDays";
  4. import MatchPrediction from "./ui/MatchPrediction";
  5. import Image from "next/image";
  6. import { useRouter } from "next/navigation";
  7. import ActivityModal from "./ui/components/ActivityModal";
  8. export default function Home() {
  9. const [selectedDayMatches, setSelectedDayMatches] = useState([]);
  10. const [currentUser, setCurrentUser] = useState(null);
  11. const router = useRouter();
  12. useEffect(() => {
  13. const user = JSON.parse(localStorage.getItem("currentUser") || "null");
  14. setCurrentUser(user);
  15. }, []);
  16. const handlePersonalCenterClick = () => {
  17. console.log("Personal center clicked");
  18. router.push("/personal-center");
  19. };
  20. const handleLogout = () => {
  21. setCurrentUser(null);
  22. localStorage.removeItem("currentUser");
  23. router.push("/");
  24. };
  25. return (
  26. <div className="bg-blue-600 text-white min-h-screen">
  27. <header className="h-16 fixed top-0 left-0 right-0 bg-white shadow-md z-10 transition-all duration-300">
  28. <div className="max-w-md mx-auto p-4">
  29. <div className="flex justify-between items-center">
  30. <div className="flex items-center">
  31. <Image
  32. src="/images/header_logo.png"
  33. alt="Logo"
  34. width={100}
  35. height={100}
  36. />
  37. </div>
  38. {currentUser ? (
  39. <div className="flex items-center">
  40. <div
  41. className="flex items-center cursor-pointer mr-4"
  42. onClick={handlePersonalCenterClick}
  43. >
  44. {currentUser.avatar ? (
  45. <Image
  46. src={currentUser.avatar}
  47. alt="User Avatar"
  48. width={28}
  49. height={28}
  50. className="rounded-full mr-2"
  51. />
  52. ) : (
  53. <div className="w-7 h-7 mr-2">
  54. <Image
  55. src="/images/cluo.webp"
  56. alt="User Avatar"
  57. width={28}
  58. height={28}
  59. className="rounded-full"
  60. />
  61. </div>
  62. )}
  63. <span className="text-sm font-bold text-gray-700">
  64. {currentUser.username}
  65. </span>
  66. </div>
  67. <span
  68. className="text-sm font-bold cursor-pointer text-red-400 hover:text-red-500"
  69. onClick={handleLogout}
  70. >
  71. 退出登录
  72. </span>
  73. </div>
  74. ) : (
  75. <button
  76. className="bg-blue-500 text-white hover:bg-blue-600 px-4 py-1 rounded-full text-sm font-bold transition duration-300"
  77. onClick={() => router.push("/login")}
  78. >
  79. 登录
  80. </button>
  81. )}
  82. </div>
  83. </div>
  84. </header>
  85. <main className="max-w-md mx-auto pt-16">
  86. <MatchDays onSelectMatch={setSelectedDayMatches} />
  87. <MatchPrediction
  88. selectedDayMatches={selectedDayMatches}
  89. currentUser={currentUser}
  90. />
  91. </main>
  92. <ActivityModal />
  93. </div>
  94. );
  95. }