diff --git a/frontend/src/views/settings/SettingsPage.vue b/frontend/src/views/settings/SettingsPage.vue index ca1064e..be52d0c 100644 --- a/frontend/src/views/settings/SettingsPage.vue +++ b/frontend/src/views/settings/SettingsPage.vue @@ -109,6 +109,24 @@ + + + + + 采集服务状态 + + {{ collectorStatusText }} + + 运行 {{ formatUptime(collectorStatus.uptimeSeconds) }} + + 恢复采集 + 暂停采集 + 刷新配置 + + 在线机床: {{ collectorStatus.onlineCount || '-' }} | 成功率: {{ collectorStatus.collectSuccessRate || '-' }}% + + + @@ -316,5 +334,16 @@ async function changePassword() { } finally { pwdSubmitting.value = false } } -onMounted(() => { loadConfigs(); loadWorkshops() }) +onMounted(async () => { loadConfigs(); loadWorkshops(); await loadCollectorStatus() }) + +// ===== Tab4: 采集服务 ===== +const collectorStatus = ref({ status: 'stopped', uptimeSeconds: 0, onlineCount: 0, collectSuccessRate: 0 }) +const startLoading = ref(false); const stopLoading = ref(false); const refreshLoading = ref(false) +const collectorTagType = computed(() => ({ running: 'success', paused: 'info', timeout: 'warning', stopped: 'info', not_installed: 'danger' } as any)[collectorStatus.value.status] || 'warning') +const collectorStatusText = computed(() => ({ running: '运行中', paused: '已暂停', timeout: '心跳超时', stopped: '已停止', not_installed: '未安装' } as any)[collectorStatus.value.status] || '-') +function formatUptime(s: number): string { if (!s) return '-'; const d = Math.floor(s / 86400); const h = Math.floor((s % 86400) / 3600); return d > 0 ? `${d}天${h}时` : `${h}时` } +async function loadCollectorStatus() { try { const r = await request.get('/admin/collector/status'); collectorStatus.value = r.data || collectorStatus.value } catch {} } +async function startCollector() { startLoading.value = true; try { await request.post('/admin/collector/start'); ElMessage.success('采集服务已启动'); await loadCollectorStatus() } catch {} finally { startLoading.value = false } } +async function stopCollector() { stopLoading.value = true; try { await request.post('/admin/collector/stop'); ElMessage.success('采集服务已停止'); await loadCollectorStatus() } catch {} finally { stopLoading.value = false } } +async function refreshCollectorConfig() { refreshLoading.value = true; try { await request.post('/admin/collector/refresh'); ElMessage.success('配置已刷新'); await loadCollectorStatus() } catch {} finally { refreshLoading.value = false } }