diff --git a/public/requirements.pdf b/public/requirements.pdf new file mode 100644 index 0000000..33304fb Binary files /dev/null and b/public/requirements.pdf differ diff --git a/src/components/layout.jsx b/src/components/layout.jsx index 7ee8401..135dfb1 100644 --- a/src/components/layout.jsx +++ b/src/components/layout.jsx @@ -5,6 +5,7 @@ import { Link, useNavigate } from "react-router-dom"; import { useEffect, useState } from "react"; import { getMe } from "../service/user"; import { UserContext } from "../lib/context"; +import useMessage from "antd/es/message/useMessage"; export function BasicLayout({ children }) { return ( @@ -26,12 +27,14 @@ export function BasicLayout({ children }) { export function PrivateLayout({ children }) { const [user, setUser] = useState(null); const navigate = useNavigate(); + const [messageApi, contextHolder] = useMessage(); useEffect(() => { const checkLogin = async () => { let me = await getMe(); if (!me) { - navigate("/login"); + messageApi.error("无权访问当前页面,请先登录!", 0.6) + .then(() => navigate("/login")); } else { setUser(me); } @@ -41,6 +44,7 @@ export function PrivateLayout({ children }) { return ( + {contextHolder}
{user && children} diff --git a/src/components/navbar.jsx b/src/components/navbar.jsx index 1da9eaa..72c4568 100644 --- a/src/components/navbar.jsx +++ b/src/components/navbar.jsx @@ -23,7 +23,8 @@ export default function NavBar({ user }) { { label: "购物车", value: "/cart" }, { label: "订单", value: "/order" }, { label: "排行", value: "/rank" }, - { label: "后端 API 文档", value: "/api-docs" } + { label: "后端 API 文档", value: "/api-docs" }, + { label: "课程", value: "/course" } ]; const navMenuItems = navItems.map(item => ({ key: item.value, diff --git a/src/components/router.jsx b/src/components/router.jsx index 43ca127..d8bd3e5 100644 --- a/src/components/router.jsx +++ b/src/components/router.jsx @@ -8,6 +8,7 @@ import RankPage from "../page/rank"; import ApiPage from "../page/api"; import ProfilePage from "../page/profile"; import OtherUserProfilePage from "../page/other_profile"; +import CoursePage from "../page/course"; export default function AppRouter() { return @@ -18,6 +19,7 @@ export default function AppRouter() { } /> } /> } /> + } /> } /> } /> } /> diff --git a/src/page/course.jsx b/src/page/course.jsx new file mode 100644 index 0000000..a31c189 --- /dev/null +++ b/src/page/course.jsx @@ -0,0 +1,25 @@ +import { Card, Space } from "antd"; +import { BasicLayout } from "../components/layout"; + +export default function CoursePage() { + return + + +

技术栈

+
    +
  • + 前端:React, HTML, Javascript/Typescript, CSS +
  • +
  • + 后端:Java, Spring Boot +
  • +
  • + 数据库:MySQL, MongoDB, Neo4j +
  • +
+

课程要求

+