diff --git a/src/api/ops/ipScan.ts b/src/api/ops/ipScan.ts index 80ca156..b737a08 100644 --- a/src/api/ops/ipScan.ts +++ b/src/api/ops/ipScan.ts @@ -21,6 +21,7 @@ export interface IpScanTask { online_count?: number scan_count?: number enable?: boolean + priority?: number created_at?: string updated_at?: string } @@ -41,9 +42,23 @@ export const fetchIpScanList = (params?: { page?: number; size?: number; keyword export const fetchIpScanDetail = (id: number) => request.get<{ code: number; details?: IpScanTask; message?: string }>(`/DC-Control/v1/ipscans/${id}`) -/** 触发一次扫描(会创建 scan_run 并调用 Agent) */ +/** 触发一次扫描(会创建 scan_run 并调用 Agent);成功体见文档 { message: "scan triggered" } */ export const triggerIpScan = (id: number) => - request.post<{ code: number; message?: string }>(`/DC-Control/v1/ipscans/${id}/trigger`) + request.post<{ code: number; details?: { message?: string }; message?: string }>( + `/DC-Control/v1/ipscans/${id}/trigger`, + ) + +/** 启动扫描任务(文档:将 status 置为 running,与 Cron 调度语义相关) */ +export const startIpScan = (id: number) => + request.post<{ code: number; details?: { message?: string }; message?: string }>( + `/DC-Control/v1/ipscans/${id}/start`, + ) + +/** 停止扫描任务(文档:将 status 置为 stopped) */ +export const stopIpScan = (id: number) => + request.post<{ code: number; details?: { message?: string }; message?: string }>( + `/DC-Control/v1/ipscans/${id}/stop`, + ) /** 创建扫描任务 */ export const createIpScan = (data: Partial) => diff --git a/src/api/ops/server.ts b/src/api/ops/server.ts index fb52ad4..7f839e8 100644 --- a/src/api/ops/server.ts +++ b/src/api/ops/server.ts @@ -26,6 +26,8 @@ export interface ServerItem { collect_args: string collect_interval: number collect_last_result: string + is_ip_scan_server: boolean + ip_scan_port: number } /** 服务器列表响应 */ @@ -42,6 +44,7 @@ export interface ServerListParams { size?: number keyword?: string collect_on?: boolean + is_ip_scan_server?: boolean } /** 创建/更新服务器请求参数 */ @@ -66,6 +69,8 @@ export interface ServerFormData { collect_args?: string collect_interval?: number collect_last_result?: string + is_ip_scan_server?: boolean + ip_scan_port?: number } /** 获取服务器列表(分页) */ diff --git a/src/views/ops/pages/dc/server/components/ServerFormDialog.vue b/src/views/ops/pages/dc/server/components/ServerFormDialog.vue index c0d5c06..00395be 100644 --- a/src/views/ops/pages/dc/server/components/ServerFormDialog.vue +++ b/src/views/ops/pages/dc/server/components/ServerFormDialog.vue @@ -126,6 +126,19 @@ + + + + + + + + + + + + + ({ status: 'unknown', collect_on: true, collect_interval: 60, + is_ip_scan_server: false, + ip_scan_port: 12429, }) const rules = { @@ -185,6 +200,21 @@ const rules = { host: [{ required: true, message: '请输入主机地址' }], } +function validateAgentConfigURL(raw?: string): string | null { + const v = (raw || '').trim() + if (!v) return null + try { + const u = new URL(v) + const protocol = u.protocol.toLowerCase() + if (protocol === 'https:' && u.port && u.port !== '443') { + return `Agent 配置 URL 使用 https 且端口为 ${u.port},请确认该端口确实启用了 TLS;若为明文服务请改为 http://` + } + return null + } catch { + return 'Agent 配置 URL 格式不合法,请输入完整 http(s) URL' + } +} + watch( () => props.visible, (val) => { @@ -208,6 +238,8 @@ watch( status: props.record.status || 'unknown', collect_on: props.record.collect_on ?? true, collect_interval: props.record.collect_interval || 60, + is_ip_scan_server: props.record.is_ip_scan_server ?? false, + ip_scan_port: props.record.ip_scan_port || 12429, }) } else { Object.assign(formData, { @@ -228,6 +260,8 @@ watch( status: 'unknown', collect_on: true, collect_interval: 60, + is_ip_scan_server: false, + ip_scan_port: 12429, }) } } @@ -238,6 +272,12 @@ const handleOk = async () => { try { await formRef.value?.validate() + const agentConfigErr = validateAgentConfigURL(formData.agent_config) + if (agentConfigErr) { + Message.warning(agentConfigErr) + return + } + confirmLoading.value = true const submitData: ServerFormData = { @@ -258,6 +298,8 @@ const handleOk = async () => { status: formData.status, collect_on: formData.collect_on, collect_interval: formData.collect_interval, + is_ip_scan_server: formData.is_ip_scan_server, + ip_scan_port: formData.ip_scan_port, } if (isEdit.value && props.record?.id) { diff --git a/src/views/ops/pages/netarch/ip-scan-tasks/index.vue b/src/views/ops/pages/netarch/ip-scan-tasks/index.vue index 2d321a3..bed16d4 100644 --- a/src/views/ops/pages/netarch/ip-scan-tasks/index.vue +++ b/src/views/ops/pages/netarch/ip-scan-tasks/index.vue @@ -14,7 +14,19 @@ - + + {{ record.status || '—' }} +