feat: 解耦角色与模特并完善模特库
This commit is contained in:
@@ -417,7 +417,7 @@ export const api = {
|
||||
deleteBaseAsset(projectId: string, groupId: string) {
|
||||
return request(`/api/projects/${projectId}/delete-base-asset/`, { method: "POST", body: JSON.stringify({ group_id: groupId }) });
|
||||
},
|
||||
// 流程步骤4 · 用演员库现有资产替换基础资产卡(挂为候选并采用)
|
||||
// 流程步骤4 · 用模特库现有形象资产替换角色基础资产卡(挂为候选并采用)
|
||||
// seed 占位卡还没 group:不传 group_id,改传 kind+label,后端按 label 命中/新建实体组再挂(不出图)
|
||||
attachBaseAsset(projectId: string, payload: { group_id?: string; asset_id: string; kind?: "product" | "person" | "scene"; label?: string }) {
|
||||
return request(`/api/projects/${projectId}/attach-base-asset/`, { method: "POST", body: JSON.stringify(payload) });
|
||||
@@ -530,7 +530,7 @@ export const api = {
|
||||
submitAssetReview(id: string) {
|
||||
return request<{ review_status: string; review_error: string }>(`/api/assets/${id}/submit-review/`, { method: "POST" });
|
||||
},
|
||||
// 置 in_library(现仅演员库「保存人物」用:立绘暂存 → 入库;R109 后图片生成成图已自动入库)
|
||||
// 置 in_library(功能性模特/角色资料不走该入口;图片成图仍按原规则入库)
|
||||
setAssetLibrary(id: string, inLibrary: boolean) {
|
||||
return request<{ id: string; in_library: boolean }>(`/api/assets/${id}/set-library/`, { method: "POST", body: JSON.stringify({ in_library: inLibrary }) });
|
||||
},
|
||||
@@ -588,15 +588,16 @@ export const api = {
|
||||
uploadAsset(formData: FormData) {
|
||||
return request<Asset>("/api/assets/upload/", { method: "POST", body: formData });
|
||||
},
|
||||
// 流程步骤4 · 给人物/资产改名(添加人物工作台命名 → PATCH 写回 name)
|
||||
// 流程步骤4 · 给模特形象/资产改名(添加模特工作台命名 → PATCH 写回 name)
|
||||
updateAsset(id: string, payload: { name?: string; description?: string }) {
|
||||
return request<Asset>(`/api/assets/${id}/`, { method: "PATCH", body: JSON.stringify(payload) });
|
||||
},
|
||||
// 模特库:列出(本团队 ∪ 官方模板);tab=official 只看官方、mine 只看自建
|
||||
listModels(params: { tab?: "official" | "mine"; q?: string; pageSize?: number } = {}) {
|
||||
listModels(params: { tab?: "official" | "mine"; q?: string; portraitAsset?: string; pageSize?: number } = {}) {
|
||||
const qs = new URLSearchParams();
|
||||
if (params.tab) qs.set("tab", params.tab);
|
||||
if (params.q) qs.set("q", params.q);
|
||||
if (params.portraitAsset) qs.set("portrait_asset", params.portraitAsset);
|
||||
qs.set("page_size", String(params.pageSize ?? 200));
|
||||
return request<Paginated<ModelEntity>>(`/api/models/?${qs.toString()}`);
|
||||
},
|
||||
@@ -604,10 +605,18 @@ export const api = {
|
||||
uploadModel(formData: FormData) {
|
||||
return request<ModelEntity>("/api/models/upload/", { method: "POST", body: formData });
|
||||
},
|
||||
// /models 详情:上传并替换当前模特形象图,不创建新模特。
|
||||
uploadModelPortrait(id: string, formData: FormData) {
|
||||
return request<ModelEntity>(`/api/models/${id}/upload-portrait/`, { method: "POST", body: formData });
|
||||
},
|
||||
// 图片创作「加入模特库」:把一张已生成的图复用为模特形象图建 Model 条目(不重传、不二次扣费;幂等)
|
||||
enrollModelFromAsset(assetId: string, name?: string) {
|
||||
return request<ModelEntity>("/api/models/enroll-asset/", { method: "POST", body: JSON.stringify({ asset_id: assetId, name }) });
|
||||
},
|
||||
// /models 模特详情编辑:只更新模特实体资料,不回写项目角色或底层图片资产。
|
||||
updateLibraryModel(id: string, payload: { name?: string; description?: string }) {
|
||||
return request<ModelEntity>(`/api/models/${id}/`, { method: "PATCH", body: JSON.stringify(payload) });
|
||||
},
|
||||
// 删除模特(软删;官方模特不可删)
|
||||
deleteModel(id: string) {
|
||||
return request<void>(`/api/models/${id}/`, { method: "DELETE" });
|
||||
|
||||
Reference in New Issue
Block a user