工作日志:一行摆首句,展开就把话说完
从前一条只有一行标题,而人真想回看的东西全躺在留痕里没露过面 —— 凭什么算这一步办完了、那一笔落下哪几行、被拒到底拒在哪儿、发的是哪种卡送到哪儿。 现在每条可展开,细节由 detailOf 摘成**一句句人话**(不摆 execution 这类内部名); 摘不出就是空数组,前端据此不给展开钮 —— 点开是空抽屉比不给还糟。 不摆二级条目(用户定):细节不是「键:值」两栏 —— 那是把留痕的字段名搬到人面前, 人还得自己在脑子里连成句子。每句自带主语与语境,单拎出来也读得通。 连带修一处文档与实现不符:「一轮一句」的口径说埋头办事那几拍的交代「留进工作日志」, 而实现把 internal 整类滤掉了,那几句哪儿都看不到。现在带交代的放行, 章写「交代进展」、记在 AI 名下;排障用的内部痕照旧不摆。 两种交代统一「首句上行、全文进抽屉」,一句话说完的不重复摆;截了才加省略号。 契约:任务详情的日志行新增可选 detail(字符串数组),api-report 同批更新。 门禁:typecheck / lint / depcruise / test(1378)全绿;浏览器实测折叠行高 34-36px 齐平、 展开无键值两栏残留。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3139,6 +3139,18 @@
|
||||
.proto-root .jc-log-t { flex: 1; min-width: 0; }
|
||||
.proto-root .jc-log-t b { display: block; font-size: 12.5px; font-weight: 600; }
|
||||
.proto-root .jc-log-t em { display: block; margin-top: 2px; font-style: normal; font-size: 11px; line-height: 1.6; color: var(--ink-3); }
|
||||
/* 细节抽屉(2026-08-03):折叠时一行不变,展开才现;没有细节的条目连钮都不给 */
|
||||
.proto-root .jc-log-more { display: flex; align-items: baseline; gap: 6px; width: 100%; padding: 0; border: 0; background: none; text-align: left; cursor: pointer; color: inherit; font: inherit; }
|
||||
.proto-root .jc-log-more > svg { flex: none; margin-top: 1px; color: var(--ink-4); transition: color var(--t-fast); }
|
||||
.proto-root .jc-log-more:hover > b { color: var(--brand-deep); }
|
||||
.proto-root .jc-log-more:hover > svg { color: var(--brand); }
|
||||
.proto-root .jc-log-more:focus-visible { outline: 2px solid var(--brand); outline-offset: 2px; border-radius: 4px; }
|
||||
/* 展开的正文:一段一句,左缘一道细线把它归到这一条名下 —— 不做键值两栏 */
|
||||
.proto-root .jc-log-body { margin: 6px 0 2px; padding: 2px 0 2px 10px; border-left: 2px solid var(--line); }
|
||||
.proto-root .jc-log-body p { margin: 0; font-size: 11.5px; line-height: 1.7; color: var(--ink-2); white-space: pre-wrap; overflow-wrap: anywhere; }
|
||||
.proto-root .jc-log-body p + p { margin-top: 5px; }
|
||||
/* 展开那一条轻轻提亮,眼睛回得来 */
|
||||
.proto-root .jc-log-row.on { background: #fbfcfe; border-radius: 8px; }
|
||||
/* 成果二级界面的返回键 —— 顶部页签不变,右槽换成它 */
|
||||
.proto-root .jc-tnav-back { width: auto; padding: 0 9px; gap: 5px; font-size: 11.5px; font-weight: 600; }
|
||||
|
||||
|
||||
@@ -427,16 +427,7 @@ export function ViewRegion({ detail, onReplyOrder, values, onField, locate }: Vi
|
||||
* (自主率要把「等外面」与「机器干的」分开);人扫这一屏只问
|
||||
* 「这一步是我办的、AI 办的,还是流程自己走到的」。
|
||||
*/
|
||||
<div key={line.id} className={'jc-log-row t-' + line.who}>
|
||||
<span className="jc-log-at jc-mono">{atMinute(line.at)}</span>
|
||||
{/* 章摆的是**动作**(四字,与对话区同词),不是归侧 ——
|
||||
归侧仍在 `t-${side}` 的配色里,度量也照旧靠它 */}
|
||||
<span className="jc-log-side">{line.action}</span>
|
||||
<span className="jc-log-t">
|
||||
<b>{line.title}</b>
|
||||
{line.summary !== undefined && <em>{line.summary}</em>}
|
||||
</span>
|
||||
</div>
|
||||
<LogRow key={line.id} line={line} />
|
||||
))}
|
||||
</div>
|
||||
) : (
|
||||
@@ -652,6 +643,53 @@ export function ViewRegion({ detail, onReplyOrder, values, onField, locate }: Vi
|
||||
* 涟漪说「环在转」,微光工作线说「报告正在一行行写出来」;
|
||||
* 都是纯 CSS、只动 transform/opacity,prefers-reduced-motion 下静止但状态仍可读。
|
||||
*/
|
||||
/**
|
||||
* 日志一行 —— **折叠时一行,展开才看细节**(2026-08-03 用户:「细节展开不够好」)。
|
||||
*
|
||||
* 这一屏的用法是**扫**:一眼看完这单走过哪几步、谁办的。所以密度不能破 ——
|
||||
* 细节收进抽屉,想深究哪一条点哪一条。**没有细节的条目不给展开钮**:
|
||||
* 摆一个点开是空的抽屉,比不给还糟(点一次才知道白点)。
|
||||
*
|
||||
* 展开不做动画高度:日志动辄几十条,一条一个过渡就是一屏都在抖。
|
||||
*/
|
||||
function LogRow({ line }: { line: TaskDetail['log'][number] }) {
|
||||
const [open, setOpen] = useState(false);
|
||||
const has = line.detail.length > 0;
|
||||
return (
|
||||
<div className={'jc-log-row t-' + line.who + (open ? ' on' : '')}>
|
||||
<span className="jc-log-at jc-mono">{atMinute(line.at)}</span>
|
||||
{/* 章摆的是**动作**(四字,与对话区同词),不是归侧 ——
|
||||
归侧仍在 `t-${side}` 的配色里,度量也照旧靠它 */}
|
||||
<span className="jc-log-side">{line.action}</span>
|
||||
<span className="jc-log-t">
|
||||
{has ? (
|
||||
<button type="button" className="jc-log-more" onClick={() => setOpen(!open)} aria-expanded={open}>
|
||||
<b>{line.title}</b>
|
||||
<Ico name={open ? 'chevron-down' : 'chevron-right'} s={13} />
|
||||
</button>
|
||||
) : (
|
||||
<b>{line.title}</b>
|
||||
)}
|
||||
{line.summary !== undefined && <em>{line.summary}</em>}
|
||||
{/*
|
||||
* **展开就是把话说完,不摆二级条目**(2026-08-03 用户定)。
|
||||
*
|
||||
* 从前展开出来是一摞「键:值」—— 那是把留痕的字段名搬到人面前,
|
||||
* 人还得自己在脑子里把它们连成一句话。日志是给人读的:
|
||||
* 该说的直接写成正文,一段说完;真有两三样要说的,一样一段。
|
||||
*/}
|
||||
{open && (
|
||||
<div className="jc-log-body">
|
||||
{line.detail.map((text, i) => (
|
||||
<p key={i}>{text}</p>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function WorkingScene({ doneN }: { doneN: number }) {
|
||||
return (
|
||||
<div className="jc-working" aria-live="polite">
|
||||
|
||||
Reference in New Issue
Block a user