SettingsPage增加采集服务Tab

main
haoliang 1 month ago
parent 5103083726
commit c2877e7720

@ -109,6 +109,24 @@
</el-form>
</el-card>
</el-tab-pane>
<!-- Tab4: 采集服务 -->
<el-tab-pane label="采集服务" name="collector">
<el-card shadow="hover" style="max-width:500px">
<div style="text-align:center;padding:20px">
<div style="font-size:18px;margin-bottom:12px;color:#303133">采集服务状态</div>
<div style="margin-bottom:12px">
<el-tag :type="collectorTagType" size="large">{{ collectorStatusText }}</el-tag>
</div>
<div v-if="collectorStatus.status==='running'" style="margin-bottom:12px;color:#909399"> {{ formatUptime(collectorStatus.uptimeSeconds) }}</div>
<div style="display:flex;gap:8px;justify-content:center;margin-bottom:12px">
<el-button v-if="collectorStatus.status==='paused'||collectorStatus.status==='timeout'" type="success" :loading="startLoading" @click="startCollector"></el-button>
<el-button v-if="collectorStatus.status==='running'" type="danger" :loading="stopLoading" @click="stopCollector"></el-button>
<el-button type="warning" :loading="refreshLoading" @click="refreshCollectorConfig"></el-button>
</div>
<div style="font-size:12px;color:#c0c4cc">在线机床: {{ collectorStatus.onlineCount || '-' }} | 成功率: {{ collectorStatus.collectSuccessRate || '-' }}%</div>
</div>
</el-card>
</el-tab-pane>
</el-tabs>
</div>
</template>
@ -316,5 +334,16 @@ async function changePassword() {
} finally { pwdSubmitting.value = false }
}
onMounted(() => { loadConfigs(); loadWorkshops() })
onMounted(async () => { loadConfigs(); loadWorkshops(); await loadCollectorStatus() })
// ===== Tab4: =====
const collectorStatus = ref<any>({ 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<any>('/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 } }
</script>

Loading…
Cancel
Save