From 20cfb19d192127e304a081ceb60ca9052f813bf7 Mon Sep 17 00:00:00 2001 From: he wei <858544502@qq.com> Date: 星期三, 15 一月 2025 13:32:43 +0800 Subject: [PATCH] U 修改完成 --- src/components/HdwTree/index.vue | 138 ++++++++++++++++++++++++++++------------------ 1 files changed, 84 insertions(+), 54 deletions(-) diff --git a/src/components/HdwTree/index.vue b/src/components/HdwTree/index.vue index 2cf46ce..2b12e17 100644 --- a/src/components/HdwTree/index.vue +++ b/src/components/HdwTree/index.vue @@ -1,60 +1,90 @@ -<script lang="ts"> -import { defineComponent } from 'vue'; -import { getAreaTreeApi } from '@/api/area'; -import { formatAreaTree } from '@/utils/tree'; +<script setup> + import { ref, onMounted, reactive, nextTick } from "vue"; + import { getAreaTreeApi } from "@/api/area"; + import { formatAreaTree } from "@/utils/tree"; -export default defineComponent({ - name: 'HdwTree', - data() { - return { - defaultProps: { - children: 'children', - label: 'label' - }, - data: [] - }; - }, - methods: { - handleNodeClick(data) { - console.log(data); - }, - async getAreaTree() { - try { - const res = await getAreaTreeApi(); - let data = []; - if (res.code === 1 && res.data) { - data = res.data2; - } - const treeList = []; - for (let i = 0; i < data.length; i++) { - formatAreaTree(data[i], treeList); - } - console.log(data); - console.log(treeList); - this.data = treeList; - } catch (e) { - console.log(e); - } - } - }, - mounted() { - this.getAreaTree(); - } -}); + 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-tree - style="max-width: 600px" - :data="data" - :props="defaultProps" - :expand-on-click-node="false" - @node-click="handleNodeClick" - /> - </el-scrollbar> + <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="scss"> - -</style> +<style scoped lang="scss"></style> -- Gitblit v1.9.1