Merge commit 'd8e4449f1009bc03b167c0e5667413585b2b3e53' as 'core'

This commit is contained in:
Du Wenbo
2026-04-04 18:16:49 +08:00
227 changed files with 39179 additions and 0 deletions

View File

@@ -0,0 +1,353 @@
import axios from 'axios';
const api = axios.create({
baseURL: '/api/v1',
timeout: 15000,
});
api.interceptors.request.use((config) => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
api.interceptors.response.use(
(res) => res.data,
(err) => {
if (err.response?.status === 401) {
localStorage.removeItem('token');
window.location.href = '/login';
}
return Promise.reject(err.response?.data || err);
}
);
// Auth
export const login = (username: string, password: string) =>
api.post('/auth/login', new URLSearchParams({ username, password }), {
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
});
export const getMe = () => api.get('/auth/me');
// Dashboard
export const getDashboardOverview = () => api.get('/dashboard/overview');
export const getRealtimeData = () => api.get('/dashboard/realtime');
export const getLoadCurve = (hours = 24) => api.get(`/dashboard/load-curve?hours=${hours}`);
// Devices
export const getDevices = (params?: Record<string, any>) => api.get('/devices', { params });
export const getDeviceStats = () => api.get('/devices/stats');
export const getDeviceTypes = () => api.get('/devices/types');
export const getDeviceGroups = () => api.get('/devices/groups');
export const getDevice = (id: number) => api.get(`/devices/${id}`);
export const createDevice = (data: any) => api.post('/devices', data);
export const updateDevice = (id: number, data: any) => api.put(`/devices/${id}`, data);
// Energy
export const getEnergyHistory = (params: Record<string, any>) => api.get('/energy/history', { params });
export const getEnergyDailySummary = (params?: Record<string, any>) => api.get('/energy/daily-summary', { params });
export const getEnergyComparison = (params?: Record<string, any>) => api.get('/energy/comparison', { params });
// Monitoring
export const getDeviceRealtime = (deviceId: number) => api.get(`/monitoring/devices/${deviceId}/realtime`);
export const getEnergyFlow = () => api.get('/monitoring/energy-flow');
// Alarms
export const getAlarmRules = () => api.get('/alarms/rules');
export const createAlarmRule = (data: any) => api.post('/alarms/rules', data);
export const getAlarmEvents = (params?: Record<string, any>) => api.get('/alarms/events', { params });
export const acknowledgeAlarm = (id: number) => api.post(`/alarms/events/${id}/acknowledge`);
export const resolveAlarm = (id: number, note = '') => api.post(`/alarms/events/${id}/resolve`, null, { params: { note } });
export const getAlarmStats = () => api.get('/alarms/stats');
// Carbon
export const getCarbonOverview = () => api.get('/carbon/overview');
export const getCarbonTrend = (days = 30) => api.get(`/carbon/trend?days=${days}`);
export const getEmissionFactors = () => api.get('/carbon/factors');
export const getCarbonDashboard = () => api.get('/carbon/dashboard');
// Carbon Targets
export const getCarbonTargets = (year?: number) => api.get('/carbon/targets', { params: year ? { year } : {} });
export const createCarbonTarget = (data: any) => api.post('/carbon/targets', data);
export const updateCarbonTarget = (id: number, data: any) => api.put(`/carbon/targets/${id}`, data);
export const getCarbonTargetProgress = (year?: number) => api.get('/carbon/targets/progress', { params: year ? { year } : {} });
// Carbon Reductions
export const getCarbonReductions = (params?: Record<string, any>) => api.get('/carbon/reductions', { params });
export const getCarbonReductionSummary = (params?: Record<string, any>) => api.get('/carbon/reductions/summary', { params });
export const calculateCarbonReductions = (params?: Record<string, any>) => api.post('/carbon/reductions/calculate', null, { params });
// Green Certificates
export const getGreenCertificates = (params?: Record<string, any>) => api.get('/carbon/certificates', { params });
export const createGreenCertificate = (data: any) => api.post('/carbon/certificates', data);
export const updateGreenCertificate = (id: number, data: any) => api.put(`/carbon/certificates/${id}`, data);
export const getCertificatePortfolioValue = () => api.get('/carbon/certificates/value');
// Carbon Reports
export const getCarbonReports = () => api.get('/carbon/reports');
export const generateCarbonReport = (data: any) => api.post('/carbon/reports/generate', data);
export const getCarbonReportDetail = (id: number) => api.get(`/carbon/reports/${id}`);
export const downloadCarbonReport = (id: number) => api.get(`/carbon/reports/${id}/download`);
// Carbon Benchmarks
export const getCarbonBenchmarks = (year?: number) => api.get('/carbon/benchmarks', { params: year ? { year } : {} });
export const getCarbonBenchmarkComparison = (year?: number) => api.get('/carbon/benchmarks/comparison', { params: year ? { year } : {} });
// Reports
export const getReportTemplates = () => api.get('/reports/templates');
export const createReportTemplate = (data: any) => api.post('/reports/templates', data);
export const getReportTasks = () => api.get('/reports/tasks');
export const createReportTask = (data: any) => api.post('/reports/tasks', data);
export const runReportTask = (id: number) => api.post(`/reports/tasks/${id}/run`);
export const downloadReport = async (taskId: number) => {
const response = await axios.get(`/api/v1/reports/tasks/${taskId}/download`, {
responseType: 'blob',
headers: { Authorization: `Bearer ${localStorage.getItem('token')}` },
});
const contentDisposition = response.headers['content-disposition'];
let filename = `report_${taskId}`;
if (contentDisposition) {
const match = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
if (match?.[1]) filename = match[1].replace(/['"]/g, '');
}
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
link.remove();
window.URL.revokeObjectURL(url);
};
// Energy Export
export const exportEnergyData = async (params: {
start_time: string;
end_time: string;
device_id?: number;
data_type?: string;
format?: 'csv' | 'xlsx';
}) => {
const response = await axios.get('/api/v1/energy/export', {
params,
responseType: 'blob',
headers: { Authorization: `Bearer ${localStorage.getItem('token')}` },
});
const format = params.format || 'csv';
const ext = format;
const contentDisposition = response.headers['content-disposition'];
let filename = `energy_export.${ext}`;
if (contentDisposition) {
const match = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
if (match?.[1]) filename = match[1].replace(/['"]/g, '');
}
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.download = filename;
document.body.appendChild(link);
link.click();
link.remove();
window.URL.revokeObjectURL(url);
};
// Cost
export const getCostPricing = (params?: Record<string, any>) => api.get('/cost/pricing', { params });
export const createCostPricing = (data: any) => api.post('/cost/pricing', data);
export const updateCostPricing = (id: number, data: any) => api.put(`/cost/pricing/${id}`, data);
export const deleteCostPricing = (id: number) => api.delete(`/cost/pricing/${id}`);
export const getCostPricingPeriods = (id: number) => api.get(`/cost/pricing/${id}/periods`);
export const addCostPricingPeriod = (id: number, data: any) => api.post(`/cost/pricing/${id}/periods`, data);
export const getCostSummary = (params: Record<string, any>) => api.get('/cost/summary', { params });
export const getCostComparison = (params?: Record<string, any>) => api.get('/cost/comparison', { params });
export const getCostBreakdown = (params: Record<string, any>) => api.get('/cost/breakdown', { params });
// Quota
export const getQuotas = (params?: Record<string, any>) => api.get('/quota', { params });
export const createQuota = (data: any) => api.post('/quota', data);
export const updateQuota = (id: number, data: any) => api.put(`/quota/${id}`, data);
export const deleteQuota = (id: number) => api.delete(`/quota/${id}`);
export const getQuotaUsage = (params?: Record<string, any>) => api.get('/quota/usage', { params });
export const getQuotaCompliance = () => api.get('/quota/compliance');
// Energy Categories (分项能耗)
export const getEnergyCategories = () => api.get('/energy/categories');
export const createEnergyCategory = (data: any) => api.post('/energy/categories', data);
export const updateEnergyCategory = (id: number, data: any) => api.put(`/energy/categories/${id}`, data);
export const getEnergyByCategory = (params?: Record<string, any>) => api.get('/energy/by-category', { params });
export const getCategoryRanking = (params?: Record<string, any>) => api.get('/energy/category-ranking', { params });
export const getCategoryTrend = (params?: Record<string, any>) => api.get('/energy/category-trend', { params });
// Maintenance (运维管理)
export const getMaintenanceDashboard = () => api.get('/maintenance/dashboard');
export const getMaintenancePlans = (params?: Record<string, any>) => api.get('/maintenance/plans', { params });
export const createMaintenancePlan = (data: any) => api.post('/maintenance/plans', data);
export const updateMaintenancePlan = (id: number, data: any) => api.put(`/maintenance/plans/${id}`, data);
export const deleteMaintenancePlan = (id: number) => api.delete(`/maintenance/plans/${id}`);
export const triggerMaintenancePlan = (id: number) => api.post(`/maintenance/plans/${id}/trigger`);
export const getMaintenanceRecords = (params?: Record<string, any>) => api.get('/maintenance/records', { params });
export const createMaintenanceRecord = (data: any) => api.post('/maintenance/records', data);
export const updateMaintenanceRecord = (id: number, data: any) => api.put(`/maintenance/records/${id}`, data);
export const getMaintenanceOrders = (params?: Record<string, any>) => api.get('/maintenance/orders', { params });
export const createMaintenanceOrder = (data: any) => api.post('/maintenance/orders', data);
export const updateMaintenanceOrder = (id: number, data: any) => api.put(`/maintenance/orders/${id}`, data);
export const assignMaintenanceOrder = (id: number, userId: number) => api.put(`/maintenance/orders/${id}/assign?assigned_to=${userId}`);
export const completeMaintenanceOrder = (id: number, resolution = '', actualCost?: number) =>
api.put(`/maintenance/orders/${id}/complete?resolution=${encodeURIComponent(resolution)}${actualCost !== undefined ? `&actual_cost=${actualCost}` : ''}`);
export const getMaintenanceDuty = (params?: Record<string, any>) => api.get('/maintenance/duty', { params });
export const createMaintenanceDuty = (data: any) => api.post('/maintenance/duty', data);
export const updateMaintenanceDuty = (id: number, data: any) => api.put(`/maintenance/duty/${id}`, data);
export const deleteMaintenanceDuty = (id: number) => api.delete(`/maintenance/duty/${id}`);
// Users
export const getUsers = (params?: Record<string, any>) => api.get('/users', { params });
export const createUser = (data: any) => api.post('/users', data);
export const updateUser = (id: number, data: any) => api.put(`/users/${id}`, data);
export const getRoles = () => api.get('/users/roles');
// Audit Logs
export const getAuditLogs = (params?: Record<string, any>) => api.get('/audit/logs', { params });
// System Settings
export const getSettings = () => api.get('/settings');
export const updateSettings = (data: any) => api.put('/settings', data);
// Charging - Stations
export const getChargingStations = (params?: Record<string, any>) => api.get('/charging/stations', { params });
export const createChargingStation = (data: any) => api.post('/charging/stations', data);
export const updateChargingStation = (id: number, data: any) => api.put(`/charging/stations/${id}`, data);
export const deleteChargingStation = (id: number) => api.delete(`/charging/stations/${id}`);
export const getStationPiles = (stationId: number) => api.get(`/charging/stations/${stationId}/piles`);
// Charging - Piles
export const getChargingPiles = (params?: Record<string, any>) => api.get('/charging/piles', { params });
export const createChargingPile = (data: any) => api.post('/charging/piles', data);
export const updateChargingPile = (id: number, data: any) => api.put(`/charging/piles/${id}`, data);
export const deleteChargingPile = (id: number) => api.delete(`/charging/piles/${id}`);
// Charging - Pricing
export const getChargingPricing = (params?: Record<string, any>) => api.get('/charging/pricing', { params });
export const createChargingPricing = (data: any) => api.post('/charging/pricing', data);
export const updateChargingPricing = (id: number, data: any) => api.put(`/charging/pricing/${id}`, data);
export const deleteChargingPricing = (id: number) => api.delete(`/charging/pricing/${id}`);
// Charging - Orders
export const getChargingOrders = (params?: Record<string, any>) => api.get('/charging/orders', { params });
export const getChargingRealtimeOrders = () => api.get('/charging/orders/realtime');
export const getChargingAbnormalOrders = (params?: Record<string, any>) => api.get('/charging/orders/abnormal', { params });
export const getChargingOrder = (id: number) => api.get(`/charging/orders/${id}`);
export const settleChargingOrder = (id: number) => api.post(`/charging/orders/${id}/settle`);
// Charging - Dashboard
export const getChargingDashboard = () => api.get('/charging/dashboard');
// Charging - Merchants
export const getChargingMerchants = () => api.get('/charging/merchants');
export const createChargingMerchant = (data: any) => api.post('/charging/merchants', data);
export const updateChargingMerchant = (id: number, data: any) => api.put(`/charging/merchants/${id}`, data);
export const deleteChargingMerchant = (id: number) => api.delete(`/charging/merchants/${id}`);
// Charging - Brands
export const getChargingBrands = () => api.get('/charging/brands');
export const createChargingBrand = (data: any) => api.post('/charging/brands', data);
export const updateChargingBrand = (id: number, data: any) => api.put(`/charging/brands/${id}`, data);
export const deleteChargingBrand = (id: number) => api.delete(`/charging/brands/${id}`);
// Energy Analysis (Loss / YoY / MoM)
export const getEnergyLoss = (params: Record<string, any>) => api.get('/energy/loss', { params });
export const getEnergyYoy = (params?: Record<string, any>) => api.get('/energy/yoy', { params });
export const getEnergyMom = (params?: Record<string, any>) => api.get('/energy/mom', { params });
// Alarm Analytics
export const getAlarmAnalytics = (params?: Record<string, any>) => api.get('/alarms/analytics', { params });
export const getTopAlarmDevices = (params?: Record<string, any>) => api.get('/alarms/top-devices', { params });
export const getAlarmMttr = (params?: Record<string, any>) => api.get('/alarms/mttr', { params });
export const toggleAlarmRule = (ruleId: number) => api.put(`/alarms/rules/${ruleId}/toggle`);
export const getAlarmRuleHistory = (ruleId: number, params?: Record<string, any>) =>
api.get(`/alarms/rules/${ruleId}/history`, { params });
// Data Query (电参量查询)
export const queryElectricalParams = (params: Record<string, any>) => api.get('/energy/params', { params });
// Device Topology (设备拓扑)
export const getDeviceTopology = () => api.get('/devices/topology');
// Management - Regulations (规章制度)
export const getRegulations = (params?: Record<string, any>) => api.get('/management/regulations', { params });
export const createRegulation = (data: any) => api.post('/management/regulations', data);
export const updateRegulation = (id: number, data: any) => api.put(`/management/regulations/${id}`, data);
export const deleteRegulation = (id: number) => api.delete(`/management/regulations/${id}`);
// Management - Standards (标准规范)
export const getStandards = (params?: Record<string, any>) => api.get('/management/standards', { params });
export const createStandard = (data: any) => api.post('/management/standards', data);
export const updateStandard = (id: number, data: any) => api.put(`/management/standards/${id}`, data);
export const deleteStandard = (id: number) => api.delete(`/management/standards/${id}`);
// Management - Process Docs (管理流程)
export const getProcessDocs = (params?: Record<string, any>) => api.get('/management/process-docs', { params });
export const createProcessDoc = (data: any) => api.post('/management/process-docs', data);
export const updateProcessDoc = (id: number, data: any) => api.put(`/management/process-docs/${id}`, data);
export const deleteProcessDoc = (id: number) => api.delete(`/management/process-docs/${id}`);
// Management - Emergency Plans (应急预案)
export const getEmergencyPlans = (params?: Record<string, any>) => api.get('/management/emergency-plans', { params });
export const createEmergencyPlan = (data: any) => api.post('/management/emergency-plans', data);
export const updateEmergencyPlan = (id: number, data: any) => api.put(`/management/emergency-plans/${id}`, data);
export const deleteEmergencyPlan = (id: number) => api.delete(`/management/emergency-plans/${id}`);
// Management - Compliance
export const getComplianceOverview = () => api.get('/management/compliance');
// AI Prediction (AI预测引擎)
export const getPredictionForecast = (params: Record<string, any>) => api.get('/prediction/forecast', { params });
export const runPrediction = (data: any) => api.post('/prediction/run', data);
export const getPredictionAccuracy = (params?: Record<string, any>) => api.get('/prediction/accuracy', { params });
export const getPredictionOptimization = (params?: Record<string, any>) => api.get('/prediction/optimization', { params });
export const approvePredictionSchedule = (id: number) => api.post(`/prediction/optimization/${id}/approve`);
export const getPredictionHistory = (params?: Record<string, any>) => api.get('/prediction/history', { params });
export const getPredictionSchedules = (params?: Record<string, any>) => api.get('/prediction/schedules', { params });
// AI Operations (AI运维智能体)
export const getAiOpsHealth = () => api.get('/ai-ops/health');
export const getAiOpsDeviceHealth = (deviceId: number) => api.get(`/ai-ops/health/${deviceId}`);
export const getAiOpsHealthHistory = (deviceId: number, params?: Record<string, any>) => api.get(`/ai-ops/health/${deviceId}/history`, { params });
export const triggerHealthCalc = () => api.post('/ai-ops/health/calculate');
export const getAiOpsAnomalies = (params?: Record<string, any>) => api.get('/ai-ops/anomalies', { params });
export const getAiOpsDeviceAnomalies = (deviceId: number, params?: Record<string, any>) => api.get(`/ai-ops/anomalies/${deviceId}`, { params });
export const updateAnomalyStatus = (id: number, data: any) => api.put(`/ai-ops/anomalies/${id}/status`, data);
export const triggerAnomalyScan = (params?: Record<string, any>) => api.post('/ai-ops/anomalies/scan', null, { params });
export const getAiOpsDiagnostics = (params?: Record<string, any>) => api.get('/ai-ops/diagnostics', { params });
export const runDeviceDiagnostics = (deviceId: number) => api.post(`/ai-ops/diagnostics/${deviceId}/run`);
export const getAiOpsDiagnosticDetail = (id: number) => api.get(`/ai-ops/diagnostics/${id}`);
export const getAiOpsPredictions = (params?: Record<string, any>) => api.get('/ai-ops/maintenance/predictions', { params });
export const getAiOpsMaintenanceSchedule = () => api.get('/ai-ops/maintenance/schedule');
export const updatePredictionStatus = (id: number, data: any) => api.put(`/ai-ops/maintenance/predictions/${id}`, data);
export const triggerPredictions = () => api.post('/ai-ops/maintenance/predict');
export const getAiOpsInsights = (params?: Record<string, any>) => api.get('/ai-ops/insights', { params });
export const getAiOpsLatestInsights = (params?: Record<string, any>) => api.get('/ai-ops/insights/latest', { params });
export const triggerInsights = () => api.post('/ai-ops/insights/generate');
export const getAiOpsDashboard = () => api.get('/ai-ops/dashboard');
// Energy Strategy (策略优化)
export const getStrategyPricing = () => api.get('/strategy/pricing');
export const createStrategyPricing = (data: any) => api.post('/strategy/pricing', data);
export const updateStrategyPricing = (id: number, data: any) => api.put(`/strategy/pricing/${id}`, data);
export const getStrategyPricingPeriods = (id: number) => api.get(`/strategy/pricing/${id}/periods`);
export const setStrategyPricingPeriods = (id: number, data: any) => api.post(`/strategy/pricing/${id}/periods`, data);
export const getDefaultPricing = () => api.get('/strategy/default-pricing');
export const getStrategies = () => api.get('/strategy/strategies');
export const createStrategy = (data: any) => api.post('/strategy/strategies', data);
export const updateStrategy = (id: number, data: any) => api.put(`/strategy/strategies/${id}`, data);
export const toggleStrategy = (id: number) => api.put(`/strategy/strategies/${id}/toggle`);
export const getStrategyCostAnalysis = (params: Record<string, any>) => api.get('/strategy/cost-analysis', { params });
export const getStrategySavingsReport = (params: Record<string, any>) => api.get('/strategy/savings-report', { params });
export const getStrategyRecommendations = () => api.get('/strategy/recommendations');
export const simulateStrategy = (data: any) => api.post('/strategy/simulate', data);
// Weather (气象数据)
export const getWeatherCurrent = () => api.get('/weather/current');
export const getWeatherForecast = (params?: Record<string, any>) => api.get('/weather/forecast', { params });
export const getWeatherHistory = (params: Record<string, any>) => api.get('/weather/history', { params });
export const getWeatherImpact = (params?: Record<string, any>) => api.get('/weather/impact', { params });
export const getWeatherConfig = () => api.get('/weather/config');
export const updateWeatherConfig = (data: any) => api.put('/weather/config', data);
export default api;