From 35789d2f15c426bafa876806487034f4c5ddc3eb Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期一, 31 八月 2026 20:54:11 +0800
Subject: [PATCH] 实现Ticket22控制台数据三子页

---
 src/api/tests.ts |   58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 57 insertions(+), 1 deletions(-)

diff --git a/src/api/tests.ts b/src/api/tests.ts
index 47a3d1b..1a143e3 100644
--- a/src/api/tests.ts
+++ b/src/api/tests.ts
@@ -31,7 +31,7 @@
   batteryNo: string
   collectorId: number
   collectorName?: string | null
-  binding: { bindingId?: number; channelId: number; expectedBarcode: string | null; claimStatus?: string; cabinetCode?: string | null; cabinetName?: string | null; displayNo?: string | null }
+  binding: { bindingId?: number; channelId: number; expectedBarcode: string | null; claimStatus?: string; cabinetCode?: string | null; cabinetName?: string | null; displayNo?: string | null; devtype?: number | null; devid?: number | null; subdevid?: number | null; chlid?: number | null }
   collectorChannels: Array<{
     mappingId?: number
     measurementCode: string
@@ -260,6 +260,62 @@
   return (await request<TestIntegrityResponse>(`/system/test/${testId}/integrity`)).data
 }
 
+export interface BtsRecord {
+  sequenceId: number
+  deviceTime: string
+  currentA: number
+  voltageV: number
+  capacityAh: number
+  energyWh: number
+  cycleNo: number
+  stepNo: number
+  stepName: string
+  stepType: string
+}
+
+export interface BtsStepRecord {
+  cycleNo: number
+  stepNo: number
+  stepName: string
+  stepType: string
+  recordCount: number
+  startedAt: string
+  endedAt: string
+  capacityAh: number
+  energyWh: number
+}
+
+export interface BtsCycleRecord {
+  cycleNo: number
+  recordCount: number
+  startedAt: string
+  endedAt: string
+  chargeCapacityAh: number
+  dischargeCapacityAh: number
+  chargeEnergyWh: number
+  dischargeEnergyWh: number
+}
+
+async function getSimulatorChannelData<T>(deviceId: number, channelId: number, kind: 'records' | 'steps' | 'cycles'): Promise<T[]> {
+  const token = getAuthToken()
+  const response = await fetch(`${import.meta.env.VITE_API_BASE_URL || '/dev-api'}/dev/bts-simulator/devices/${deviceId}/channels/${channelId}/${kind}`, { headers: token ? { Authorization: `Bearer ${token}` } : undefined })
+  if (!response.ok) throw new Error(`检测柜${kind}数据加载失败(${response.status})`)
+  const result = await response.json() as T[]
+  return Array.isArray(result) ? result : []
+}
+
+export function getBtsRecords(deviceId: number, channelId: number): Promise<BtsRecord[]> {
+  return getSimulatorChannelData<BtsRecord>(deviceId, channelId, 'records')
+}
+
+export function getBtsSteps(deviceId: number, channelId: number): Promise<BtsStepRecord[]> {
+  return getSimulatorChannelData<BtsStepRecord>(deviceId, channelId, 'steps')
+}
+
+export function getBtsCycles(deviceId: number, channelId: number): Promise<BtsCycleRecord[]> {
+  return getSimulatorChannelData<BtsCycleRecord>(deviceId, channelId, 'cycles')
+}
+
 export type TestLiveEvent = 'snapshot' | 'device-status' | 'reception-status' | 'test-status' | 'exception' | 'integrity' | 'heartbeat'
 
 /** 使用 fetch 流读取鉴权 SSE;调用返回函数关闭连接,断线由页面决定是否重连。 */

--
Gitblit v1.7.1