mirror of
https://github.com/basketikun/infinite-canvas.git
synced 2026-07-24 15:24:06 +08:00
b2cae2471d
- 新增AdminUser类型定义及用户管理API接口 - 实现用户列表查询、保存和删除功能 - 添加Linux.do第三方登录支持 - 集成Linux.do OAuth认证流程 - 在系统设置中添加Linux.do登录配置选项 - 实现算力点余额调整记录功能 - 优化搜索组件关键词状态管理 - 更新数据库迁移添加credit_logs表 - 完善用户状态和信用等级验证逻辑
198 lines
5.3 KiB
TypeScript
198 lines
5.3 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 type AdminUser = {
|
|
id: string;
|
|
username: string;
|
|
email: string;
|
|
displayName: string;
|
|
avatarUrl: string;
|
|
role: "user" | "admin";
|
|
credits: number;
|
|
affCode: string;
|
|
affCount: number;
|
|
inviterId: string;
|
|
linuxDoId: string;
|
|
status: "active" | "ban";
|
|
lastLoginAt: string;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type AdminUserListResponse = {
|
|
items: AdminUser[];
|
|
total: number;
|
|
};
|
|
|
|
export type AdminUserQuery = {
|
|
keyword?: string;
|
|
page?: number;
|
|
pageSize?: number;
|
|
};
|
|
|
|
export async function fetchAdminUsers(token: string, query: AdminUserQuery = {}) {
|
|
return apiGet<AdminUserListResponse>("/api/admin/users", compactApiParams(query), token);
|
|
}
|
|
|
|
export async function saveAdminUser(token: string, user: Partial<AdminUser> & { password?: string }) {
|
|
return apiPost<AdminUser>("/api/admin/users", user, token);
|
|
}
|
|
|
|
export async function deleteAdminUser(token: string, id: string) {
|
|
return apiDelete<boolean>(`/api/admin/users/${encodeURIComponent(id)}`, token);
|
|
}
|
|
|
|
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;
|
|
auth: {
|
|
linuxDo: {
|
|
enabled: boolean;
|
|
};
|
|
};
|
|
};
|
|
|
|
export type AdminPrivateSettings = {
|
|
channels: AdminModelChannel[];
|
|
promptSync: {
|
|
enabled: boolean;
|
|
cron: string;
|
|
};
|
|
auth: {
|
|
linuxDo: {
|
|
clientId: string;
|
|
clientSecret: string;
|
|
redirectUri: string;
|
|
minimumTrustLevel: number;
|
|
};
|
|
};
|
|
};
|
|
|
|
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);
|
|
}
|