rwadurian/frontend/mining-admin-web/src/features/mining/api/mining.api.ts

62 lines
2.0 KiB
TypeScript

import axios from 'axios';
// Mining Service API 客户端
// 生产环境: /api/mining/* -> Kong /api/v2/mining/* -> mining-service /api/v2/*
// 开发环境: /api/mining/* -> mining-service /api/v2/*
// 注意: Kong 的路由是 /api/v2/mining/* 映射到 mining-service 的 /api/v2/*
// 所以前端调用 /api/mining/admin/mining/status 会被转发到 mining-service 的 /api/v2/admin/mining/status
const miningBaseURL = '/api/mining';
const miningClient = axios.create({
baseURL: miningBaseURL,
timeout: 30000,
headers: {
'Content-Type': 'application/json',
},
});
miningClient.interceptors.request.use(
(config) => {
const token = typeof window !== 'undefined' ? localStorage.getItem('admin_token') : null;
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
(error) => Promise.reject(error)
);
miningClient.interceptors.response.use(
(response) => response,
(error) => {
if (error.response?.status === 401) {
localStorage.removeItem('admin_token');
if (typeof window !== 'undefined' && !window.location.pathname.includes('/login')) {
window.location.href = '/login';
}
}
return Promise.reject(error);
}
);
export interface MiningStatus {
totalDistributed: string; // 已分配总量
distributionPool: string; // 分配池总量 (2亿)
remainingDistribution: string; // 剩余分配量
miningProgress: string; // 进度百分比
minuteDistribution: string; // 每分钟分配量
remainingMinutes: number; // 预估剩余分钟数
lastMiningMinute: string | null; // 最后分配时间
isActive: boolean; // 系统是否激活
currentEra: number; // 当前纪元
}
export const miningApi = {
// 获取挖矿进度状态
getMiningStatus: async (): Promise<MiningStatus> => {
const response = await miningClient.get('/progress');
// 后端返回 { success, data, timestamp }
return response.data.data || response.data;
},
};