Checkpoint: v3.0 - 新增训练视频教程库(分类浏览、自评系统)、训练提醒通知(多类型提醒、浏览器推送)、通知记录管理、去除冗余文字。65个测试全部通过。

这个提交包含在:
Manus
2026-03-14 08:28:57 -04:00
父节点 2c418b482e
当前提交 27083d5af9
修改 19 个文件,包含 2856 行新增32 行删除

查看文件

@@ -22,7 +22,8 @@ import {
import { useIsMobile } from "@/hooks/useMobile";
import {
LayoutDashboard, LogOut, PanelLeft, Target, Video,
Award, Activity, FileVideo, Trophy, Flame, Camera, CircleDot
Award, Activity, FileVideo, Trophy, Flame, Camera, CircleDot,
BookOpen, Bell
} from "lucide-react";
import { CSSProperties, useEffect, useRef, useState } from "react";
import { useLocation, Redirect } from "wouter";
@@ -39,6 +40,8 @@ const menuItems = [
{ icon: Activity, label: "训练进度", path: "/progress", group: "stats" },
{ icon: Award, label: "NTRP评分", path: "/rating", group: "stats" },
{ icon: Trophy, label: "排行榜", path: "/leaderboard", group: "stats" },
{ icon: BookOpen, label: "教程库", path: "/tutorials", group: "learn" },
{ icon: Bell, label: "训练提醒", path: "/reminders", group: "learn" },
];
const SIDEBAR_WIDTH_KEY = "sidebar-width";
@@ -226,6 +229,27 @@ function DashboardLayoutContent({
</SidebarMenuItem>
);
})}
{/* Divider */}
{!isCollapsed && <div className="my-2 mx-2 border-t border-border/50" />}
{!isCollapsed && <p className="px-3 text-[10px] font-medium text-muted-foreground uppercase tracking-wider mb-1"></p>}
{menuItems.filter(i => i.group === "learn").map(item => {
const isActive = location === item.path;
return (
<SidebarMenuItem key={item.path}>
<SidebarMenuButton
isActive={isActive}
onClick={() => setLocation(item.path)}
tooltip={item.label}
className={`h-10 transition-all font-normal`}
>
<item.icon className={`h-4 w-4 ${isActive ? "text-primary" : ""}`} />
<span>{item.label}</span>
</SidebarMenuButton>
</SidebarMenuItem>
);
})}
</SidebarMenu>
</SidebarContent>