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 }
|