|
|
|
|
@ -1,8 +1,8 @@
|
|
|
|
|
<template>
|
|
|
|
|
<div class="dashboard-page">
|
|
|
|
|
<!-- 第1行 — 4个统计卡片 -->
|
|
|
|
|
<!-- 第1行 — 3个统计卡片 -->
|
|
|
|
|
<el-row :gutter="16" class="stat-row">
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-card shadow="hover">
|
|
|
|
|
<div class="stat-card">
|
|
|
|
|
<div class="stat-label">
|
|
|
|
|
@ -15,7 +15,7 @@
|
|
|
|
|
</div>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-card shadow="hover">
|
|
|
|
|
<div class="stat-card">
|
|
|
|
|
<div class="stat-label">
|
|
|
|
|
@ -28,43 +28,6 @@
|
|
|
|
|
</div>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<el-card shadow="hover">
|
|
|
|
|
<div class="stat-card">
|
|
|
|
|
<div class="stat-label">
|
|
|
|
|
采集服务
|
|
|
|
|
<el-tooltip content="数据采集服务的运行状态。" placement="top">
|
|
|
|
|
<span class="info-icon">ⓘ</span>
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="stat-value">
|
|
|
|
|
<el-tag :type="collectorTagType" size="small">
|
|
|
|
|
{{ collectorStatusText }}
|
|
|
|
|
</el-tag>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="stat-sub" v-if="collectorStatus.status === 'running'">运行 {{ formatUptime(collectorStatus.uptimeSeconds) }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="collector-actions">
|
|
|
|
|
<el-button v-if="collectorStatus.status === 'stopped' || collectorStatus.status === 'not_installed'" size="small" type="success" disabled>需手动启动服务</el-button>
|
|
|
|
|
<el-button v-if="collectorStatus.status === 'paused' || collectorStatus.status === 'timeout'" size="small" type="success" :loading="startLoading" @click="startCollector">恢复采集</el-button>
|
|
|
|
|
<el-button v-if="collectorStatus.status === 'running'" size="small" type="danger" :loading="stopLoading" @click="stopCollector">暂停采集</el-button>
|
|
|
|
|
<el-button size="small" type="warning" :loading="refreshLoading" @click="refreshCollectorConfig">刷新配置</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<el-card shadow="hover">
|
|
|
|
|
<div class="stat-card">
|
|
|
|
|
<div class="stat-label">
|
|
|
|
|
今日运行机床数
|
|
|
|
|
<el-tooltip content="当前正在执行加工程序的机床数量。" placement="top">
|
|
|
|
|
<span class="info-icon">ⓘ</span>
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="stat-value">{{ summary.runningMachines }}<span class="stat-unit"> 台</span></div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
|
|
|
|
|
<!-- 第2行 — 双图表 -->
|
|
|
|
|
@ -801,13 +764,11 @@ async function loadWorkshopData() {
|
|
|
|
|
async function loadData() {
|
|
|
|
|
try {
|
|
|
|
|
// 并行加载:统计摘要 + 采集状态 + 产量趋势
|
|
|
|
|
const [summaryRes, collectorRes, trendRes] = await Promise.all([
|
|
|
|
|
const [summaryRes, trendRes] = await Promise.all([
|
|
|
|
|
request.get<DashboardSummary>('/admin/dashboard/summary'),
|
|
|
|
|
request.get<CollectorStatus>('/admin/collector/status'),
|
|
|
|
|
request.get<{ items: DashboardTrendItem[] }>('/admin/dashboard/trend'),
|
|
|
|
|
])
|
|
|
|
|
summary.value = summaryRes.data || summary.value
|
|
|
|
|
collectorStatus.value = collectorRes.data || collectorStatus.value
|
|
|
|
|
trendData.value = trendRes.data?.items || []
|
|
|
|
|
|
|
|
|
|
// 重置图表
|
|
|
|
|
|