yeg
2026-09-08 f1b8fedbe35bf8fa5e697c31cf49bff5c8d2d7de
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
import { ref } from 'vue'
import {
  createBatteryGroupField,
  deleteBatteryGroupField,
  fieldTypeCode,
  getBatteryGroupFields,
  updateBatteryGroupField,
  type BatteryGroupField,
} from '@/api/batteryGroupFields'
 
// 报表和控制台仍通过该 store 读取字段;数据由后端 MySQL 提供,避免业务字段落入浏览器 localStorage。
const fields = ref<BatteryGroupField[]>([])
let refreshPromise: Promise<BatteryGroupField[]> | null = null
 
function toPayload(data: Pick<BatteryGroupField, 'name' | 'type' | 'status'>) {
  return {
    fieldName: data.name.trim(),
    fieldType: fieldTypeCode[data.type],
    status: data.status === '启用' ? '0' as const : '1' as const,
  }
}
 
export function useBatteryGroupFields() {
  async function refreshFields() {
    if (!refreshPromise) {
      refreshPromise = getBatteryGroupFields()
        .then(result => {
          fields.value.splice(0, fields.value.length, ...result)
          return fields.value
        })
        .finally(() => {
          refreshPromise = null
        })
    }
    return refreshPromise
  }
 
  async function createField(data: Pick<BatteryGroupField, 'name' | 'type' | 'creator' | 'status'>) {
    await createBatteryGroupField(toPayload(data))
    await refreshFields()
    return fields.value[0]?.id
  }
 
  async function updateField(id: number, data: Pick<BatteryGroupField, 'name' | 'type' | 'creator' | 'status'>) {
    await updateBatteryGroupField(id, toPayload(data))
    await refreshFields()
    return true
  }
 
  async function removeField(id: number) {
    await deleteBatteryGroupField(id)
    await refreshFields()
  }
 
  async function saveChanges() {
    await refreshFields()
  }
 
  void refreshFields()
  return { fields, refreshFields, createField, updateField, removeField, saveChanges }
}
 
export type { BatteryGroupField }