120 lines
3.1 KiB
TypeScript
120 lines
3.1 KiB
TypeScript
import type {
|
|
CreateDramaRequest,
|
|
Drama,
|
|
DramaListQuery,
|
|
DramaStats,
|
|
UpdateDramaRequest
|
|
} from '../types/drama'
|
|
import request from '../utils/request'
|
|
|
|
export const dramaAPI = {
|
|
list(params?: DramaListQuery) {
|
|
return request.get<{
|
|
items: Drama[]
|
|
pagination: {
|
|
page: number
|
|
page_size: number
|
|
total: number
|
|
total_pages: number
|
|
}
|
|
}>('/dramas', { params })
|
|
},
|
|
|
|
create(data: CreateDramaRequest) {
|
|
return request.post<Drama>('/dramas', data)
|
|
},
|
|
|
|
get(id: string) {
|
|
return request.get<Drama>(`/dramas/${id}`)
|
|
},
|
|
|
|
update(id: string, data: UpdateDramaRequest) {
|
|
return request.put<Drama>(`/dramas/${id}`, data)
|
|
},
|
|
|
|
delete(id: string) {
|
|
return request.delete(`/dramas/${id}`)
|
|
},
|
|
|
|
getStats() {
|
|
return request.get<DramaStats>('/dramas/stats')
|
|
},
|
|
|
|
saveOutline(id: string, data: { title: string; summary: string; genre?: string; tags?: string[] }) {
|
|
return request.put(`/dramas/${id}/outline`, data)
|
|
},
|
|
|
|
getCharacters(dramaId: string) {
|
|
return request.get(`/dramas/${dramaId}/characters`)
|
|
},
|
|
|
|
saveCharacters(id: string, data: any[], episodeId?: string) {
|
|
return request.put(`/dramas/${id}/characters`, {
|
|
characters: data,
|
|
episode_id: episodeId ? parseInt(episodeId) : undefined
|
|
})
|
|
},
|
|
|
|
saveEpisodes(id: string, data: any[]) {
|
|
return request.put(`/dramas/${id}/episodes`, { episodes: data })
|
|
},
|
|
|
|
saveProgress(id: string, data: { current_step: string; step_data?: any }) {
|
|
return request.put(`/dramas/${id}/progress`, data)
|
|
},
|
|
|
|
generateStoryboard(episodeId: string) {
|
|
return request.post(`/episodes/${episodeId}/storyboards`)
|
|
},
|
|
|
|
getBackgrounds(episodeId: string) {
|
|
return request.get(`/images/episode/${episodeId}/backgrounds`)
|
|
},
|
|
|
|
extractBackgrounds(episodeId: string) {
|
|
return request.post<{ task_id: string; status: string; message: string }>(`/images/episode/${episodeId}/backgrounds/extract`)
|
|
},
|
|
|
|
batchGenerateBackgrounds(episodeId: string) {
|
|
return request.post(`/images/episode/${episodeId}/batch`)
|
|
},
|
|
|
|
generateSingleBackground(backgroundId: number, dramaId: string, prompt: string) {
|
|
return request.post('/images', {
|
|
background_id: backgroundId,
|
|
drama_id: dramaId,
|
|
prompt: prompt
|
|
})
|
|
},
|
|
|
|
getStoryboards(episodeId: string) {
|
|
return request.get(`/episodes/${episodeId}/storyboards`)
|
|
},
|
|
|
|
updateStoryboard(storyboardId: string, data: any) {
|
|
return request.put(`/storyboards/${storyboardId}`, data)
|
|
},
|
|
|
|
updateScene(sceneId: string, data: {
|
|
background_id?: string;
|
|
characters?: string[];
|
|
location?: string;
|
|
time?: string;
|
|
action?: string;
|
|
dialogue?: string;
|
|
description?: string;
|
|
duration?: number;
|
|
}) {
|
|
return request.put(`/scenes/${sceneId}`, data)
|
|
},
|
|
|
|
generateSceneImage(data: { scene_id: string; prompt?: string; model?: string }) {
|
|
return request.post('/scenes/generate-image', data)
|
|
},
|
|
|
|
// 完成集数制作(触发视频合成)
|
|
finalizeEpisode(episodeId: string, timelineData?: any) {
|
|
return request.post(`/episodes/${episodeId}/finalize`, timelineData || {})
|
|
}
|
|
}
|