<script setup>
|
import { ref, onMounted, reactive, nextTick } from "vue";
|
import { getAreaTreeApi } from "@/api/area";
|
import { formatAreaTree } from "@/utils/tree";
|
|
const emit = defineEmits(["itemClick"]);
|
const defaultProps = reactive({
|
children: "children",
|
label: "label",
|
});
|
|
const treeRef = ref();
|
const data = ref([]);
|
const defaultSelect = ref([1]);
|
|
onMounted(() => {
|
getAreaTree();
|
});
|
|
function handleNodeClick(data) {
|
console.log(data);
|
emit("itemClick", data);
|
}
|
|
async function getAreaTree() {
|
try {
|
const res = await getAreaTreeApi();
|
let _data = [];
|
if (res.code === 1 && res.data) {
|
_data = res.data2;
|
}
|
console.log('_data', _data, '=============');
|
|
const treeList = [];
|
let ids = _data.map((v) => v.id);
|
for (let i = 0; i < _data.length; i++) {
|
formatAreaTree(_data[i], ids, treeList);
|
}
|
// console.log(_data, 'data');
|
console.log(treeList, "treeList");
|
data.value = treeList;
|
await nextTick();
|
// defaultSelect.value = [treeList[0].id]
|
handleNodeClick(treeList[0]);
|
} catch (e) {
|
console.log(e);
|
}
|
}
|
|
const collapseAll = () => {
|
const nodes = treeRef.value.store.nodesMap;
|
Object.values(nodes).forEach((node) => {
|
if (node.level > 0) {
|
// 排除根节点
|
node.expanded = false;
|
}
|
});
|
treeRef.value.store.updateExpandedKeys(); // 更新展开状态
|
};
|
|
const expandAll = () => {
|
const nodes = treeRef.value.store.nodesMap;
|
Object.values(nodes).forEach((node) => {
|
if (node.level > 0) {
|
// 排除根节点
|
node.expanded = true;
|
}
|
});
|
treeRef.value.store.updateExpandedKeys(); // 更新展开状态
|
};
|
</script>
|
|
<template>
|
<el-scrollbar>
|
<el-button type="warning" size="small" @click="collapseAll">折叠全部</el-button>
|
<el-button type="primary" size="small" @click="expandAll">展开全部</el-button>
|
<el-tree
|
style="max-width: 600px"
|
ref="treeRef"
|
:data="data"
|
:props="defaultProps"
|
node-key="id"
|
:expand-on-click-node="false"
|
:default-checked-keys="defaultSelect"
|
@node-click="handleNodeClick"
|
/>
|
</el-scrollbar>
|
</template>
|
|
<style scoped lang="less"></style>
|