效果:
vue:
<template> <div class="tree"> <a-tree showIcon v-if="treeData.length" checkable :treeData="treeData" v-model="checkedId" :defaultExpandedKeys="parentId" @select="this.onSelect" :replaceFields="replaceFields" checkStrictly @check="this.onCheck"> </a-tree> </div> </template> <script> export default { name: "tree", data() { return { treeData: [], parentId: [],//根节点 checkedId: [], //选中节点ID treeDisabledArr: [1000], //置灰/禁用的节点ID replaceFields: { //根据后端返回数据调整 children: 'childList', title: 'orgName', key: 'id' }, } }, mounted() { let that = this; let tree = [{ "id": 1000, "orgName": "四川省", "orgType": "02", "orderNum": 1, "orgCode": null, "areaParentId": null, "parentOrgId": null, "childList": [{ "id": 44000, "orgName": "阿坝州", "orgType": "02", "orderNum": 44000, "orgCode": null, "areaParentId": null, "parentOrgId": 1000, "childList": [{ "id": 48210, "orgName": "阿坝藏族羌族自治州", "orgType": "02", "orderNum": 44100, "orgCode": null, "areaParentId": null, "parentOrgId": 44000, "childList": null },] }] }] that.treeData = tree; that.parentId.push(that.treeData[0].id); //展开根节点 that.setGray(); // this.getOrgTree();//获取树 }, methods: { getOrgTree() { let that = this; that.$get('***', '',).then((res) => { //这里是封装的axios方法 if (res.code == 1) { that.treeData = res.data; that.parentId.push(that.treeData[0].id); //展开根节点 that.setGray(); // that.setDisabled(); } else { that.$message.error(res.message); } }).catch((err) => { }) }, //置灰 setGray() { let that = this, list = [...that.treeData]; let getIds = function (list) { list.forEach(k => { if (k.childList && k.childList.length > 0) { that.treeDisabledArr.forEach(e => { if (e == k.id) { k.class = 'gray'; } }) getIds(k.childList) } else { that.treeDisabledArr.forEach(e => { if (e == k.id) { k.class = 'gray'; } }) } }) } getIds(list); that.treeData = [...list]; }, //禁用 setDisabled() { let that = this, list = [...that.treeData]; let getIds = function (list) { list.forEach(k => { if (k.childList && k.childList.length > 0) { that.treeDisabledArr.forEach(e => { if (e == k.id) { k.disabled = true; } }) getIds(k.childList) } else { that.treeDisabledArr.forEach(e => { if (e == k.id) { k.disabled = true; } }) } }) } getIds(list); that.treeData = [...list]; }, onSelect(selectedKeys, info) { //点击名字时触发 }, onCheck(selectedKeys, info) { //点击复选框时触发 }, } } </script> <style scoped> .tree /deep/ .ant-tree li.gray > span.ant-tree-node-content-wrapper { color: rgba(0, 0, 0, 0.25); } </style>