From de70520fa0ce1b13e4b535f9b710f27074ff29d1 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 27 八月 2026 20:45:28 +0800
Subject: [PATCH] feat(test): connect test configuration flow
---
src/api/tests.ts | 144 ++++++++++++++++++++++++++++++++++-------------
1 files changed, 104 insertions(+), 40 deletions(-)
diff --git a/src/api/tests.ts b/src/api/tests.ts
index 5d4295c..d0e58ff 100644
--- a/src/api/tests.ts
+++ b/src/api/tests.ts
@@ -1,5 +1,8 @@
-import type { TestRecord, TestStatus } from '@/stores/tests'
+import type { MonitoringStatus, TestRecord, TestStatus } from '@/stores/tests'
import { request, type ApiResponse } from './request'
+
+export type TestStatusCode = 'WAITING' | 'RUNNING' | 'PAUSED' | 'RUNNING_ABNORMAL' | 'COMPLETION_PENDING' | 'COMPLETED' | 'TERMINATED'
+export type MonitoringStatusCode = 'NOT_MONITORED' | 'WAITING_DEVICE_START' | 'MONITORING' | 'BACKFILLING' | 'MONITORING_ENDED' | 'CANCELLED'
export interface TestListParams {
pageNum: number
@@ -7,55 +10,110 @@
testName?: string
testTypeId?: number
batteryNo?: string
- status?: string
+ testStatus?: TestStatusCode
+ monitoringStatus?: MonitoringStatusCode
beginCreateTime?: string
endCreateTime?: string
+}
+
+export interface TestPlanStepPayload {
+ planStepId?: number
+ cycleNo: number
+ stepNo: number
+ stepType: string
+ stepName: string
+ parameters: Record<string, unknown>
+ sortOrder: number
+}
+
+export interface TestBatteryPayload {
+ relationId?: number
+ groupId: number
+ batteryNo: string
+ collectorId: number | null
+ binding: { bindingId?: number; channelId: number; expectedBarcode: string | null; claimStatus?: string }
+ fields: Array<{ fieldId?: number; fieldName: string; fieldValue: string }>
+}
+
+export interface TestThresholdPayload {
+ thresholdId?: number
+ metricCode: string
+ minValue: number | null
+ maxValue: number | null
+ unit: 'A' | 'V' | 'Ah' | 'Wh' | '℃'
+ severity: 'WARNING'
+}
+
+export interface TestConfigurationPayload {
+ testId?: number
+ testName: string
+ principalId: number
+ testTypeId: number
+ testPurpose: string
+ monitorTimeoutMinutes: number
+ remark: string | null
+ batteries: TestBatteryPayload[]
+ planSteps: TestPlanStepPayload[]
+ thresholds: TestThresholdPayload[]
+}
+
+export interface TestConfigurationDetail extends TestConfigurationPayload {
+ testId: number
+ creatorId: number
+ creatorName: string | null
+ principalName: string | null
+ testTypeName: string | null
+ testStatus: TestStatusCode
+ monitoringStatus: MonitoringStatusCode
+}
+
+export interface TestConfigurationOptions {
+ users: Array<{ userId: number; userName: string; nickName: string | null }>
+ testTypes: Array<{ testTypeId: number; testTypeName: string }>
+ batteries: Array<{ relationId: number; groupId: number; groupName: string; batteryNo: string }>
+ channels: Array<{ channelId: number; cabinetId: number; cabinetCode: string; cabinetName: string; adapterCode: string; devtype: number; devid: number; subdevid: number; chlid: number; displayNo: string | null }>
+ collectors: Array<{ collectorId: number; collectorCode: string; collectorName: string }>
}
interface TestDto {
testId: number
testName: string | null
testTypeName: string | null
- leaderName: string | null
- purpose: string | null
- status: string | null
+ principalName: string | null
+ testPurpose: string | null
+ testStatus: TestStatusCode | null
+ monitoringStatus: MonitoringStatusCode | null
createTime: string | null
+ startedAtUtc: string | null
+ endedAtUtc: string | null
remark: string | null
batteryCount: number | null
}
-interface TestListResponse extends ApiResponse {
- total: number
- rows: TestDto[]
-}
+interface TestListResponse extends ApiResponse { total: number; rows: TestDto[] }
+interface TestDetailResponse extends ApiResponse { data: TestConfigurationDetail }
+interface TestOptionsResponse extends ApiResponse { data: TestConfigurationOptions }
+interface TestIdentifierResponse extends ApiResponse { data: number }
+export interface TestListResult { total: number; rows: TestRecord[] }
-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> = {
- '0': '待测试',
- '1': '检测中',
- '2': '检测中(异常)',
- '3': '检测完成',
+const monitoringStatusMap: Record<MonitoringStatusCode, MonitoringStatus> = {
+ NOT_MONITORED: '未监测', WAITING_DEVICE_START: '等待设备启动', MONITORING: '监测中',
+ BACKFILLING: '补采中', MONITORING_ENDED: '监测结束', CANCELLED: '已取消',
}
function mapTest(item: TestDto): TestRecord {
+ const testStatus = item.testStatus || 'WAITING'
+ const monitoringStatus = item.monitoringStatus || 'NOT_MONITORED'
return {
- id: item.testId,
- name: item.testName || '-',
- type: item.testTypeName || '-',
- batteryNo: '-',
- batteryGroup: '-',
- batteryCount: Number(item.batteryCount) || 0,
- createdAt: item.createTime || '-',
- startedAt: '-',
- endedAt: '-',
- purpose: item.purpose || '-',
- owner: item.leaderName || '-',
- remark: item.remark || '-',
- status: statusMap[item.status || ''] || '待测试',
+ id: item.testId, name: item.testName || '-', type: item.testTypeName || '-', batteryNo: '-', batteryGroup: '-',
+ batteryCount: Number(item.batteryCount) || 0, createdAt: item.createTime || '-', startedAt: item.startedAtUtc || '-',
+ endedAt: item.endedAtUtc || '-', purpose: item.testPurpose || '-', owner: item.principalName || '-',
+ remark: item.remark || '-', status: statusMap[testStatus], monitoringStatus: monitoringStatusMap[monitoringStatus],
+ editable: monitoringStatus === 'NOT_MONITORED',
}
}
@@ -63,15 +121,21 @@
const searchParams = new URLSearchParams()
Object.entries(params).forEach(([key, value]) => {
if (value === undefined || value === '') return
- const queryKey = key === 'beginCreateTime' || key === 'endCreateTime'
- ? `params[${key}]`
- : key
- searchParams.set(queryKey, String(value))
+ searchParams.set(key, String(value))
})
-
const result = await request<TestListResponse>(`/system/test/list?${searchParams.toString()}`)
- return {
- total: Number(result.total) || 0,
- rows: (result.rows || []).map(mapTest),
- }
+ return { total: Number(result.total) || 0, rows: (result.rows || []).map(mapTest) }
+}
+
+export async function getTestConfigurationOptions(): Promise<TestConfigurationOptions> {
+ return (await request<TestOptionsResponse>('/system/test/options')).data
+}
+export async function getTestDetail(testId: number): Promise<TestConfigurationDetail> {
+ return (await request<TestDetailResponse>(`/system/test/${testId}`)).data
+}
+export async function createTest(payload: TestConfigurationPayload): Promise<number> {
+ return (await request<TestIdentifierResponse>('/system/test', { method: 'POST', body: JSON.stringify(payload) })).data
+}
+export async function updateTest(payload: TestConfigurationPayload & { testId: number }): Promise<void> {
+ await request<ApiResponse>('/system/test', { method: 'PUT', body: JSON.stringify(payload) })
}
--
Gitblit v1.7.1