This commit is contained in:
zxr
2026-04-09 13:52:10 +08:00
parent 2ceb18cbee
commit 86bf1dd9b3
11 changed files with 1128 additions and 224 deletions

91
src/api/ops/discovery.ts Normal file
View File

@@ -0,0 +1,91 @@
import { request } from '@/api/request'
/** 与后端 discovery/summary 对齐 */
export interface DiscoverySummary {
device_total_current: number
online_current: number
offline_current: number
other_status_current: number
primary_scan_ids: number[]
last_run?: DiscoveryScanRun | null
}
export interface DiscoveryScanRun {
id: number
scan_id: number
run_type: string
status: string
started_at: string
finished_at?: string | null
device_total: number
online_count: number
offline_count: number
new_count: number
error_message?: string
trigger_by: string
}
export interface DiscoveryDeviceRow {
id: number
ip_address: string
scan_id?: number
run_id?: number
status: string
mac_address?: string
hostname?: string
device_type?: string
manufacturer?: string
discovery_methods?: string
last_seen_time?: string
last_scan_time?: string
first_seen_time?: string
}
export interface DiscoveryDevicesResponse {
scope: string
scan_id?: number
primary_scan_ids?: number[]
total: number
page: number
page_size: number
data: DiscoveryDeviceRow[]
}
export interface DiscoveryScanRunsResponse {
total: number
page: number
page_size: number
data: DiscoveryScanRun[]
}
export interface DiscoveryConfig {
id: number
primary_scan_ids: number[]
primary_scan_ids_raw?: string
}
export const fetchDiscoverySummary = () =>
request.get<{ code: number; details?: DiscoverySummary }>('/DC-Control/v1/discovery/summary')
export const fetchDiscoveryDevices = (params?: {
scope?: 'current' | 'raw'
scan_id?: number
page?: number
size?: number
status?: string
keyword?: string
}) =>
request.get<{ code: number; details?: DiscoveryDevicesResponse }>('/DC-Control/v1/discovery/devices', {
params,
})
export const fetchDiscoveryScanRuns = (params?: { scan_id?: number; page?: number; size?: number }) =>
request.get<{ code: number; details?: DiscoveryScanRunsResponse }>('/DC-Control/v1/discovery/scan-runs', {
params,
})
export const fetchDiscoveryConfig = () =>
request.get<{ code: number; details?: DiscoveryConfig }>('/DC-Control/v1/discovery/config')
export const updateDiscoveryConfig = (data: { primary_scan_ids: number[] }) =>
request.put<{ code: number; details?: DiscoveryConfig }>('/DC-Control/v1/discovery/config', data)

58
src/api/ops/ipScan.ts Normal file
View File

@@ -0,0 +1,58 @@
import { request } from '@/api/request'
/** IP 扫描任务(与 dc-control ControlIpScan 对齐) */
export interface IpScanTask {
id: number
name: string
type: string
description?: string
target_range: string
port_range?: string
config?: string
timeout?: number
concurrency?: number
cron_expr?: string
status?: string
server_id: number
last_scan_time?: string
next_scan_time?: string
last_scan_status?: string
total_count?: number
online_count?: number
scan_count?: number
enable?: boolean
created_at?: string
updated_at?: string
}
export interface IpScanListResponse {
total: number
page: number
page_size: number
data: IpScanTask[]
}
/** 扫描任务分页列表 */
export const fetchIpScanList = (params?: { page?: number; size?: number; keyword?: string }) =>
request.get<{ code: number; details?: IpScanListResponse; message?: string }>('/DC-Control/v1/ipscans', {
params,
})
export const fetchIpScanDetail = (id: number) =>
request.get<{ code: number; details?: IpScanTask; message?: string }>(`/DC-Control/v1/ipscans/${id}`)
/** 触发一次扫描(会创建 scan_run 并调用 Agent */
export const triggerIpScan = (id: number) =>
request.post<{ code: number; message?: string }>(`/DC-Control/v1/ipscans/${id}/trigger`)
/** 创建扫描任务 */
export const createIpScan = (data: Partial<IpScanTask>) =>
request.post<{ code: number; details?: IpScanTask; message?: string }>('/DC-Control/v1/ipscans', data)
/** 更新扫描任务 */
export const updateIpScan = (id: number, data: Partial<IpScanTask>) =>
request.put<{ code: number; message?: string }>(`/DC-Control/v1/ipscans/${id}`, data)
/** 删除扫描任务 */
export const deleteIpScan = (id: number) =>
request.delete<{ code: number; message?: string }>(`/DC-Control/v1/ipscans/${id}`)

View File

@@ -75,6 +75,10 @@ export interface TopologyNode {
parentId?: string | null
level?: number
position?: { x: number; y: number }
/** 设计 v2.0:绑定资产 / 子拓扑 */
ref_type?: string
ref_id?: number
sub_topology_id?: number | null
created_at?: string
updated_at?: string
}
@@ -155,6 +159,13 @@ export const deleteNode = (topologyId: number, nodeId: string) =>
export const updateNodesPositions = (topologyId: number, positions: Array<{ id: string; position: { x: number; y: number } }>) =>
request.put(`/DC-Control/v1/topologies/${topologyId}/nodes/positions`, { positions })
/** 按资产 ID 批量导入节点(后端生成 node_id=asset-{id} 与 ref_type=asset */
export const batchImportAssetNodes = (topologyId: number, asset_ids: number[]) =>
request.post<{ code: number; details?: { message: string; imported: number } }>(
`/DC-Control/v1/topologies/${topologyId}/nodes/batch-import`,
{ asset_ids },
)
// ==================== 链路管理接口 ====================
/** 获取链路列表 */