<template> <div> <div id="input"> <el-input placeholder="请输出内容" v-model="input" clearable @clear="_fetchTree()" > <el-button slot="append" icon="el-icon-search" @click="searchTree()" ></el-button> </el-input> </div> <div id="chart"></div> </div></template><script>//import echarts from "echarts";import { debounce } from "@/utils";import { fetchTreeById } from "network/chart";export default { data() { return { input: "", chart: null, }; }, created() { // this._fetchTree(); console.log("fetch Tree"); this._fetchTree(); }, mounted() { this.initChart(); this.__resizeHandler = debounce(() => { if (this.chart) { this.chart.resize(); } }, 100); window.addEventListener("resize", this.__resizeHandler); }, beforeDestroy() { if (!this.chart) { return; } window.removeEventListener("resize", this.__resizeHandler); this.chart.dispose(); this.chart = null; }, methods: { _fetchTree() { fetchTreeById().then((res) => { this.data = res; this.chart.setOption({ series: [ { data: [res], }, ], }); }); }, searchTree() { console.log(this.input); this.getListByFuzzy(this.data, this.input); this.chart.setOption({ series: [ { data: [this.data], }, ], }); }, // dws_mod_sale_branch_1 // dwm_mod_loan_base_success_check //https://blog.csdn.net/WZY_snail/article/details/107343887 //https://blog.csdn.net/lpsqd2018/article/details/105074927 // collapsed = true 就是敞开节点,等于false就是关上节点 // https://segmentfault.com/a/1190000023265582 getListByFuzzy(nodes) { nodes.children.forEach((item) => { if (item.children && item.children.length) { this.getListByFuzzy(item); item.children = item.children.filter((item) => { if ( item.name.indexOf(this.input) != -1 || item.collapsed === false ) { return item; } }); item.children.length && (item.collapsed = false); } }); }, initChart() { this.chart = echarts.init(document.getElementById("chart")); const initOption = { tooltip: { trigger: "item", triggerOn: "mousemove", formatter: function(param) { return ( "工作名称 : " + param.name + " </br> " + "父节点名称 :" + param.data.pName ); }, }, series: [ { type: "tree", initialTreeDepth: 5, nodePadding: 8, layerPadding: 200, top: "1%", left: "7%", bottom: "1%", right: "20%", symbolSize: 10, zoom: 1, //以后视角的缩放比例 roam: true, //是否开启平游或缩放 scaleLimit: { //滚轮缩放的极限管制 min: 0.5, max: 5, }, label: { normal: { verticalAlign: "middle", align: "right", color: "black", fontSize: 16, position: "right", rotate: 20, }, }, leaves: { label: { normal: { verticalAlign: "middle", align: "left", color: "black", fontSize: 16, position: "left", rotate: 0, offset: [20, 0], }, }, }, lineStyle: { color: { type: "linear", //linear 线性突变 radial 径向突变 colorStops: [ { offset: 0, color: "yellow", // 0% 处的色彩 }, { offset: 1, color: "red", // 100% 处的色彩 }, ], global: false, }, width: 4, type: "solid", //'dotted'虚线 'solid'实线 }, }, ], }; this.chart.setOption(initOption); }, },};</script><style scoped>#input { width: 300px; height: 44px; /* border: solid; background-color: lawngreen; border-color: red; */}#chart { width: 100%; height: 800px;}</style>