feat(platform): improve map and project save workflows
This commit is contained in:
@@ -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 正常返回 data;conflict=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
|
||||
}
|
||||
},
|
||||
|
||||
/** 加载指定地图到场景以供编辑(不校验任务、不改当前使用地图)。 */
|
||||
|
||||
Reference in New Issue
Block a user