forked from 77media/video-flow
修复问题
This commit is contained in:
parent
944b465069
commit
884a6db72a
@ -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[];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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);
|
||||
};
|
||||
|
||||
|
||||
@ -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]);
|
||||
|
||||
/**
|
||||
* 上传图片到七牛云
|
||||
|
||||
@ -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({
|
||||
|
||||
@ -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]);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user