From 8c0a4afe116b1adde2df13049a2a224a16604061 Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 17 Sep 2026 12:18:39 +0800 Subject: [PATCH] Refine check-in layout and move calendar sidebar --- app/checkin-client.tsx | 3 +-- app/globals.css | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/checkin-client.tsx b/app/checkin-client.tsx index 475f15f..5797e1e 100644 --- a/app/checkin-client.tsx +++ b/app/checkin-client.tsx @@ -42,8 +42,7 @@ export default function CheckinClient() { return
{ if (!open) closeCountdown(); }}>

CET-6 · 考试倒计时

今天也离目标更近一步2026 年 12 月 12 日 15:00 笔试
{remaining.days}天{String(remaining.hours).padStart(2, "0")}时{String(remaining.minutes).padStart(2, "0")}分

今天的任务,完成一项就是一次推进。

CET-6 · 2026

大学英语六级 · 90天打卡

从今天的一件事开始,完成比完美重要。

任务总览数据统计

{saving ? "正在云端保存…" : status}

} value={Math.round(finished / total * 100) + "%"} label="总体完成度" detail={finished + " / " + total + " 项任务"} />} value={complete + " 天"} label="完整完成" detail="目标共 90 天" />} value={day.phase} label="当前阶段" detail="12 月 12 日笔试" />

距离六级笔试

{remaining.days}天 {remaining.hours}时 {remaining.minutes}分2026 年 12 月 12 日 15:00
-

CHECK-IN CALENDAR

打卡日历

{[8, 9, 10, 11].map(m => )}
{["日", "一", "二", "三", "四", "五", "六"].map(x => {x})}
{blanks.map((_, i) => )}{dates.map(date => { const idx = plan.findIndex(p => p.date === date), p = plan[idx], n = parseTasks(records[date]?.doneTasks).length, full = !!p && n === p.tasks.length, partial = !!p && n > 0 && !full, makeup = records[date]?.checkinType === "makeup"; return ; })}

全部完成 进行中 补打卡 未来日期不可修改

-

{day.phase} · {day.week}

{fmt(day.date)}

{isFuture ? "未来日期,暂不可打卡" : isMakeup ? "补打卡 · 已完成项目不可取消" : "今日打卡"} · 已完成 {done.length} / {day.tasks.length} 项
{day.tasks.map(t => { const locked = isFuture || (isMakeup && done.includes(t.key)); return ; })}

今日状态

{["专注", "平稳", "有点累", "需要调整"].map(m => )}