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

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 { appendResolutionRoute, createMinuteRoute, listMinutesRoute, registerRes
import { Ico } from '@web-shared/Ico.tsx';
import ScrollArea from '@web-shared/ScrollArea.tsx';
import { call } from '@web-shared/typed-fetch.ts';
import { Avatar, AvatarStack, Chip, DocPanel, Hero, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
import { Avatar, AvatarStack, Chip, DocPanel, Hero, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
export function MinuteDesk() {
const queryClient = useQueryClient();
@@ -114,7 +114,11 @@ export function MinuteDesk() {
</button>
);
})}
{minutes.length === 0 && <ListEmpty icon="notebook-pen">还没有纪要 —— 新建一场把团队沉淀记下来</ListEmpty>}
{minutes.length === 0 && (
<ListEmpty icon="notebook-pen" title="还没有纪要">
记下一场会,把定下的事写成决议 —— 登记起单后责任才落到人。
</ListEmpty>
)}
</ScrollArea>
</aside>
@@ -129,13 +133,13 @@ export function MinuteDesk() {
/>
<Section icon="pen-line" title="纪要正文">
<input
className="jc-input"
className="jc-inp"
placeholder="标题,如「7 月报价例会」"
value={draft.title}
onChange={(e) => setDraft({ ...draft, title: e.target.value })}
/>
<input
className="jc-input"
className="jc-inp"
placeholder="会议日期 YYYY-MM-DD"
value={draft.occurredOn}
onChange={(e) => setDraft({ ...draft, occurredOn: e.target.value })}
@@ -174,7 +178,13 @@ export function MinuteDesk() {
</DocPanel>
) : sel === undefined ? (
<main className="execution-panel jc-panel-card">
<ListEmpty icon="notebook-pen">选一场纪要,或新建一场</ListEmpty>
<EmptyState
ico="notebook-pen"
tone="brand"
title="还没有会议纪要"
desc="记下一场会,把会上定的事写成决议 —— 纪要是团队沉淀,决议登记起单才产生责任。"
hint="左上角「新建纪要」开始记"
/>
</main>
) : (
<DocPanel scrollKey={sel.id}>
@@ -218,9 +228,9 @@ export function MinuteDesk() {
已起单 · {r.workflowId?.slice(0, 8)}
</span>
) : registerFor === r.id ? (
<span className="jc-res-reg">
<span className="jc-custom-row">
<input
className="jc-input"
className="jc-inp"
value={packageId}
onChange={(e) => setPackageId(e.target.value)}
placeholder="流程包 id"
@@ -247,7 +257,7 @@ export function MinuteDesk() {
))}
{sel.resolutions.length === 0 && <span className="jc-dim">这场纪要还没有决议</span>}
</div>
{error !== undefined && <div className="jc-err">{error}</div>}
{error !== undefined && <div className="jc-callout t-bad">{error}</div>}
<NoteBand>
登记触发 = 人工起单的统一形态:选流程包 → 按调用接口 schema 填表(表单自动渲染)→
提交即起单;这条工作流的来源就记为登记人。
@@ -266,7 +276,7 @@ export function MinuteDesk() {
function AppendResolution({ onAppend, busy }: { onAppend: (text: string) => void; busy: boolean }) {
const [text, setText] = useState('');
return (
<div className="jc-res-append">
<div className="jc-cfill">
<textarea
className="jc-sup"
rows={2}