JMOS文档与样张

JMOS 第二批改进样张 · motion-batch2(候选,未并入 app/jmos)

来源:仓库 reviews/2026-10-09/motion-batch2/README.md · 版本 0ca44f9 · 候选样张,未并入主应用 · 录屏 motion-batch2.mp4 与总览图 motion-batch2.png 体积较大,未随本站发布(仓库同目录可看)

在本站打开样张组件演示07 工作台(样张)05 应用中心10 待确认队列

留档说明(2026-10-09):样张代码在 prototypes/motion-batch2/,未并入主应用。文中提到的 *.patch 是当时交付的补丁,内容就是该目录;补丁文件本身不入库。

0. 第二批修订(10-09,北京时间)

在第一版之后补了四处:(a)(b) 两项小改,加上复看录屏发现的两个问题。都只改 prototypes/motion-batch2/。

#问题原因改法
1⌘K 回车选中结果(旧录屏约 0:25):列表一下子没了,只剩带阴影的空白盒子停几帧才退场;遮罩和外壳也没有平滑淡出面板自己做透明度淡出,又放在同样在淡出的遮罩里,实际透明度是两者相乘,内容提前看不见;同时导航和对话框退场同时开始,07 切舞台的重活抢了退场的帧回车和 Esc 走同一套退场:面板只做位移(shift),透明度只由遮罩做,200ms 线性,内容跟容器一起淡出;退场结束后才清空、才执行导航;退场期间用 prepare 在幕后准备目标(同页就地选中、07 里预先让 A-02 选中新项)
2窄屏 ⌘K 回车跳到待确认队列(旧录屏约 0:51–0:52):画面闪一下,内容瞬间错位单独打开的 10 里「去确认」会重新加载本页(闪一下);手机 07 跨应用跳转时舞台从中间的应用一路扫过去;飞入时显示的是旧截图,落地后才换成真实界面(错位、旧选中项)目标是本页时就地选中,不重新加载;手机 07 用第一批的切页规则做相邻滑入:目标先放到当前页旁边,中间的应用不带过渡地让开,只看到当前页和目标页;飞入时直接显示已经选中新项的真实界面(mb2-live),不再先显示截图
(a)手机 / 竖屏 07 没有可见的搜索入口—顶部聚焦条加 44×44 搜索按钮(aria-label 全局搜索,键盘可达),点开全局搜索
(b)「去确认」→ 10 时先显示旧选中项约 0.4s同 2同 2:一出现就是新选中项

新增自动检查(verify.mjs behave):

修订后全量重跑,两个引擎的结果见第 6 节。重录的 motion-batch2.mp4 里这两处在 0:26 前后(07 回车)和 0:58–1:06(390 的 10、手机 07);逐帧检查记录见第 7 节。还剩一处:07 里退场结束到舞台开始移动之间约有 250ms 停顿(等目标窗口准备好),不闪、不错位,先保留。

1. 长短竖线页码指示器(JMTicks)

项取值
线2px 宽;未选 12px --jm-border-strong,选中 28px --jm-text-1,悬停 20px --jm-text-3;同组线间距更紧
区分选中靠长度(28 对 12,相差 16px),颜色只是辅助;选中不用琥珀,避免和 #af541a 主按钮语义混淆
数字始终显示「03 / 12」,等宽数字;切换时数字滚动
触控轨道 44px 高,点在线附近即命中最近一根;可拖动;前后按钮 44×44
键盘 / 读屏role=slider,←/→、Home/End;aria-valuenow/aria-valuetext 带名称
动效180ms;「工作区」分组关闭或系统减少动态效果时直接切换

接入位置:

2. 数字滚动(JMRoll)

3. 详情页结构(JMDetail,10 队列详情、04 查看器设备详情)

  1. 编号眉标「01 / 05 · A-02 · 来源」;
  2. 大标题(≥26px);
  3. 副标题;
  4. 2px 线;
  5. 两列属性表:键名 12px,中文优先,例如「控制程序(PLC)」;容器 ≥720px 时每行两组,窄时上下排;
  6. 编号页签:01 概述 / 02 记录 / 03 日志,用第一批的页签下划线动效,支持键盘;
  7. 正文;
  8. 主操作条。

4. 全局搜索(⌘K / Ctrl K,JMSearch)

4.1 键位归属(默认,待确认)

