yeg
2026-08-26 9f48020dfd3e29d1c0049a3da9df3203c40bc264
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import { ref } from 'vue'
 
export interface CompareReportRevision {
  id: string
  modifiedAt: string
  modifier: string
  summary: string
}
 
export interface CompareTestSelection {
  id: number
  name: string
  type: string
  batteryGroup?: string
  batteryNo: string
  process: string
  cycle: number
}
 
export type CompareMetricKey = 'voltage' | 'current' | 'positiveVoltage' | 'negativeVoltage' | 'temperature'
 
export interface CompareReportRecord {
  id: number
  name: string
  creator: string
  createdAt: string
  baselineTest: string
  comparisonTest: string
  description: string
  compareTests?: CompareTestSelection[]
  metrics?: CompareMetricKey[]
  batteryGroup?: string
  batterySamples?: string[]
  customFields?: string[]
  batteryTemplateFields?: string[]
  specialFields?: string[]
  seriesColors?: string[]
  detailFieldValues?: Record<string, Record<string, string>>
  revisions: CompareReportRevision[]
}
 
export type CompareReportPayload = Pick<CompareReportRecord, 'name' | 'creator' | 'baselineTest' | 'comparisonTest' | 'description' | 'compareTests' | 'metrics' | 'batteryGroup' | 'batterySamples' | 'customFields' | 'batteryTemplateFields' | 'specialFields' | 'seriesColors' | 'detailFieldValues'>
 
const STORAGE_KEY = 'battery_detection_compare_reports_v1'
 
