优化项目
This commit is contained in:
@@ -152,7 +152,7 @@ async function selectInitialNode(
|
||||
|
||||
treeInstance?.setCurrentKey(node.id)
|
||||
|
||||
emit('init', { level, ...node })
|
||||
emit('init', { ...node })
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ async function loadTree() {
|
||||
await selectTreeNode(treRef.value, node, {
|
||||
level: 3,
|
||||
onSelect: selected => {
|
||||
emit('init', { level: 3, ...selected })
|
||||
emit('init', { ...selected, level: 3 })
|
||||
changePointType('4', selected)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -48,7 +48,7 @@ async function initTree(list: any[]) {
|
||||
}
|
||||
|
||||
await selectTreeNode(treRef.value, node, {
|
||||
onSelect: selected => emit('init', { level: 2, ...selected })
|
||||
onSelect: selected => emit('init', { ...selected, level: 2 })
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,7 @@
|
||||
<template>
|
||||
<Tree
|
||||
ref="treRef"
|
||||
@check-change="handleCheckChange"
|
||||
:default-checked-keys="defaultCheckedKeys"
|
||||
:show-checkbox="props.showCheckbox"
|
||||
:data="tree"
|
||||
:height="props.height"
|
||||
@changeDeviceType="changeDeviceType"
|
||||
@changeTreeType="loadTree"
|
||||
:engineering="props.engineering"
|
||||
leaf-mode="device"
|
||||
/>
|
||||
<Tree ref="treRef" @check-change="handleCheckChange" :default-checked-keys="defaultCheckedKeys"
|
||||
:show-checkbox="props.showCheckbox" :data="tree" :height="props.height" @changeDeviceType="changeDeviceType"
|
||||
@changeTreeType="loadTree" :engineering="props.engineering" leaf-mode="device" />
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
@@ -55,17 +46,17 @@ async function selectInitialNode(type: string | undefined, leaves: LineTreeLeave
|
||||
type === '2'
|
||||
? [{ refKey: 'treeRef4', list: leaves.engineering, level: 2 }]
|
||||
: [
|
||||
{ refKey: 'treeRef1', list: leaves.govern, level: 2 },
|
||||
{ refKey: 'treeRef2', list: leaves.portable, level: 2 },
|
||||
{ refKey: 'treeRef3', list: leaves.monitor, level: 2 }
|
||||
]
|
||||
{ refKey: 'treeRef1', list: leaves.govern, level: 2 },
|
||||
{ refKey: 'treeRef2', list: leaves.portable, level: 2 },
|
||||
{ refKey: 'treeRef3', list: leaves.monitor, level: 2 }
|
||||
]
|
||||
|
||||
for (const { refKey, list, level } of candidates) {
|
||||
const node = list[0]
|
||||
if (!node) continue
|
||||
const treeInstance = await waitForTreeRef(treRef.value, refKey)
|
||||
treeInstance?.setCurrentKey(node.id)
|
||||
emit('init', { level, ...node })
|
||||
emit('init', { ...node })
|
||||
return
|
||||
}
|
||||
emit('init')
|
||||
@@ -81,13 +72,10 @@ const loadTree = (type?: string) => {
|
||||
|
||||
onMounted(() => loadTree(props.engineering ? '2' : '1'))
|
||||
|
||||
const handleCheckChange = throttle(
|
||||
const handleCheckChange =
|
||||
(data: any, checked: any, indeterminate: any) => {
|
||||
emit('checkChange', { data, checked, indeterminate })
|
||||
},
|
||||
300,
|
||||
{ leading: true, trailing: false }
|
||||
)
|
||||
}
|
||||
|
||||
defineExpose({ treRef })
|
||||
</script>
|
||||
|
||||
@@ -17,7 +17,8 @@ export function decorateDeviceTree(
|
||||
child.children?.forEach((grand: any) => {
|
||||
applyMeta(grand, {
|
||||
icon: 'el-icon-Platform',
|
||||
color: statusColor(grand.comFlag)
|
||||
color: statusColor(grand.comFlag),
|
||||
level: 3
|
||||
})
|
||||
leaves.engineering.push(grand)
|
||||
})
|
||||
@@ -68,6 +69,7 @@ export function decorateDeviceTree(
|
||||
l3.pName = '监测设备'
|
||||
applyMeta(l3, {
|
||||
icon: 'el-icon-Platform',
|
||||
level: 3,
|
||||
color: l3.comFlag === 1 ? '#e26257 !important' : primary()
|
||||
})
|
||||
leaves.monitor.push(l3)
|
||||
|
||||
@@ -39,6 +39,21 @@ export function createLineTreeDecorators(getPrimaryColor: () => string): LineTre
|
||||
|
||||
export type TreeRefKey = 'treeRef1' | 'treeRef2' | 'treeRef3' | 'treeRef4'
|
||||
|
||||
/** 线路树可选叶子节点元数据 */
|
||||
export const LINE_LEAF_META = { level: 3, type: 'line' as const }
|
||||
|
||||
/** 是否为线路树可选叶子(监测点/线路) */
|
||||
export function isLineTreeLeaf(node: any): boolean {
|
||||
if (!node?.id) return false
|
||||
return node.type === 'line' || node.level === 3
|
||||
}
|
||||
|
||||
/** 是否为报告/导出可选监测点 */
|
||||
export function isReportMonitorPoint(node: any): boolean {
|
||||
if (!node?.id) return false
|
||||
return isLineTreeLeaf(node) || node.level === 3 || (!node.children?.length && !!node.pid)
|
||||
}
|
||||
|
||||
export interface DecorateLineTreeOptions {
|
||||
/** 是否禁用父级节点(分析树隐藏父节点,测点树不禁用) */
|
||||
disableParents?: boolean
|
||||
@@ -69,7 +84,11 @@ export function decorateLineTree(
|
||||
...parentDisabled
|
||||
})
|
||||
grand.children?.forEach((leaf: any) => {
|
||||
applyMeta(leaf, { icon: 'el-icon-Platform', color: statusColor(leaf.comFlag) })
|
||||
applyMeta(leaf, {
|
||||
icon: 'el-icon-Platform',
|
||||
color: statusColor(leaf.comFlag),
|
||||
...LINE_LEAF_META
|
||||
})
|
||||
leaves.engineering.push(leaf)
|
||||
})
|
||||
})
|
||||
@@ -90,7 +109,11 @@ export function decorateLineTree(
|
||||
...parentDisabled
|
||||
})
|
||||
l3.children?.forEach((l4: any) => {
|
||||
applyMeta(l4, { icon: 'el-icon-Platform', color: statusColor(l4.comFlag) })
|
||||
applyMeta(l4, {
|
||||
icon: 'el-icon-Platform',
|
||||
color: statusColor(l4.comFlag),
|
||||
...LINE_LEAF_META
|
||||
})
|
||||
leaves.govern.push(l4)
|
||||
})
|
||||
})
|
||||
@@ -100,7 +123,11 @@ export function decorateLineTree(
|
||||
item.children?.forEach((l1: any) => {
|
||||
applyMeta(l1, { icon: 'el-icon-Platform', color: statusColor(l1.comFlag) })
|
||||
l1.children?.forEach((l2: any) => {
|
||||
applyMeta(l2, { icon: 'el-icon-Platform', color: statusColor(l2.comFlag) })
|
||||
applyMeta(l2, {
|
||||
icon: 'el-icon-Platform',
|
||||
color: statusColor(l2.comFlag),
|
||||
...LINE_LEAF_META
|
||||
})
|
||||
leaves.portable.push(l2)
|
||||
})
|
||||
})
|
||||
@@ -117,7 +144,11 @@ export function decorateLineTree(
|
||||
...parentDisabled
|
||||
})
|
||||
l3.children?.forEach((l4: any) => {
|
||||
applyMeta(l4, { icon: 'el-icon-Platform', color: statusColor(l4.comFlag) })
|
||||
applyMeta(l4, {
|
||||
icon: 'el-icon-Platform',
|
||||
color: statusColor(l4.comFlag),
|
||||
...LINE_LEAF_META
|
||||
})
|
||||
leaves.monitor.push(l4)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -64,7 +64,7 @@ async function selectInitialNode(type: string | undefined, leaves: LineTreeLeave
|
||||
|
||||
const treeInstance = await waitForTreeRef(treRef.value, refKey)
|
||||
treeInstance?.setCurrentKey(node.id)
|
||||
emit('init', { level, ...node })
|
||||
emit('init', { ...node })
|
||||
|
||||
if (type === '2') {
|
||||
changePointType('4', node)
|
||||
|
||||
@@ -59,7 +59,7 @@ interface Props {
|
||||
|
||||
const props = withDefaults(defineProps<Props>(), { template: false })
|
||||
|
||||
const emit = defineEmits(['init', 'checkChange', 'nodeChange', 'editNode', 'getChart', 'Policy'])
|
||||
const emit = defineEmits(['init', 'checkChange', 'nodeChange', 'node-click', 'editNode', 'getChart', 'Policy'])
|
||||
|
||||
const config = useConfig()
|
||||
const tree = ref<any[]>([])
|
||||
@@ -109,6 +109,7 @@ const clickNode = (e: any) => {
|
||||
planId.value = e?.children ? e.id : e.pid
|
||||
id.value = e.id
|
||||
emit('nodeChange', e)
|
||||
emit('node-click', e)
|
||||
}
|
||||
|
||||
bootstrapWithTemplate(
|
||||
|
||||
@@ -52,6 +52,7 @@ import useCurrentInstance from '@/utils/useCurrentInstance'
|
||||
import { ElMessage, ElTree } from 'element-plus'
|
||||
import { ref, watch } from 'vue'
|
||||
import { createTreeFilterNode } from './govern/treeFilterUtils'
|
||||
import { isLineTreeLeaf } from './govern/lineTreeUtils'
|
||||
|
||||
defineOptions({ name: 'govern/select', inheritAttrs: false })
|
||||
|
||||
@@ -75,7 +76,8 @@ const filterNode = createTreeFilterNode()
|
||||
const checkedNodes = ref<any[]>([])
|
||||
const defaultCheckedKeys = ref<string[]>([])
|
||||
const MAX_CHECK = 5
|
||||
const MONITOR_LEVEL = 3
|
||||
|
||||
const isMonitorLeaf = (node: any) => isLineTreeLeaf(node)
|
||||
|
||||
watch(filterText, val => treeRef.value?.filter(val))
|
||||
|
||||
@@ -85,7 +87,7 @@ const onMenuCollapse = () => {
|
||||
}
|
||||
|
||||
const handleCheckChange = (_data: any, checkInfo: any) => {
|
||||
const monitoringPointNodes = (checkInfo.checkedNodes as any[]).filter(node => node.level === MONITOR_LEVEL)
|
||||
const monitoringPointNodes = (checkInfo.checkedNodes as any[]).filter(isMonitorLeaf)
|
||||
|
||||
if (monitoringPointNodes.length > MAX_CHECK) {
|
||||
const previousCheckedNodes = checkedNodes.value
|
||||
@@ -122,7 +124,7 @@ const updateNodeCheckStatus = (currentCount: number) => {
|
||||
if (!treeRef.value) return
|
||||
const isMaxSelected = currentCount >= MAX_CHECK
|
||||
treeRef.value.store._getAllNodes().forEach((node: any) => {
|
||||
if (node.level === MONITOR_LEVEL) {
|
||||
if (isMonitorLeaf(node.data)) {
|
||||
node.data.disabled = isMaxSelected && !node.checked
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user