增加修改和删除功能

This commit is contained in:
2025-12-24 15:20:58 +08:00
parent 1aa39e11b4
commit 31cc78038b
26 changed files with 707 additions and 492 deletions
+93 -18
View File
@@ -270,6 +270,39 @@ const useStore = create(
}
},
/**
* 更新生命事件
* @param {Object} event - 事件数据(必须包含 id)
* @returns {Promise<Object>} 更新后的事件
*/
updateLifeEvent: async (event) => {
set({ loading: true, error: null });
try {
const response = await lifeEventService.updateEvent(event);
if (response.data) {
const updatedEvent = lifeEventService.transformToFrontendFormat(response.data);
set((state) => ({
lifeEvents: state.lifeEvents.map(e =>
e.id === updatedEvent.id ? updatedEvent : e
),
loading: false
}));
return updatedEvent;
}
set({ loading: false });
return null;
} catch (error) {
set({ loading: false, error: error.message });
// 降级到本地更新
set((state) => ({
lifeEvents: state.lifeEvents.map(e =>
e.id === event.id ? { ...e, ...event } : e
)
}));
return event;
}
},
/**
* 删除生命事件
*/
@@ -283,10 +316,8 @@ const useStore = create(
}));
} catch (error) {
set({ loading: false });
// 降级到本地删除
set((state) => ({
lifeEvents: state.lifeEvents.filter(e => e.id !== id)
}));
console.error('删除生命事件失败:', error);
throw error;
}
},
@@ -369,6 +400,39 @@ const useStore = create(
return state.scripts.find(s => s.id === state.selectedScriptId);
},
/**
* 更新剧本
* @param {Object} script - 剧本数据(必须包含 id)
* @returns {Promise<Object>} 更新后的剧本
*/
updateScript: async (script) => {
set({ loading: true, error: null });
try {
const response = await epicScriptService.updateScript(script);
if (response.data) {
const updatedScript = epicScriptService.transformToFrontendFormat(response.data);
set((state) => ({
scripts: state.scripts.map(s =>
s.id === updatedScript.id ? updatedScript : s
),
loading: false
}));
return updatedScript;
}
set({ loading: false });
return null;
} catch (error) {
set({ loading: false, error: error.message });
// 降级到本地更新
set((state) => ({
scripts: state.scripts.map(s =>
s.id === script.id ? { ...s, ...script } : s
)
}));
return script;
}
},
/**
* 删除剧本
*/
@@ -380,24 +444,16 @@ const useStore = create(
const newScripts = state.scripts.filter(s => s.id !== id);
return {
scripts: newScripts,
selectedScriptId: state.selectedScriptId === id
? (newScripts[0]?.id || null)
selectedScriptId: state.selectedScriptId === id
? (newScripts[0]?.id || null)
: state.selectedScriptId,
loading: false
};
});
} catch (error) {
set({ loading: false });
// 降级到本地删除
set((state) => {
const newScripts = state.scripts.filter(s => s.id !== id);
return {
scripts: newScripts,
selectedScriptId: state.selectedScriptId === id
? (newScripts[0]?.id || null)
: state.selectedScriptId
};
});
console.error('删除剧本失败:', error);
throw error;
}
},
@@ -427,12 +483,12 @@ const useStore = create(
*/
setPath: async (pathContent, scriptId) => {
set({ selectedPath: pathContent });
if (scriptId) {
try {
// 检查是否已有路径
const existingPath = await lifePathService.getPathByScriptId(scriptId).catch(() => null);
if (existingPath?.data?.id) {
// 更新
await lifePathService.updatePath({
@@ -453,6 +509,25 @@ const useStore = create(
}
},
/**
* 删除路径
* @param {string} scriptId - 剧本ID
*/
deletePath: async (scriptId) => {
if (!scriptId) return;
try {
const existingPath = await lifePathService.getPathByScriptId(scriptId).catch(() => null);
if (existingPath?.data?.id) {
await lifePathService.deletePath(existingPath.data.id);
}
set({ selectedPath: null });
} catch {
// 忽略错误,本地已清除
set({ selectedPath: null });
}
},
/**
* 清除所有数据
*/