fix(creator-studio): 固定公众号式创作工具栏

- 顶部改为 fixed 创作工具栏:左侧返回/品牌/模式,中间文章标题与保存状态,
  右侧撤销/重做、保存草稿、预览、发布
- 新增工作台级撤销/重做快照栈,连续编辑合并记录;支持 Ctrl/Cmd+Z / Shift+Z,
  不覆盖 RichText 输入框自身的编辑历史
- 移动端收敛工具栏布局,保留撤销/重做、预览、发布
- 先保存草稿再请求审核/直接发布;请求使用服务端更新后的文章与版本 ID
- 固定工具栏以独立 chrome 层布局,正文避开顶部工具栏高度
- 补充固定工具栏、历史操作与键盘快捷键契约

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-06 17:36:15 +08:00
1 parent f5e9420266
commit 9e8913ea0a
9 files changed
+518 -50

No files matched your search

@@ -132,6 +132,19 @@ test('studio app keeps autosave, recovery, and the publish drawer wired', () =>
assert.match(drawer, /立即发布/);
});
test('固定顶栏包含保存状态、撤销/重做、预览和发布动作', () => {
assert.match(appSource, /className="jio-creator__bar"/);
assert.match(appSource, /history\.undo\(\)/);
assert.match(appSource, /history\.redo\(\)/);
assert.match(appSource, /保存草稿/);
assert.match(appSource, /<SaveState value=\{saveState\}/);
assert.match(appSource, /draftRef\.current\.postId/);
assert.match(appSource, /useEditorHistory/);
assert.match(appSource, /event\.shiftKey \? redo\(\) : undo\(\)/);
assert.match(read('assets/creator-studio/src/styles/studio.scss'), /\.jio-creator__bar\s*\{[^}]*position:\s*fixed/);
assert.match(read('assets/creator-studio/src/styles/studio.scss'), /\.jio-creator\s*\{[\s\S]*?padding-top:\s*var\(--jc-bar\)/);
});
test('creator studio build artifacts and contracts exist', () => {
assert.ok(exists('assets/creator-studio/package.json'));
assert.ok(exists('assets/creator-studio/package-lock.json'));