fix: 修复 AI 设计任务栏同步与独立滚动
问题:生成任务未及时出现在右侧栏,任务区与会话区还会共享外层滚动。 实现:补齐 Agent 回合与 Quote 确认后的任务同步,锁定左右滚动容器并增加桌面布局和异步任务回归测试。
This commit is contained in:
@@ -45,6 +45,12 @@ type ImageWorkspaceState = {
|
||||
};
|
||||
|
||||
let inFlightLoad: Promise<DesignWorkspaceBootstrap | null> | null = null;
|
||||
const GENERATION_TASK_SYNC_ATTEMPTS = 20;
|
||||
const GENERATION_TASK_SYNC_DELAY_MS = 500;
|
||||
|
||||
function wait(milliseconds: number): Promise<void> {
|
||||
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
||||
}
|
||||
|
||||
function unavailable(error: unknown): boolean {
|
||||
return error instanceof ImageWorkspaceApiError
|
||||
@@ -107,6 +113,21 @@ export const useImageWorkspaceStore = create<ImageWorkspaceState>((set, get) =>
|
||||
return workspace;
|
||||
};
|
||||
|
||||
const waitForGenerationTask = async (
|
||||
workspaceId: string,
|
||||
quoteId: string,
|
||||
): Promise<DesignGenerationTask[]> => {
|
||||
for (let attempt = 0; attempt < GENERATION_TASK_SYNC_ATTEMPTS; attempt += 1) {
|
||||
if (get().activeWorkspaceId !== workspaceId) return [];
|
||||
const tasks = await get().refreshTasks().catch(() => []);
|
||||
if (tasks.some((task) => task.quoteId === quoteId)) return tasks;
|
||||
if (attempt < GENERATION_TASK_SYNC_ATTEMPTS - 1) {
|
||||
await wait(GENERATION_TASK_SYNC_DELAY_MS);
|
||||
}
|
||||
}
|
||||
throw new Error('生成请求已确认,但任务列表尚未同步,请点击刷新重试');
|
||||
};
|
||||
|
||||
const loadWorkspace = async (workspaceId: string): Promise<void> => {
|
||||
const [workspace, tasks] = await Promise.all([
|
||||
fetchImageWorkspaceProject(workspaceId),
|
||||
@@ -251,11 +272,13 @@ export const useImageWorkspaceStore = create<ImageWorkspaceState>((set, get) =>
|
||||
const workspace = get().workspace;
|
||||
if (!workspace) throw new Error('请先选择设计项目');
|
||||
try {
|
||||
return applyWorkspace(await sendImageWorkspaceMessage(
|
||||
const updated = applyWorkspace(await sendImageWorkspaceMessage(
|
||||
workspace.workspaceId,
|
||||
workspace.turnRevision,
|
||||
message,
|
||||
));
|
||||
await get().refreshTasks().catch(() => []);
|
||||
return updated;
|
||||
} catch (error) {
|
||||
set({ error: handleRequestError(error) });
|
||||
return await recoverRevisionConflict(error);
|
||||
@@ -271,7 +294,7 @@ export const useImageWorkspaceStore = create<ImageWorkspaceState>((set, get) =>
|
||||
workspace.turnRevision,
|
||||
quoteId,
|
||||
));
|
||||
await get().refreshTasks().catch(() => []);
|
||||
await waitForGenerationTask(workspace.workspaceId, quoteId);
|
||||
return updated;
|
||||
} catch (error) {
|
||||
set({ error: handleRequestError(error) });
|
||||
|
||||
Reference in New Issue
Block a user