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