GuDingZiChan/frontend/src/utils/equipmentSelection.ts

28 lines
925 B
TypeScript

export interface SelectableEquipment {
id: number
equipment_code: string
equipment_name: string
status?: string
parent_id?: number | null
children?: SelectableEquipment[]
}
export const indexEquipmentSelection = (items: SelectableEquipment[]) => {
const indexed = new Map<number, SelectableEquipment>()
const visit = (item: SelectableEquipment, parentId?: number) => {
indexed.set(item.id, parentId === undefined ? item : { ...item, parent_id: item.parent_id ?? parentId })
item.children?.forEach((child) => visit(child, item.id))
}
items.forEach((item) => visit(item))
return indexed
}
export const resolveSelectedEquipmentCodes = (
selectedIds: number[],
indexed: Map<number, SelectableEquipment>
) => selectedIds.map((id) => {
const code = indexed.get(id)?.equipment_code
if (!code) throw new Error(`资产 #${id} 的资料未加载,请重新选择后再操作`)
return code
})