feat: 前端搭建-未完成

This commit is contained in:
tbphp
2025-06-29 21:59:32 +08:00
parent ab95af0bbe
commit 731315144e
62 changed files with 4831 additions and 604 deletions

6
web/src/api/dashboard.ts Normal file
View File

@@ -0,0 +1,6 @@
import request from './index';
import type { DashboardStats } from '@/types/models';
export const getDashboardStats = (): Promise<DashboardStats> => {
return request.get('/api/dashboard/stats');
};

42
web/src/api/groups.ts Normal file
View File

@@ -0,0 +1,42 @@
import apiClient from './index';
import type { Group } from '../types/models';
/**
* 获取所有分组列表
*/
export const fetchGroups = (): Promise<Group[]> => {
return apiClient.get('/groups').then(res => res.data.data);
};
/**
* 获取单个分组的详细信息
* @param id 分组ID
*/
export const fetchGroup = (id: string): Promise<Group> => {
return apiClient.get(`/groups/${id}`).then(res => res.data.data);
};
/**
* 创建一个新的分组
* @param groupData 新分组的数据
*/
export const createGroup = (groupData: Omit<Group, 'id' | 'created_at' | 'updated_at'>): Promise<Group> => {
return apiClient.post('/groups', groupData).then(res => res.data.data);
};
/**
* 更新一个已存在的分组
* @param id 分组ID
* @param groupData 要更新的数据
*/
export const updateGroup = (id: string, groupData: Partial<Omit<Group, 'id' | 'created_at' | 'updated_at'>>): Promise<Group> => {
return apiClient.put(`/groups/${id}`, groupData).then(res => res.data.data);
};
/**
* 删除一个分组
* @param id 分组ID
*/
export const deleteGroup = (id: string): Promise<void> => {
return apiClient.delete(`/groups/${id}`).then(res => res.data);
};

14
web/src/api/index.ts Normal file
View File

@@ -0,0 +1,14 @@
import axios from "axios";
const apiClient = axios.create({
baseURL: "/",
headers: {
"Content-Type": "application/json",
},
});
// 可以添加请求和响应拦截器
// apiClient.interceptors.request.use(...)
// apiClient.interceptors.response.use(...)
export default apiClient;

36
web/src/api/keys.ts Normal file
View File

@@ -0,0 +1,36 @@
import apiClient from './index';
import type { Key } from '../types/models';
/**
* 获取指定分组下的所有密钥列表
* @param groupId 分组ID
*/
export const fetchKeysInGroup = (groupId: string): Promise<Key[]> => {
return apiClient.get(`/groups/${groupId}/keys`).then(res => res.data.data);
};
/**
* 在指定分组下创建一个新的密钥
* @param groupId 分组ID
* @param keyData 新密钥的数据
*/
export const createKey = (groupId: string, keyData: Omit<Key, 'id' | 'group_id' | 'usage' | 'created_at' | 'updated_at'>): Promise<Key> => {
return apiClient.post(`/groups/${groupId}/keys`, keyData).then(res => res.data.data);
};
/**
* 更新一个已存在的密钥
* @param id 密钥ID
* @param keyData 要更新的数据
*/
export const updateKey = (id: string, keyData: Partial<Omit<Key, 'id' | 'group_id' | 'usage' | 'created_at' | 'updated_at'>>): Promise<Key> => {
return apiClient.put(`/keys/${id}`, keyData).then(res => res.data.data);
};
/**
* 删除一个密钥
* @param id 密钥ID
*/
export const deleteKey = (id: string): Promise<void> => {
return apiClient.delete(`/keys/${id}`).then(res => res.data);
};

24
web/src/api/logs.ts Normal file
View File

@@ -0,0 +1,24 @@
import request from './index';
import type { RequestLog } from '@/types/models';
export type { RequestLog };
export interface LogQuery {
page?: number;
size?: number;
group_id?: number;
start_time?: string;
end_time?: string;
status_code?: number;
}
export interface PaginatedLogs {
total: number;
page: number;
size: number;
data: RequestLog[];
}
export const getLogs = (query: LogQuery): Promise<PaginatedLogs> => {
return request.get('/api/logs', { params: query });
};

10
web/src/api/settings.ts Normal file
View File

@@ -0,0 +1,10 @@
import request from './index';
import type { Setting } from '@/types/models';
export function getSettings() {
return request.get<Setting[]>('/api/settings');
}
export function updateSettings(settings: Setting[]) {
return request.put('/api/settings', settings);
}