forked from ChaiHao/BPOS-MVP
审批 / 消息 / 纪要 / 汇报补上助理栏 —— 那不是空态,是整栏没渲染
`.workspace` 是**三列**网格(侧栏 · 工作区 · 助理栏 440px)。这四个模块只渲染了 两栏,右边就空出一条 **234px 的白带** —— 里面什么都没有,不是「空态没写好」, 是这一栏根本没画。实测四面皆然。 那一栏该摆什么,按 OS 4.1 定:「对话流 / 视图区」是**工作台-任务**的交互结构、 是回环输入的唯一入口。这四个要素各有自己的形态 —— 审批是通过/驳回附依据、 消息是就地答(MessageDesk 自己那条 NoteBand 早写着「不开放任务对话流」)、 纪要靠人记、汇报是确认即提交 —— 都不经对话流。 所以**不摆能打字的输入框**:那是在许诺聊得起来。只如实说这一栏是什么、 这一面该怎么用、想说话该去哪儿。共用件 `AssistantAside`,色调 `muted` (通路不在这儿,灰着就不许诺),章也不打彩色渐变 —— 亮着像在待命。 四句文案各说各的事,不是同一句复制四遍: 审批 拍板不用先商量 —— 看依据就够了,想先问一句就去那一单的任务里说 消息 这儿不用聊 —— 就地答完即可,作答只及卡面,不用跑进别人的任务 纪要 会得你自己开 —— 你写下来最准,写完登记起单责任才落到人 汇报 不用你写一个字 —— 按任务日志自动聚合,要数字好看得回任务里干活 顺带治了题头被截:一行摆四件(章 · 任务助理 · Agent · 说明句),对话区压到 212px 时说明句只剩 29px,被省略号截成「汇…」,一个字都读不出来。改为按**本栏宽度** 容器查询,挤了就让说明句换到第二行拿整行说完。任务面的「盯着这单推进 · 有事随时说」 以前也是截的,这下一并读全了。容器上下文落在 `.jc-tch` 不是 `.session-chat` —— 后者带拖拽调宽的负偏移柄,不给它加 containment。 补 3 个缺失图标(gavel / pencil-line / chart-column)—— 不补就是空 SVG,这坑踩过。 typecheck ✓ lint ✓ depcruise 374 模块 ✓ api:check ✓ 490 测试 ✓ Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
@@ -12,7 +12,7 @@ import { decideApprovalRoute, listApprovalsForMeRoute } from '@contracts';
|
||||
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, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
|
||||
import { AssistantAside, Chip, DocPanel, Hero, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
|
||||
|
||||
const STATE_CHIP = {
|
||||
pending: { tone: 'todo' as const, label: '待审批', pulse: true },
|
||||
@@ -188,6 +188,13 @@ export function ApprovalDesk() {
|
||||
)}
|
||||
</DocPanel>
|
||||
)}
|
||||
|
||||
<AssistantAside
|
||||
ico="gavel"
|
||||
note="审批不经对话"
|
||||
title="拍板不用先商量"
|
||||
desc="通过还是驳回,看依据就够了 —— 驳回时把原因写进意见,发起人就知道该改哪儿。想先问一句再拍,去那一单的任务里说。"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ import { answerMessageRoute, listMessagesRoute, markMessageReadRoute } from '@co
|
||||
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, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
|
||||
import { AssistantAside, Chip, DocPanel, Hero, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
|
||||
|
||||
const KIND_META: Readonly<Record<string, { icon: string; grad: readonly [string, string]; kicker: string }>> = {
|
||||
notice: { icon: 'bell', grad: ['#7f3bf5', '#5b21cf'], kicker: '系统 · 通知' },
|
||||
@@ -151,6 +151,13 @@ export function MessageDesk() {
|
||||
)}
|
||||
</DocPanel>
|
||||
)}
|
||||
|
||||
<AssistantAside
|
||||
ico="at-sign"
|
||||
note="消息就地答"
|
||||
title="这儿不用聊"
|
||||
desc="别人请你补的信息,在左边那条消息上直接答完就行 —— 作答只及卡面,不用跑进别人的任务。助理只在你自己的任务里说话。"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
|
||||
import { AssistantAside, Avatar, AvatarStack, Chip, DocPanel, Hero, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
|
||||
|
||||
export function MinuteDesk() {
|
||||
const queryClient = useQueryClient();
|
||||
@@ -269,6 +269,13 @@ export function MinuteDesk() {
|
||||
</Section>
|
||||
</DocPanel>
|
||||
)}
|
||||
|
||||
<AssistantAside
|
||||
ico="pencil-line"
|
||||
note="纪要靠你记"
|
||||
title="会得你自己开"
|
||||
desc="会上定了什么,你写下来最准 —— 写完把该办的事登记起单,责任才落到人。助理在任务里帮你把事推下去,不代你开会。"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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, EmptyState, ListEmpty, NoteBand, Section, SidebarHead } from '@web-shared/desk/module-kit.tsx';
|
||||
import { AssistantAside, 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' },
|
||||
@@ -191,6 +191,13 @@ export function ReportDesk() {
|
||||
</div>
|
||||
</DocPanel>
|
||||
)}
|
||||
|
||||
<AssistantAside
|
||||
ico="chart-column"
|
||||
note="汇报自动聚"
|
||||
title="不用你写一个字"
|
||||
desc="日报周报按你的任务日志自动聚合,你看一眼、确认即提交。要让数字变好看,得回任务里把活干完 —— 助理在那边等你。"
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user