Files
mnote/recycle/design/luckysheet-checklist.md
T
2026-04-13 19:21:42 +08:00

39 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Luckysheet 全屏首次加载异常(问题清单与修复 Checklist)
## 现象(用户反馈)
- 全屏打开在线表格时,前 1~2 次渲染不完整:Luckysheet 工具栏/公式栏缺失或布局异常;刷新后再打开才恢复正常。
- DevTools 的 Sources/页面树里看不到预期的 `/luckysheet/*` 静态资源(怀疑资源未加载或加载顺序异常)。
## 目标
- 全屏首次打开就稳定显示完整 Luckysheet UI(工具栏、公式栏、sheetbar 等)。
- 资源加载可观测(能确认 JS/CSS 确实加载完成)。
- 不破坏现有 Convex 数据读写链路(`/api/tables/*` -> Convex query/mutation)。
## Checklist(按优先级)
### A. 资源加载与初始化时序(高优先级)
- [ ] 确认 Luckysheet CSS 与 JS 都已加载完成,再允许 `create()`(避免“JS ready 但 CSS 未 ready”导致的高度/布局计算错误)。
- [ ] 首次创建后触发一次 `resize`(部分情况下 Luckysheet 需要通过 resize 重新计算 UI 布局)。
- [ ] 记录/暴露资源清单(仅 dev):便于确认当前页面是否完成注入与版本号是否一致。
### B. 全屏容器可见性与布局(高优先级)
- [ ] Luckysheet `create()` 时容器必须“已占位且可计算尺寸”(不要在 `display:none` 的容器里初始化)。
- [ ] Loading/Error 采用绝对定位遮罩,避免通过隐藏容器实现 loading(防止尺寸为 0 导致布局计算异常)。
### C. 与 Convex 数据链路的时序(中优先级)
- [ ] 表格数据(snapshot/schema/title)获取完成后再创建实例,避免多次 create/destroy 抖动。
- [ ] 保存/同步触发频率可控(debounce),避免高频 mutation 导致卡顿(尤其在外网高延迟场景)。
### D. 观测与回归(中优先级)
- [ ] 在控制台输出关键阶段日志(仅 dev):`资源加载完成` / `create` / `destroy` / `resize`
- [ ] 复现用例:首次全屏打开(冷启动)、关闭后再开、刷新后再开、嵌入 iframe 与全屏互不影响。
## 已实施修复(对应 A/B
- `wolai-frontend/src/components/online-table/useLuckysheetLoader.ts`CSS 注入改为等待 `onload`,并与 JS 一起作为 ready 条件;dev 下暴露 `window.__wolaiLuckysheetResources` 便于排查。
- `wolai-frontend/src/components/online-table/FullScreenTableEditor.tsx`:容器始终占位 + overlay 遮罩;`create()` 后触发 `resize`(含兜底调用 `luckysheet.resize?.()`)。
## 验证步骤(建议)
1. 冷启动后打开含在线表格的文档,点击“全屏编辑”,观察工具栏/公式栏是否一次成功显示。
2. 打开 DevTools -> Network / Sources,确认首次打开会请求 `/luckysheet/*`,且 CSS/JS 不报错。
3. 控制台查看 `window.__wolaiLuckysheetResources`(dev 模式)是否存在,以及资源路径版本号是否一致。