diff --git a/frontend/src/services/api/agent.ts b/frontend/src/api/agent.ts similarity index 97% rename from frontend/src/services/api/agent.ts rename to frontend/src/api/agent.ts index d9382bb..8d87914 100644 --- a/frontend/src/services/api/agent.ts +++ b/frontend/src/api/agent.ts @@ -1,7 +1,7 @@ // Agent 管理 // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http, type ListResponse } from '../http'; +import { http, type ListResponse } from '@/utils/request'; export const agentApi = { getLatest: () => http.get('/agent/latest'), diff --git a/frontend/src/services/api/ai.ts b/frontend/src/api/ai.ts similarity index 99% rename from frontend/src/services/api/ai.ts rename to frontend/src/api/ai.ts index 2896332..f5df0e9 100644 --- a/frontend/src/services/api/ai.ts +++ b/frontend/src/api/ai.ts @@ -1,7 +1,7 @@ // AI 智能运维 (LLM 对话/告警分析/容量预测) // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http } from '../http'; +import { http } from '@/utils/request'; import { useUserStore } from '@/store'; export interface LLMConfigData { diff --git a/frontend/src/services/api/auth.ts b/frontend/src/api/auth.ts similarity index 98% rename from frontend/src/services/api/auth.ts rename to frontend/src/api/auth.ts index 68f472b..a51ed31 100644 --- a/frontend/src/services/api/auth.ts +++ b/frontend/src/api/auth.ts @@ -1,7 +1,7 @@ // 用户认证 & LDAP // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http, getApiBase, type ListResponse } from '../http'; +import { http, getApiBase, type ListResponse } from '@/utils/request'; import { useUserStore } from '@/store'; export const userApi = { diff --git a/frontend/src/services/api/automation.ts b/frontend/src/api/automation.ts similarity index 98% rename from frontend/src/services/api/automation.ts rename to frontend/src/api/automation.ts index 1dfab21..561b983 100644 --- a/frontend/src/services/api/automation.ts +++ b/frontend/src/api/automation.ts @@ -1,7 +1,7 @@ // 自动化运维 (定时任务/脚本/Ansible) // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http, type ListResponse } from '../http'; +import { http, type ListResponse } from '@/utils/request'; export const cronJobApi = { getJobs: async (params?: { page?: number; page_size?: number }) => { diff --git a/frontend/src/services/api/cloud.ts b/frontend/src/api/cloud.ts similarity index 98% rename from frontend/src/services/api/cloud.ts rename to frontend/src/api/cloud.ts index f93e711..b18bcd3 100644 --- a/frontend/src/services/api/cloud.ts +++ b/frontend/src/api/cloud.ts @@ -1,7 +1,7 @@ // 云账号/平台/账单 // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http, type ListResponse } from '../http'; +import { http, type ListResponse } from '@/utils/request'; export const cloudApi = { getAccounts: async () => { diff --git a/frontend/src/services/api/dashboard.ts b/frontend/src/api/dashboard.ts similarity index 94% rename from frontend/src/services/api/dashboard.ts rename to frontend/src/api/dashboard.ts index ee8efa7..5eac78a 100644 --- a/frontend/src/services/api/dashboard.ts +++ b/frontend/src/api/dashboard.ts @@ -1,7 +1,7 @@ // Dashboard 统计数据 // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http } from '../http'; +import { http } from '@/utils/request'; export const dashboardStatsApi = { getStats: async () => { diff --git a/frontend/src/services/api/deploy.ts b/frontend/src/api/deploy.ts similarity index 99% rename from frontend/src/services/api/deploy.ts rename to frontend/src/api/deploy.ts index df6631c..ffe2686 100644 --- a/frontend/src/services/api/deploy.ts +++ b/frontend/src/api/deploy.ts @@ -1,7 +1,7 @@ // CI/CD 流水线/发布配置/凭证 // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http, type ListResponse } from '../http'; +import { http, type ListResponse } from '@/utils/request'; export const pipelineApi = { getPipelines: async (params?: { page?: number; page_size?: number }) => { diff --git a/frontend/src/services/api/index.ts b/frontend/src/api/index.ts similarity index 81% rename from frontend/src/services/api/index.ts rename to frontend/src/api/index.ts index a20456b..05d3f5a 100644 --- a/frontend/src/services/api/index.ts +++ b/frontend/src/api/index.ts @@ -1,5 +1,5 @@ // API 统一出口 — 从各域模块 re-export -// 所有 API 方法通过 `import { xxxApi } from "@/services/api"` 访问 +// 所有 API 方法通过 `import { xxxApi } from "@/api"` 访问 // Logan.Li export * from './auth'; export * from './dashboard'; diff --git a/frontend/src/api/kubernetes.ts b/frontend/src/api/kubernetes.ts new file mode 100644 index 0000000..6153981 --- /dev/null +++ b/frontend/src/api/kubernetes.ts @@ -0,0 +1,3 @@ +// Kubernetes API — 子模块 re-export(保持 @/api 导入路径不变) // Logan.Li + +export { kubernetesApi } from './kubernetes/index'; \ No newline at end of file diff --git a/frontend/src/services/api/kubernetes/cluster.ts b/frontend/src/api/kubernetes/cluster.ts similarity index 96% rename from frontend/src/services/api/kubernetes/cluster.ts rename to frontend/src/api/kubernetes/cluster.ts index 5b02843..868c7d7 100644 --- a/frontend/src/services/api/kubernetes/cluster.ts +++ b/frontend/src/api/kubernetes/cluster.ts @@ -1,6 +1,6 @@ // Kubernetes 集群管理 API // Logan.Li -import { http, type ListResponse } from '../../http'; +import { http, type ListResponse } from '@/utils/request'; export const clusterApi = { getClusters: async () => http.get('/kubernetes-clusters'), diff --git a/frontend/src/services/api/kubernetes/helpers.ts b/frontend/src/api/kubernetes/helpers.ts similarity index 95% rename from frontend/src/services/api/kubernetes/helpers.ts rename to frontend/src/api/kubernetes/helpers.ts index 339b398..e70e0a4 100644 --- a/frontend/src/services/api/kubernetes/helpers.ts +++ b/frontend/src/api/kubernetes/helpers.ts @@ -1,7 +1,7 @@ // Kubernetes API 辅助:流式 URL / WebSocket / 导出 // Logan.Li -import { buildApiUrl, getAuthToken, getWsBase, http } from '../../http'; -import { exportAsCSV, exportAsJSON } from '@/lib/export-utils'; +import { buildApiUrl, getAuthToken, getWsBase, http } from '@/utils/request'; +import { exportAsCSV, exportAsJSON } from '@/utils/export'; export { exportAsCSV, exportAsJSON }; diff --git a/frontend/src/services/api/kubernetes/index.ts b/frontend/src/api/kubernetes/index.ts similarity index 100% rename from frontend/src/services/api/kubernetes/index.ts rename to frontend/src/api/kubernetes/index.ts diff --git a/frontend/src/services/api/kubernetes/namespace.ts b/frontend/src/api/kubernetes/namespace.ts similarity index 94% rename from frontend/src/services/api/kubernetes/namespace.ts rename to frontend/src/api/kubernetes/namespace.ts index 48873d3..41393ec 100644 --- a/frontend/src/services/api/kubernetes/namespace.ts +++ b/frontend/src/api/kubernetes/namespace.ts @@ -1,6 +1,6 @@ // Kubernetes Namespace API // Logan.Li -import { http } from '../../http'; +import { http } from '@/utils/request'; export const namespaceApi = { getNamespaces: async (clusterCode: string) => http.get(`/kubernetes/${clusterCode}/namespaces`), diff --git a/frontend/src/services/api/kubernetes/node.ts b/frontend/src/api/kubernetes/node.ts similarity index 91% rename from frontend/src/services/api/kubernetes/node.ts rename to frontend/src/api/kubernetes/node.ts index d31a17e..9368216 100644 --- a/frontend/src/services/api/kubernetes/node.ts +++ b/frontend/src/api/kubernetes/node.ts @@ -1,6 +1,6 @@ // Kubernetes 节点 API // Logan.Li -import { http } from '../../http'; +import { http } from '@/utils/request'; export const nodeApi = { getNodes: async (clusterId: number | string) => http.get(`/kubernetes-clusters/${clusterId}/nodes`), diff --git a/frontend/src/services/api/kubernetes/pod.ts b/frontend/src/api/kubernetes/pod.ts similarity index 98% rename from frontend/src/services/api/kubernetes/pod.ts rename to frontend/src/api/kubernetes/pod.ts index ea7607f..b9bd003 100644 --- a/frontend/src/services/api/kubernetes/pod.ts +++ b/frontend/src/api/kubernetes/pod.ts @@ -1,6 +1,6 @@ // Kubernetes Pod API(日志 / Exec / 文件 / 指标) // Logan.Li -import { http } from '../../http'; +import { http } from '@/utils/request'; import { buildPodExecWsUrl, buildPodFileDownloadUrl, diff --git a/frontend/src/services/api/kubernetes/resource.ts b/frontend/src/api/kubernetes/resource.ts similarity index 98% rename from frontend/src/services/api/kubernetes/resource.ts rename to frontend/src/api/kubernetes/resource.ts index a61541a..7a9e574 100644 --- a/frontend/src/services/api/kubernetes/resource.ts +++ b/frontend/src/api/kubernetes/resource.ts @@ -1,6 +1,6 @@ // Kubernetes 命名空间资源 / YAML / 事件 / 容量 API // Logan.Li -import { http } from '../../http'; +import { http } from '@/utils/request'; export const resourceApi = { getNamespaceServices: async (clusterCode: string, namespace: string) => diff --git a/frontend/src/services/api/kubernetes/workload.ts b/frontend/src/api/kubernetes/workload.ts similarity index 99% rename from frontend/src/services/api/kubernetes/workload.ts rename to frontend/src/api/kubernetes/workload.ts index fe6eebd..d3d6b9c 100644 --- a/frontend/src/services/api/kubernetes/workload.ts +++ b/frontend/src/api/kubernetes/workload.ts @@ -1,6 +1,6 @@ // Kubernetes 工作负载 API(Deployment / StatefulSet / HPA / CronJob) // Logan.Li -import { http } from '../../http'; +import { http } from '@/utils/request'; export const workloadApi = { scaleDeployment: async (clusterCode: string, namespace: string, name: string, replicas: number) => diff --git a/frontend/src/services/api/monitor.ts b/frontend/src/api/monitor.ts similarity index 99% rename from frontend/src/services/api/monitor.ts rename to frontend/src/api/monitor.ts index ec0ee28..eff930d 100644 --- a/frontend/src/services/api/monitor.ts +++ b/frontend/src/api/monitor.ts @@ -1,7 +1,7 @@ // 监控告警 (规则/通知/大屏/Prometheus/Zabbix) // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http, type ListResponse } from '../http'; +import { http, type ListResponse } from '@/utils/request'; export const alertApi = { getAlerts: async (params?: { page?: number; page_size?: number; status?: string; severity?: string }) => { diff --git a/frontend/src/services/api/server.ts b/frontend/src/api/server.ts similarity index 98% rename from frontend/src/services/api/server.ts rename to frontend/src/api/server.ts index 7664da5..5e1c125 100644 --- a/frontend/src/services/api/server.ts +++ b/frontend/src/api/server.ts @@ -1,7 +1,7 @@ // 服务器/资产/区域/资源型号 // 从 services/api.ts 拆分 — Q3 api.ts 模块化 -import { http, type ListResponse } from '../http'; +import { http, type ListResponse } from '@/utils/request'; export const serverApi = { getServers: async (params?: { page?: number; page_size?: number; keyword?: string; status?: string }) => { diff --git a/frontend/src/services/api/system.ts b/frontend/src/api/system.ts similarity index 100% rename from frontend/src/services/api/system.ts rename to frontend/src/api/system.ts diff --git a/frontend/src/services/api/system/approval.ts b/frontend/src/api/system/approval.ts similarity index 97% rename from frontend/src/services/api/system/approval.ts rename to frontend/src/api/system/approval.ts index f90489d..58d856e 100644 --- a/frontend/src/services/api/system/approval.ts +++ b/frontend/src/api/system/approval.ts @@ -1,6 +1,6 @@ // 审批流程 API // Logan.Li -import { http } from '../../http'; +import { http } from '@/utils/request'; export const approvalWorkflowApi = { list: async (params?: { category?: string }) => http.get('/approval-workflows', params), diff --git a/frontend/src/services/api/system/audit.ts b/frontend/src/api/system/audit.ts similarity index 94% rename from frontend/src/services/api/system/audit.ts rename to frontend/src/api/system/audit.ts index 4c40714..95f706f 100644 --- a/frontend/src/services/api/system/audit.ts +++ b/frontend/src/api/system/audit.ts @@ -1,6 +1,6 @@ // 审计日志 API // Logan.Li -import { http, type ListResponse } from '../../http'; +import { http, type ListResponse } from '@/utils/request'; export const auditApi = { getLogs: async (params?: { diff --git a/frontend/src/services/api/system/index.ts b/frontend/src/api/system/index.ts similarity index 100% rename from frontend/src/services/api/system/index.ts rename to frontend/src/api/system/index.ts diff --git a/frontend/src/services/api/system/terminal.ts b/frontend/src/api/system/terminal.ts similarity index 95% rename from frontend/src/services/api/system/terminal.ts rename to frontend/src/api/system/terminal.ts index c32d9cc..3cda2be 100644 --- a/frontend/src/services/api/system/terminal.ts +++ b/frontend/src/api/system/terminal.ts @@ -1,6 +1,6 @@ // 终端会话 / 命令 / 登录日志 API // Logan.Li -import { http, type ListResponse } from '../../http'; +import { http, type ListResponse } from '@/utils/request'; export const terminalSessionApi = { list: async (params?: { diff --git a/frontend/src/components/agent/AgentAlerts.tsx b/frontend/src/components/agent/AgentAlerts.tsx index 4bdfda8..0d39e5f 100644 --- a/frontend/src/components/agent/AgentAlerts.tsx +++ b/frontend/src/components/agent/AgentAlerts.tsx @@ -2,7 +2,7 @@ import { useState, useEffect, useCallback } from 'react'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { agentApi } from '@/services/api'; +import { agentApi } from '@/api'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; diff --git a/frontend/src/components/agent/AgentMonitor.tsx b/frontend/src/components/agent/AgentMonitor.tsx index 7445e9d..22d44dc 100644 --- a/frontend/src/components/agent/AgentMonitor.tsx +++ b/frontend/src/components/agent/AgentMonitor.tsx @@ -1,6 +1,6 @@ import { useState, useEffect, useRef, useCallback } from 'react'; import { toast } from 'sonner'; -import { agentApi } from '@/services/api'; +import { agentApi } from '@/api'; import { AgentWizard } from './AgentWizard'; import { HostDetailDialog } from './HostDetailDialog'; import { isOnline, timeAgo, asList } from './agentUtils'; diff --git a/frontend/src/components/agent/AgentRuleDialog.tsx b/frontend/src/components/agent/AgentRuleDialog.tsx index 3062527..09c0037 100644 --- a/frontend/src/components/agent/AgentRuleDialog.tsx +++ b/frontend/src/components/agent/AgentRuleDialog.tsx @@ -1,7 +1,7 @@ // Agent 告警规则编辑/新建弹窗(自包含表单状态,从 AgentAlerts.tsx 提取) // Logan.Li import { useState, useEffect } from 'react'; import { toast } from 'sonner'; -import { agentApi } from '@/services/api'; +import { agentApi } from '@/api'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; diff --git a/frontend/src/components/agent/AgentWizard.tsx b/frontend/src/components/agent/AgentWizard.tsx index cc89de8..8204d34 100644 --- a/frontend/src/components/agent/AgentWizard.tsx +++ b/frontend/src/components/agent/AgentWizard.tsx @@ -12,7 +12,7 @@ import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Copy, Check, Terminal, Download, Settings, Play, Cpu, Zap, Loader2, Server, Shield } from 'lucide-react'; -import { serverApi } from '@/services/api'; +import { serverApi } from '@/api'; import { toast } from 'sonner'; interface AgentWizardProps { diff --git a/frontend/src/components/agent/HostDetailDialog.tsx b/frontend/src/components/agent/HostDetailDialog.tsx index 21df5dc..91ae78e 100644 --- a/frontend/src/components/agent/HostDetailDialog.tsx +++ b/frontend/src/components/agent/HostDetailDialog.tsx @@ -1,6 +1,6 @@ // 主机详情弹窗:展示历史指标趋势图 + 端口发现列表(从 AgentMonitor.tsx 提取) // Logan.Li import { useState, useEffect } from 'react'; -import { agentApi } from '@/services/api'; +import { agentApi } from '@/api'; import { isOnline, timeAgo, asList } from './agentUtils'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; diff --git a/frontend/src/components/aiops/AIAlertAnalyzer.tsx b/frontend/src/components/aiops/AIAlertAnalyzer.tsx index 32d5b7b..0276f6b 100644 --- a/frontend/src/components/aiops/AIAlertAnalyzer.tsx +++ b/frontend/src/components/aiops/AIAlertAnalyzer.tsx @@ -3,7 +3,7 @@ import { useState, useEffect } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { ScrollArea } from '@/components/ui/scroll-area'; -import { alertApi, aiApi } from '@/services/api'; +import { alertApi, aiApi } from '@/api'; import { AlertTriangle, Brain, diff --git a/frontend/src/components/aiops/AIOpsAssistant.tsx b/frontend/src/components/aiops/AIOpsAssistant.tsx index 05b3127..a6097c1 100644 --- a/frontend/src/components/aiops/AIOpsAssistant.tsx +++ b/frontend/src/components/aiops/AIOpsAssistant.tsx @@ -23,7 +23,7 @@ import { } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import { toast } from 'sonner'; -import { aiApi, alertApi, agentApi, dashboardStatsApi, type LLMConfigData, type ChatHistoryItem } from '@/services/api'; +import { aiApi, alertApi, agentApi, dashboardStatsApi, type LLMConfigData, type ChatHistoryItem } from '@/api'; import { Bot, Send, diff --git a/frontend/src/components/aiops/AIPredictiveAnalytics.tsx b/frontend/src/components/aiops/AIPredictiveAnalytics.tsx index dae0bde..9d8b5f7 100644 --- a/frontend/src/components/aiops/AIPredictiveAnalytics.tsx +++ b/frontend/src/components/aiops/AIPredictiveAnalytics.tsx @@ -30,7 +30,7 @@ import { Minus, Loader2, } from 'lucide-react'; -import { dashboardStatsApi, serverApi, alertApi } from '@/services/api'; +import { dashboardStatsApi, serverApi, alertApi } from '@/api'; import { PredictiveCapacityTab } from './PredictiveCapacityTab'; import { computePredictions, diff --git a/frontend/src/components/approval/ApprovalCreateDialog.tsx b/frontend/src/components/approval/ApprovalCreateDialog.tsx index fe2db7c..54e6c60 100644 --- a/frontend/src/components/approval/ApprovalCreateDialog.tsx +++ b/frontend/src/components/approval/ApprovalCreateDialog.tsx @@ -21,7 +21,7 @@ import { } from '@/components/ui/dialog'; import { Loader2 } from 'lucide-react'; import { toast } from 'sonner'; -import { approvalApi } from '@/services/api'; +import { approvalApi } from '@/api'; import { parseFields, APPROVAL_TYPE_OPTIONS } from './helpers'; interface ApprovalCreateDialogProps { diff --git a/frontend/src/components/approval/ApprovalFlow.tsx b/frontend/src/components/approval/ApprovalFlow.tsx index c55247d..462f83a 100644 --- a/frontend/src/components/approval/ApprovalFlow.tsx +++ b/frontend/src/components/approval/ApprovalFlow.tsx @@ -21,7 +21,7 @@ import { Plus, } from 'lucide-react'; import { toast } from 'sonner'; -import { approvalApi } from '@/services/api'; +import { approvalApi } from '@/api'; import { ApprovalProcessTab } from './ApprovalProcessTab'; import { ApprovalTemplateTab } from './ApprovalTemplateTab'; import { ApprovalDetailDialog } from './ApprovalDetailDialog'; diff --git a/frontend/src/components/auth/Login.tsx b/frontend/src/components/auth/Login.tsx index edcc876..5e7ff11 100644 --- a/frontend/src/components/auth/Login.tsx +++ b/frontend/src/components/auth/Login.tsx @@ -2,7 +2,7 @@ import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { User, Lock, Palette, Check, Loader2, AlertCircle, Eye, EyeOff } from 'lucide-react'; import { useUserStore } from '@/store'; -import { userApi } from '@/services/api'; +import { userApi } from '@/api'; import { useTheme, THEME_OPTIONS } from '@/hooks/useTheme'; import { cn } from '@/lib/utils'; import { diff --git a/frontend/src/components/automation/CronJobFormDialog.tsx b/frontend/src/components/automation/CronJobFormDialog.tsx index 2e68902..e24b63d 100644 --- a/frontend/src/components/automation/CronJobFormDialog.tsx +++ b/frontend/src/components/automation/CronJobFormDialog.tsx @@ -20,7 +20,7 @@ import { Textarea } from '@/components/ui/textarea'; import { Label } from '@/components/ui/label'; import { Badge } from '@/components/ui/badge'; import { toast } from 'sonner'; -import { cronJobApi, scriptApi } from '@/services/api'; +import { cronJobApi, scriptApi } from '@/api'; // 定时任务类型定义 // Logan.Li const jobTypes = [ diff --git a/frontend/src/components/automation/CronJobManager.tsx b/frontend/src/components/automation/CronJobManager.tsx index e19385e..b0a3091 100644 --- a/frontend/src/components/automation/CronJobManager.tsx +++ b/frontend/src/components/automation/CronJobManager.tsx @@ -21,7 +21,7 @@ import { PackageOpen, } from 'lucide-react'; import { toast } from 'sonner'; -import { cronJobApi } from '@/services/api'; +import { cronJobApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { getStatusBadge, parseCron } from './cronJobHelpers'; import { CronJobFormDialog } from './CronJobFormDialog'; diff --git a/frontend/src/components/automation/ExecutionHistoryDialog.tsx b/frontend/src/components/automation/ExecutionHistoryDialog.tsx index 32f6e38..98617ed 100644 --- a/frontend/src/components/automation/ExecutionHistoryDialog.tsx +++ b/frontend/src/components/automation/ExecutionHistoryDialog.tsx @@ -15,7 +15,7 @@ import { TableRow, } from '@/components/ui/table'; import { History, Loader2, Terminal } from 'lucide-react'; -import { taskExecutionApi } from '@/services/api'; +import { taskExecutionApi } from '@/api'; import { getStatusBadge } from './cronJobHelpers'; // 定时任务执行历史弹窗(打开时自动加载,点击行展开输出) // Logan.Li diff --git a/frontend/src/components/automation/ScriptManager.tsx b/frontend/src/components/automation/ScriptManager.tsx index a5a0a6d..67cd084 100644 --- a/frontend/src/components/automation/ScriptManager.tsx +++ b/frontend/src/components/automation/ScriptManager.tsx @@ -10,7 +10,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Checkbox } from '@/components/ui/checkbox'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { scriptApi, taskExecutionApi } from '@/services/api'; +import { scriptApi, taskExecutionApi } from '@/api'; import { type Script, type ExecutionRecord, mapScript, scriptTypes, genCode, } from './script-helpers'; diff --git a/frontend/src/components/cloud/BillingRecordDialog.tsx b/frontend/src/components/cloud/BillingRecordDialog.tsx index 09f49df..1747b12 100644 --- a/frontend/src/components/cloud/BillingRecordDialog.tsx +++ b/frontend/src/components/cloud/BillingRecordDialog.tsx @@ -20,7 +20,7 @@ import { } from '@/components/ui/select'; import { Loader2 } from 'lucide-react'; import { toast } from 'sonner'; -import { billingApi } from '@/services/api'; +import { billingApi } from '@/api'; import { providerLabels } from './CloudBillingHelpers'; const emptyRecord = { diff --git a/frontend/src/components/cloud/BillingRuleDialog.tsx b/frontend/src/components/cloud/BillingRuleDialog.tsx index 8d72369..3208b57 100644 --- a/frontend/src/components/cloud/BillingRuleDialog.tsx +++ b/frontend/src/components/cloud/BillingRuleDialog.tsx @@ -21,7 +21,7 @@ import { } from '@/components/ui/select'; import { Loader2 } from 'lucide-react'; import { toast } from 'sonner'; -import { billingApi } from '@/services/api'; +import { billingApi } from '@/api'; import { providerLabels } from './CloudBillingHelpers'; const emptyRule = { name: '', provider: '', metric: 'daily', threshold: '', operator: '>', enabled: true }; diff --git a/frontend/src/components/cloud/CloudAccountManager.tsx b/frontend/src/components/cloud/CloudAccountManager.tsx index 92a8b96..515204e 100644 --- a/frontend/src/components/cloud/CloudAccountManager.tsx +++ b/frontend/src/components/cloud/CloudAccountManager.tsx @@ -24,7 +24,7 @@ import { RefreshCw, Loader2, } from 'lucide-react'; -import { cloudApi } from '@/services/api'; +import { cloudApi } from '@/api'; import { CloudBrandIcon, getProviderColor } from '@/components/icons/CloudBrandIcon'; const providerLabels: Record = { diff --git a/frontend/src/components/cloud/CloudBilling.tsx b/frontend/src/components/cloud/CloudBilling.tsx index 1acac57..9e94a6a 100644 --- a/frontend/src/components/cloud/CloudBilling.tsx +++ b/frontend/src/components/cloud/CloudBilling.tsx @@ -26,7 +26,7 @@ import { } from 'lucide-react'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { billingApi } from '@/services/api'; +import { billingApi } from '@/api'; import { formatCurrency, StatCard, TrendChart, providerLabels, providerColors } from './CloudBillingHelpers'; import { StatStrip } from '@/components/ui/stat-strip'; import { BillingRecordDialog } from './BillingRecordDialog'; diff --git a/frontend/src/components/cloud/DomainManager.tsx b/frontend/src/components/cloud/DomainManager.tsx index 98ab0c0..75be2e3 100644 --- a/frontend/src/components/cloud/DomainManager.tsx +++ b/frontend/src/components/cloud/DomainManager.tsx @@ -24,7 +24,7 @@ import { RefreshCw, Loader2, } from 'lucide-react'; -import { cloudApi } from '@/services/api'; +import { cloudApi } from '@/api'; export function DomainManager() { const [domains, setDomains] = useState([]); diff --git a/frontend/src/components/cloud/PlatformManager.tsx b/frontend/src/components/cloud/PlatformManager.tsx index eb35f34..facd41b 100644 --- a/frontend/src/components/cloud/PlatformManager.tsx +++ b/frontend/src/components/cloud/PlatformManager.tsx @@ -29,7 +29,7 @@ import { ExternalLink, Loader2, } from 'lucide-react'; -import { platformApi } from '@/services/api'; +import { platformApi } from '@/api'; const typeLabels: Record = { public: '公有云', diff --git a/frontend/src/components/cloud/RegionManager.tsx b/frontend/src/components/cloud/RegionManager.tsx index 0e79801..aaa0d42 100644 --- a/frontend/src/components/cloud/RegionManager.tsx +++ b/frontend/src/components/cloud/RegionManager.tsx @@ -37,7 +37,7 @@ import { XCircle, Loader2, } from 'lucide-react'; -import { regionApi } from '@/services/api'; +import { regionApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { toast } from 'sonner'; diff --git a/frontend/src/components/dashboard/Dashboard.tsx b/frontend/src/components/dashboard/Dashboard.tsx index 1ca4ffa..bac82a7 100644 --- a/frontend/src/components/dashboard/Dashboard.tsx +++ b/frontend/src/components/dashboard/Dashboard.tsx @@ -3,7 +3,7 @@ import { useNavigate } from 'react-router-dom'; import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; import { Clock, Server, ArrowRight } from 'lucide-react'; -import { dashboardStatsApi, serverApi, kubernetesApi } from '@/services/api'; +import { dashboardStatsApi, serverApi, kubernetesApi } from '@/api'; import { StatStrip } from '@/components/ui/stat-strip'; import { CostOverviewCard, TopResourceUsageCard, ResourceUsageCard } from './DashboardCharts'; import { diff --git a/frontend/src/components/deploy/AppRelease.tsx b/frontend/src/components/deploy/AppRelease.tsx index ffa71d9..2661453 100644 --- a/frontend/src/components/deploy/AppRelease.tsx +++ b/frontend/src/components/deploy/AppRelease.tsx @@ -33,7 +33,7 @@ import { History, Loader2, } from 'lucide-react'; -import { releaseApi } from '@/services/api'; +import { releaseApi } from '@/api'; import { toast } from 'sonner'; import { getStatusBadge, getEnvBadge } from './releaseHelpers'; import { ReleaseDetailDialog } from './ReleaseDetailDialog'; diff --git a/frontend/src/components/deploy/CredentialFormDialog.tsx b/frontend/src/components/deploy/CredentialFormDialog.tsx index 251d5f0..853eb65 100644 --- a/frontend/src/components/deploy/CredentialFormDialog.tsx +++ b/frontend/src/components/deploy/CredentialFormDialog.tsx @@ -8,7 +8,7 @@ import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Plus, Key, Globe, Container } from 'lucide-react'; import { toast } from 'sonner'; -import { credentialApi, deployApi } from '@/services/api'; +import { credentialApi, deployApi } from '@/api'; interface Repo { id: number; name: string; url: string; credential_id: number | null; diff --git a/frontend/src/components/deploy/CredentialManager.tsx b/frontend/src/components/deploy/CredentialManager.tsx index 044e3c7..96ff4a9 100644 --- a/frontend/src/components/deploy/CredentialManager.tsx +++ b/frontend/src/components/deploy/CredentialManager.tsx @@ -34,7 +34,7 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, Di import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { credentialApi } from '@/services/api'; +import { credentialApi } from '@/api'; // ────── Types ────── diff --git a/frontend/src/components/deploy/DeployCredentials.tsx b/frontend/src/components/deploy/DeployCredentials.tsx index 455350f..d455b06 100644 --- a/frontend/src/components/deploy/DeployCredentials.tsx +++ b/frontend/src/components/deploy/DeployCredentials.tsx @@ -9,7 +9,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@ import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { deployApi } from '@/services/api'; +import { deployApi } from '@/api'; import CredentialFormDialog from './CredentialFormDialog'; import ToolConfigTab from './ToolConfigTab'; diff --git a/frontend/src/components/deploy/DeployRBAC.tsx b/frontend/src/components/deploy/DeployRBAC.tsx index ff758ac..9484f15 100644 --- a/frontend/src/components/deploy/DeployRBAC.tsx +++ b/frontend/src/components/deploy/DeployRBAC.tsx @@ -7,7 +7,7 @@ import { Badge } from '@/components/ui/badge'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Label } from '@/components/ui/label'; import { toast } from 'sonner'; -import { deployApi, userApi, pipelineApi } from '@/services/api'; +import { deployApi, userApi, pipelineApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; interface ItemRole { diff --git a/frontend/src/components/deploy/FileBrowserDialog.tsx b/frontend/src/components/deploy/FileBrowserDialog.tsx index 006ca8f..a0d02df 100644 --- a/frontend/src/components/deploy/FileBrowserDialog.tsx +++ b/frontend/src/components/deploy/FileBrowserDialog.tsx @@ -17,7 +17,7 @@ import { Minimize2, } from 'lucide-react'; import { cn } from '@/lib/utils'; -import { pipelineApi } from '@/services/api'; +import { pipelineApi } from '@/api'; import { useUserStore } from '@/store'; interface FileItem { diff --git a/frontend/src/components/deploy/PipelineEditor.tsx b/frontend/src/components/deploy/PipelineEditor.tsx index 12f2e90..e98cb80 100644 --- a/frontend/src/components/deploy/PipelineEditor.tsx +++ b/frontend/src/components/deploy/PipelineEditor.tsx @@ -42,7 +42,7 @@ import { Switch } from '@/components/ui/switch'; import { Label } from '@/components/ui/label'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { toast } from 'sonner'; -import { pipelineApi, deployApi } from '@/services/api'; +import { pipelineApi, deployApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; // ---- types ---- diff --git a/frontend/src/components/deploy/PipelineManager.tsx b/frontend/src/components/deploy/PipelineManager.tsx index 32b75c5..535e322 100644 --- a/frontend/src/components/deploy/PipelineManager.tsx +++ b/frontend/src/components/deploy/PipelineManager.tsx @@ -40,7 +40,7 @@ import { Package, } from 'lucide-react'; -import { credentialApi, deployApi, pipelineApi } from '@/services/api'; +import { credentialApi, deployApi, pipelineApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { toast } from 'sonner'; import { nameToCode, getStatusBadge } from './pipeline-helpers'; diff --git a/frontend/src/components/deploy/PipelineRunDetail.tsx b/frontend/src/components/deploy/PipelineRunDetail.tsx index dcefcff..e1331e9 100644 --- a/frontend/src/components/deploy/PipelineRunDetail.tsx +++ b/frontend/src/components/deploy/PipelineRunDetail.tsx @@ -10,7 +10,7 @@ import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { toast } from 'sonner'; -import { pipelineApi } from '@/services/api'; +import { pipelineApi } from '@/api'; import { FileBrowserDialog } from './FileBrowserDialog'; // ═══════════ 阶段定义 (与 PipelineManager 共用) ═══════════ diff --git a/frontend/src/components/deploy/ReleaseApplyDialog.tsx b/frontend/src/components/deploy/ReleaseApplyDialog.tsx index 69f7bea..e541030 100644 --- a/frontend/src/components/deploy/ReleaseApplyDialog.tsx +++ b/frontend/src/components/deploy/ReleaseApplyDialog.tsx @@ -20,7 +20,7 @@ import { SelectValue, } from '@/components/ui/select'; import { Loader2 } from 'lucide-react'; -import { releaseApi } from '@/services/api'; +import { releaseApi } from '@/api'; import { toast } from 'sonner'; interface ReleaseApplyDialogProps { diff --git a/frontend/src/components/deploy/ReleaseApproveDialog.tsx b/frontend/src/components/deploy/ReleaseApproveDialog.tsx index f007343..9cd2d13 100644 --- a/frontend/src/components/deploy/ReleaseApproveDialog.tsx +++ b/frontend/src/components/deploy/ReleaseApproveDialog.tsx @@ -10,7 +10,7 @@ import { } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { AlertCircle, X, Check, Loader2 } from 'lucide-react'; -import { releaseApi } from '@/services/api'; +import { releaseApi } from '@/api'; import { toast } from 'sonner'; interface ReleaseApproveDialogProps { diff --git a/frontend/src/components/deploy/ReleaseCreateDialog.tsx b/frontend/src/components/deploy/ReleaseCreateDialog.tsx index c62d721..764057c 100644 --- a/frontend/src/components/deploy/ReleaseCreateDialog.tsx +++ b/frontend/src/components/deploy/ReleaseCreateDialog.tsx @@ -20,7 +20,7 @@ import { SelectValue, } from '@/components/ui/select'; import { Plus, Loader2 } from 'lucide-react'; -import { releaseApi } from '@/services/api'; +import { releaseApi } from '@/api'; import { toast } from 'sonner'; interface ReleaseCreateDialogProps { diff --git a/frontend/src/components/deploy/ReleaseDetailDialog.tsx b/frontend/src/components/deploy/ReleaseDetailDialog.tsx index 60126e0..f491ac6 100644 --- a/frontend/src/components/deploy/ReleaseDetailDialog.tsx +++ b/frontend/src/components/deploy/ReleaseDetailDialog.tsx @@ -12,7 +12,7 @@ import { DialogTitle, } from '@/components/ui/dialog'; import { Rocket, CheckCircle, Loader2, RotateCcw } from 'lucide-react'; -import { releaseApi } from '@/services/api'; +import { releaseApi } from '@/api'; import { toast } from 'sonner'; import { PIPELINE_STEPS } from './releaseHelpers'; diff --git a/frontend/src/components/deploy/ReleaseManager.tsx b/frontend/src/components/deploy/ReleaseManager.tsx index b3ff38c..ab67078 100644 --- a/frontend/src/components/deploy/ReleaseManager.tsx +++ b/frontend/src/components/deploy/ReleaseManager.tsx @@ -31,7 +31,7 @@ import { Play, PackageOpen, } from 'lucide-react'; -import { releaseApi } from '@/services/api'; +import { releaseApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { toast } from 'sonner'; import { getStatusBadge, getEnvironmentBadge } from './releaseManagerHelpers'; diff --git a/frontend/src/components/deploy/ToolConfigTab.tsx b/frontend/src/components/deploy/ToolConfigTab.tsx index 52c3817..5d93d61 100644 --- a/frontend/src/components/deploy/ToolConfigTab.tsx +++ b/frontend/src/components/deploy/ToolConfigTab.tsx @@ -5,7 +5,7 @@ import { Badge } from '@/components/ui/badge'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from '@/components/ui/dialog'; import { toast } from 'sonner'; -import { deployApi } from '@/services/api'; +import { deployApi } from '@/api'; interface ToolConfig { id: number; name: string; display_name: string; description: string; diff --git a/frontend/src/components/deploy/UserGroupsManager.tsx b/frontend/src/components/deploy/UserGroupsManager.tsx index ee1c1f3..5d2dbe3 100644 --- a/frontend/src/components/deploy/UserGroupsManager.tsx +++ b/frontend/src/components/deploy/UserGroupsManager.tsx @@ -7,7 +7,7 @@ import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/u import { Label } from '@/components/ui/label'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { deployApi } from '@/services/api'; +import { deployApi } from '@/api'; interface Group { id: number; name: string; description: string; diff --git a/frontend/src/components/deploy/WorkspaceTermDialog.tsx b/frontend/src/components/deploy/WorkspaceTermDialog.tsx index 7f52475..efb11d4 100644 --- a/frontend/src/components/deploy/WorkspaceTermDialog.tsx +++ b/frontend/src/components/deploy/WorkspaceTermDialog.tsx @@ -11,7 +11,7 @@ import 'xterm/css/xterm.css'; import { Maximize2, Minimize2, X, FolderOpen } from 'lucide-react'; import { cn } from '@/lib/utils'; import { useUserStore } from '@/store'; -import { pipelineApi } from '@/services/api'; +import { pipelineApi } from '@/api'; interface WorkspaceTermDialogProps { open: boolean; diff --git a/frontend/src/components/kubernetes/CapacityPage.tsx b/frontend/src/components/kubernetes/CapacityPage.tsx index 5fff2a8..5d2f36e 100644 --- a/frontend/src/components/kubernetes/CapacityPage.tsx +++ b/frontend/src/components/kubernetes/CapacityPage.tsx @@ -10,7 +10,7 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { RefreshCw, ChevronRight, BarChart3, Download, Cpu, HardDrive } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; export default function CapacityPage() { const { clusterCode } = useParams<{ clusterCode: string }>(); diff --git a/frontend/src/components/kubernetes/ClusterComparePage.tsx b/frontend/src/components/kubernetes/ClusterComparePage.tsx index 961717f..fc5adae 100644 --- a/frontend/src/components/kubernetes/ClusterComparePage.tsx +++ b/frontend/src/components/kubernetes/ClusterComparePage.tsx @@ -28,7 +28,7 @@ import { TrendingUp, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; const CHART_COLORS = ['#3B82F6', '#207060', '#F59E0B', '#EF4444', '#8B5CF6', '#EC4899', '#14B8A6', '#F97316']; diff --git a/frontend/src/components/kubernetes/ClusterOverviewPage.tsx b/frontend/src/components/kubernetes/ClusterOverviewPage.tsx index 4b714bc..15732b0 100644 --- a/frontend/src/components/kubernetes/ClusterOverviewPage.tsx +++ b/frontend/src/components/kubernetes/ClusterOverviewPage.tsx @@ -20,7 +20,7 @@ import { Activity, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; const NAMESPACE_ICON: Record> = { diff --git a/frontend/src/components/kubernetes/DeploymentDetail.tsx b/frontend/src/components/kubernetes/DeploymentDetail.tsx index fc24776..8b48ee8 100644 --- a/frontend/src/components/kubernetes/DeploymentDetail.tsx +++ b/frontend/src/components/kubernetes/DeploymentDetail.tsx @@ -33,7 +33,7 @@ import { FolderOpen, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; import { PodExecTerminal } from './PodExecTerminal'; import { PodLogsViewer } from './PodLogsViewer'; diff --git a/frontend/src/components/kubernetes/DeploymentEditAdvanced.tsx b/frontend/src/components/kubernetes/DeploymentEditAdvanced.tsx index 34516ba..145c3a1 100644 --- a/frontend/src/components/kubernetes/DeploymentEditAdvanced.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditAdvanced.tsx @@ -10,7 +10,7 @@ import { Save, Loader2, Settings, RefreshCw, Shield, Clock, Network, } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { SchedulingSection, type ScheduleMode } from './deployment-edit-advanced/SchedulingSection'; import { DnsHostSection } from './deployment-edit-advanced/DnsHostSection'; diff --git a/frontend/src/components/kubernetes/DeploymentEditBasic.tsx b/frontend/src/components/kubernetes/DeploymentEditBasic.tsx index b9b93f4..bd30e3b 100644 --- a/frontend/src/components/kubernetes/DeploymentEditBasic.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditBasic.tsx @@ -9,7 +9,7 @@ import { Label } from '@/components/ui/label'; import { Badge } from '@/components/ui/badge'; import { Plus, Trash2, Save, Loader2, Tags, FileText, Hash, Lock } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; interface DeploymentEditBasicProps { clusterCode: string; diff --git a/frontend/src/components/kubernetes/DeploymentEditContainers.tsx b/frontend/src/components/kubernetes/DeploymentEditContainers.tsx index 2dc9b05..31f0105 100644 --- a/frontend/src/components/kubernetes/DeploymentEditContainers.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditContainers.tsx @@ -18,7 +18,7 @@ import { } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { ContainerGroupSection } from './deployment-edit/ContainerGroupSection'; import { diff --git a/frontend/src/components/kubernetes/DeploymentEditService.tsx b/frontend/src/components/kubernetes/DeploymentEditService.tsx index 674c650..4966f9a 100644 --- a/frontend/src/components/kubernetes/DeploymentEditService.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditService.tsx @@ -23,7 +23,7 @@ import { } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; interface Props { clusterCode: string; diff --git a/frontend/src/components/kubernetes/DeploymentEditStorage.tsx b/frontend/src/components/kubernetes/DeploymentEditStorage.tsx index db0622d..edcbab4 100644 --- a/frontend/src/components/kubernetes/DeploymentEditStorage.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditStorage.tsx @@ -11,7 +11,7 @@ import { Plus, Trash2, Save, Loader2, HardDrive, Database, Folder, Lock, File, Disc, Server, } from 'lucide-react'; import { useToast } from '@/hooks/use-toast'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; interface Props { clusterCode: string; diff --git a/frontend/src/components/kubernetes/DeploymentView.tsx b/frontend/src/components/kubernetes/DeploymentView.tsx index 58daec0..83e54f7 100644 --- a/frontend/src/components/kubernetes/DeploymentView.tsx +++ b/frontend/src/components/kubernetes/DeploymentView.tsx @@ -30,7 +30,7 @@ import { Loader2, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; import { formatK8sTime, formatDuration, elapsedSeconds, statusColor, STATUS_COLORS, diff --git a/frontend/src/components/kubernetes/DeploymentWorkload.tsx b/frontend/src/components/kubernetes/DeploymentWorkload.tsx index 43f20d3..545c456 100644 --- a/frontend/src/components/kubernetes/DeploymentWorkload.tsx +++ b/frontend/src/components/kubernetes/DeploymentWorkload.tsx @@ -34,7 +34,7 @@ import { Database, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; import { useUserStore } from '@/store'; import { YamlViewer } from './YamlViewer'; diff --git a/frontend/src/components/kubernetes/EventsPage.tsx b/frontend/src/components/kubernetes/EventsPage.tsx index 0d6ea08..a838bbe 100644 --- a/frontend/src/components/kubernetes/EventsPage.tsx +++ b/frontend/src/components/kubernetes/EventsPage.tsx @@ -14,7 +14,7 @@ import { Cell, } from 'recharts'; import { RefreshCw, ChevronRight, Bell, AlertTriangle, Info, Activity, Server, Layers } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; // Color palette for charts const CHART_COLORS = ['#EF4444', '#F59E0B', '#3B82F6', '#8B5CF6', '#EC4899', '#14B8A6', '#F97316', '#6366F1', '#84CC16', '#06B6D4']; diff --git a/frontend/src/components/kubernetes/KubernetesClusterDetail.tsx b/frontend/src/components/kubernetes/KubernetesClusterDetail.tsx index 38c3d2b..48bb50b 100644 --- a/frontend/src/components/kubernetes/KubernetesClusterDetail.tsx +++ b/frontend/src/components/kubernetes/KubernetesClusterDetail.tsx @@ -4,7 +4,7 @@ import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Cloud, XCircle } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { AreaChart, Area, diff --git a/frontend/src/components/kubernetes/KubernetesClusterDialog.tsx b/frontend/src/components/kubernetes/KubernetesClusterDialog.tsx index 7e0bb45..02cf67a 100644 --- a/frontend/src/components/kubernetes/KubernetesClusterDialog.tsx +++ b/frontend/src/components/kubernetes/KubernetesClusterDialog.tsx @@ -12,7 +12,7 @@ import { DialogHeader, DialogTitle, } from '@/components/ui/dialog'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { toast } from 'sonner'; // 名称即 code,只允许英文/数字/连字符 diff --git a/frontend/src/components/kubernetes/KubernetesClusters.tsx b/frontend/src/components/kubernetes/KubernetesClusters.tsx index 1a484ec..e98c763 100644 --- a/frontend/src/components/kubernetes/KubernetesClusters.tsx +++ b/frontend/src/components/kubernetes/KubernetesClusters.tsx @@ -29,7 +29,7 @@ import { Container, Download, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { toast } from 'sonner'; import type { KubernetesCluster } from '@/types'; import { KubernetesClusterDetail } from './KubernetesClusterDetail'; diff --git a/frontend/src/components/kubernetes/KubernetesNodes.tsx b/frontend/src/components/kubernetes/KubernetesNodes.tsx index a15832e..b8dc55d 100644 --- a/frontend/src/components/kubernetes/KubernetesNodes.tsx +++ b/frontend/src/components/kubernetes/KubernetesNodes.tsx @@ -10,7 +10,7 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { RefreshCw, Search, Server, Loader2 } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; export function KubernetesNodes() { const [clusters, setClusters] = useState([]); diff --git a/frontend/src/components/kubernetes/KubernetesWorkloads.tsx b/frontend/src/components/kubernetes/KubernetesWorkloads.tsx index 8b98827..b47a4d0 100644 --- a/frontend/src/components/kubernetes/KubernetesWorkloads.tsx +++ b/frontend/src/components/kubernetes/KubernetesWorkloads.tsx @@ -22,7 +22,7 @@ import { Eye, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; import { DeploymentDetail } from './DeploymentDetail'; diff --git a/frontend/src/components/kubernetes/NamespaceManagementPage.tsx b/frontend/src/components/kubernetes/NamespaceManagementPage.tsx index 48cb4df..74e78ff 100644 --- a/frontend/src/components/kubernetes/NamespaceManagementPage.tsx +++ b/frontend/src/components/kubernetes/NamespaceManagementPage.tsx @@ -15,7 +15,7 @@ import { RefreshCw, Loader2, ChevronRight, Plus, Trash2, Boxes, Container, Network, Shield, Activity, AlertTriangle, CheckCircle2, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; interface NamespaceDetail { name: string; diff --git a/frontend/src/components/kubernetes/NamespaceOverviewPage.tsx b/frontend/src/components/kubernetes/NamespaceOverviewPage.tsx index 83a27fa..a8b8070 100644 --- a/frontend/src/components/kubernetes/NamespaceOverviewPage.tsx +++ b/frontend/src/components/kubernetes/NamespaceOverviewPage.tsx @@ -13,7 +13,7 @@ import { Clock, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; const RESOURCE_LINKS = [ { type: 'deployments', label: 'Deployments', icon: Boxes, desc: '工作负载副本管理' }, diff --git a/frontend/src/components/kubernetes/NamespaceResourcePage.tsx b/frontend/src/components/kubernetes/NamespaceResourcePage.tsx index e73c82f..106b3ab 100644 --- a/frontend/src/components/kubernetes/NamespaceResourcePage.tsx +++ b/frontend/src/components/kubernetes/NamespaceResourcePage.tsx @@ -19,7 +19,7 @@ import { YamlViewer } from './YamlViewer'; import { ResourceVisualEditor } from './ResourceVisualEditor'; import { PodExecTerminal } from './PodExecTerminal'; import { PodFileBrowser } from './PodFileBrowser'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; type ResourceType = diff --git a/frontend/src/components/kubernetes/NodeDetailPage.tsx b/frontend/src/components/kubernetes/NodeDetailPage.tsx index 4b8db69..67c0567 100644 --- a/frontend/src/components/kubernetes/NodeDetailPage.tsx +++ b/frontend/src/components/kubernetes/NodeDetailPage.tsx @@ -20,7 +20,7 @@ import { CheckCircle2, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; export default function NodeDetailPage() { const { clusterCode, nodeName } = useParams<{ clusterCode: string; nodeName: string }>(); diff --git a/frontend/src/components/kubernetes/PodExecTerminal.tsx b/frontend/src/components/kubernetes/PodExecTerminal.tsx index fb05a66..28420d0 100644 --- a/frontend/src/components/kubernetes/PodExecTerminal.tsx +++ b/frontend/src/components/kubernetes/PodExecTerminal.tsx @@ -20,7 +20,7 @@ import { Terminal, Maximize2, Minimize2, X, Loader2, RotateCw, Box, } from 'lucide-react'; import { cn } from '@/lib/utils'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; export interface PodExecTerminalProps { diff --git a/frontend/src/components/kubernetes/PodFileBrowser.tsx b/frontend/src/components/kubernetes/PodFileBrowser.tsx index e80c510..cca1132 100644 --- a/frontend/src/components/kubernetes/PodFileBrowser.tsx +++ b/frontend/src/components/kubernetes/PodFileBrowser.tsx @@ -1,7 +1,7 @@ // PodFileBrowser.tsx — Pod 容器文件浏览器组件 // 作者: Logan import { useState, useEffect, useCallback, useRef } from 'react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { diff --git a/frontend/src/components/kubernetes/PodLogsViewer.tsx b/frontend/src/components/kubernetes/PodLogsViewer.tsx index 3822061..bbf5edd 100644 --- a/frontend/src/components/kubernetes/PodLogsViewer.tsx +++ b/frontend/src/components/kubernetes/PodLogsViewer.tsx @@ -19,7 +19,7 @@ import { RefreshCw, Loader2, Box, History, Clock, Filter, AlertCircle, } from 'lucide-react'; import { cn } from '@/lib/utils'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; /** diff --git a/frontend/src/components/kubernetes/PodMetricsPage.tsx b/frontend/src/components/kubernetes/PodMetricsPage.tsx index a496e75..6ef5165 100644 --- a/frontend/src/components/kubernetes/PodMetricsPage.tsx +++ b/frontend/src/components/kubernetes/PodMetricsPage.tsx @@ -10,7 +10,7 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table'; import { Cpu, HardDrive, RefreshCw, ChevronRight, Activity } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; export default function PodMetricsPage() { const { clusterCode } = useParams<{ clusterCode: string }>(); diff --git a/frontend/src/components/kubernetes/ResourceVisualEditor.tsx b/frontend/src/components/kubernetes/ResourceVisualEditor.tsx index e98afa9..741d8ee 100644 --- a/frontend/src/components/kubernetes/ResourceVisualEditor.tsx +++ b/frontend/src/components/kubernetes/ResourceVisualEditor.tsx @@ -10,7 +10,7 @@ import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { useToast } from '@/hooks/use-toast'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import CodeMirror from '@uiw/react-codemirror'; import { yaml } from '@codemirror/lang-yaml'; import { oneDark } from '@codemirror/theme-one-dark'; diff --git a/frontend/src/components/kubernetes/TopologyView.tsx b/frontend/src/components/kubernetes/TopologyView.tsx index 74d90de..fa97507 100644 --- a/frontend/src/components/kubernetes/TopologyView.tsx +++ b/frontend/src/components/kubernetes/TopologyView.tsx @@ -15,7 +15,7 @@ import { Textarea } from '@/components/ui/textarea'; import { Search, RefreshCw, Loader2, Cloud, Save, Plus, Trash2, Link2, Pencil, RotateCcw, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { toast } from 'sonner'; import type { TopologyNode, TopologyEdge } from '@/types'; diff --git a/frontend/src/components/kubernetes/WorkloadViewPage.tsx b/frontend/src/components/kubernetes/WorkloadViewPage.tsx index ed3eaa4..b721259 100644 --- a/frontend/src/components/kubernetes/WorkloadViewPage.tsx +++ b/frontend/src/components/kubernetes/WorkloadViewPage.tsx @@ -13,7 +13,7 @@ import { ArrowLeft, RotateCcw, FileCode, Activity, Container, Terminal, HardDrive, Minus, Plus, Boxes, Tag, Settings, Database, } from 'lucide-react'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { useToast } from '@/hooks/use-toast'; import { YamlViewer } from './YamlViewer'; import { PodExecTerminal } from './PodExecTerminal'; diff --git a/frontend/src/components/kubernetes/YamlViewer.tsx b/frontend/src/components/kubernetes/YamlViewer.tsx index d03be88..1af1578 100644 --- a/frontend/src/components/kubernetes/YamlViewer.tsx +++ b/frontend/src/components/kubernetes/YamlViewer.tsx @@ -5,7 +5,7 @@ import { useState, useEffect, useMemo} from 'react'; import { X, Copy, Check, Save, Loader2, Sparkles} from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useToast } from '@/hooks/use-toast'; -import { kubernetesApi } from '@/services/api'; +import { kubernetesApi } from '@/api'; import { cleanYAML } from './k8s-yaml-utils'; import CodeMirror from '@uiw/react-codemirror'; import { yaml } from '@codemirror/lang-yaml'; diff --git a/frontend/src/components/layout/MainLayout.tsx b/frontend/src/components/layout/MainLayout.tsx index a714825..a573f98 100644 --- a/frontend/src/components/layout/MainLayout.tsx +++ b/frontend/src/components/layout/MainLayout.tsx @@ -5,7 +5,7 @@ import { useThemeStore, useUserStore } from '@/store'; import { Sidebar } from './Sidebar'; import { Header } from './Header'; import { Breadcrumb } from './Breadcrumb'; -import { userApi } from '@/services/api'; +import { userApi } from '@/api'; /** * MainLayout - 优化后的主布局组件 diff --git a/frontend/src/components/monitor/AlertChannelDialog.tsx b/frontend/src/components/monitor/AlertChannelDialog.tsx index 048a951..9491ff0 100644 --- a/frontend/src/components/monitor/AlertChannelDialog.tsx +++ b/frontend/src/components/monitor/AlertChannelDialog.tsx @@ -15,7 +15,7 @@ import { DialogTitle, } from '@/components/ui/dialog'; import { Plus, Trash2, Loader2 } from 'lucide-react'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; import { CHANNEL_TYPES, getChannelTypeLabel } from './alertShared'; const defaultChannelForm = { name: '', type: 'dingtalk', config: '', enabled: true }; diff --git a/frontend/src/components/monitor/AlertEventsTab.tsx b/frontend/src/components/monitor/AlertEventsTab.tsx index e4c3441..6dec8c8 100644 --- a/frontend/src/components/monitor/AlertEventsTab.tsx +++ b/frontend/src/components/monitor/AlertEventsTab.tsx @@ -13,7 +13,7 @@ import { TableRow, } from '@/components/ui/table'; import { Search, AlertTriangle, Bell, CheckCircle, Loader2 } from 'lucide-react'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; export function AlertEventsTab({ alerts, diff --git a/frontend/src/components/monitor/AlertManager.tsx b/frontend/src/components/monitor/AlertManager.tsx index 1df119f..3349e22 100644 --- a/frontend/src/components/monitor/AlertManager.tsx +++ b/frontend/src/components/monitor/AlertManager.tsx @@ -12,7 +12,7 @@ import { CartesianGrid, Tooltip, } from 'recharts'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; import { AlertEventsTab } from './AlertEventsTab'; import { AlertRulesTab } from './AlertRulesTab'; import { AlertRuleDialog } from './AlertRuleDialog'; diff --git a/frontend/src/components/monitor/AlertRuleDialog.tsx b/frontend/src/components/monitor/AlertRuleDialog.tsx index 571e296..fde1829 100644 --- a/frontend/src/components/monitor/AlertRuleDialog.tsx +++ b/frontend/src/components/monitor/AlertRuleDialog.tsx @@ -13,7 +13,7 @@ import { DialogTitle, } from '@/components/ui/dialog'; import { Loader2 } from 'lucide-react'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; import { parseChannels, getChannelIcon, getChannelTypeLabel } from './alertShared'; const emptyRuleForm = { diff --git a/frontend/src/components/monitor/AlertRulesTab.tsx b/frontend/src/components/monitor/AlertRulesTab.tsx index 90a29ee..3e991f7 100644 --- a/frontend/src/components/monitor/AlertRulesTab.tsx +++ b/frontend/src/components/monitor/AlertRulesTab.tsx @@ -15,7 +15,7 @@ import { } from '@/components/ui/table'; import { Settings, Trash2 } from 'lucide-react'; import { toast } from 'sonner'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; import { renderRuleChannels } from './alertShared'; const COL_SPAN = 9; // 复选框 + 7 数据列 + 操作列 // Logan.Li diff --git a/frontend/src/components/monitor/alert-center/AlertCenter.tsx b/frontend/src/components/monitor/alert-center/AlertCenter.tsx index afa13a3..49ad69c 100644 --- a/frontend/src/components/monitor/alert-center/AlertCenter.tsx +++ b/frontend/src/components/monitor/alert-center/AlertCenter.tsx @@ -16,7 +16,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Switch } from '@/components/ui/switch'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { alertCenterApi, agentApi, alertApi } from '@/services/api'; +import { alertCenterApi, agentApi, alertApi } from '@/api'; import { type Alert, type AlertRule, mapAlert, getSeverityBadge, getStatusBadge, getChannelTypeLabel, diff --git a/frontend/src/components/monitor/alert-center/AlertChannelDialog.tsx b/frontend/src/components/monitor/alert-center/AlertChannelDialog.tsx index ce5e50a..8742fbf 100644 --- a/frontend/src/components/monitor/alert-center/AlertChannelDialog.tsx +++ b/frontend/src/components/monitor/alert-center/AlertChannelDialog.tsx @@ -10,7 +10,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { toast } from 'sonner'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; import type { NotificationChannel } from './alert-center-helpers'; const CHANNEL_TYPES = [ diff --git a/frontend/src/components/monitor/alert-center/AlertChannelsTab.tsx b/frontend/src/components/monitor/alert-center/AlertChannelsTab.tsx index 0db561c..14f7a7a 100644 --- a/frontend/src/components/monitor/alert-center/AlertChannelsTab.tsx +++ b/frontend/src/components/monitor/alert-center/AlertChannelsTab.tsx @@ -6,7 +6,7 @@ import { Badge } from '@/components/ui/badge'; import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; import { type NotificationChannel, getChannelIcon, getChannelTypeLabel, } from './alert-center-helpers'; diff --git a/frontend/src/components/monitor/alert-center/ContactDialog.tsx b/frontend/src/components/monitor/alert-center/ContactDialog.tsx index 7ee6d1d..7caa48f 100644 --- a/frontend/src/components/monitor/alert-center/ContactDialog.tsx +++ b/frontend/src/components/monitor/alert-center/ContactDialog.tsx @@ -10,7 +10,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { toast } from 'sonner'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; import type { Contact } from './alert-center-helpers'; const CHANNEL_OPTIONS = [ diff --git a/frontend/src/components/monitor/alert-center/ContactGroupDialog.tsx b/frontend/src/components/monitor/alert-center/ContactGroupDialog.tsx index a1bfcde..ba3b99a 100644 --- a/frontend/src/components/monitor/alert-center/ContactGroupDialog.tsx +++ b/frontend/src/components/monitor/alert-center/ContactGroupDialog.tsx @@ -9,7 +9,7 @@ import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Badge } from '@/components/ui/badge'; import { toast } from 'sonner'; -import { alertApi } from '@/services/api'; +import { alertApi } from '@/api'; import type { Contact, ContactGroup } from './alert-center-helpers'; export function ContactGroupDialog({ diff --git a/frontend/src/components/monitor/alert-center/SilenceDialog.tsx b/frontend/src/components/monitor/alert-center/SilenceDialog.tsx index 404d3d7..3fdccc3 100644 --- a/frontend/src/components/monitor/alert-center/SilenceDialog.tsx +++ b/frontend/src/components/monitor/alert-center/SilenceDialog.tsx @@ -11,7 +11,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { toast } from 'sonner'; -import { alertCenterApi } from '@/services/api'; +import { alertCenterApi } from '@/api'; // 静默类型中文标签 const SILENCE_TYPE_LABELS: Record = { diff --git a/frontend/src/components/monitor/alert-center/SilenceRuleTab.tsx b/frontend/src/components/monitor/alert-center/SilenceRuleTab.tsx index 1b8d723..ee39e57 100644 --- a/frontend/src/components/monitor/alert-center/SilenceRuleTab.tsx +++ b/frontend/src/components/monitor/alert-center/SilenceRuleTab.tsx @@ -7,7 +7,7 @@ import { Card, CardContent } from '@/components/ui/card'; import { Switch } from '@/components/ui/switch'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { alertCenterApi } from '@/services/api'; +import { alertCenterApi } from '@/api'; import { SilenceDialog } from './SilenceDialog'; const SILENCE_TYPE_LABELS: Record = { diff --git a/frontend/src/components/monitor/dashboard/GrafanaDashboard.tsx b/frontend/src/components/monitor/dashboard/GrafanaDashboard.tsx index b779764..d01fb56 100644 --- a/frontend/src/components/monitor/dashboard/GrafanaDashboard.tsx +++ b/frontend/src/components/monitor/dashboard/GrafanaDashboard.tsx @@ -35,7 +35,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@ import { Label } from '@/components/ui/label'; import { toast } from 'sonner'; import { useUserStore } from '@/store'; -import { dashboardApi, promDatasourceApi, zabbixDatasourceApi, agentApi, serverApi } from '@/services/api'; +import { dashboardApi, promDatasourceApi, zabbixDatasourceApi, agentApi, serverApi } from '@/api'; import { GrafanaPanelContent } from './GrafanaPanelContent'; import { ZabbixDashboard } from './ZabbixDashboard'; import { PrometheusDashboard } from './PrometheusDashboard'; diff --git a/frontend/src/components/monitor/dashboard/HostMonitorDashboard.tsx b/frontend/src/components/monitor/dashboard/HostMonitorDashboard.tsx index 7baa117..0b12ec5 100644 --- a/frontend/src/components/monitor/dashboard/HostMonitorDashboard.tsx +++ b/frontend/src/components/monitor/dashboard/HostMonitorDashboard.tsx @@ -28,7 +28,7 @@ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; -import { serverApi } from '@/services/api'; +import { serverApi } from '@/api'; type SortField = 'hostname' | 'ip' | 'agent_version' | 'agent_status' | 'cpu_usage' | 'memory_usage' | 'disk_usage' | 'region'; type SortDir = 'asc' | 'desc'; diff --git a/frontend/src/components/monitor/dashboard/PrometheusDashboard.tsx b/frontend/src/components/monitor/dashboard/PrometheusDashboard.tsx index dc412b3..7038567 100644 --- a/frontend/src/components/monitor/dashboard/PrometheusDashboard.tsx +++ b/frontend/src/components/monitor/dashboard/PrometheusDashboard.tsx @@ -6,7 +6,7 @@ import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { StatStrip } from '@/components/ui/stat-strip'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { prometheusProxyApi } from '@/services/api'; +import { prometheusProxyApi } from '@/api'; interface Props { dsUrl?: string; } diff --git a/frontend/src/components/monitor/dashboard/ZabbixDashboard.tsx b/frontend/src/components/monitor/dashboard/ZabbixDashboard.tsx index 13bfa7a..182c7c9 100644 --- a/frontend/src/components/monitor/dashboard/ZabbixDashboard.tsx +++ b/frontend/src/components/monitor/dashboard/ZabbixDashboard.tsx @@ -16,7 +16,7 @@ import { import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; -import { zabbixProxyApi } from '@/services/api'; +import { zabbixProxyApi } from '@/api'; interface ZabbixHost { hostid: string; hostname: string; name: string; ip: string; available: string; diff --git a/frontend/src/components/monitor/datasource/PrometheusDatasourceManager.tsx b/frontend/src/components/monitor/datasource/PrometheusDatasourceManager.tsx index df7ea98..30c386a 100644 --- a/frontend/src/components/monitor/datasource/PrometheusDatasourceManager.tsx +++ b/frontend/src/components/monitor/datasource/PrometheusDatasourceManager.tsx @@ -37,7 +37,7 @@ import { } from '@/components/ui/select'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { promDatasourceApi } from '@/services/api'; +import { promDatasourceApi } from '@/api'; interface PromDS { id: number; diff --git a/frontend/src/components/monitor/datasource/ZabbixDatasourceManager.tsx b/frontend/src/components/monitor/datasource/ZabbixDatasourceManager.tsx index cc2a9de..7f3b40f 100644 --- a/frontend/src/components/monitor/datasource/ZabbixDatasourceManager.tsx +++ b/frontend/src/components/monitor/datasource/ZabbixDatasourceManager.tsx @@ -30,7 +30,7 @@ import { } from '@/components/ui/dialog'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { zabbixDatasourceApi } from '@/services/api'; +import { zabbixDatasourceApi } from '@/api'; interface ZabbixDS { id: number; diff --git a/frontend/src/components/monitor/trace/TraceManager.tsx b/frontend/src/components/monitor/trace/TraceManager.tsx index 5d4e049..18f1067 100644 --- a/frontend/src/components/monitor/trace/TraceManager.tsx +++ b/frontend/src/components/monitor/trace/TraceManager.tsx @@ -38,7 +38,7 @@ import { Label } from '@/components/ui/label'; import { Separator } from '@/components/ui/separator'; import { ScrollArea } from '@/components/ui/scroll-area'; import { toast } from 'sonner'; -import { traceApi } from '@/services/api'; +import { traceApi } from '@/api'; interface Trace { id: string; diff --git a/frontend/src/components/server/CloudServerImport.tsx b/frontend/src/components/server/CloudServerImport.tsx index 95a89b6..1003dfc 100644 --- a/frontend/src/components/server/CloudServerImport.tsx +++ b/frontend/src/components/server/CloudServerImport.tsx @@ -25,7 +25,7 @@ import { Search, AlertCircle, } from 'lucide-react'; -import { cloudApi } from '@/services/api'; +import { cloudApi } from '@/api'; interface CloudServerImportProps { open: boolean; @@ -73,7 +73,7 @@ export function CloudServerImport({ open, onClose }: CloudServerImportProps) { useEffect(() => { if (open) { loadAccounts(); - import('@/services/api').then(({ credentialApi }) => { + import('@/api').then(({ credentialApi }) => { credentialApi.list().then(( res: any) => setCredentials(res?.list || [])) .catch(() => setCredentials([])); }); diff --git a/frontend/src/components/server/ExcelServerImport.tsx b/frontend/src/components/server/ExcelServerImport.tsx index b7e26b9..79d638a 100644 --- a/frontend/src/components/server/ExcelServerImport.tsx +++ b/frontend/src/components/server/ExcelServerImport.tsx @@ -23,7 +23,7 @@ import { ChevronLeft, Loader2, } from 'lucide-react'; -import { regionApi, serverApi, credentialApi } from '@/services/api'; +import { regionApi, serverApi, credentialApi } from '@/api'; interface RegionOption { id: string; diff --git a/frontend/src/components/server/ServerFileBrowser.tsx b/frontend/src/components/server/ServerFileBrowser.tsx index d96bdba..940a2cc 100644 --- a/frontend/src/components/server/ServerFileBrowser.tsx +++ b/frontend/src/components/server/ServerFileBrowser.tsx @@ -26,7 +26,7 @@ import { Minimize2, } from 'lucide-react'; import { cn } from '@/lib/utils'; -import { serverApi } from '@/services/api'; +import { serverApi } from '@/api'; interface FileItem { name: string; diff --git a/frontend/src/components/server/ServerForm.tsx b/frontend/src/components/server/ServerForm.tsx index e4c8959..ef49e02 100644 --- a/frontend/src/components/server/ServerForm.tsx +++ b/frontend/src/components/server/ServerForm.tsx @@ -25,7 +25,7 @@ import { SelectValue, } from '@/components/ui/select'; import { Server, ChevronDown, Loader2, Save, Key, Shield } from 'lucide-react'; -import { credentialApi } from '@/services/api'; +import { credentialApi } from '@/api'; // 表单数据结构 export interface ServerFormData { diff --git a/frontend/src/components/server/ServerManager.tsx b/frontend/src/components/server/ServerManager.tsx index 6cf4228..bdd9410 100644 --- a/frontend/src/components/server/ServerManager.tsx +++ b/frontend/src/components/server/ServerManager.tsx @@ -39,7 +39,7 @@ import { ChevronLeft, ChevronRight, } from 'lucide-react'; -import { serverApi } from '@/services/api'; +import { serverApi } from '@/api'; import { ServerStatsStrip } from './ServerStatsStrip'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { toast } from 'sonner'; diff --git a/frontend/src/components/server/TerminalDialog.tsx b/frontend/src/components/server/TerminalDialog.tsx index c77244f..76d5950 100644 --- a/frontend/src/components/server/TerminalDialog.tsx +++ b/frontend/src/components/server/TerminalDialog.tsx @@ -13,7 +13,7 @@ import { Maximize2, Minimize2, X, Shield} from 'lucide-react'; import { cn } from '@/lib/utils'; import { attachTerminalResize, fitTerminal, mountXterm } from '@/lib/xterm-utils'; import { useUserStore } from '@/store'; -import { credentialApi, serverCredentialApi } from '@/services/api'; +import { credentialApi, serverCredentialApi } from '@/api'; import { toast } from 'sonner'; interface TerminalDialogProps { diff --git a/frontend/src/components/server/WebShell.tsx b/frontend/src/components/server/WebShell.tsx index ace496f..b8dc821 100644 --- a/frontend/src/components/server/WebShell.tsx +++ b/frontend/src/components/server/WebShell.tsx @@ -29,7 +29,7 @@ import { import { Terminal as XTerm } from 'xterm'; import { FitAddon } from 'xterm-addon-fit'; import 'xterm/css/xterm.css'; -import { serverApi } from '@/services/api'; +import { serverApi } from '@/api'; import { useUserStore } from '@/store'; interface TerminalSession { diff --git a/frontend/src/components/system/CredentialManager.tsx b/frontend/src/components/system/CredentialManager.tsx index 2efcb59..1149f8a 100644 --- a/frontend/src/components/system/CredentialManager.tsx +++ b/frontend/src/components/system/CredentialManager.tsx @@ -16,7 +16,7 @@ import { import { Plus, Trash2, Edit3, Key, Globe, Shield, Eye, EyeOff, RefreshCw, } from 'lucide-react'; -import { credentialApi } from '@/services/api'; +import { credentialApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { toast } from 'sonner'; diff --git a/frontend/src/components/system/CsvImportDialog.tsx b/frontend/src/components/system/CsvImportDialog.tsx index a1a15c4..a46a58b 100644 --- a/frontend/src/components/system/CsvImportDialog.tsx +++ b/frontend/src/components/system/CsvImportDialog.tsx @@ -17,7 +17,7 @@ import { DialogTitle, } from '@/components/ui/dialog'; import { Upload, Download, CheckCircle, XCircle } from 'lucide-react'; -import { userApi } from '@/services/api'; +import { userApi } from '@/api'; interface CsvImportDialogProps { importDialogOpen: 'csv' | 'ldap' | null; diff --git a/frontend/src/components/system/ReplayDialog.tsx b/frontend/src/components/system/ReplayDialog.tsx index 0516cc8..b2dfe94 100644 --- a/frontend/src/components/system/ReplayDialog.tsx +++ b/frontend/src/components/system/ReplayDialog.tsx @@ -10,7 +10,7 @@ import { DialogTitle, } from '@/components/ui/dialog'; import { Loader2 } from 'lucide-react'; -import { terminalSessionApi } from '@/services/api'; +import { terminalSessionApi } from '@/api'; interface ReplayDialogProps { open: boolean; diff --git a/frontend/src/components/system/SystemLogsTab.tsx b/frontend/src/components/system/SystemLogsTab.tsx index 3dcd6d1..7d5d2e5 100644 --- a/frontend/src/components/system/SystemLogsTab.tsx +++ b/frontend/src/components/system/SystemLogsTab.tsx @@ -12,7 +12,7 @@ import { TableHeader, TableRow, } from '@/components/ui/table'; -import { auditApi } from '@/services/api'; +import { auditApi } from '@/api'; import type { OperationLog } from '@/types'; interface SystemLogsTabProps { diff --git a/frontend/src/components/system/SystemManager.tsx b/frontend/src/components/system/SystemManager.tsx index ba50e72..8428f22 100644 --- a/frontend/src/components/system/SystemManager.tsx +++ b/frontend/src/components/system/SystemManager.tsx @@ -4,7 +4,7 @@ import { useConfirm } from '@/components/ui/confirm-dialog'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Badge } from '@/components/ui/badge'; import { CheckCircle, XCircle, Users, Shield, Settings } from 'lucide-react'; -import { userApi } from '@/services/api'; +import { userApi } from '@/api'; import type { Role } from '@/types'; import { SystemUserTab } from './SystemUserTab'; import { SystemRolesTab } from './SystemRolesTab'; diff --git a/frontend/src/components/system/SystemRolesTab.tsx b/frontend/src/components/system/SystemRolesTab.tsx index dcb4e1e..251eb82 100644 --- a/frontend/src/components/system/SystemRolesTab.tsx +++ b/frontend/src/components/system/SystemRolesTab.tsx @@ -7,7 +7,7 @@ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Plus, Shield, ShieldCheck, Edit, Eye, Trash2, Lock, Star } from 'lucide-react'; -import { userApi } from '@/services/api'; +import { userApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import type { Role } from '@/types'; import { RoleFormDialog, type RoleFormData, type PermissionOption } from './RoleFormDialog'; diff --git a/frontend/src/components/system/UserFormDialog.tsx b/frontend/src/components/system/UserFormDialog.tsx index 45f81bf..7dcb2fe 100644 --- a/frontend/src/components/system/UserFormDialog.tsx +++ b/frontend/src/components/system/UserFormDialog.tsx @@ -17,7 +17,7 @@ import { SelectValue, } from '@/components/ui/select'; import { User } from 'lucide-react'; -import { userApi } from '@/services/api'; +import { userApi } from '@/api'; export interface UserFormData { username: string; diff --git a/frontend/src/components/system/useLdapManagement.ts b/frontend/src/components/system/useLdapManagement.ts index 43de3e2..647f773 100644 --- a/frontend/src/components/system/useLdapManagement.ts +++ b/frontend/src/components/system/useLdapManagement.ts @@ -1,7 +1,7 @@ import { useState } from 'react'; import { toast } from 'sonner'; import { useConfirm } from '@/components/ui/confirm-dialog'; -import { ldapApi } from '@/services/api'; +import { ldapApi } from '@/api'; import type { LdapFormData } from './SystemSettingsTab'; /** diff --git a/frontend/src/hooks/api/useHostMonitor.ts b/frontend/src/hooks/api/useHostMonitor.ts index 772dc93..de29076 100644 --- a/frontend/src/hooks/api/useHostMonitor.ts +++ b/frontend/src/hooks/api/useHostMonitor.ts @@ -1,7 +1,7 @@ // 主机监控数据 — TanStack Query // Logan.Li import { useQuery } from '@tanstack/react-query'; -import { agentApi } from '@/services/api'; +import { agentApi } from '@/api'; import { queryKeys } from './queryKeys'; function unwrapList(data: unknown): T[] { diff --git a/frontend/src/hooks/api/useTerminalSessions.ts b/frontend/src/hooks/api/useTerminalSessions.ts index c29251e..e46cdd3 100644 --- a/frontend/src/hooks/api/useTerminalSessions.ts +++ b/frontend/src/hooks/api/useTerminalSessions.ts @@ -1,7 +1,7 @@ // 终端会话列表 — TanStack Query // Logan.Li import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; -import { terminalSessionApi } from '@/services/api'; +import { terminalSessionApi } from '@/api'; import { queryKeys } from './queryKeys'; export interface TerminalSession { diff --git a/frontend/src/pages/ApprovalCategoryPage.tsx b/frontend/src/pages/ApprovalCategoryPage.tsx index daa366f..3968be3 100644 --- a/frontend/src/pages/ApprovalCategoryPage.tsx +++ b/frontend/src/pages/ApprovalCategoryPage.tsx @@ -13,7 +13,7 @@ import { } from '@/components/ui/table'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Plus, Search, RefreshCw, Clock, CheckCircle, XCircle, FileText, Loader2, Eye, Check, XIcon, User, ChevronRight, Play } from 'lucide-react'; -import { approvalApi } from '@/services/api'; +import { approvalApi } from '@/api'; import { toast } from 'sonner'; export interface FormField { diff --git a/frontend/src/pages/ApprovalWorkflowPage.tsx b/frontend/src/pages/ApprovalWorkflowPage.tsx index 6ee0df1..92e8665 100644 --- a/frontend/src/pages/ApprovalWorkflowPage.tsx +++ b/frontend/src/pages/ApprovalWorkflowPage.tsx @@ -7,7 +7,7 @@ import { import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { toast } from 'sonner'; -import { approvalWorkflowApi, userApi } from '@/services/api'; +import { approvalWorkflowApi, userApi } from '@/api'; /* ------------------------------------------------------------------ */ /* Types */ diff --git a/frontend/src/pages/AuditOperationsTab.tsx b/frontend/src/pages/AuditOperationsTab.tsx index fc85f90..d7c956b 100644 --- a/frontend/src/pages/AuditOperationsTab.tsx +++ b/frontend/src/pages/AuditOperationsTab.tsx @@ -20,7 +20,7 @@ import { Eye, X, } from 'lucide-react'; -import { auditApi } from '@/services/api'; +import { auditApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import type { OperationLog } from '@/types'; diff --git a/frontend/src/pages/HostMonitor.tsx b/frontend/src/pages/HostMonitor.tsx index 6eb69bf..9b069a0 100644 --- a/frontend/src/pages/HostMonitor.tsx +++ b/frontend/src/pages/HostMonitor.tsx @@ -3,7 +3,7 @@ import { useState, useEffect, useMemo } from 'react'; import { useSearchParams } from 'react-router-dom'; import { useQueryClient } from '@tanstack/react-query'; -import { agentApi } from '@/services/api'; +import { agentApi } from '@/api'; import { useHostList, useHostHistory, usePortPolicy } from '@/hooks/api/useHostMonitor'; import { queryKeys } from '@/hooks/api/queryKeys'; import { Card, CardContent } from '@/components/ui/card'; diff --git a/frontend/src/pages/LoginLogsTab.tsx b/frontend/src/pages/LoginLogsTab.tsx index 78573a8..717bb16 100644 --- a/frontend/src/pages/LoginLogsTab.tsx +++ b/frontend/src/pages/LoginLogsTab.tsx @@ -13,7 +13,7 @@ import { TableRow, } from '@/components/ui/table'; import { Search, RefreshCw, LogIn, Monitor, Globe } from 'lucide-react'; -import { loginLogApi } from '@/services/api'; +import { loginLogApi } from '@/api'; interface LoginLog { id: number; diff --git a/frontend/src/pages/MetricsExplorer.tsx b/frontend/src/pages/MetricsExplorer.tsx index 4b97386..27b71c2 100644 --- a/frontend/src/pages/MetricsExplorer.tsx +++ b/frontend/src/pages/MetricsExplorer.tsx @@ -5,7 +5,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@ import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Activity, Search, Filter, BarChart3, Cpu, HardDrive, Network, Database, Plus } from 'lucide-react'; -import { metricsApi } from '@/services/api'; +import { metricsApi } from '@/api'; interface _MetricName { name: string; diff --git a/frontend/src/pages/MiddlewareMonitor.tsx b/frontend/src/pages/MiddlewareMonitor.tsx index bdc2c94..f8f14dd 100644 --- a/frontend/src/pages/MiddlewareMonitor.tsx +++ b/frontend/src/pages/MiddlewareMonitor.tsx @@ -3,7 +3,7 @@ import { useState, useEffect, useCallback } from 'react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Database, Server, Activity, Loader2, Circle } from 'lucide-react'; -import { metricsApi } from '@/services/api'; +import { metricsApi } from '@/api'; interface TargetInfo { id: number; diff --git a/frontend/src/pages/SNMPMonitor.tsx b/frontend/src/pages/SNMPMonitor.tsx index 577227a..cb01cde 100644 --- a/frontend/src/pages/SNMPMonitor.tsx +++ b/frontend/src/pages/SNMPMonitor.tsx @@ -30,7 +30,7 @@ import { TableRow, } from '@/components/ui/table'; import { Radio, Router, HardDrive, Plus, Trash2 } from 'lucide-react'; -import { snmpApi } from '@/services/api'; +import { snmpApi } from '@/api'; // ---------- types ---------- interface SnmpStats { diff --git a/frontend/src/pages/SiteMonitor.tsx b/frontend/src/pages/SiteMonitor.tsx index 4a9a7e3..94e3da1 100644 --- a/frontend/src/pages/SiteMonitor.tsx +++ b/frontend/src/pages/SiteMonitor.tsx @@ -43,7 +43,7 @@ import { Activity, } from 'lucide-react'; import { toast } from 'sonner'; -import { siteApi } from '@/services/api'; +import { siteApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; // 拨测协议类型(与后端 model 对齐:http, https, tcp, dns, ping) diff --git a/frontend/src/pages/TerminalAuditTab.tsx b/frontend/src/pages/TerminalAuditTab.tsx index c43cea3..3c9478d 100644 --- a/frontend/src/pages/TerminalAuditTab.tsx +++ b/frontend/src/pages/TerminalAuditTab.tsx @@ -25,7 +25,7 @@ import { Timer, TimerOff, } from 'lucide-react'; -import { terminalSessionApi, sessionCommandApi } from '@/services/api'; +import { terminalSessionApi, sessionCommandApi } from '@/api'; import { useConfirm } from '@/components/ui/confirm-dialog'; import { ReplayDialog } from '@/components/system/ReplayDialog'; import { LiveMonitorDialog } from '@/components/system/LiveMonitorDialog'; diff --git a/frontend/src/pages/host-monitor/HealthProbeSection.tsx b/frontend/src/pages/host-monitor/HealthProbeSection.tsx index 7dc1c56..692aea3 100644 --- a/frontend/src/pages/host-monitor/HealthProbeSection.tsx +++ b/frontend/src/pages/host-monitor/HealthProbeSection.tsx @@ -1,7 +1,7 @@ // 健康探针 Tab + 对话框 // Logan.Li import { useState } from 'react'; import { useQueryClient } from '@tanstack/react-query'; -import { agentApi } from '@/services/api'; +import { agentApi } from '@/api'; import { useHealthProbes } from '@/hooks/api/useHostMonitor'; import { queryKeys } from '@/hooks/api/queryKeys'; import { Card, CardContent } from '@/components/ui/card'; diff --git a/frontend/src/services/api/kubernetes.ts b/frontend/src/services/api/kubernetes.ts deleted file mode 100644 index 6fd65f3..0000000 --- a/frontend/src/services/api/kubernetes.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Kubernetes API — 子模块 re-export(保持 @/services/api 导入路径不变) // Logan.Li - -export { kubernetesApi } from './kubernetes/index'; \ No newline at end of file diff --git a/frontend/src/lib/export-utils.ts b/frontend/src/utils/export.ts similarity index 100% rename from frontend/src/lib/export-utils.ts rename to frontend/src/utils/export.ts diff --git a/frontend/src/utils/index.ts b/frontend/src/utils/index.ts new file mode 100644 index 0000000..0a9854e --- /dev/null +++ b/frontend/src/utils/index.ts @@ -0,0 +1,14 @@ +// 通用工具出口 — 对齐 Vue 后台惯例(request / export 等) // Logan.Li + +export { + http, + default as request, + getApiBase, + buildApiUrl, + getWsBase, + getAuthToken, + type ApiResponse, + type ListResponse, +} from './request'; + +export { exportAsCSV, exportAsJSON } from './export'; \ No newline at end of file diff --git a/frontend/src/services/http.ts b/frontend/src/utils/request.ts similarity index 100% rename from frontend/src/services/http.ts rename to frontend/src/utils/request.ts