旧问题:嵌在 07 里的 13 按 / 后整个舞台切到 12,没有就地打开小锦。

键归属说明
/问小锦有对象焦点时就地问这个对象。03、13 没有对象焦点时就地打开整页小锦面板,嵌在 07 里也一样,这修复了 13 的旧问题。其他嵌入页仍唤起工作台小锦(行为不变)
⌘K / Ctrl K全局搜索头部抢先注册监听;嵌在 07 时交给 07 打开对话框(只有一个),单独打开时在本页打开
例外05 单独打开时 / 仍是它原有的本地搜索;12 的 / 仍是它自己的命令面板两页按 ⌘K 都打开全局搜索

与问小锦的关系:搜索负责找东西和跳转,问小锦负责理解、判断和起草。搜索结果下方固定有「问小锦:「关键词」」按钮,把当前查询交给小锦(嵌在 07 时唤起工作台小锦,单独打开时页面有小锦面板就原位打开,否则跳到 12)。两者是两个入口,不重复。

4.2 对话框

5. 预览首页页脚(preview-index-footer.patch)

6. 验证(Chromium + WebKit)

项结果
矩阵144/144(两引擎 × 浅/深 × 390 触屏/768/1440/2560;6 个独立页各自打开 ⌘K + 07 内嵌 10 / 03 / 13):0 报错、0 横向溢出、对话框内无溢出且输入框 16px;07 切主题后内嵌页跟随;07 指示器存在且有选中项
行为70/70(每个引擎 35 项):数字滚动规则(240ms、只位移、同值 / 快变 / 告警 / 开关关闭);指示器(长度、颜色、44px、「03 / 12」、最近刻度、键盘);03 KPI 与告警;01 角标 4→5;07 指示器;⌘K 搜索与就地生成待确认(角标滚动,10 选中新项且仍为待确认);嵌入页 ⌘K 交给 07;07 / 仍唤起小锦;13 嵌入 / 原 = 换舞台,改后 = 原位;05 / 本地搜索 + ⌘K;12 / 命令面板 + ⌘K;10 / 04 详情结构 × 1440/390;搜索开关时长和线性退出、中途打断;系统减少动态效果;修订新增:回车选中时内容跟随容器退场(07 1440、10 390、手机 07 三处)、390 的 10 就地选中、手机 07 搜索按钮与相邻滑入
对比度(计算值)28/28(10 / 04 详情、搜索框、07 指示器、05 刻度 × 浅/深,正文小字 ≥4.5:1)。最低值:浅色 4.86;深色搜索 4.65(选中行副文字改为 text-2 后)、10 / 04 5.11、指示器 / 刻度 6.04
05 一致性6/6(1440 / 2560 / 390 下卡片变换、键盘、刻度点击与原页一致)
仓库检查npm run check、npm run center:check(4/4)、npm run motion:check(4/4)通过
截图 / 录屏截图和 png 已逐张看过;录屏逐帧慢放检查过,见第 7 节

修订后(10-09 19:35–20:00,北京时间)两引擎全量重跑:矩阵 144/144、行为 70/70、对比度 28/28、05 一致性 6/6。

修正记录:第一次跑矩阵时 132/144,WebKit 2560 下 12 项失败。原因是 2560 时页面 zoom 为 1.25,搜索框 1px 边框让内容宽变成半像素,WebKit 报对话框内 1px 横向溢出(看不出来,但算失败)。描边改用 box-shadow: 0 0 0 1px var(--jm-border) 后,内容宽为整数,然后全量重跑,上面是重跑结果(10-09 19:00 前后,北京时间)。

7. 录屏慢放检查(按第一批暴露过的问题逐帧看)

8. 局限

9. 待决事项(已按默认做,请确认)

  1. / 与 ⌘K 的分工:按 4.1 的表。05 单独打开时 / 仍是本地搜索,算例外。
  2. 01 的「Ctrl K」标记:已去掉。如需保留,应改指全局搜索。
  3. 10 / 04 没有对象焦点时按 /:目前仍唤起工作台小锦;是否也像 03 / 13 一样就地打开。
  4. 第一批退出曲线:透明度线性 + 位移 (0.4,0,0.6,1),与原契约的单条 (0.4,0,1,1) 不同,需要更新 motion 契约文档。
  5. 指示器选中长度:28px(参考值 33px)。为 44px 热区内留出余量,选了 28px。