yeg
5 天以前 9dfc7d64b00a704b7e77a6000c1dcadd66b0d345
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { ref } from 'vue'
 
export type TestStatus = '待测试' | '检测中' | '暂停' | '检测完成' | '未知'
export type ReceptionStatus = '未开始接收' | '接收中' | '暂停接收' | '已结束接收' | '未知'
 
export interface TestRecord {
  id: number
  name: string
  type: string
  batteryNo: string
  batteryGroup: string
  batteryCount: number
  createdAt: string
  startedAt: string
  endedAt: string
  purpose: string
  owner: string
  remark: string
  status: TestStatus
  receptionStatus?: ReceptionStatus
  editable?: boolean
}
 
const STORAGE_KEY = 'battery_detection_tests_v1'
const seedRecords: TestRecord[] = [
  { id: 1024, name: '高温循环性能测试', type: '寿命循环', batteryNo: 'SP26-214、SP26-215、SP26-216、SP26-217', batteryGroup: '高温循环 A 组', batteryCount: 8, createdAt: '2026-07-10 14:32', startedAt: '2026-07-10 14:40', endedAt: '-', purpose: '验证高温环境循环寿命', owner: '张工', remark: 'A-01 / 12通道', status: '检测中' },
  { id: 1023, name: '电芯容量一致性测试', type: '容量一致性', batteryNo: 'SP26-214、SP26-215、SP26-216', batteryGroup: '容量一致性 A 组', batteryCount: 6, createdAt: '2026-07-10 11:18', startedAt: '2026-07-10 11:30', endedAt: '-', purpose: '筛查批次容量离散度', owner: '李工', remark: '存在2项预警', status: '检测中' },
  { id: 1022, name: '低温充放电测试', type: '低温性能', batteryNo: 'LT25-01、LT25-02', batteryGroup: '低温性能组', batteryCount: 4, createdAt: '2026-07-09 16:06', startedAt: '2026-07-09 16:22', endedAt: '-', purpose: '评估-20℃放电性能', owner: '周工', remark: '人工暂停复核', status: '暂停' },
  { id: 1021, name: '电芯老化寿命测试', type: '寿命循环', batteryNo: 'SP27-1、SP27-2', batteryGroup: '老化寿命组', batteryCount: 8, createdAt: '2026-07-09 09:42', startedAt: '2026-07-09 10:00', endedAt: '-', purpose: '验证长期循环衰减', owner: '王工', remark: 'A-02 / 8通道', status: '检测中' },
  { id: 1020, name: '3C倍率放电验证', type: '倍率性能', batteryNo: 'HP26-01、HP26-02', batteryGroup: '倍率性能组', batteryCount: 4, createdAt: '2026-07-08 17:26', startedAt: '-', endedAt: '-', purpose: '验证3C持续放电能力', owner: '赵工', remark: '等待接入检测柜', status: '待测试' },
  { id: 1019, name: '常温容量复测', type: '容量一致性', batteryNo: 'SP27-1、SP27-2', batteryGroup: '容量一致性组', batteryCount: 4, createdAt: '2026-07-08 13:10', startedAt: '2026-07-08 13:24', endedAt: '2026-07-09 08:36', purpose: '复核首轮容量结果', owner: '李工', remark: '数据已归档', status: '检测完成' },
  { id: 1018, name: '过充安全边界测试', type: '安全性能', batteryNo: 'SAFE-01、SAFE-02', batteryGroup: '安全测试组', batteryCount: 2, createdAt: '2026-07-08 09:05', startedAt: '2026-07-08 09:30', endedAt: '2026-07-08 15:12', purpose: '确认过充保护阈值', owner: '陈工', remark: '安全区S-02', status: '检测完成' },
  { id: 1017, name: '低温启动能力验证', type: '低温性能', batteryNo: 'LT25-01、LT25-02', batteryGroup: '低温性能组', batteryCount: 3, createdAt: '2026-07-07 14:52', startedAt: '2026-07-07 15:10', endedAt: '2026-07-08 10:18', purpose: '验证低温工况启动能力', owner: '周工', remark: '无异常', status: '检测完成' },
  { id: 1016, name: '1C标准循环测试', type: '寿命循环', batteryNo: 'SP26-1、SP26-2', batteryGroup: '标准循环组', batteryCount: 4, createdAt: '2026-07-07 10:20', startedAt: '2026-07-07 10:42', endedAt: '2026-07-09 18:06', purpose: '建立标准循环基线', owner: '张工', remark: '循环100次', status: '检测完成' },
  { id: 1015, name: '高倍率温升测试', type: '倍率性能', batteryNo: 'HP26-01、HP26-02', batteryGroup: '倍率性能组', batteryCount: 4, createdAt: '2026-07-06 15:35', startedAt: '-', endedAt: '-', purpose: '记录高倍率放电温升', owner: '赵工', remark: '等待设备校准', status: '待测试' },
  { id: 1014, name: '批次容量抽检', type: '容量一致性', batteryNo: 'SP27-1、SP27-2', batteryGroup: '批次抽检组', batteryCount: 4, createdAt: '2026-07-06 09:12', startedAt: '2026-07-06 09:30', endedAt: '2026-07-06 17:46', purpose: '批次入库质量抽检', owner: '李工', remark: '合格率98.6%', status: '检测完成' },
  { id: 1013, name: '短路保护响应测试', type: '安全性能', batteryNo: 'SAFE-03', batteryGroup: '安全测试组', batteryCount: 1, createdAt: '2026-07-05 14:48', startedAt: '2026-07-05 15:00', endedAt: '2026-07-05 16:15', purpose: '确认短路保护响应时间', owner: '陈工', remark: '数据已复核', status: '检测完成' },
]
 
function loadRecords() {
  try {
    const stored = localStorage.getItem(STORAGE_KEY)
    if (stored) return JSON.parse(stored) as TestRecord[]
  } catch {
    localStorage.removeItem(STORAGE_KEY)
  }
  return seedRecords
}
 
const records = ref<TestRecord[]>(loadRecords())
function persist() { localStorage.setItem(STORAGE_KEY, JSON.stringify(records.value)) }
function nowString() {
  const date = new Date()
  const pad = (value: number) => String(value).padStart(2, '0')
  return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`
}
 
export function useTests() {
  function createTest(data: Omit<TestRecord, 'id' | 'createdAt' | 'startedAt' | 'endedAt' | 'status'>) {
    const id = Math.max(1000, ...records.value.map(item => item.id)) + 1
    records.value.unshift({ ...data, id, createdAt: nowString(), startedAt: '-', endedAt: '-', status: '待测试' })
    persist()
    return id
  }
  function updateTestStatus(id: number, status: TestStatus) {
    const target = records.value.find(item => item.id === id)
    if (!target) return false
    target.status = status
    if (status === '检测中' && target.startedAt === '-') target.startedAt = nowString()
    if (status === '检测完成') target.endedAt = nowString()
    persist()
    return true
  }
  function deleteTest(id: number) {
    records.value = records.value.filter(item => item.id !== id)
    persist()
  }
  return { records, createTest, updateTestStatus, deleteTest }
}