186 lines
4.2 KiB
TypeScript
186 lines
4.2 KiB
TypeScript
import type {
|
|
APIKey,
|
|
Group,
|
|
GroupConfigOption,
|
|
GroupStatsResponse,
|
|
KeyStatus,
|
|
TaskInfo,
|
|
} from "@/types/models";
|
|
import http from "@/utils/http";
|
|
|
|
export const keysApi = {
|
|
// 获取所有分组
|
|
async getGroups(): Promise<Group[]> {
|
|
const res = await http.get("/groups");
|
|
return res.data || [];
|
|
},
|
|
|
|
// 创建分组
|
|
async createGroup(group: Partial<Group>): Promise<Group> {
|
|
const res = await http.post("/groups", group);
|
|
return res.data;
|
|
},
|
|
|
|
// 更新分组
|
|
async updateGroup(groupId: number, group: Partial<Group>): Promise<Group> {
|
|
const res = await http.put(`/groups/${groupId}`, group);
|
|
return res.data;
|
|
},
|
|
|
|
// 删除分组
|
|
deleteGroup(groupId: number): Promise<void> {
|
|
return http.delete(`/groups/${groupId}`);
|
|
},
|
|
|
|
// 获取分组统计信息
|
|
async getGroupStats(groupId: number): Promise<GroupStatsResponse> {
|
|
const res = await http.get(`/groups/${groupId}/stats`);
|
|
return res.data;
|
|
},
|
|
|
|
// 获取分组可配置参数
|
|
async getGroupConfigOptions(): Promise<GroupConfigOption[]> {
|
|
const res = await http.get("/groups/config-options");
|
|
return res.data || [];
|
|
},
|
|
|
|
// 获取分组的密钥列表
|
|
async getGroupKeys(params: {
|
|
group_id: number;
|
|
page: number;
|
|
page_size: number;
|
|
key?: string;
|
|
status?: KeyStatus;
|
|
}): Promise<{
|
|
items: APIKey[];
|
|
pagination: {
|
|
total_items: number;
|
|
total_pages: number;
|
|
};
|
|
}> {
|
|
const res = await http.get("/keys", { params });
|
|
return res.data;
|
|
},
|
|
|
|
// 批量添加密钥
|
|
async addMultipleKeys(
|
|
group_id: number,
|
|
keys_text: string
|
|
): Promise<{
|
|
added_count: number;
|
|
ignored_count: number;
|
|
total_in_group: number;
|
|
}> {
|
|
const res = await http.post("/keys/add-multiple", {
|
|
group_id,
|
|
keys_text,
|
|
});
|
|
return res.data;
|
|
},
|
|
|
|
// 测试密钥
|
|
async testKeys(
|
|
group_id: number,
|
|
keys_text: string
|
|
): Promise<
|
|
{
|
|
key_value: string;
|
|
is_valid: boolean;
|
|
error: string;
|
|
}[]
|
|
> {
|
|
const res = await http.post(
|
|
"/keys/test-multiple",
|
|
{
|
|
group_id,
|
|
keys_text,
|
|
},
|
|
{
|
|
hideMessage: true,
|
|
}
|
|
);
|
|
return res.data;
|
|
},
|
|
|
|
// 删除密钥
|
|
async deleteKeys(
|
|
group_id: number,
|
|
keys_text: string
|
|
): Promise<{ deleted_count: number; ignored_count: number; total_in_group: number }> {
|
|
const res = await http.post("/keys/delete-multiple", {
|
|
group_id,
|
|
keys_text,
|
|
});
|
|
return res.data;
|
|
},
|
|
|
|
// 测试密钥
|
|
restoreKeys(group_id: number, keys_text: string): Promise<null> {
|
|
return http.post("/keys/restore-multiple", {
|
|
group_id,
|
|
keys_text,
|
|
});
|
|
},
|
|
|
|
// 恢复所有无效密钥
|
|
restoreAllInvalidKeys(group_id: number): Promise<void> {
|
|
return http.post("/keys/restore-all-invalid", { group_id });
|
|
},
|
|
|
|
// 清空所有无效密钥
|
|
clearAllInvalidKeys(group_id: number): Promise<{ data: { message: string } }> {
|
|
return http.post(
|
|
"/keys/clear-all-invalid",
|
|
{ group_id },
|
|
{
|
|
hideMessage: true,
|
|
}
|
|
);
|
|
},
|
|
|
|
// 导出密钥
|
|
exportKeys(groupId: number, status: "all" | "active" | "invalid" = "all") {
|
|
const authKey = localStorage.getItem("authKey");
|
|
if (!authKey) {
|
|
window.$message.error("未找到认证信息,无法导出");
|
|
return;
|
|
}
|
|
|
|
const params = new URLSearchParams({
|
|
group_id: groupId.toString(),
|
|
auth_key: authKey,
|
|
});
|
|
|
|
if (status !== "all") {
|
|
params.append("status", status);
|
|
}
|
|
|
|
const url = `${http.defaults.baseURL}/keys/export?${params.toString()}`;
|
|
|
|
const link = document.createElement("a");
|
|
link.href = url;
|
|
link.setAttribute("download", `keys-group_${groupId}-${status}-${Date.now()}.txt`);
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
},
|
|
|
|
// 验证分组密钥
|
|
async validateGroupKeys(groupId: number): Promise<{
|
|
is_running: boolean;
|
|
group_name: string;
|
|
processed: number;
|
|
total: number;
|
|
started_at: string;
|
|
}> {
|
|
const res = await http.post("/keys/validate-group", { group_id: groupId });
|
|
return res.data;
|
|
},
|
|
|
|
// 获取任务状态
|
|
async getTaskStatus(): Promise<TaskInfo> {
|
|
const res = await http.get("/tasks/status");
|
|
return res.data;
|
|
},
|
|
};
|