对齐测试生命周期状态展示
前端筛选和控制台状态统一使用四态测试状态,并保留历史状态兼容展示。
| | |
| | | import type { ReceptionStatus, TestRecord, TestStatus } from '@/stores/tests' |
| | | import { getAuthToken, request, type ApiResponse } from './request' |
| | | |
| | | export type TestStatusCode = 'WAITING' | 'RUNNING' | 'PAUSED' | 'RUNNING_ABNORMAL' | 'COMPLETION_PENDING' | 'COMPLETED' | 'TERMINATED' |
| | | export type TestStatusCode = 'WAITING' | 'RUNNING' | 'PAUSED' | 'COMPLETED' |
| | | export type ReceptionStatusCode = 'NOT_STARTED' | 'RECEIVING' | 'PAUSED' | 'ENDED' |
| | | |
| | | export interface TestListParams { |
| | |
| | | interface TestOptionsResponse extends ApiResponse { data: TestConfigurationOptions } |
| | | export interface TestListResult { total: number; rows: TestRecord[] } |
| | | |
| | | const statusMap: Record<TestStatusCode, TestStatus> = { |
| | | WAITING: '待测试', RUNNING: '检测中', PAUSED: '暂停', RUNNING_ABNORMAL: '检测中', |
| | | // 历史兼容状态统一按当前“停止即完成”语义展示。 |
| | | COMPLETION_PENDING: '检测完成', COMPLETED: '检测完成', TERMINATED: '检测完成', |
| | | const statusMap: Record<string, TestStatus> = { |
| | | WAITING: '待测试', RUNNING: '检测中', PAUSED: '暂停', COMPLETED: '检测完成', |
| | | // 历史数据只作兼容展示,不会由新流程写入。 |
| | | RUNNING_ABNORMAL: '检测中', COMPLETION_PENDING: '检测完成', TERMINATED: '检测完成', |
| | | } |
| | | const receptionStatusMap: Record<ReceptionStatusCode, ReceptionStatus> = { |
| | | NOT_STARTED: '未开始接收', RECEIVING: '接收中', PAUSED: '暂停接收', ENDED: '已结束接收', |
| | | } |
| | | const legacyStatusMap: Record<string, TestStatusCode> = { |
| | | '0': 'WAITING', '1': 'RUNNING', '2': 'RUNNING_ABNORMAL', '3': 'COMPLETED', |
| | | } |
| | | |
| | | function mapTest(item: TestDto): TestRecord { |
| | | const status = item.testStatus ? statusMap[item.testStatus] : '未知' |
| | | const receptionStatus = item.receptionStatus ? receptionStatusMap[item.receptionStatus] : '未知' |
| | |
| | | const searchParams = new URLSearchParams() |
| | | Object.entries(params).forEach(([key, value]) => { |
| | | if (value === undefined || value === '') return |
| | | if (key === 'status') searchParams.set('testStatus', legacyStatusMap[String(value)] || String(value)) |
| | | if (key === 'status') searchParams.set('testStatus', String(value)) |
| | | else searchParams.set(key, String(value)) |
| | | }) |
| | | const result = await request<TestListResponse>(`/system/test/list?${searchParams.toString()}`) |
| | |
| | | liveConnection.value = next.sources.some(source => Boolean(source.latestSnapshot?.observedAt) |
| | | || Boolean(source.latestSnapshot?.measurements?.length)) ? '已连接' : '空数据' |
| | | liveError.value = '' |
| | | const nextState = ({ WAITING: '待测试', RUNNING: '检测中', PAUSED: '暂停', RUNNING_ABNORMAL: '检测中', COMPLETION_PENDING: '检测完成', COMPLETED: '检测完成', TERMINATED: '检测完成' } as Record<string, ConsoleState | undefined>)[next.testStatus] || '待测试' |
| | | const nextState = ({ WAITING: '待测试', RUNNING: '检测中', PAUSED: '暂停', COMPLETED: '检测完成', |
| | | // 历史数据仅兼容展示,不参与新生命周期流转。 |
| | | RUNNING_ABNORMAL: '检测中', COMPLETION_PENDING: '检测完成', TERMINATED: '检测完成' } as Record<string, ConsoleState | undefined>)[next.testStatus] || '待测试' |
| | | state.value = nextState |
| | | testStatusLabel.value = nextState |
| | | const mapped = next.receptionStatus |
| | |
| | | } |
| | | |
| | | const statuses: Array<{ label: TestStatus; value: string }> = [ |
| | | { label: '待测试', value: '0' }, |
| | | { label: '检测中', value: '1' }, |
| | | { label: '待测试', value: 'WAITING' }, |
| | | { label: '检测中', value: 'RUNNING' }, |
| | | { label: '暂停', value: 'PAUSED' }, |
| | | { label: '检测完成', value: '3' }, |
| | | { label: '检测完成', value: 'COMPLETED' }, |
| | | ] |
| | | const router = useRouter() |
| | | const testTypes = ref<TestTypeOption[]>([]) |