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
80
81
82
import { ref } from 'vue'
 
export type GroupStatus = '启用' | '禁用'
export type FieldType = '文本' | '数字' | '时间' | '备注'
 
export interface TemplateField {
  key: string
  label: string
  type: FieldType
  value: string
}
 
export interface BatteryGroup {
  id: number
  name: string
  model: string
  purpose: string
  remark: string
  batteries: string[]
  createdAt: string
  status: GroupStatus
  creator: string
  templateName: string
  specs: Record<string, string>
  customFields: TemplateField[]
}
 
const STORAGE_KEY = 'battery_detection_groups_v2'
 
const seedGroups: BatteryGroup[] = [
  { id: 2068, name: 'SP27 容量验证组', model: 'SP27-72Ah', purpose: '量产批次容量一致性验证', remark: '', batteries: ['SP27-1', 'SP27-2', 'SP27-3', 'SP27-4'], createdAt: '2026-08-04 15:42', status: '启用', creator: '李工', templateName: '标准容量样品', specs: { z: '', h: '', f: '', a: '', b: '' }, customFields: [] },
  { id: 2067, name: 'HP26 倍率性能组', model: 'HP26-50Ah', purpose: '高倍率充放电性能验证', remark: '', batteries: ['HP26-01', 'HP26-02', 'HP26-03', 'HP26-04'], createdAt: '2026-08-04 11:18', status: '启用', creator: '赵工', templateName: '自定义', specs: { z: '', h: '', f: '', a: '', b: '' }, customFields: [] },
  { id: 2066, name: 'SP26 循环测试组', model: 'SP26-68Ah', purpose: '高温循环寿命与衰减分析', remark: '', batteries: ['SP26-1', 'SP26-2', 'SP26-3', 'SP26-4', 'SP26-5'], createdAt: '2026-08-03 16:05', status: '启用', creator: '张工', templateName: '标准循环样品', specs: { z: '', h: '', f: '', a: '', b: '' }, customFields: [] },
  { id: 2065, name: 'LT25 低温性能组', model: 'LT25-60Ah', purpose: '低温环境充放电性能验证', remark: '', batteries: ['LT25-01', 'LT25-02', 'LT25-03'], createdAt: '2026-08-02 09:36', status: '禁用', creator: '周工', templateName: '低温性能样品', specs: { z: '', h: '', f: '', a: '', b: '' }, customFields: [] },
  { id: 2064, name: 'SAFE-26 安全抽检组', model: 'SF26-45Ah', purpose: '过充及短路保护边界抽检', remark: '', batteries: ['SF26-101', 'SF26-102'], createdAt: '2026-08-01 14:22', status: '启用', creator: '陈工', templateName: '自定义', specs: { z: '', h: '', f: '', a: '', b: '' }, customFields: [] },
  { id: 2063, name: 'RT26 常温基线组', model: 'RT26-72Ah', purpose: '常温标准循环数据基线', remark: '', batteries: ['RT26-01', 'RT26-02', 'RT26-03', 'RT26-04'], createdAt: '2026-07-30 10:10', status: '启用', creator: '王工', templateName: '标准循环样品', specs: { z: '', h: '', f: '', a: '', b: '' }, customFields: [] },
]
 
function loadGroups() {
  try {
    const stored = localStorage.getItem(STORAGE_KEY)
    if (stored) return JSON.parse(stored) as BatteryGroup[]
  } catch {
    localStorage.removeItem(STORAGE_KEY)
  }
  return seedGroups
}
 
const groups = ref<BatteryGroup[]>(loadGroups())
 
function persist() {
  localStorage.setItem(STORAGE_KEY, JSON.stringify(groups.value))
}
 
export function useBatteryGroups() {
  function createGroup(group: Omit<BatteryGroup, 'id' | 'createdAt'>) {
    const id = Math.max(2000, ...groups.value.map(item => item.id)) + 1
    const createdAt = new Date().toLocaleString('zh-CN', { hour12: false }).replaceAll('/', '-').replace(',', '')
    groups.value.unshift({ ...group, id, createdAt })
    persist()
    return id
  }
 
  function updateGroup(id: number, changes: Omit<BatteryGroup, 'id' | 'createdAt'>) {
    const target = groups.value.find(item => item.id === id)
    if (!target) return false
    Object.assign(target, changes)
    persist()
    return true
  }
 
  function removeGroup(id: number) {
    groups.value = groups.value.filter(item => item.id !== id)
    persist()
  }
 
  function saveChanges() {
    persist()
  }
 
  return { groups, createGroup, updateGroup, removeGroup, saveChanges }
}