简单写了一下,就是在check-change事件中对判断是否是这两种情况并作对应处理即可 import { ref } from 'vue' const treeRef = ref(); const data = ref([ { label: 'root', children: [ { label: '2-0' }, { label: '2-1' }, { label: '2-2' }, { label: '3-0' }, { label: '3-1' }, { label: '3-2' }, ], } ]) const handleCheckChange = (data, checked) => { const [type, index] = data.label.split('-'); const checkedNodes = treeRef.value.getCheckedNodes(); // x-n被勾选,且x-0没被勾选,则勾选x-0 if (checked && index !== '0' && !checkedNodes.some(it => it.label === `${type}-0`)) { treeRef.value.setChecked(`${type}-0`, true); } // x-0取消勾选,且有x-n被勾选,则重新勾选x-0 if (!checked && index === '0' && checkedNodes.some(it => it.label !== `${type}-0` && it.label.startsWith(`${type}-`))) { treeRef.value.setChecked(`${type}-0`, true); } }