Files
infinite-canvas/web/src/services/api/admin.ts
T
HouYunFei 370263cd83 feat(canvas): 添加视频模型配置和生成功能
- 在系统配置中新增 defaultVideoModel 字段用于设置默认视频模型
- 更新应用配置模态框以支持视频模型的选择和验证
- 修改画布节点逻辑以支持视频类型的生成配置
- 实现视频节点的生成和上传功能
- 更新模型选择器组件以支持视频模型选择
- 在管理后台设置页面添加视频模型配置选项
- 优化模型选择器的层级和交互体验
- 添加对 DeepSeek 和 GLM 模型图标的支持
2026-05-23 17:25:00 +08:00

144 lines
4.0 KiB
TypeScript

import { apiDelete, apiGet, apiPost, compactApiParams } from "@/services/api/request";
import type { Prompt, PromptListResponse } from "@/services/api/prompts";
export type AdminPromptCategory = {
category: string;
name: string;
description: string;
file: string;
githubUrl: string;
remote: boolean;
};
export async function fetchAdminPromptCategories(token: string) {
return apiGet<AdminPromptCategory[]>("/api/admin/prompt-categories", undefined, token);
}
export async function syncAdminPromptCategory(token: string, category: string) {
return apiPost<AdminPromptCategory[]>("/api/admin/prompt-categories/sync", { category }, token);
}
export type AdminPromptQuery = {
keyword?: string;
category?: string;
tag?: string[];
page?: number;
pageSize?: number;
};
export type AdminAsset = {
id: string;
title: string;
type: "text" | "image" | "video";
coverUrl: string;
tags: string[];
category: string;
description: string;
content: string;
url: string;
createdAt: string;
updatedAt: string;
};
export type AdminAssetListResponse = {
items: AdminAsset[];
tags: string[];
total: number;
};
export async function fetchAdminPrompts(token: string, query: AdminPromptQuery = {}) {
return apiGet<PromptListResponse>("/api/admin/prompts", compactApiParams(query), token);
}
export async function saveAdminPrompt(token: string, prompt: Partial<Prompt>) {
return apiPost<Prompt>("/api/admin/prompts", prompt, token);
}
export async function deleteAdminPrompt(token: string, id: string) {
return apiDelete<boolean>(`/api/admin/prompts/${encodeURIComponent(id)}`, token);
}
export async function deleteAdminPrompts(token: string, ids: string[]) {
return apiPost<boolean>("/api/admin/prompts/batch-delete", { ids }, token);
}
export type AdminAssetQuery = {
keyword?: string;
type?: string;
tag?: string[];
page?: number;
pageSize?: number;
};
export async function fetchAdminAssets(token: string, query: AdminAssetQuery = {}) {
return apiGet<AdminAssetListResponse>("/api/admin/assets", compactApiParams(query), token);
}
export async function saveAdminAsset(token: string, asset: Partial<AdminAsset>) {
return apiPost<AdminAsset>("/api/admin/assets", asset, token);
}
export async function deleteAdminAsset(token: string, id: string) {
return apiDelete<boolean>(`/api/admin/assets/${encodeURIComponent(id)}`, token);
}
export type AdminModelChannel = {
protocol: "openai";
name: string;
baseUrl: string;
apiKey: string;
models: string[];
weight: number;
enabled: boolean;
remark: string;
};
export type AdminPublicModelChannelSettings = {
availableModels: string[];
defaultModel: string;
defaultImageModel: string;
defaultVideoModel: string;
defaultTextModel: string;
systemPrompt: string;
allowCustomChannel: boolean;
};
export type AdminPublicSettings = {
modelChannel: AdminPublicModelChannelSettings;
};
export type AdminPrivateSettings = {
channels: AdminModelChannel[];
promptSync: {
enabled: boolean;
cron: string;
};
};
export type AdminSettings = {
public: AdminPublicSettings;
private: AdminPrivateSettings;
};
export async function fetchAdminSettings(token: string) {
return apiGet<AdminSettings>("/api/admin/settings", undefined, token);
}
export async function saveAdminSettings(token: string, settings: AdminSettings) {
return apiPost<AdminSettings>("/api/admin/settings", settings, token);
}
export type AdminChannelActionRequest = {
index?: number;
channel: AdminModelChannel;
model?: string;
};
export async function fetchChannelModels(token: string, payload: AdminChannelActionRequest) {
return apiPost<string[]>("/api/admin/settings/channel-models", payload, token);
}
export async function testChannelModel(token: string, payload: AdminChannelActionRequest) {
return apiPost<string>("/api/admin/settings/channel-test", payload, token);
}