d1581892d7
- 素材重命名(跨范围契约):`rename_local_project_asset` 现在要求 `expectedProjectId` + `expectedProjectRevision`,前端按删除 / 分类保存同一套 CAS 口径补齐——先 `get_local_game_project_revision` 读当前 revision 再连同项目身份提交,不用可能过期的本地缓存值 - 失败文案统一:新增 `projectAssetCommandErrorMessage`,把 `project-identity-conflict` / `project-revision-conflict` 翻成用户可读中文,重命名 / 删除 / 分类保存三条链路共用一份映射,其余错误原样透出 - index.tsx:资源面板下载按 `resolveDownloadablePanelEntries` 过滤,版本卡这类合成 path 的条目不再进入落盘链路 - index.tsx:`characterAnimationPanel` 纳入画布浮层开关判据(抽 `resolveResourceCanvasFloatingPanelOpen`),「生成动画」面板与快速编辑 / 信息浮层共用同一条「点外部 / Esc 关闭」规则 - index.tsx:去掉 `ResourceBookScene` 上重复的 `onWheel`,滚轮只由 manager 上的原生 `passive:false` 监听处理,平移 / 缩放不再被翻倍 - index.tsx:快速编辑的源资源在层 id 命中不到时回落到已正规化的 `asset:<id>`,重试不再静默什么都不做;取不到时给出可见失败 - ResourceCanvasPanelView.tsx:下载按钮按可下载条数判可用、不再在上传中显示下载转圈;上传中禁掉 × / Esc / 遮罩三条关闭路径;预览占位文案抽 helper - GameRunVersionPicker.tsx:portal 菜单在滚动 / 缩放后重算位置;外部点击判定沿用共享 `useImageCanvasFloatingOptionDismiss` + `menuRef` 边界(review 该条已修,保留现状并补位置用例) - ResourceCanvasGenerationPanelView.tsx:`submitting` 改 `finally` 收回,成功路径不再永久锁住面板 - ResourceAssetDeleteDialog.tsx / ResourceRenameDialog.tsx / ResourceClassificationPanel.tsx:在飞时 `closeOnEscape` / `closeOnBackdrop` 与头部 × 一起挡住 - resourceEditModel.ts / resourceCanvasToolbarModel.ts / useProjectResourceCardPreviews.ts / projectResourceLiveUpdateModel.ts:抽 `resourceBaseName`、`canonicalProjectedResourceMediaType` 参数收窄去掉强转、删未使用参数、补「IO 失败会 reject」的签名说明 - resourceCanvasHistoryModel.ts:`resourceCanvasSnapshotsEqual` 不再比较不可恢复的 `manuallyPlaced`,消除「压进历史但撤销是空操作」 - resourceCanvasSectionMapping.ts:删掉从未接线、且注释与实现相矛盾的 `LEGACY_RESOURCE_CANVAS_SECTION_FALLBACK` - resourceCanvasChrome.css:`.game-resource-panel-grid` 补 `flex: 1 1 auto; min-height: 0`,卡片网格成为真正的滚动区 - 用例:重命名 CAS 载荷与读序、CAS 拒绝文案、版本卡下载门禁、上传中关闭路径、浮层判据、菜单跟随滚动、分区映射
34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
/**
|
||
* 素材命令(重命名 / 删除 / 分类保存)失败原因的统一出口。
|
||
*
|
||
* Rust 侧的项目身份 / 版本 CAS 拒绝是**结构化错误码**(`project-identity-conflict` /
|
||
* `project-revision-conflict`):直接透出就是给用户看一串代码。这里只翻译已知的码,
|
||
* 其余错误原样透出 —— 宁可显示后端原文,也不把原因吞掉换成「操作失败」这种无信息文案。
|
||
*
|
||
* 口径与 `resourceVersionReplacementErrorMessage` 里同样的两条映射逐字一致,
|
||
* 三条链路给用户的说法必须一样。
|
||
*/
|
||
export function projectAssetCommandErrorMessage(
|
||
error: unknown,
|
||
fallback: string,
|
||
): string {
|
||
let message = '';
|
||
if (typeof error === 'string') {
|
||
message = error.trim();
|
||
} else if (error instanceof Error) {
|
||
message = error.message.trim();
|
||
} else if (error !== null && error !== undefined) {
|
||
message = String(error).trim();
|
||
}
|
||
if (!message) {
|
||
return fallback;
|
||
}
|
||
if (message.includes('project-revision-conflict')) {
|
||
return '项目已被其它操作改动,请刷新后重试';
|
||
}
|
||
if (message.includes('project-identity-conflict')) {
|
||
return '项目身份不一致,请重新打开项目后再试';
|
||
}
|
||
return message;
|
||
}
|