diff --git a/apps/ai-game-creator-shell/src/view/project-development/export/state/useTaonierTab.ts b/apps/ai-game-creator-shell/src/view/project-development/export/state/useTaonierTab.ts index 724868076..75cb5de23 100644 --- a/apps/ai-game-creator-shell/src/view/project-development/export/state/useTaonierTab.ts +++ b/apps/ai-game-creator-shell/src/view/project-development/export/state/useTaonierTab.ts @@ -288,15 +288,27 @@ export function useTaonierTab({ // 发布期间换了项目:旧项目的结果属于旧项目,别落进新项目面板。 if (projectPathRef.current !== projectPath) return; setPublishResult(next); - setProgress(null); // 发布成功后把草稿里刚上传的本地路径悄悄改写成平台返回的 objectKey。键来自发布响应本身 // (新上传落的桶 + 沿用的旧键,顺序与槽位一致),不依赖回读;先回读一次上一版本只是为了 // 拿到刚发布媒体的换签预览,改写后当前槽位立刻能按 OSS 同一来源显示,与上一版本逐张对照。 - void (async () => { + // + // 回读也放进进度弹窗:弹窗开着时页面不可操作,用户没法在 await 期间增删换截图, + // 回读后的改写就不会静默吞掉这些编辑(#17)。 + setProgress({ + phase: 'running', + message: '正在回读线上媒体…', + step: 'submit', + percent: null, + }); + try { await taonier.refreshOnline(); if (projectPathRef.current !== projectPath) return; taonier.rewritePublishedMediaToObjectKeys(next); - })(); + } catch { + // 回读失败不影响本次发布结果:发布响应里已经带回 objectKey,下次打开会再回读一次。 + } finally { + if (projectPathRef.current === projectPath) setProgress(null); + } } catch (error) { // 旧项目的发布失败不该记到新项目头上。 if (projectPathRef.current !== projectPath) return;