28 lines
925 B
TypeScript
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
|
|
})
|