yeg
2026-09-28 864ee2a6c3d86c6bb3af7eaf31b2390d2970c56e
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
import { ref } from 'vue'
 
export type TestTypeStatus = '启用' | '禁用'
 
export interface TestTypeRecord {
  id: number
  name: string
  createdAt: string
  creator: string
  remark: string
  status: TestTypeStatus
}
 
const STORAGE_KEY = 'battery_detection_test_types_v1'
const seedRecords: TestTypeRecord[] = [
  { id: 3012, name: '寿命循环', createdAt: '2026-08-04 14:36', creator: '张工', remark: '标准充放电循环寿命测试', status: '启用' },
  { id: 3011, name: '容量一致性', createdAt: '2026-08-04 10:18', creator: '李工', remark: '批次容量离散度与一致性分析', status: '启用' },
  { id: 3010, name: '低温性能', createdAt: '2026-08-03 16:42', creator: '周工', remark: '低温环境充电、放电及启动能力验证', status: '启用' },
  { id: 3009, name: '倍率性能', createdAt: '2026-08-03 09:25', creator: '赵工', remark: '多倍率充放电能力及温升验证', status: '启用' },
  { id: 3008, name: '安全性能', createdAt: '2026-08-02 15:10', creator: '陈工', remark: '过充、短路及保护边界验证', status: '启用' },
  { id: 3007, name: '历史兼容测试', createdAt: '2026-07-30 11:08', creator: '王工', remark: '旧版测试工步兼容性检查', status: '禁用' },
]
 
function loadRecords() {
  try {
    const stored = localStorage.getItem(STORAGE_KEY)
    if (stored) return JSON.parse(stored) as TestTypeRecord[]
  } catch {
    localStorage.removeItem(STORAGE_KEY)
  }
  return seedRecords
}
 
const records = ref<TestTypeRecord[]>(loadRecords())
 
function persist() {
  localStorage.setItem(STORAGE_KEY, JSON.stringify(records.value))
}
 
export function useTestTypes() {
  function createType(data: Pick<TestTypeRecord, 'name' | 'remark'>) {
    const id = Math.max(3000, ...records.value.map(item => item.id)) + 1
    const createdAt = new Date().toLocaleString('zh-CN', { hour12: false }).replaceAll('/', '-').replace(',', '')
    records.value.unshift({ ...data, id, createdAt, creator: 'Admin', status: '启用' })
    persist()
  }
 
  function updateType(id: number, data: Pick<TestTypeRecord, 'name' | 'remark'>) {
    const target = records.value.find(item => item.id === id)
    if (!target) return false
    Object.assign(target, data)
    persist()
    return true
  }
 
  function removeType(id: number) {
    records.value = records.value.filter(item => item.id !== id)
    persist()
  }
 
  return { records, createType, updateType, removeType, saveChanges: persist }
}