feat(platform): improve map and project save workflows

This commit is contained in:
zhaowei.huang
2026-06-08 18:15:54 +08:00
parent 991502b4b1
commit 3dd08e28e5
11 changed files with 676 additions and 87 deletions
@@ -1,3 +1,4 @@
import type { AxiosError } from 'axios'
import http from './http'
/**
@@ -331,6 +332,13 @@ export interface MapSaveResult {
savedAt: string
}
export interface MapContentResult {
name: string
fileName: string
path: string
content: string
}
/** 保存结果:success 正常返回 dataconflict=true 表示同名地图已存在,调用方应弹「替换」确认。 */
export type MapSaveOutcome =
| { ok: true; data: MapSaveResult }
@@ -363,6 +371,12 @@ export type MapMergeOutcome =
export const mapsApi = {
list: () => unwrap<MapListResult>(http.get(`${BASE}/maps`)),
/** 读取固定地图文件夹内某张地图的 JSON 原文(MiGu.Server MapsContentController)。 */
readContent: (name: string) =>
http.get<MapContentResult>(
`/maps/${encodeURIComponent(name)}/content`
).then((r) => r.data),
sceneTaskStatus: () => unwrap<SceneTaskStatus>(http.get(`${BASE}/maps/scene-task-status`)),
/**
@@ -370,9 +384,18 @@ export const mapsApi = {
* 这里翻译为 { ok:false, conflict:true },让调用方弹「是否替换原地图」确认框。
*/
async save(name: string, overwrite = false): Promise<MapSaveOutcome> {
const { data } = await http.post<MapEditEnvelope<MapSaveResult>>(`${BASE}/maps/save`, { name, overwrite })
if (data?.success) return { ok: true, data: data.data as MapSaveResult }
return { ok: false, conflict: data?.code === 409, message: data?.message ?? '保存失败' }
try {
const { data } = await http.post<MapEditEnvelope<MapSaveResult>>(`${BASE}/maps/save`, { name, overwrite })
if (data?.success) return { ok: true, data: data.data as MapSaveResult }
return { ok: false, conflict: data?.code === 409, message: data?.message ?? '保存失败' }
} catch (err) {
const ax = err as AxiosError<MapEditEnvelope<MapSaveResult>>
const body = ax.response?.data
if (ax.response?.status === 409 || body?.code === 409) {
return { ok: false, conflict: true, message: body?.message ?? '地图已存在' }
}
throw err
}
},
/** 加载指定地图到场景以供编辑(不校验任务、不改当前使用地图)。 */