fix: 完善商品—模特库-视频项目-自由创作等删除先进垃圾桶及可恢复等流程

This commit is contained in:
hh
2026-07-10 15:06:07 +08:00
parent 3e52942547
commit 564215dc53
28 changed files with 1086 additions and 190 deletions
+39 -1
View File
@@ -277,7 +277,7 @@ export const api = {
return request<Product>(`/api/products/${id}/restore/`, { method: "POST" });
},
purgeProduct(id: string) {
// 彻底删除(不可恢复)
// 彻底删除 = 二级软删除(从垃圾桶隐藏,DB 记录保留)
return request<void>(`/api/products/${id}/purge/`, { method: "DELETE" });
},
projects() {
@@ -302,6 +302,15 @@ export const api = {
deleteProject(id: string) {
return request<void>(`/api/projects/${id}/`, { method: "DELETE" });
},
projectsTrash() {
return request<Paginated<Project>>("/api/projects/trash/");
},
restoreProject(id: string) {
return request<Project>(`/api/projects/${id}/restore/`, { method: "POST" });
},
purgeProject(id: string) {
return request<void>(`/api/projects/${id}/purge/`, { method: "DELETE" });
},
// 对话式脚本 agent · 流式(SSE)。逐帧回调 onEvent:tool(工具卡)/delta(思考前言)/draft/saved/done/error。
// 用 fetch + ReadableStream 消费 text/event-stream(EventSource 只支持 GET,这里要 POST 带 body)。
async agentScriptStream(
@@ -603,6 +612,15 @@ export const api = {
deleteModel(id: string) {
return request<void>(`/api/models/${id}/`, { method: "DELETE" });
},
modelsTrash() {
return request<Paginated<ModelEntity>>("/api/models/trash/");
},
restoreModel(id: string) {
return request<ModelEntity>(`/api/models/${id}/restore/`, { method: "POST" });
},
purgeModel(id: string) {
return request<void>(`/api/models/${id}/purge/`, { method: "DELETE" });
},
billingSummary() {
return request<BillingSummary>("/api/billing/summary/");
},
@@ -650,6 +668,9 @@ export const api = {
listConversations(mode: "image" | "model" | "cover" = "image") {
return request<Paginated<ImageConversation>>(`/api/ai/image-conversations/?mode=${mode}&page_size=100`);
},
conversationsTrash(mode: "image" | "model" | "cover" = "image") {
return request<Paginated<ImageConversation>>(`/api/ai/image-conversations/trash/?mode=${mode}&page_size=100`);
},
createConversation(payload: { mode?: "image" | "model" | "cover"; title?: string; product?: string | null }) {
return request<ImageConversation>("/api/ai/image-conversations/", { method: "POST", body: JSON.stringify(payload) });
},
@@ -659,6 +680,12 @@ export const api = {
deleteConversation(id: string) {
return request<void>(`/api/ai/image-conversations/${id}/`, { method: "DELETE" });
},
restoreConversation(id: string) {
return request<ImageConversation>(`/api/ai/image-conversations/${id}/restore/`, { method: "POST" });
},
purgeConversation(id: string) {
return request<void>(`/api/ai/image-conversations/${id}/purge/`, { method: "DELETE" });
},
// 切换对话时回填:该对话历次生成的任务 + 成图
conversationTasks(id: string) {
return request<{ conversation_id: string; tasks: ImageConversationTask[] }>(`/api/ai/image-conversations/${id}/tasks/`);
@@ -686,6 +713,11 @@ export const api = {
`/api/ai/free-video/?offset=${offset}&page_size=${pageSize}`
);
},
freeVideoTrash(offset = 0, pageSize = 20) {
return request<{ results: FreeVideoTask[]; total: number; has_more: boolean }>(
`/api/ai/free-video/trash/?offset=${offset}&page_size=${pageSize}`
);
},
// web 进程内单次轮询+终态化(幂等):前端渐进轮询打这里,本地无 worker 也能收尾
pollFreeVideo(id: string) {
return request<{ task: FreeVideoTask }>(`/api/ai/free-video/${id}/poll/`, { method: "POST" });
@@ -696,6 +728,12 @@ export const api = {
deleteFreeVideo(id: string) {
return request<void>(`/api/ai/free-video/${id}/`, { method: "DELETE" });
},
restoreFreeVideo(id: string) {
return request<{ task: FreeVideoTask }>(`/api/ai/free-video/${id}/restore/`, { method: "POST" });
},
purgeFreeVideo(id: string) {
return request<void>(`/api/ai/free-video/${id}/purge/`, { method: "DELETE" });
},
uploadFreeVideoRef(formData: FormData) {
return request<FreeVideoUploadResult>("/api/ai/free-video/upload/", { method: "POST", body: formData });
},