修复问题

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

View File

@ -890,7 +890,7 @@ export const getCharacterListByProjectWithHighlight = async (request: {
* @param request -
* @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);
};

View File

@ -22,7 +22,7 @@ interface UseRoleService {
/** 获取角色列表 */
fetchRoleList: (projectId: string) => Promise<void>;
/** 选择角色 */
selectRole: (roleId: string) => Promise<void>;
selectRole: (role: RoleEntity) => Promise<void>;
/** 优化AI文本 */
optimizeRoleText: (userSuggestion: string) => Promise<void>;
/** 修改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实例
* @param roleId ID
*/
const selectRole = useCallback(async (roleId: string) => {
const role = roleList.find(r => r.id === roleId);
if (role) {
const selectRole = useCallback(async (role: RoleEntity) => {
console.log('selectRole', role);
// 根据 role.name 完全替换掉旧的数据
setRoleList(prev => prev.map(r => r.name === role.name ? role : r));
setSelectedRole(role);
// 如果RoleEditUseCase已经初始化直接使用否则创建新的
if (!roleEditUseCase) {
const newRoleEditUseCase = new RoleEditUseCase();
newRoleEditUseCase.roleList = roleList;
setRoleEditUseCase(newRoleEditUseCase);
}
// 调用selectRole方法
await roleEditUseCase!.selectRole(roleId);
roleEditUseCase!.selectRole(role);
// 初始化角色数据
await initializeRoleData(roleId);
} else {
throw new Error('未找到对应的角色');
}
}, [roleList, roleEditUseCase, initializeRoleData]);
}, [roleEditUseCase]);
/**
* AI文本
@ -168,7 +147,7 @@ export const useRoleServiceHook = (): UseRoleService => {
// 更新当前选中角色
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)}`,
/** 名称 */
name: keyword,
@ -209,9 +188,9 @@ export const useRoleServiceHook = (): UseRoleService => {
// 更新当前选中角色
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,
currentRoleText
);
setSelectedRole(newRoleEntity);
selectRole(newRoleEntity);
// 更新角色列表
setRoleList(prev =>
@ -252,7 +231,7 @@ export const useRoleServiceHook = (): UseRoleService => {
console.error('重新生成角色失败:', error);
throw error;
}
}, [roleEditUseCase, selectedRole, currentRoleText, projectId]);
}, [roleEditUseCase, selectedRole, currentRoleText, projectId, selectRole]);
/**
*
@ -297,9 +276,6 @@ export const useRoleServiceHook = (): UseRoleService => {
try {
await roleEditUseCase.replaceRoleById(selectedRole.id, replaceRoleId);
// 重新获取角色数据
await initializeRoleData(selectedRole.id);
// 更新角色列表
const libraryRole = userRoleLibrary.find(role => role.id === replaceRoleId);
if (libraryRole) {
@ -310,7 +286,7 @@ export const useRoleServiceHook = (): UseRoleService => {
imageUrl: libraryRole.imageUrl,
};
setSelectedRole(updatedRole);
selectRole(updatedRole);
setRoleList(prev =>
prev.map(role =>
role.id === selectedRole.id
@ -323,7 +299,7 @@ export const useRoleServiceHook = (): UseRoleService => {
console.error('替换角色失败:', 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 {
// 从已获取的角色列表中查找对应的角色实体
const roleEntity = this.roleList.find(role => role.id === roleId);
if (roleEntity) {
this.selectedRole = roleEntity;
// 获取角色数据
const response = await getRoleData({ roleId });
if (!response.successful) {
throw new Error(response.message || '获取角色数据失败');
}
} else {
throw new Error('未找到对应的角色实体,请先获取角色列表');
}
} catch (error) {
console.error('选择角色失败:', error);
throw error;
/**
* roleList中name相同的项
* @param role
*/
async selectRole(role: RoleEntity): Promise<void> {
this.selectedRole = role;
console.log(' this.selectedRole', this.selectedRole)
if (Array.isArray(this.roleList)) {
this.roleList = this.roleList.map(r => r.name === role.name ? role : r);
}
}
@ -203,7 +195,7 @@ export class RoleEditUseCase {
throw new Error(response.message || 'AI生成角色失败');
}
const characterData = response.data.character;
const characterData = response.data;
// 将API响应转换为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[]}> {
try {
if (!this.selectedRole) {
throw new Error('请先选择角色');
}
// if (!this.selectedRole) {
// throw new Error('请先选择角色');
// }
// 调用新的AI优化角色描述API
const response = await generateCharacterDescription({

View File

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