Use native navigation for site routes

This commit is contained in:
biss committed 2026-09-16 21:38:59 +08:00
1 parent f613e25407
commit 2674c6b95f
2 files changed
+3 -5

No files matched your search

+2 -3
View File
@@ -1,6 +1,5 @@
"use client";
import Link from "next/link";
import { useEffect, useMemo, useState } from "react";
import { ArrowLeft, CheckCircle2, Circle, ListChecks } from "lucide-react";
import { Progress } from "@/components/ui/progress";
@@ -24,9 +23,9 @@ export default function TasksClient() {
const overview = useMemo(() => groups.map(group => { const tasks = plan.flatMap(day => day.tasks.filter(task => task.key === group.key).map(task => ({ ...task, date: day.date, week: day.week, phase: day.phase }))); const complete = tasks.filter(task => parsed(records[task.date]?.doneTasks).includes(group.key)).length; return { ...group, tasks, complete }; }), [records]);
const selected = overview.find(x => x.key === active)!;
return <main><div className="shell task-overview">
<header><div><p className="eyebrow">PLAN OVERVIEW</p><h1>任务总览</h1><p className="sub">按任务类型查看全部安排和完成情况。</p></div><Link className="overview-link" href="/"><ArrowLeft size={17} />返回打卡</Link></header>
<header><div><p className="eyebrow">PLAN OVERVIEW</p><h1>任务总览</h1><p className="sub">按任务类型查看全部安排和完成情况。</p></div><a className="overview-link" href="/"><ArrowLeft size={17} />返回打卡</a></header>
<p className="overview-status">{status}</p>
<section className="type-cards">{overview.map(group => <button key={group.key} onClick={() => setActive(group.key)} className={"type-card " + group.color + (active === group.key ? " selected" : "")}><div><span>{group.title}</span><b>{group.complete} / {group.tasks.length}</b></div><Progress value={group.tasks.length ? group.complete / group.tasks.length * 100 : 0} /><small>{group.hint}</small></button>)}</section>
<section className="task-list-panel"><div className="task-list-head"><div><p className="eyebrow">{selected.title.toUpperCase()}</p><h2>{selected.title}任务</h2><p>{selected.hint}</p></div><div className="type-progress"><b>{selected.complete} / {selected.tasks.length}</b><span>已完成</span></div></div><div className="all-tasks">{selected.tasks.map((task, i) => { const complete = parsed(records[task.date]?.doneTasks).includes(active); return <Link href="/" className={complete ? "task-row completed" : "task-row"} key={task.date + i}><span className="task-state">{complete ? <CheckCircle2 size={19} /> : <Circle size={19} />}</span><div><b>{task.date.slice(5).replace("-", "月")}日 · {task.week}</b><p>{task.text}</p></div><small>{task.phase}</small></Link>; })}</div></section>
<section className="task-list-panel"><div className="task-list-head"><div><p className="eyebrow">{selected.title.toUpperCase()}</p><h2>{selected.title}任务</h2><p>{selected.hint}</p></div><div className="type-progress"><b>{selected.complete} / {selected.tasks.length}</b><span>已完成</span></div></div><div className="all-tasks">{selected.tasks.map((task, i) => { const complete = parsed(records[task.date]?.doneTasks).includes(active); return <a href="/" className={complete ? "task-row completed" : "task-row"} key={task.date + i}><span className="task-state">{complete ? <CheckCircle2 size={19} /> : <Circle size={19} />}</span><div><b>{task.date.slice(5).replace("-", "月")}日 · {task.week}</b><p>{task.text}</p></div><small>{task.phase}</small></a>; })}</div></section>
</div></main>;
}