229 lines
8.1 KiB
TypeScript
229 lines
8.1 KiB
TypeScript
import type { LineTreeDecorators, LineTreeLeaves } from './lineTreeUtils'
|
||
|
||
/** getDeviceTree 接口专用装饰(与 getLineTree 层级不同) */
|
||
export function decorateDeviceTree(
|
||
data: any[],
|
||
type: string | undefined,
|
||
decorators: LineTreeDecorators
|
||
): LineTreeLeaves {
|
||
const leaves: LineTreeLeaves = { govern: [], portable: [], monitor: [], engineering: [] }
|
||
const { primary, statusColor, applyMeta } = decorators
|
||
|
||
data.forEach(item => {
|
||
if (type === '2') {
|
||
applyMeta(item, { icon: 'el-icon-HomeFilled', color: primary() })
|
||
item.children?.forEach((child: any) => {
|
||
applyMeta(child, { icon: 'el-icon-Menu', color: primary() })
|
||
child.children?.forEach((grand: any) => {
|
||
applyMeta(grand, {
|
||
icon: 'el-icon-Platform',
|
||
color: statusColor(grand.comFlag)
|
||
})
|
||
leaves.engineering.push(grand)
|
||
})
|
||
})
|
||
return
|
||
}
|
||
|
||
if (item.name === '治理设备') {
|
||
item.children?.forEach((l1: any) => {
|
||
applyMeta(l1, { icon: 'el-icon-HomeFilled', color: primary() })
|
||
l1.children?.forEach((l2: any) => {
|
||
applyMeta(l2, { icon: 'el-icon-Menu', color: primary() })
|
||
l2.children?.forEach((l3: any) => {
|
||
l3.pName = '治理设备'
|
||
applyMeta(l3, {
|
||
icon: 'el-icon-Platform',
|
||
level: 2,
|
||
color: l3.comFlag === 1 ? '#e26257 !important' : primary()
|
||
})
|
||
leaves.govern.push(l3)
|
||
})
|
||
})
|
||
})
|
||
} else if (item.name === '便携式设备') {
|
||
item.children?.forEach((l1: any) => {
|
||
applyMeta(l1, {
|
||
icon: 'el-icon-Platform',
|
||
color: statusColor(l1.comFlag)
|
||
})
|
||
l1.pName = '便携式设备'
|
||
if (l1.type === 'device') {
|
||
leaves.portable.push(l1)
|
||
}
|
||
l1.children?.forEach((l2: any) => {
|
||
applyMeta(l2, {
|
||
icon: 'el-icon-Platform',
|
||
color: statusColor(l2.comFlag)
|
||
})
|
||
l2.pName = '便携式设备'
|
||
})
|
||
})
|
||
} else if (item.name === '监测设备') {
|
||
item.children?.forEach((l1: any) => {
|
||
applyMeta(l1, { icon: 'el-icon-HomeFilled', color: primary() })
|
||
l1.children?.forEach((l2: any) => {
|
||
applyMeta(l2, { icon: 'el-icon-Menu', color: primary() })
|
||
l2.children?.forEach((l3: any) => {
|
||
l3.pName = '监测设备'
|
||
applyMeta(l3, {
|
||
icon: 'el-icon-Platform',
|
||
color: l3.comFlag === 1 ? '#e26257 !important' : primary()
|
||
})
|
||
leaves.monitor.push(l3)
|
||
})
|
||
})
|
||
})
|
||
}
|
||
})
|
||
|
||
return leaves
|
||
}
|
||
|
||
/** 装饰 getDeviceTree 扁平列表(deviceInfoTree) */
|
||
export function decorateDeviceInfoTree(list: any[], decorators: LineTreeDecorators): any[] {
|
||
const { primary, applyMeta } = decorators
|
||
const leaves: any[] = []
|
||
|
||
list.forEach(item => {
|
||
applyMeta(item, { icon: 'el-icon-HomeFilled', color: primary() })
|
||
item.children?.forEach((l2: any) => {
|
||
applyMeta(l2, { icon: 'el-icon-Menu', color: primary() })
|
||
l2.children?.forEach((l3: any) => {
|
||
applyMeta(l3, {
|
||
icon: 'el-icon-Platform',
|
||
color: l3.comFlag === 1 || l3.comFlag === 3 ? '#e26257 !important' : primary()
|
||
})
|
||
leaves.push(l3)
|
||
})
|
||
})
|
||
})
|
||
|
||
return leaves
|
||
}
|
||
|
||
/** 装饰云端设备树 getCldTree */
|
||
export function decorateCloudTree(root: any, decorators: LineTreeDecorators): any[] {
|
||
const { primary, statusColor, applyMeta } = decorators
|
||
const leaves: any[] = []
|
||
|
||
applyMeta(root, { icon: 'el-icon-ChromeFilled', color: primary() })
|
||
root.children?.forEach((l1: any) => {
|
||
applyMeta(l1, { icon: 'el-icon-HomeFilled', color: primary() })
|
||
l1.children?.forEach((l2: any) => {
|
||
applyMeta(l2, { icon: 'el-icon-Menu', color: primary() })
|
||
l2.children?.forEach((l3: any) => {
|
||
applyMeta(l3, {
|
||
icon: 'el-icon-Platform',
|
||
// level: 2,
|
||
color: statusColor(l3.comFlag)
|
||
})
|
||
l3.children?.forEach((l4: any) => {
|
||
applyMeta(l4, {
|
||
icon: 'local-监测点',
|
||
color: statusColor(l4.comFlag)
|
||
})
|
||
leaves.push(l4)
|
||
})
|
||
})
|
||
})
|
||
})
|
||
|
||
return leaves
|
||
}
|
||
|
||
/** 装饰 objTree(治理对象树) */
|
||
export function decorateObjTree(data: any[], decorators: LineTreeDecorators): any[] {
|
||
const { primary, applyMeta } = decorators
|
||
const leaves: any[] = []
|
||
|
||
data.forEach(l1 => {
|
||
applyMeta(l1, { icon: 'el-icon-HomeFilled', color: primary(), level: 1 })
|
||
l1.children?.forEach((l2: any) => {
|
||
applyMeta(l2, { icon: 'el-icon-Menu', color: primary(), level: 2 })
|
||
l2.children?.forEach((l3: any) => {
|
||
applyMeta(l3, { icon: 'el-icon-Platform', color: primary(), level: 3 })
|
||
leaves.push(l3)
|
||
})
|
||
})
|
||
})
|
||
|
||
return leaves
|
||
}
|
||
|
||
/** 装饰 lineTree 台账线路树(监测设备根节点) */
|
||
export function decorateLedgerLineTree(root: any, decorators: LineTreeDecorators): any[] {
|
||
const { primary, statusColor, applyMeta } = decorators
|
||
const leaves: any[] = []
|
||
|
||
if (!root) return leaves
|
||
|
||
applyMeta(root, { icon: 'el-icon-Menu', color: primary(), level: 0 })
|
||
if (!Array.isArray(root.children)) root.children = []
|
||
|
||
root.children.forEach((l1: any) => {
|
||
applyMeta(l1, { icon: 'el-icon-HomeFilled', color: primary(), level: 1 })
|
||
if (!Array.isArray(l1.children)) l1.children = []
|
||
l1.children.forEach((l2: any) => {
|
||
applyMeta(l2, { icon: 'el-icon-Menu', color: primary(), level: 2 })
|
||
if (!Array.isArray(l2.children)) l2.children = []
|
||
l2.children.forEach((l3: any) => {
|
||
applyMeta(l3, {
|
||
icon: 'el-icon-Platform',
|
||
color: statusColor(l3.comFlag),
|
||
level: 3
|
||
})
|
||
if (!Array.isArray(l3.children)) l3.children = []
|
||
l3.children.forEach((l4: any) => {
|
||
applyMeta(l4, {
|
||
icon: 'el-icon-Platform',
|
||
color: statusColor(l4.comFlag),
|
||
level: 4
|
||
})
|
||
leaves.push(l4)
|
||
})
|
||
})
|
||
})
|
||
})
|
||
|
||
return leaves
|
||
}
|
||
|
||
/** getDeviceTree 接口叶子收集(3 层结构,便携式为 type=device 节点) */
|
||
export function collectDeviceApiLeaves(
|
||
governNodes: any[],
|
||
portableNodes: any[],
|
||
monitorNodes: any[]
|
||
): { govern: any[]; portable: any[]; monitor: any[] } {
|
||
const govern: any[] = []
|
||
const portable: any[] = []
|
||
const monitor: any[] = []
|
||
|
||
governNodes.forEach(l1 => {
|
||
l1.children?.forEach((l2: any) => {
|
||
l2.children?.forEach((l3: any) => govern.push(l3))
|
||
})
|
||
})
|
||
|
||
portableNodes.forEach(l1 => {
|
||
if (l1.type === 'device') portable.push(l1)
|
||
})
|
||
|
||
monitorNodes.forEach(l1 => {
|
||
l1.children?.forEach((l2: any) => {
|
||
l2.children?.forEach((l3: any) => monitor.push(l3))
|
||
})
|
||
})
|
||
|
||
return { govern, portable, monitor }
|
||
}
|
||
|
||
/** 从 lineTree 数据中解析监测设备根节点 */
|
||
export function resolveMonitorRoot(data: any): any | null {
|
||
if (Array.isArray(data)) {
|
||
return data.find(item => item.name === '监测设备') ?? null
|
||
}
|
||
if (data?.name === '监测设备') return data
|
||
return null
|
||
}
|