vue-admin-core
Version:
A Component Library for Vue 3
95 lines (90 loc) • 2.86 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
var virtualTree = require('element-plus/es/components/tree-v2/src/virtual-tree');
var _const = require('../../../utils/const.js');
const prefixCls = _const.getPrefixCls("tree-node");
var TreeLine = vue.defineComponent({
name: "VacTreeLine",
props: {
node: virtualTree.treeNodeProps.node,
treeData: {
type: Array
},
indent: {
type: Number,
default() {
return 16;
}
}
},
setup(props, {
slots
}) {
const lastnodeArr = vue.computed(() => {
const lastnodeArr2 = [];
let currentNode = props.node;
while (currentNode) {
let parentNode = currentNode.parent;
if (currentNode.level === 1 && !currentNode.parent) {
if (!props.treeData || !Array.isArray(props.treeData)) {
throw Error("if you using el-tree-v2 (Virtualized Tree) of element-plus,element-tree-line required data.");
}
parentNode = {
children: Array.isArray(props.treeData) ? props.treeData.map((item) => {
return {
...item,
key: item.id
};
}) : [],
level: 0,
key: "node-0",
parent: null
};
}
if (parentNode) {
const index = (parentNode.children || parentNode.childNodes).findIndex((item) => (item.key || item.id) === (currentNode.key || currentNode.id));
lastnodeArr2.unshift(index === (parentNode.children || parentNode.childNodes).length - 1);
}
currentNode = parentNode;
}
return lastnodeArr2;
});
const lineNodes = vue.computed(() => {
const lineNodes2 = [];
for (let i = 1; i < props.node.level; i++) {
if (lastnodeArr.value[i] && props.node.level - 1 !== i) {
continue;
}
lineNodes2.push(vue.h("span", {
class: {
[`${prefixCls}-line-var`]: true,
"last-node-isLeaf-line": lastnodeArr.value[i] && props.node.level - 1 === i
},
style: {
left: props.indent * i - 6 + "px"
}
}));
}
return lineNodes2;
});
return () => {
return vue.h("span", {
class: `${prefixCls}-label-wrapper`
}, [slots.default ? slots.default({
node: props.node,
data: props.node.data
}) : vue.h("span", {
class: "el-tree-node__label"
}, [props.node.label]), ...lineNodes.value, props.node.level !== 1 ? vue.h("span", {
class: `${prefixCls}-line-hor`,
style: {
width: "10px",
left: (props.node.level - 1) * props.indent - 6 + "px"
}
}) : null]);
};
}
});
exports.default = TreeLine;
//# sourceMappingURL=TreeLine.js.map