|
|
|
@ -45,8 +45,8 @@
|
|
|
|
<div class="chart-title">机床产量排行</div>
|
|
|
|
<div class="chart-title">机床产量排行</div>
|
|
|
|
<div class="rank-list">
|
|
|
|
<div class="rank-list">
|
|
|
|
<div v-if="machineRank.length === 0" class="no-data">暂无数据</div>
|
|
|
|
<div v-if="machineRank.length === 0" class="no-data">暂无数据</div>
|
|
|
|
<div v-for="item in machineRank" :key="item.rank" class="rank-item">
|
|
|
|
<div v-for="item in machineRank" :key="item.rank ?? item.id" class="rank-item">
|
|
|
|
<span class="rank-num" :class="{ 'rank-top': item.rank <= 3 }">{{ item.rank }}</span>
|
|
|
|
<span class="rank-num" :class="{ 'rank-top': (item.rank ?? 99) <= 3 }">{{ item.rank ?? '-' }}</span>
|
|
|
|
<span class="rank-name">{{ item.machineName }}</span>
|
|
|
|
<span class="rank-name">{{ item.machineName }}</span>
|
|
|
|
<span class="rank-value">{{ item.quantity }}</span>
|
|
|
|
<span class="rank-value">{{ item.quantity }}</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
@ -56,10 +56,10 @@
|
|
|
|
<div class="chart-title">工人产量排行</div>
|
|
|
|
<div class="chart-title">工人产量排行</div>
|
|
|
|
<div class="rank-list">
|
|
|
|
<div class="rank-list">
|
|
|
|
<div v-if="workerRank.length === 0" class="no-data">暂无数据</div>
|
|
|
|
<div v-if="workerRank.length === 0" class="no-data">暂无数据</div>
|
|
|
|
<div v-for="item in workerRank" :key="item.rank" class="rank-item">
|
|
|
|
<div v-for="item in workerRank" :key="item.rank ?? item.id" class="rank-item">
|
|
|
|
<span class="rank-num" :class="{ 'rank-top': item.rank <= 3 }">{{ item.rank }}</span>
|
|
|
|
<span class="rank-num" :class="{ 'rank-top': (item.rank ?? 99) <= 3 }">{{ item.rank ?? '-' }}</span>
|
|
|
|
<span class="rank-name">{{ item.workerName }}</span>
|
|
|
|
<span class="rank-name">{{ item.workerName }}</span>
|
|
|
|
<span class="rank-value">{{ item.quantity }}</span>
|
|
|
|
<span class="rank-value">{{ item.totalQuantity ?? item.machineCount ?? '-' }}</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
@ -99,6 +99,7 @@ import type { ECharts } from 'echarts/core'
|
|
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
import request from '@/utils/request'
|
|
|
|
import request from '@/utils/request'
|
|
|
|
import { watch } from 'vue'
|
|
|
|
import { watch } from 'vue'
|
|
|
|
|
|
|
|
import type { MachineRankRow, WorkerRankRow } from '@/types'
|
|
|
|
|
|
|
|
|
|
|
|
const filterWorkshop = ref('')
|
|
|
|
const filterWorkshop = ref('')
|
|
|
|
const filterBrand = ref('')
|
|
|
|
const filterBrand = ref('')
|
|
|
|
@ -120,9 +121,9 @@ const lineChartRef = ref<HTMLElement>()
|
|
|
|
let barChart: ECharts | null = null
|
|
|
|
let barChart: ECharts | null = null
|
|
|
|
let lineChart: ECharts | null = null
|
|
|
|
let lineChart: ECharts | null = null
|
|
|
|
|
|
|
|
|
|
|
|
const machineRank = ref<DashboardSummary[]>([])
|
|
|
|
const machineRank = ref<MachineRankRow[]>([])
|
|
|
|
const workerRank = ref<DashboardSummary[]>([])
|
|
|
|
const workerRank = ref<WorkerRankRow[]>([])
|
|
|
|
const machineStatus = ref<DashboardSummary[]>([])
|
|
|
|
const machineStatus = ref<any[]>([])
|
|
|
|
|
|
|
|
|
|
|
|
let refreshTimer: ReturnType<typeof setInterval> | null = null
|
|
|
|
let refreshTimer: ReturnType<typeof setInterval> | null = null
|
|
|
|
const refreshIntervalMs = ref<number>(10000)
|
|
|
|
const refreshIntervalMs = ref<number>(10000)
|
|
|
|
@ -147,7 +148,7 @@ function filterParams(): Record<string, string> {
|
|
|
|
|
|
|
|
|
|
|
|
async function loadFilters() {
|
|
|
|
async function loadFilters() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/filters')
|
|
|
|
const r = await request.get('/screen/filters') as any
|
|
|
|
const items = r.data?.items || []
|
|
|
|
const items = r.data?.items || []
|
|
|
|
workshopOptions.value = items.filter((i: Record<string,unknown>) => i.filterType === 'workshop').map((i: Record<string,unknown>) => i.filterValue)
|
|
|
|
workshopOptions.value = items.filter((i: Record<string,unknown>) => i.filterType === 'workshop').map((i: Record<string,unknown>) => i.filterValue)
|
|
|
|
brandOptions.value = items.filter((i: Record<string,unknown>) => i.filterType === 'brand').map((i: Record<string,unknown>) => i.filterValue)
|
|
|
|
brandOptions.value = items.filter((i: Record<string,unknown>) => i.filterType === 'brand').map((i: Record<string,unknown>) => i.filterValue)
|
|
|
|
@ -160,7 +161,7 @@ async function loadFilters() {
|
|
|
|
|
|
|
|
|
|
|
|
async function loadSummary() {
|
|
|
|
async function loadSummary() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/summary', { params: filterParams() })
|
|
|
|
const r = await request.get('/screen/summary', { params: filterParams() }) as any
|
|
|
|
const d = r.data || {}
|
|
|
|
const d = r.data || {}
|
|
|
|
statCards[0].value = d.onlineCount != null ? String(d.onlineCount) : '--'
|
|
|
|
statCards[0].value = d.onlineCount != null ? String(d.onlineCount) : '--'
|
|
|
|
statCards[0].sub = d.totalMachines ? '/ ' + d.totalMachines : ''
|
|
|
|
statCards[0].sub = d.totalMachines ? '/ ' + d.totalMachines : ''
|
|
|
|
@ -172,7 +173,7 @@ async function loadSummary() {
|
|
|
|
|
|
|
|
|
|
|
|
async function loadCollectorStatus() {
|
|
|
|
async function loadCollectorStatus() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/collector-status')
|
|
|
|
const r = await request.get('/screen/collector-status') as any
|
|
|
|
const d = r.data || {}
|
|
|
|
const d = r.data || {}
|
|
|
|
if (d.status === 'running') {
|
|
|
|
if (d.status === 'running') {
|
|
|
|
statCards[2].value = '运行中'
|
|
|
|
statCards[2].value = '运行中'
|
|
|
|
@ -188,7 +189,7 @@ async function loadCollectorStatus() {
|
|
|
|
|
|
|
|
|
|
|
|
async function loadWorkshopProduction() {
|
|
|
|
async function loadWorkshopProduction() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/workshop-production', { params: filterParams() })
|
|
|
|
const r = await request.get('/screen/workshop-production', { params: filterParams() }) as any
|
|
|
|
const items = r.data?.items || []
|
|
|
|
const items = r.data?.items || []
|
|
|
|
if (!barChart) return
|
|
|
|
if (!barChart) return
|
|
|
|
barChart.setOption({
|
|
|
|
barChart.setOption({
|
|
|
|
@ -203,7 +204,7 @@ async function loadWorkshopProduction() {
|
|
|
|
|
|
|
|
|
|
|
|
async function loadProductionTrend() {
|
|
|
|
async function loadProductionTrend() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/production-trend', { params: filterParams() })
|
|
|
|
const r = await request.get('/screen/production-trend', { params: filterParams() }) as any
|
|
|
|
const items = r.data?.items || []
|
|
|
|
const items = r.data?.items || []
|
|
|
|
if (!lineChart) return
|
|
|
|
if (!lineChart) return
|
|
|
|
lineChart.setOption({
|
|
|
|
lineChart.setOption({
|
|
|
|
@ -222,21 +223,21 @@ async function loadProductionTrend() {
|
|
|
|
|
|
|
|
|
|
|
|
async function loadMachineRank() {
|
|
|
|
async function loadMachineRank() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/machine-rank', { params: filterParams() })
|
|
|
|
const r = await request.get('/screen/machine-rank', { params: filterParams() }) as any
|
|
|
|
machineRank.value = r.data?.items || []
|
|
|
|
machineRank.value = r.data?.items || []
|
|
|
|
} catch { /* 静默 */ }
|
|
|
|
} catch { /* 静默 */ }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function loadWorkerRank() {
|
|
|
|
async function loadWorkerRank() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/worker-rank', { params: filterParams() })
|
|
|
|
const r = await request.get('/screen/worker-rank', { params: filterParams() }) as any
|
|
|
|
workerRank.value = r.data?.items || []
|
|
|
|
workerRank.value = r.data?.items || []
|
|
|
|
} catch { /* 静默 */ }
|
|
|
|
} catch { /* 静默 */ }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function loadMachineStatus() {
|
|
|
|
async function loadMachineStatus() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/machine-status', { params: filterParams() })
|
|
|
|
const r = await request.get('/screen/machine-status', { params: filterParams() }) as any
|
|
|
|
machineStatus.value = r.data?.items || []
|
|
|
|
machineStatus.value = r.data?.items || []
|
|
|
|
} catch { /* 静默 */ }
|
|
|
|
} catch { /* 静默 */ }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -292,7 +293,7 @@ onUnmounted(() => {
|
|
|
|
// 读取配置中的刷新间隔
|
|
|
|
// 读取配置中的刷新间隔
|
|
|
|
async function fetchRefreshInterval() {
|
|
|
|
async function fetchRefreshInterval() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const r: Record<string,unknown> = await request.get('/screen/refresh-interval')
|
|
|
|
const r = await request.get('/screen/refresh-interval') as any
|
|
|
|
const v = r?.data?.interval ?? 10000
|
|
|
|
const v = r?.data?.interval ?? 10000
|
|
|
|
refreshIntervalMs.value = v
|
|
|
|
refreshIntervalMs.value = v
|
|
|
|
} catch {
|
|
|
|
} catch {
|
|
|
|
|