const seedRecords: CompareReportRecord[] = [
  { id: 6058, name: 'SP2 循环寿命对比报告', creator: 'Admin', createdAt: '2026-08-05 10:24', baselineTest: 'SP2电池寿命循环', comparisonTest: '高温循环性能测试', description: '对比常温与高温循环条件下的容量保持率和内阻变化。', revisions: [{ id: 'CR-6058-02', modifiedAt: '2026-08-05 11:10', modifier: 'Admin', summary: '补充容量保持率对比说明' }, { id: 'CR-6058-01', modifiedAt: '2026-08-05 10:24', modifier: 'Admin', summary: '创建对比报表' }] },
  { id: 6057, name: '低温充放电性能对比', creator: '李工', createdAt: '2026-08-04 17:36', baselineTest: '低温充放电测试', comparisonTest: '常温倍率性能测试', description: '分析低温环境对放电平台和可用容量的影响。', revisions: [{ id: 'CR-6057-01', modifiedAt: '2026-08-04 17:36', modifier: '李工', summary: '创建对比报表' }] },
  { id: 6056, name: '不同倍率放电曲线对比', creator: '王工', createdAt: '2026-08-04 14:18', baselineTest: '1C倍率放电测试', comparisonTest: '2C倍率放电测试', description: '对比不同倍率下的电压平台、温升和放电容量。', revisions: [{ id: 'CR-6056-01', modifiedAt: '2026-08-04 14:18', modifier: '王工', summary: '创建对比报表' }] },
  { id: 6055, name: '高温循环批次差异分析', creator: 'Admin', createdAt: '2026-08-03 16:42', baselineTest: '高温循环性能测试-A批', comparisonTest: '高温循环性能测试-B批', description: '比较两个生产批次在高温循环后的衰减差异。', revisions: [{ id: 'CR-6055-01', modifiedAt: '2026-08-03 16:42', modifier: 'Admin', summary: '创建对比报表' }] },
  { id: 6054, name: '静置前后内阻对比', creator: '赵工', createdAt: '2026-08-03 11:05', baselineTest: '化成后内阻测试', comparisonTest: '静置72小时内阻测试', description: '分析静置过程对电芯交流内阻的影响。', revisions: [{ id: 'CR-6054-01', modifiedAt: '2026-08-03 11:05', modifier: '赵工', summary: '创建对比报表' }] },
  { id: 6053, name: 'SOC 区间容量对比', creator: '李工', createdAt: '2026-08-02 15:28', baselineTest: 'SOC 20%-80%循环', comparisonTest: 'SOC 10%-90%循环', description: '比较不同SOC窗口下的循环容量衰减。', revisions: [{ id: 'CR-6053-01', modifiedAt: '2026-08-02 15:28', modifier: '李工', summary: '创建对比报表' }] },
  { id: 6052, name: '快充策略温升对比', creator: '王工', createdAt: '2026-08-02 10:12', baselineTest: '标准充电策略', comparisonTest: '快充策略V2', description: '对比两种充电策略的峰值温升和充电时长。', revisions: [{ id: 'CR-6052-01', modifiedAt: '2026-08-02 10:12', modifier: '王工', summary: '创建对比报表' }] },
  { id: 6051, name: '不同环境温度容量对比', creator: 'Admin', createdAt: '2026-08-01 18:06', baselineTest: '25℃容量测试', comparisonTest: '45℃容量测试', description: '分析环境温度变化对可用容量的影响。', revisions: [{ id: 'CR-6051-01', modifiedAt: '2026-08-01 18:06', modifier: 'Admin', summary: '创建对比报表' }] },
  { id: 6050, name: '电池组一致性对比', creator: '赵工', createdAt: '2026-08-01 13:40', baselineTest: '电池组A一致性测试', comparisonTest: '电池组B一致性测试', description: '对比单体压差、温差和容量离散程度。', revisions: [{ id: 'CR-6050-01', modifiedAt: '2026-08-01 13:40', modifier: '赵工', summary: '创建对比报表' }] },
  { id: 6049, name: '循环前后容量保持率', creator: '李工', createdAt: '2026-07-31 16:22', baselineTest: '循环前容量标定', comparisonTest: '500次循环后容量标定', description: '统计循环前后的容量保持率和能量效率。', revisions: [{ id: 'CR-6049-01', modifiedAt: '2026-07-31 16:22', modifier: '李工', summary: '创建对比报表' }] },
  { id: 6048, name: '过充保护策略对比', creator: '王工', createdAt: '2026-07-30 14:52', baselineTest: '保护策略V1测试', comparisonTest: '保护策略V2测试', description: '比较两版保护策略的触发时间和峰值电压。', revisions: [{ id: 'CR-6048-01', modifiedAt: '2026-07-30 14:52', modifier: '王工', summary: '创建对比报表' }] },
  { id: 6047, name: '工步优化前后效率对比', creator: 'Admin', createdAt: '2026-07-29 09:18', baselineTest: '原工步流程测试', comparisonTest: '优化工步流程测试', description: '比较流程优化前后的测试时长和能量效率。', revisions: [{ id: 'CR-6047-01', modifiedAt: '2026-07-29 09:18', modifier: 'Admin', summary: '创建对比报表' }] },
]
 
function loadRecords() {
  try {
    const stored = localStorage.getItem(STORAGE_KEY)
    if (stored) return JSON.parse(stored) as CompareReportRecord[]
  } catch {
    localStorage.removeItem(STORAGE_KEY)
  }
  return seedRecords
}
 
const records = ref<CompareReportRecord[]>(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 useCompareReports() {
  function createReport(data: CompareReportPayload) {
    const id = Math.max(6000, ...records.value.map(item => item.id)) + 1
    const createdAt = nowString()
    records.value.unshift({
      ...data,
      id,
      createdAt,
      revisions: [{ id: `CR-${id}-01`, modifiedAt: createdAt, modifier: data.creator, summary: '创建对比报表' }],
    })
    persist()
  }
 
  function updateReport(id: number, data: CompareReportPayload) {
    const target = records.value.find(item => item.id === id)
    if (!target) return false
    const modifiedAt = nowString()
    const revisionNumber = String(target.revisions.length + 1).padStart(2, '0')
    Object.assign(target, data)
    target.revisions.unshift({
      id: `CR-${id}-${revisionNumber}`,
      modifiedAt,
      modifier: data.creator,
      summary: '更新报表名称、对比对象或说明',
    })
    persist()
    return true
  }
 
  function removeReport(id: number) {
    records.value = records.value.filter(item => item.id !== id)
    persist()
  }
 
  return { records, createReport, updateReport, removeReport }
}