仿真测试台(界面):装配一次试跑 → 起单 → 全链 TRACE 看穿(frontend-design 专项)

测试台从「只能造一封邮件」升级成仿真试跑台,两种试法同屏切换:

**装配态**:选生效版流程包 → 按 callInterface.input 现生成参数表单(必填标出)→
节点指派表(每个活动点/审批点选账号,留空即轮值)→ 起单试跑;
起不来把后端判词原样上屏(如「must have required property 'rfqRef'」)。

**观测态**:WF 工作流图签 · DSK 任务落到了谁的工作台(明说测试台不代答)·
**TRC 全链 TRACE(签名元素)** · NOD 节点实例。
TRACE 做成一张走查记录纸:左半 span 树(细线方角枝线),右半同轴甘特(方格纸底纹)。
三处判断值得留:
- 轴的右端**只认已知时刻,不认 now** —— 按 now 收口会被不收尾的工作流 span 拉到
  十几秒,真干活的两三毫秒压成发丝;而根 span 常常一辈子不收尾,拉到「此刻」
  等于替它编了个结束时间
- 未收尾的段用剖面线 + 箭头(图纸的「未完待续」画法)
- 包络(流/节点自己不干活)画尺寸线而非实心条 —— 实心会盖过真正干活的那几笔
颜色只花在动作三色(工具石青 / 模型靛 / 人黄铜),结构走灰阶。

顺带修:区头 desc 是纯文本渲染,里面的 markdown `**` 会原样露星号 ——
六处全清;测试台页签名改「联调试跑」(它现在不止入站邮件)。

实测:真起单三次,指派两处都落地(TRACE 的 attributes.assigneeId 与节点实例
受理人一致);浏览器核对装配态与观测态。五闸全过。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KeDBx2PHLavbURXB8LJJ7m
This commit is contained in:
2026-07-29 02:46:31 +08:00
co-authored by Claude Fable 5
parent 5fc6dfdfe1
commit 48bc664c7e
8 changed files with 1619 additions and 312 deletions
+4 -4
View File
@@ -1,7 +1,7 @@
/**
* 治理台的分级页面路由 —— 自原型 `Governance.tsx` 第 25–90 行平移。
*
* 「**不用抽屉、不用弹窗**:每一层内容都有自己的页面。」
* 「不用抽屉、不用弹窗:每一层内容都有自己的页面。」
* 区 → 对象 → 子维度 → 元素,顶部面包屑可回跳任意一级,Esc / 返回退一级。
*/
@@ -126,7 +126,7 @@ export const ZM: Readonly<Record<GovZone, { title: string; desc: string; accent:
title: '联调测试台',
icon: 'flask-conical',
accent: 'linear-gradient(140deg,#e8833a,#c25f1a)',
desc: '把定义**试着跑一遍**:造一封入站邮件(可带附件)投进通道,看归属解析怎么判、哪个触发器命中、有没有起单。邮件通道是外界,模拟通道是允许的;系统内部机制一律真跑 —— 这里投出去的信走的是与真通道同一条入站归一链路。',
desc: '把定义试着跑一遍。两种试法:仿真试跑 —— 装一次调用、指派每个节点归谁、起单看穿全程(真实任务照旧落到被指派人的工作台,测试台不代答);入站邮件演练 —— 造一封信投进通道,看归属解析怎么判、哪个触发器命中。模拟的只有外界那一侧,系统内部机制一律真跑。',
},
system: {
title: '系统管理',
@@ -139,11 +139,11 @@ export const ZM: Readonly<Record<GovZone, { title: string; desc: string; accent:
/**
* 区内页签:一页一个维度 —— 不把四种维度摞在同一屏。
*
* `ledgers` 的页签是**数据域**,随发布动态生成(壳层运行时铺开),故此表留空。
* `ledgers` 的页签是数据域,随发布动态生成(壳层运行时铺开),故此表留空。
*/
export const TABS: Readonly<Record<GovZone, ReadonlyArray<{ key: string; label: string; ico: string }>>> = {
blueprint: [{ key: 'map', label: '企业蓝图', ico: 'route' }],
testbed: [{ key: 'inbound', label: '入站邮件', ico: 'mail' }],
testbed: [{ key: 'inbound', label: '联调试跑', ico: 'flask-conical' }],
workflows: [
{ key: 'overview', label: '总览', ico: 'gauge' },
{ key: 'pkgs', label: '流程包', ico: 'boxes' },