树形结构互转
1、线性转树形
lineToTree (list) {
const _list = list.map(e => ({ id: e.id, pid: e.parentId, label: e.name, raw: e }));
const addChild = (arr, obj) => {
const { pid } = obj;
arr.forEach(e => {
!e.children && (e.children = []);
if (e.id === pid) {
e.children.push(obj);
} else {
addChild(e.children, obj);
}
});
};
const retArr = _list.filter(e => e.pid === 0);
_list.forEach(cur => {
cur.pid !== 0 && addChild(retArr, cur);
});
return retArr;
},
2、线性转树形
3、mixin.js
import { GetDeptTree } from '@/api/system.js';
import Treeselect from '@riophae/vue-treeselect';
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
export const deptTreeMixin = {
components: { Treeselect },
data () {
return {
deptTreeOptions: undefined
};
},
created () {
this.getTreeselect();
},
methods: {
lineToTree (list) {
const _list = list.map(e => ({ id: e.id, pid: e.parentId, label: e.name, raw: e }));
const addChild = (arr, obj) => {
const { pid } = obj;
arr.forEach(e => {
!e.children && (e.children = []);
if (e.id === pid) {
e.children.push(obj);
} else {
addChild(e.children, obj);
}
});
};
const retArr = _list.filter(e => e.pid === 0);
_list.forEach(cur => {
cur.pid !== 0 && addChild(retArr, cur);
});
return retArr;
},
getTreeselect () {
const params = { pageNum: 1, pageSize: 9999 };
GetDeptTree(params).then(res => {
const { result: { list }, errcode, errmsg } = res;
if (errcode === 0) {
this.deptTreeOptions = this.lineToTree(list);
} else {
console.log(errmsg);
}
});
}
}
};