This commit is contained in:
2026-04-09 00:02:42 +08:00
parent ac759da246
commit 2ceb18cbee
14 changed files with 3222 additions and 673 deletions

440
src/api/ops/ipam.ts Normal file
View File

@@ -0,0 +1,440 @@
import { request } from '@/api/request'
/** IP地址运行状态 */
export type IPStatus = 'online' | 'offline' | 'unknown'
/** IP地址分配状态 */
export type AllocationStatus = 'allocated' | 'unallocated' | 'reserved'
/** IP地址使用状态 */
export type UsageStatus = 'used' | 'unused' | 'used_within_30d' | 'used_before_30d'
/** IP来源类型 */
export type SourceType = 'scan' | 'dhcp' | 'manual'
/** 概览统计 */
export interface IPAMOverview {
total_ip: number
allocated: number
unallocated: number
reserved: number
used: number
unused: number
used_within_30d: number
used_before_30d: number
conflict_total: number
conflict_unresolved: number
subnet_usage_top10?: SubnetUsageItem[]
}
/** 子网使用率项 */
export interface SubnetUsageItem {
subnet_id: number
cidr: string
name: string
total: number
used: number
usage_percent: number
}
/** IP地址项 */
export interface IPAddressItem {
id: number
ip_address: string
status: IPStatus
allocation_status: AllocationStatus
usage_status: UsageStatus
subnet_id: number
subnet_name?: string
subnet_cidr?: string
hostname: string
mac_address: string
last_used_at: string
source_type: SourceType
owner_type: string
owner_id: number
remark: string
tags: string
created_at: string
updated_at: string
}
/** IP地址列表参数 */
export interface IPAddressListParams {
page?: number
size?: number
scan_id?: number
subnet_id?: number
status?: IPStatus
allocation_status?: AllocationStatus
usage_status?: UsageStatus
keyword?: string
}
/** IP地址列表响应 */
export interface IPAddressListResponse {
total: number
page: number
page_size: number
data: IPAddressItem[]
}
/** IP地址表单数据 */
export interface IPAddressFormData {
ip_address?: string
status?: IPStatus
allocation_status?: AllocationStatus
subnet_id?: number
hostname?: string
mac_address?: string
source_type?: SourceType
owner_type?: string
owner_id?: number
remark?: string
tags?: string
}
/** IP分组项 */
export interface IPGroupItem {
id: number
name: string
parent_id: number
description: string
is_default: boolean
created_at: string
updated_at: string
children?: IPGroupItem[]
}
/** IP分组列表参数 */
export interface IPGroupListParams {
parent_id?: number
keyword?: string
}
/** IP分组列表响应 */
export interface IPGroupListResponse {
data: IPGroupItem[]
}
/** IP分组表单数据 */
export interface IPGroupFormData {
name?: string
parent_id?: number
description?: string
}
/** IP子网项 */
export interface IPSubnetItem {
id: number
cidr: string
name: string
group_id: number
group_name?: string
gateway: string
vlan: string
total: number
used: number
available: number
reserved_ranges_json: string
description: string
created_at: string
updated_at: string
}
/** IP子网列表参数 */
export interface IPSubnetListParams {
page?: number
size?: number
group_id?: number
keyword?: string
}
/** IP子网列表响应 */
export interface IPSubnetListResponse {
total: number
page: number
page_size: number
data: IPSubnetItem[]
}
/** IP子网表单数据 */
export interface IPSubnetFormData {
cidr?: string
name?: string
group_id?: number
gateway?: string
vlan?: string
reserved_ranges_json?: string
description?: string
}
/** DHCP租约项 */
export interface DHCPLeaseItem {
id: number
ip_address: string
mac_address: string
hostname: string
subnet_id: number
subnet_name?: string
lease_start: string
lease_end: string
dhcp_server: string
status: string
created_at: string
updated_at: string
}
/** DHCP租约列表参数 */
export interface DHCPLeaseListParams {
page?: number
size?: number
subnet_id?: number
keyword?: string
}
/** DHCP租约列表响应 */
export interface DHCPLeaseListResponse {
total: number
page: number
page_size: number
data: DHCPLeaseItem[]
}
/** DHCP租约表单数据 */
export interface DHCPLeaseFormData {
ip_address?: string
mac_address?: string
hostname?: string
subnet_id?: number
lease_start?: string
lease_end?: string
dhcp_server?: string
status?: string
}
/** IP冲突项 */
export interface IPConflictItem {
id: number
ip_address: string
mac_address_1: string
mac_address_2: string
hostname_1: string
hostname_2: string
subnet_id: number
subnet_name?: string
detected_at: string
resolved_at: string
status: string
evidence_json: string
created_at: string
updated_at: string
}
/** IP冲突列表参数 */
export interface IPConflictListParams {
page?: number
size?: number
subnet_id?: number
status?: string
keyword?: string
}
/** IP冲突列表响应 */
export interface IPConflictListResponse {
total: number
page: number
page_size: number
data: IPConflictItem[]
}
/** IP冲突表单数据 */
export interface IPConflictFormData {
ip_address?: string
mac_address_1?: string
mac_address_2?: string
hostname_1?: string
hostname_2?: string
subnet_id?: number
evidence_json?: string
status?: string
}
/** IP变更项 */
export interface IPChangeItem {
id: number
ip_address: string
change_type: string
before_json: string
after_json: string
subnet_id: number
subnet_name?: string
changed_by: string
changed_at: string
remark: string
created_at: string
}
/** IP变更列表参数 */
export interface IPChangeListParams {
page?: number
size?: number
subnet_id?: number
change_type?: string
keyword?: string
}
/** IP变更列表响应 */
export interface IPChangeListResponse {
total: number
page: number
page_size: number
data: IPChangeItem[]
}
/** IP变更表单数据 */
export interface IPChangeFormData {
ip_address?: string
change_type?: string
before_json?: string
after_json?: string
subnet_id?: number
changed_by?: string
remark?: string
}
/** IP异常项 */
export interface IPAnomalyItem {
id: number
ip_address: string
anomaly_type: string
subnet_id: number
subnet_name?: string
detail_json: string
detected_at: string
status: string
remark: string
created_at: string
updated_at: string
}
/** IP异常列表参数 */
export interface IPAnomalyListParams {
page?: number
size?: number
subnet_id?: number
anomaly_type?: string
status?: string
keyword?: string
}
/** IP异常列表响应 */
export interface IPAnomalyListResponse {
total: number
page: number
page_size: number
data: IPAnomalyItem[]
}
/** IP异常表单数据 */
export interface IPAnomalyFormData {
ip_address?: string
anomaly_type?: string
subnet_id?: number
detail_json?: string
status?: string
remark?: string
}
/** ========== 概览 API ========== */
/** 获取IPAM概览统计 */
export const fetchIPAMOverview = () => request.get<IPAMOverview>('/DC-Control/v1/ipam/overview')
/** ========== IP地址 API ========== */
/** 获取IP地址列表 */
export const fetchIPAddressList = (params?: IPAddressListParams) =>
request.get<IPAddressListResponse>('/DC-Control/v1/ipaddresses', { params })
/** 获取IP地址详情 */
export const fetchIPAddressDetail = (id: number) => request.get<IPAddressItem>(`/DC-Control/v1/ipaddresses/${id}`)
/** 创建IP地址 */
export const createIPAddress = (data: IPAddressFormData) => request.post<IPAddressItem>('/DC-Control/v1/ipaddresses', data)
/** 更新IP地址 */
export const updateIPAddress = (id: number, data: Partial<IPAddressFormData>) =>
request.put<{ message: string }>(`/DC-Control/v1/ipaddresses/${id}`, data)
/** 删除IP地址 */
export const deleteIPAddress = (id: number) => request.delete<{ message: string }>(`/DC-Control/v1/ipaddresses/${id}`)
/** ========== IP分组 API ========== */
/** 获取IP分组列表树形 */
export const fetchIPGroupList = (params?: IPGroupListParams) => request.get<IPGroupListResponse>('/DC-Control/v1/ip-groups', { params })
/** 创建IP分组 */
export const createIPGroup = (data: IPGroupFormData) => request.post<IPGroupItem>('/DC-Control/v1/ip-groups', data)
/** 更新IP分组 */
export const updateIPGroup = (id: number, data: Partial<IPGroupFormData>) =>
request.put<{ message: string }>(`/DC-Control/v1/ip-groups/${id}`, data)
/** 删除IP分组 */
export const deleteIPGroup = (id: number) => request.delete<{ message: string }>(`/DC-Control/v1/ip-groups/${id}`)
/** ========== IP子网 API ========== */
/** 获取IP子网列表 */
export const fetchIPSubnetList = (params?: IPSubnetListParams) => request.get<IPSubnetListResponse>('/DC-Control/v1/ip-subnets', { params })
/** 获取IP子网详情 */
export const fetchIPSubnetDetail = (id: number) => request.get<IPSubnetItem>(`/DC-Control/v1/ip-subnets/${id}`)
/** 创建IP子网 */
export const createIPSubnet = (data: IPSubnetFormData) => request.post<IPSubnetItem>('/DC-Control/v1/ip-subnets', data)
/** 更新IP子网 */
export const updateIPSubnet = (id: number, data: Partial<IPSubnetFormData>) =>
request.put<{ message: string }>(`/DC-Control/v1/ip-subnets/${id}`, data)
/** 删除IP子网 */
export const deleteIPSubnet = (id: number) => request.delete<{ message: string }>(`/DC-Control/v1/ip-subnets/${id}`)
/** ========== DHCP租约 API ========== */
/** 获取DHCP租约列表 */
export const fetchDHCPLeaseList = (params?: DHCPLeaseListParams) =>
request.get<DHCPLeaseListResponse>('/DC-Control/v1/ipam/dhcp-leases', { params })
/** 创建DHCP租约 */
export const createDHCPLease = (data: DHCPLeaseFormData) => request.post<DHCPLeaseItem>('/DC-Control/v1/ipam/dhcp-leases', data)
/** ========== IP冲突 API ========== */
/** 获取IP冲突列表 */
export const fetchIPConflictList = (params?: IPConflictListParams) =>
request.get<IPConflictListResponse>('/DC-Control/v1/ipam/conflicts', { params })
/** 创建IP冲突记录 */
export const createIPConflict = (data: IPConflictFormData) => request.post<IPConflictItem>('/DC-Control/v1/ipam/conflicts', data)
/** ========== IP变更 API ========== */
/** 获取IP变更列表 */
export const fetchIPChangeList = (params?: IPChangeListParams) =>
request.get<IPChangeListResponse>('/DC-Control/v1/ipam/changes', { params })
/** 创建IP变更记录 */
export const createIPChange = (data: IPChangeFormData) => request.post<IPChangeItem>('/DC-Control/v1/ipam/changes', data)
/** ========== IP异常 API ========== */
/** 获取IP异常列表 */
export const fetchIPAnomalyList = (params?: IPAnomalyListParams) =>
request.get<IPAnomalyListResponse>('/DC-Control/v1/ipam/anomalies', { params })
/** 创建IP异常记录 */
export const createIPAnomaly = (data: IPAnomalyFormData) => request.post<IPAnomalyItem>('/DC-Control/v1/ipam/anomalies', data)