基线:鉴权会话+工作组+工作台三区修复+编排工作区+产品设计文档

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
2026-07-27 20:43:35 +08:00
co-authored by Claude Fable 5
parent 61fe181678
commit ac85ecf2ea
119 changed files with 16634 additions and 1246 deletions
@@ -12,7 +12,7 @@ import { REPORT_PERIOD_LABEL, draftReportRoute, submitReportRoute } from '@contr
import { Ico } from '@web-shared/Ico.tsx';
import ScrollArea from '@web-shared/ScrollArea.tsx';
import { call } from '@web-shared/typed-fetch.ts';
import { Chip, DocPanel, Hero, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
import { Chip, DocPanel, Hero, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
const PERIODS: ReadonlyArray<{ k: ReportPeriodName; ico: string }> = [
{ k: 'day', ico: 'calendar-days' },
@@ -58,7 +58,13 @@ export function ReportDesk() {
</div>
</div>
<ScrollArea className="jc-sa--fill" vpClassName="task-list">
{report !== undefined && (
{/* 没放行过一件的草案不上榜 —— 榜上一条 = 一份真有内容的汇报 */}
{(report === undefined || report.counts.released === 0) && (
<ListEmpty icon="bar-chart" title="本期还没有汇报">
办成的事会按{REPORT_PERIOD_LABEL[period]}自动聚成一份,你确认即提交。
</ListEmpty>
)}
{report !== undefined && report.counts.released > 0 && (
<button className="jc-mcard selected">
<span className="jc-mcard-datebox">
<b>{report.window.from.slice(8, 10)}</b>
@@ -83,9 +89,18 @@ export function ReportDesk() {
</ScrollArea>
</aside>
{report === undefined ? (
{/*
汇报是「我做成了什么」,不是「我在忙什么」—— 一件都还没放行,就没有可汇报的。
这不是占位:它是这个台面**真正的空态**,办成第一件事的当天就自动有了内容。
*/}
{report === undefined || report.counts.released === 0 ? (
<main className="execution-panel jc-panel-card">
<ListEmpty icon="bar-chart">正在聚合…</ListEmpty>
<EmptyState
ico="bar-chart"
tone="brand"
title="还没有可汇报的内容"
desc="日报、周报、月报由系统按任务日志自动聚合,不用你手写 —— 办成第一件事,这里当天就有了。"
/>
</main>
) : (
<DocPanel scrollKey={`${period}:${report.id}`}>