feat(desktop): drop parked review flow, add publish management

SaaS 侧人工审核后才创建 publish job,desktop 不再做二次审核:移除
manual/waiting_user/parked/from_parked 状态机与 LeaseFromParked 查询,
desktop client 只执行发布并新增"发布管理"页(待发布队列 / 历史 / 再次
发送)。同时抽离 @geo/publisher-platforms 共享适配器包、新增 Redis-based
desktop_presence 与 publish_record_support,刷新 admin-web 发布弹窗与
媒体库;plan A / spec 文档同步口径。
This commit is contained in:
2026-04-20 09:52:48 +08:00
parent b16e9f0bd1
commit a617d39a4a
93 changed files with 5519 additions and 3594 deletions
+20 -1
View File
@@ -15,6 +15,8 @@ import type {
CompetitorRequest,
CreatePluginSessionRequest,
CreatePluginSessionResponse,
CreatePublishJobRequest,
CreatePublishJobResponse,
CreatePublishBatchRequest,
CreatePublishBatchResponse,
GenerateFromRuleRequest,
@@ -104,6 +106,7 @@ import type {
CreateKolPromptRequest,
UpdateKolPackageRequest,
UpdateKolPromptRequest,
DesktopAccountInfo,
UserInfo,
WorkspaceOverview,
} from "@geo/shared-types";
@@ -869,7 +872,7 @@ export const brandsApi = {
export const mediaApi = {
platforms() {
return removedMediaApi<MediaPlatform[]>("platforms");
return apiClient.get<MediaPlatform[]>("/api/tenant/media/platforms");
},
accounts() {
return removedMediaApi<PlatformAccount[]>("accounts");
@@ -888,6 +891,22 @@ export const mediaApi = {
},
};
export const tenantAccountsApi = {
list() {
return apiClient.get<DesktopAccountInfo[]>("/api/tenant/accounts");
},
requestDelete(id: string, options?: { undo?: boolean }) {
const query = options?.undo ? "?undo=true" : "";
return apiClient.post<DesktopAccountInfo>(`/api/tenant/accounts/${encodeURIComponent(id)}/request-delete${query}`);
},
};
export const publishJobsApi = {
create(payload: CreatePublishJobRequest) {
return apiClient.post<CreatePublishJobResponse, CreatePublishJobRequest>("/api/tenant/publish-jobs", payload);
},
};
function removedMediaApi<T>(action: string): Promise<T> {
return Promise.reject(new ApiClientError({
message: "desktop_media_api_removed",