修复问题

This commit is contained in:
海龙 2025-08-12 17:39:12 +08:00
parent 944b465069
commit 884a6db72a
5 changed files with 44 additions and 104 deletions

View File

@ -479,25 +479,20 @@ export interface CharacterUpdateAndRegenerateRequest {
* *
*/ */
export interface CharacterUpdateAndRegenerateResponse { export interface CharacterUpdateAndRegenerateResponse {
/** 项目ID */ /** 角色名称 */
project_id: string; character_name: string;
/** 更新后的角色对象 */ /** 角色描述(已更新) */
character: { character_description: string;
/** 角色名称 */ /** 重新生成产物的图片地址 */
character_name: string; image_path?: string;
/** 角色描述(已更新) */ /** 角色类型/作用 */
character_description: string; role?: string;
/** 重新生成产物的图片地址 */ /** 性别 */
image_path?: string; gender?: string;
/** 角色类型/作用 */ /** 角色简要说明/摘要 */
role?: string; brief?: string;
/** 性别 */ /** 从角色描述提取的高亮关键词/短语 */
gender?: string; highlights: string[];
/** 角色简要说明/摘要 */
brief?: string;
/** 从角色描述提取的高亮关键词/短语 */
highlights: string[];
};
} }
/** /**

View File

@ -890,7 +890,7 @@ export const getCharacterListByProjectWithHighlight = async (request: {
* @param request - * @param request -
* @returns Promise<ApiResponse<CharacterUpdateAndRegenerateResponse>> * @returns Promise<ApiResponse<CharacterUpdateAndRegenerateResponse>>
*/ */
export const updateAndRegenerateCharacter = async (request: CharacterUpdateAndRegenerateRequest): Promise<ApiResponse<CharacterUpdateAndRegenerateResponse>> => { export const updateAndRegenerateCharacter = async (request: CharacterUpdateAndRegenerateRequest) => {
return post<ApiResponse<CharacterUpdateAndRegenerateResponse>>("/character/update_and_regenerate", request); return post<ApiResponse<CharacterUpdateAndRegenerateResponse>>("/character/update_and_regenerate", request);
}; };

View File

@ -22,7 +22,7 @@ interface UseRoleService {
/** 获取角色列表 */ /** 获取角色列表 */
fetchRoleList: (projectId: string) => Promise<void>; fetchRoleList: (projectId: string) => Promise<void>;
/** 选择角色 */ /** 选择角色 */
selectRole: (roleId: string) => Promise<void>; selectRole: (role: RoleEntity) => Promise<void>;
/** 优化AI文本 */ /** 优化AI文本 */
optimizeRoleText: (userSuggestion: string) => Promise<void>; optimizeRoleText: (userSuggestion: string) => Promise<void>;
/** 修改AI文本 */ /** 修改AI文本 */
@ -85,43 +85,22 @@ export const useRoleServiceHook = (): UseRoleService => {
} }
}, []); }, []);
/**
*
* @description AI文本数据
* @param roleId ID
* @throws {Error} API调用失败时抛出错误
* @returns {Promise<void>} Promise
*/
const initializeRoleData = useCallback(async (roleId: string) => {
}, []);
/** /**
* *
* @description ID选择角色UseCase实例 * @description ID选择角色UseCase实例
* @param roleId ID * @param roleId ID
*/ */
const selectRole = useCallback(async (roleId: string) => { const selectRole = useCallback(async (role: RoleEntity) => {
const role = roleList.find(r => r.id === roleId); console.log('selectRole', role);
if (role) { // 根据 role.name 完全替换掉旧的数据
setRoleList(prev => prev.map(r => r.name === role.name ? role : r));
setSelectedRole(role); setSelectedRole(role);
// 如果RoleEditUseCase已经初始化直接使用否则创建新的
if (!roleEditUseCase) {
const newRoleEditUseCase = new RoleEditUseCase();
newRoleEditUseCase.roleList = roleList;
setRoleEditUseCase(newRoleEditUseCase);
}
// 调用selectRole方法 // 调用selectRole方法
await roleEditUseCase!.selectRole(roleId); roleEditUseCase!.selectRole(role);
// 初始化角色数据 }, [roleEditUseCase]);
await initializeRoleData(roleId);
} else {
throw new Error('未找到对应的角色');
}
}, [roleList, roleEditUseCase, initializeRoleData]);
/** /**
* AI文本 * AI文本
@ -168,7 +147,7 @@ export const useRoleServiceHook = (): UseRoleService => {
// 更新当前选中角色 // 更新当前选中角色
if (selectedRole) { if (selectedRole) {
setSelectedRole({ ...selectedRole, generateText: optimizedDescription, tags: keywords.map(keyword => ({ selectRole({ ...selectedRole, generateText: optimizedDescription, tags: keywords.map(keyword => ({
id: `tag_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, id: `tag_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
/** 名称 */ /** 名称 */
name: keyword, name: keyword,
@ -209,9 +188,9 @@ export const useRoleServiceHook = (): UseRoleService => {
// 更新当前选中角色 // 更新当前选中角色
if (selectedRole) { if (selectedRole) {
setSelectedRole({ ...selectedRole, generateText: newContent }); selectRole({ ...selectedRole, generateText: newContent });
} }
}, [roleEditUseCase, selectedRole]); }, [roleEditUseCase, selectRole, selectedRole]);
/** /**
* *
@ -238,7 +217,7 @@ export const useRoleServiceHook = (): UseRoleService => {
selectedRole.name, selectedRole.name,
currentRoleText currentRoleText
); );
setSelectedRole(newRoleEntity); selectRole(newRoleEntity);
// 更新角色列表 // 更新角色列表
setRoleList(prev => setRoleList(prev =>
@ -252,7 +231,7 @@ export const useRoleServiceHook = (): UseRoleService => {
console.error('重新生成角色失败:', error); console.error('重新生成角色失败:', error);
throw error; throw error;
} }
}, [roleEditUseCase, selectedRole, currentRoleText, projectId]); }, [roleEditUseCase, selectedRole, currentRoleText, projectId, selectRole]);
/** /**
* *
@ -297,9 +276,6 @@ export const useRoleServiceHook = (): UseRoleService => {
try { try {
await roleEditUseCase.replaceRoleById(selectedRole.id, replaceRoleId); await roleEditUseCase.replaceRoleById(selectedRole.id, replaceRoleId);
// 重新获取角色数据
await initializeRoleData(selectedRole.id);
// 更新角色列表 // 更新角色列表
const libraryRole = userRoleLibrary.find(role => role.id === replaceRoleId); const libraryRole = userRoleLibrary.find(role => role.id === replaceRoleId);
if (libraryRole) { if (libraryRole) {
@ -310,7 +286,7 @@ export const useRoleServiceHook = (): UseRoleService => {
imageUrl: libraryRole.imageUrl, imageUrl: libraryRole.imageUrl,
}; };
setSelectedRole(updatedRole); selectRole(updatedRole);
setRoleList(prev => setRoleList(prev =>
prev.map(role => prev.map(role =>
role.id === selectedRole.id role.id === selectedRole.id
@ -323,7 +299,7 @@ export const useRoleServiceHook = (): UseRoleService => {
console.error('替换角色失败:', error); console.error('替换角色失败:', error);
throw error; throw error;
} }
}, [selectedRole, roleEditUseCase, userRoleLibrary, initializeRoleData]); }, [selectedRole, roleEditUseCase, userRoleLibrary]);
/** /**
* *

View File

@ -156,25 +156,17 @@ export class RoleEditUseCase {
/** /**
* *
* @param roleId ID * @param role
*/ */
async selectRole(roleId: string): Promise<void> { /**
try { * roleList中name相同的项
// 从已获取的角色列表中查找对应的角色实体 * @param role
const roleEntity = this.roleList.find(role => role.id === roleId); */
if (roleEntity) { async selectRole(role: RoleEntity): Promise<void> {
this.selectedRole = roleEntity; this.selectedRole = role;
// 获取角色数据 console.log(' this.selectedRole', this.selectedRole)
const response = await getRoleData({ roleId }); if (Array.isArray(this.roleList)) {
if (!response.successful) { this.roleList = this.roleList.map(r => r.name === role.name ? role : r);
throw new Error(response.message || '获取角色数据失败');
}
} else {
throw new Error('未找到对应的角色实体,请先获取角色列表');
}
} catch (error) {
console.error('选择角色失败:', error);
throw error;
} }
} }
@ -203,7 +195,7 @@ export class RoleEditUseCase {
throw new Error(response.message || 'AI生成角色失败'); throw new Error(response.message || 'AI生成角色失败');
} }
const characterData = response.data.character; const characterData = response.data;
// 将API响应转换为RoleEntity // 将API响应转换为RoleEntity
const roleEntity: RoleEntity = { const roleEntity: RoleEntity = {
@ -231,29 +223,6 @@ export class RoleEditUseCase {
} }
} }
/**
*
* @param shotIds ID列表
* @param roleId ID
* @returns
*/
async applyRole(shotIds: string[], roleId: string) {
try {
const response = await applyRoleToShots({
roleId,
shotIds,
});
if (response.successful) {
return response.data;
} else {
throw new Error(response.message || '应用角色到分镜失败');
}
} catch (error) {
console.error('应用角色到分镜失败:', error);
throw error;
}
}
/** /**
* *
@ -305,9 +274,9 @@ export class RoleEditUseCase {
*/ */
async optimizeRoleDescription( selectedRole: RoleEntity): Promise<{optimizedDescription: string, keywords: string[]}> { async optimizeRoleDescription( selectedRole: RoleEntity): Promise<{optimizedDescription: string, keywords: string[]}> {
try { try {
if (!this.selectedRole) { // if (!this.selectedRole) {
throw new Error('请先选择角色'); // throw new Error('请先选择角色');
} // }
// 调用新的AI优化角色描述API // 调用新的AI优化角色描述API
const response = await generateCharacterDescription({ const response = await generateCharacterDescription({

View File

@ -104,7 +104,7 @@ export function CharacterTabContent({
console.log('-==========roleData===========-', roleData); console.log('-==========roleData===========-', roleData);
// 只在初始化且有角色数据时执行 // 只在初始化且有角色数据时执行
if (!isInitialized && roleData.length > 0) { if (!isInitialized && roleData.length > 0) {
selectRole(roleData[0].id); selectRole(roleData[0]);
setIsInitialized(true); setIsInitialized(true);
} }
}, [roleData, isInitialized]); }, [roleData, isInitialized]);