增加修改和删除功能
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 清除所有数据
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user