调整图片画布路由和画布数据模型

将图片画布入口改为 /editor/canvas

新增 editor_canvas 表并关联 editor_project 默认画布

更新 project API 响应中的 canvas 快照兼容层

统一图片画布侧栏列表项和图标按钮组件

同步前端测试、SpacetimeDB bindings、技术文档和 TRACKING 记录
This commit is contained in:
2026-06-13 22:09:45 +08:00
parent a1b9ac8544
commit 242860e2d3
21 changed files with 1649 additions and 295 deletions

View File

@@ -25,6 +25,14 @@ describe('editorProjectClient', () => {
project: {
projectId: 'editor-project-1',
title: '未命名画布',
canvas: {
canvasId: 'editor-project-1:canvas:default',
projectId: 'editor-project-1',
title: '默认画布',
viewport: { x: 0, y: 0, scale: 1 },
layers: [],
updatedAt: '2026-06-12T00:00:00.000Z',
},
viewport: { x: 0, y: 0, scale: 1 },
layers: [],
resources: [],
@@ -54,6 +62,14 @@ describe('editorProjectClient', () => {
project: {
projectId: 'editor-project-created',
title: '未命名画布',
canvas: {
canvasId: 'editor-project-created:canvas:default',
projectId: 'editor-project-created',
title: '默认画布',
viewport: { x: 0, y: 0, scale: 1 },
layers: [],
updatedAt: '2026-06-12T00:00:00.000Z',
},
viewport: { x: 0, y: 0, scale: 1 },
layers: [],
resources: [],
@@ -85,6 +101,14 @@ describe('editorProjectClient', () => {
project: {
projectId: 'editor-project-1',
title: '未命名画布',
canvas: {
canvasId: 'editor-project-1:canvas:default',
projectId: 'editor-project-1',
title: '默认画布',
viewport: { x: 12, y: 24, scale: 0.5 },
layers: [{ layerId: 'layer-1', resourceId: 'resource-1', x: 10, y: 20 }],
updatedAt: '2026-06-12T00:00:00.000Z',
},
viewport: { x: 12, y: 24, scale: 0.5 },
layers: [{ layerId: 'layer-1', resourceId: 'resource-1', x: 10, y: 20 }],
resources: [],
@@ -170,6 +194,14 @@ describe('editorProjectClient', () => {
project: {
projectId: 'editor-project-explicit',
title: '角色设定板',
canvas: {
canvasId: 'editor-project-explicit:canvas:default',
projectId: 'editor-project-explicit',
title: '默认画布',
viewport: { x: 0, y: 0, scale: 1 },
layers: [],
updatedAt: '2026-06-12T00:00:00.000Z',
},
viewport: { x: 0, y: 0, scale: 1 },
layers: [],
resources: [],

View File

@@ -68,12 +68,23 @@ export type EditorImageGenerationResult = {
export type EditorProjectSnapshot = {
projectId: string;
title: string;
canvas?: EditorCanvasSnapshot;
viewport: EditorCanvasViewport;
layers: EditorProjectLayerSnapshot[];
resources: EditorProjectResourceSnapshot[];
updatedAt: string;
};
export type EditorCanvasSnapshot = {
canvasId: string;
projectId: string;
title: string;
viewport: EditorCanvasViewport;
layers: EditorProjectLayerSnapshot[];
createdAt?: string;
updatedAt: string;
};
export type EditorProjectCreateInput = {
title?: string;
};