CH-01 · MOUSE鼠标
点击、拖拽、滚轮一律不透传——店长怎么点,远端都不动。
企业微信跑在无影云电脑上接待客户;2.1.0 页把那块屏投给店长——只许看,不许扰。
// 投影链路架构 + 排障复盘 · 已上线 · 口径 2026-08-12
// 本文为公开版,具体标识已替换为占位符:PR 号、提交 SHA、功能开关名、手册与规格章节、云机所在城市与台数均已删去。
企微和自动化跑在无影云电脑上;门店页只是把那块屏「看」过来——票据走后端,画面直连浏览器。
// 玫红流光 = 画面 · 只从云机流向店长,反向没有任何通道
后端只管发票,画面流不经过它。凭证前置只要求“资源已授权给当前 EndUserId”——没有域名白名单这回事;且 EndUserId 必须复用接待号同一账号:无影是单会话机,换账号连接会把正在接待的会话整个踢下线。
谁发起、谁鉴权、谁建流、谁无感——序号跨行跳一次,就是一次交接。
// 02→03 后端交回浏览器 · 05/06 同列并行:看的人在看,干活的机器不知道
观看端的任何输入都可能打进生产会话,四条通道一律锁死。
云电脑上跑着企微自动化接待——屏幕那头是真实客户。观看端任何一次输入透传,都会直接打进生产会话,所以纪律只有一条:只影响投影、绝不碰自动化。
点击、拖拽、滚轮一律不透传——店长怎么点,远端都不动。
按键不进远端,店长本机打字不会落进企微输入框。
门店平板、触屏一体机的手势同样拦截,不进远端。
本机复制的内容曾可能同步进远端企微输入框——后来补上的第四道锁。剪贴板是独立方法、不在 uiConfig 里,所以最容易漏。
lockReadOnly() 在 start 前和 onConnected 后各调一次——SDK 建连会重置这些模块,只关一次会被覆盖。文件传输则靠不传 fileTransferConfig 保证没有。
它安全的前提是恰好等于云机原生分辨率——那时 setResolution 是 no-op。这是按机契约,不是全局常量。
// 根治三件套:resolutionAdaptive:false · fixedResolution 2560×1600 · onConnected 再 setResolution 兜底
对照实验一度把嫌疑推给 React 树——直到发现实测台不保真。真凶是一条最基础的容器契约。
createPortal 一度排上日程。
div 也能连——SDK 容忍、自己往 div 注入子 iframe,恰好把契约偏差掩盖了整段排查。
iframeId 指向页面预置的 <iframe>。给 div 时 SDK 在产品页把内嵌 window 导航到 origin 根,被本站 X-Frame-Options 拒掉 —— 破图。
// 复盘已归档 · 教训沉淀为“第三方 SDK 先核容器契约”
画面已在生产跑通。唯一没关的问题:“连接会不会打断正在进行的接待”——排期在工作时段专场验一次。
| 层面 | 内容 | 状态 |
|---|---|---|
| 加固 | 只读锁补上剪贴板凑齐四通道;fixedResolution 按机前提写死进注释 | 已合入 MAIN |
| 修复 | 容器 div → iframe(真根因的修复所在)+ onError 监听 | 已合入 MAIN |
| 上线 | 翻开连接开关;产品页三次干净连接 0 报错,分辨率全程 2560×1600 | 已上线 |
| 生产 2.1.0 | 店长点「连上看画面」即看企微实时桌面;休眠机也能连,只读不透传 | 运行中 |
| 待验证 | “连接不打断正在进行的接待”——工作时段连一次,15 秒采样分辨率与接待心跳 | 待专场实测 |
| 档案 | 设计文档里的排障复盘 · 开通步骤手册 | 已归档 |
08-09 到 08-11,投屏这条线三天密集迭代。摘录关键节点——每个调研结论都长在一次版本上。
// 摘录关键节点 · 口径 2026-08-12
调研与复盘全部落档:实测记录 · 排障复盘(已结案)· 开通步骤手册——每一步结论都能在版本记录里对上号。