欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3+elementplus 樹節(jié)點過濾功能實現(xiàn)

 更新時間:2024年05月10日 10:43:35   作者:yiyi@yiyi  
樹節(jié)點所展示的街道是讀取的成都市金牛區(qū)的范圍邊界線的json文件,街道下對應(yīng)內(nèi)容市通過fetch調(diào)用接口獲取的內(nèi)容,通過mapTreeData函數(shù)循環(huán)遍歷,對數(shù)據(jù)進行處理,這篇文章主要介紹了vue3+elementplus 樹節(jié)點過濾功能實現(xiàn),需要的朋友可以參考下

樹節(jié)點所展示的街道是讀取的成都市金牛區(qū)的范圍邊界線的json文件,街道下對應(yīng)內(nèi)容市通過fetch調(diào)用接口獲取的內(nèi)容,通過mapTreeData函數(shù)循環(huán)遍歷,對數(shù)據(jù)進行處理,最后返回樹節(jié)點所需要展示的格式,然后elemenplus封裝好的樹節(jié)點過濾方法進行過濾,因為elemenplus封裝好的樹節(jié)點過濾對匹配對應(yīng)的父節(jié)點后不會展示下面的子節(jié)點內(nèi)容,所以用chooseNode方法,如果輸入的參數(shù)是父節(jié)點且能匹配,則返回該節(jié)點以及其下的所有子節(jié)點;如果參數(shù)是子節(jié)點,則返回該節(jié)點的父節(jié)點。name是中文字符,enName是英文字符

  <marsDialog left="10" top="50" width="370">
    <p>數(shù)據(jù)管理</p>
    <div>
      <el-input v-model="filterText" style="width: 240px" placeholder="模糊搜索" @input="inputHanlder" />
      <!-- filter-node-method對樹節(jié)點進行篩選時執(zhí)行的方法, 返回 false 則表示這個節(jié)點會被隱藏 -->
      <el-scrollbar class="scroll-container">
        <div class="scroll-content">
          <el-tree ref="treeRef" style="max-width: 600px" class="filter-tree" :data="_data" :props="defaultProps"
            default-expand-all :filter-node-method="filterNode" @node-click="nodeClick" />
        </div>
      </el-scrollbar>
    </div>
  </marsDialog>
interface Tree {
  [key: string]: any
}
const inputHanlder = (_v: any) => {
  // console.log(jdJson.features);
}
const filterText = ref('')
const treeRef = ref<InstanceType<typeof ElTree>>();
const defaultProps = {
  children: 'children',
  label: 'label',
}
let _allData = reactive({ data: [] });
let _data = ref([])
fetch('xxxxxxx', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzeXNfaWQiOjEsInVpZCI6ImFlMjllODkzODhlMzkyMjljNGE0ZDJkY2U4MTQyZWU4IiwibmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiIiLCJyZWdpc3RlcnRpbWUiOiIyMDIzLzQvMjcgMTc6MjE6MzEiLCJuaWNrbmFtZSI6ImFkbWluIiwiZW1haWwiOiIyNTU4NkB3ZWxsY2h5Lm5ldCIsInBpYyI6IiIsImlhdCI6MTcxNDk4MjczMywiZXhwIjoxNzE1MDY5MTMzfQ.K-NKPvKCWWLlU2nZ1-dmhkhJI7aDxDtEDcbZUrOcOB0'
  }
}).then(response => response.json())
  .then(data => {
    _allData.data.length = 0;
    _allData.data.push(...data.message);
    // 在數(shù)據(jù)填充后調(diào)用mapTreeData函數(shù)
    let treeData = [
      {
        id: 1,
        label: '金牛區(qū)',
        children: mapTreeData(jdJson, _allData.data)
      },
    ];
    _data.value = treeData
  })
  .catch(error => console.log(error));
const mapTreeData = (data: any, allData: any[]): Tree[] => {
  return data.features.map((feature: any, index: number) => {
    const districts = allData.filter((district) => feature.properties.Name === district.streetOffice);
    const children = districts.map((district) => ({ label: district.name, position: [[district.longitude, district.latitude,500]] }));
    return {
      id: index + 2,
      label: feature.properties.Name,
      position: feature.geometry.coordinates,
      children: children || []
    };
  });
};
// 監(jiān)聽輸入框內(nèi)容的變化,以便執(zhí)行篩選操作
watch(filterText, (val) => {
  // 調(diào)用 el-tree 組件的 filter 方法,根據(jù)輸入的值來篩選節(jié)點
  treeRef.value!.filter(val)
})
// 自定義篩選方法,用于決定樹節(jié)點是否應(yīng)該在篩選結(jié)果中顯示
const filterNode = (value: string, data: Tree, node: any) => {
  // 打印篩選值和節(jié)點數(shù)據(jù),用于調(diào)試
  console.log(value); //打印的是篩選操作中用戶輸入的值。在這段代碼中,value 是傳遞給 filterNode 方法的第一個參數(shù),表示用戶輸入的篩選值。
  console.log(data); //打印的是當(dāng)前樹節(jié)點的數(shù)據(jù)。在這段代碼中,data 是傳遞給 filterNode 方法的第二個參數(shù),表示當(dāng)前被篩選的節(jié)點的數(shù)據(jù),包括標(biāo)簽等信息。
  /**
   * 這行代碼是用來處理當(dāng)用戶沒有輸入篩選值時的情況。
    在樹形組件中,如果用戶沒有輸入任何篩選值,那么我們希望所有的節(jié)點都能夠顯示,
    而不應(yīng)該進行任何篩選操作。因此,當(dāng)用戶沒有輸入篩選值時,我們直接返回 true,表示當(dāng)前節(jié)點應(yīng)該被顯示在篩選結(jié)果中。
   */
  if (!value) return true
  // 如果節(jié)點的標(biāo)簽包含篩選值,則返回 true,表示節(jié)點應(yīng)該顯示
  // return data.label.includes(value)
  if (data.label) {
    return chooseNode(value, data, node);
  }
}
// 過濾父節(jié)點 / 子節(jié)點 (如果輸入的參數(shù)是父節(jié)點且能匹配,則返回該節(jié)點以及其下的所有子節(jié)點;如果參數(shù)是子節(jié)點,則返回該節(jié)點的父節(jié)點。name是中文字符,enName是英文字符.
const chooseNode = (value: string, data: Tree, node: { level: any; parent: any; }) => {
  if (data.label.indexOf(value) !== -1) {
    return true
  }
  const level = node.level
  // 如果傳入的節(jié)點本身就是一級節(jié)點就不用校驗了
  if (level === 1) {
    return false
  }
  // 先取當(dāng)前節(jié)點的父節(jié)點
  let parentData = node.parent
  // 遍歷當(dāng)前節(jié)點的父節(jié)點
  let index = 0
  while (index < level - 1) {
    // 如果匹配到直接返回,此處name值是中文字符,enName是英文字符。判斷匹配中英文過濾
    if (parentData.data.label.indexOf(value) !== -1) {
      return true
    }
    // 否則的話再往上一層做匹配
    parentData = parentData.parent
    index++
  }
  // 沒匹配到返回false
  return false
}
let lastStreetPosition: number | null = null;
const nodeClick = (obj: any) => {
  if (obj.label.includes('街道')) {
    mapWork.jinNiuJieDaoWall(obj.position[0]);
    window.map.flyToPositions(obj.position[0], {
      radius: 400,
    });
    lastStreetPosition = obj.position[0]; // 更新上一次包含街道的位置
  } else {
    mapWork.jinNiuJieDaoWall(lastStreetPosition);
    window.map.flyToPoint(obj.position[0], {
      radius: 300,
    });
  }
}

到此這篇關(guān)于vue3+elementplus 樹節(jié)點過濾的文章就介紹到這了,更多相關(guān)vue3樹節(jié)點過濾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue學(xué)習(xí)筆記之vue1.0和vue2.0的區(qū)別介紹

    vue學(xué)習(xí)筆記之vue1.0和vue2.0的區(qū)別介紹

    今天我們來說一說vue1.0和vue2.0的主要變化有哪些?對vue相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2017-05-05
  • Vue3+Ant?design?實現(xiàn)Select下拉框一鍵全選/清空功能

    Vue3+Ant?design?實現(xiàn)Select下拉框一鍵全選/清空功能

    在做后臺管理系統(tǒng)項目的時候,產(chǎn)品增加了一個在Select選擇器中添加一鍵全選和清空的功能,他又不讓在外部增加按鈕,其實如果說在外部增加按鈕實現(xiàn)全選或者清空的話,功能比較簡單的,下面給大家分享Vue3+Ant?design?實現(xiàn)Select下拉框一鍵全選/清空功能,需要的朋友可以參考下
    2024-05-05
  • 詳解vue-flickity的fullScreen功能實現(xiàn)

    詳解vue-flickity的fullScreen功能實現(xiàn)

    這篇文章主要介紹了詳解vue-flickity的fullScreen功能實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Vue.js實現(xiàn)tab切換效果

    Vue.js實現(xiàn)tab切換效果

    這篇文章主要為大家詳細介紹了Vue.js實現(xiàn)tab切換效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Vue中Keep-Alive緩存組件使用語法及原理深度解析

    Vue中Keep-Alive緩存組件使用語法及原理深度解析

    keep-alive是vue中的內(nèi)置組件,能在組件切換過程中將狀態(tài)保留在內(nèi)存中,防止重復(fù)渲染DOM,這篇文章主要介紹了Vue中Keep-Alive緩存組件使用語法及原理,需要的朋友可以參考下
    2024-07-07
  • vue如何實現(xiàn)級聯(lián)選擇器功能

    vue如何實現(xiàn)級聯(lián)選擇器功能

    這篇文章主要介紹了vue如何實現(xiàn)級聯(lián)選擇器功能問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • vue中的生命周期及鉤子函數(shù)

    vue中的生命周期及鉤子函數(shù)

    這篇文章主要介紹了vue中的生命周期及鉤子函數(shù),Vue?實例有一個完整的生命周期,也就是從開始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載?Dom、渲染,下面文章詳細介紹,需要的朋友可以參考一下
    2021-12-12
  • Vue中webpack的使用詳解

    Vue中webpack的使用詳解

    這篇文章主要為大家詳細介紹了Vue中webpack的使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • element的el-tree多選樹(復(fù)選框)父子節(jié)點關(guān)聯(lián)不關(guān)聯(lián)

    element的el-tree多選樹(復(fù)選框)父子節(jié)點關(guān)聯(lián)不關(guān)聯(lián)

    最近想要實現(xiàn)多選框關(guān)聯(lián)的功能,但是卻出現(xiàn)了element的el-tree多選樹(復(fù)選框)父子節(jié)點關(guān)聯(lián)不關(guān)聯(lián)的問題,本文就來介紹一下解決方法,一起來了解一下
    2021-05-05
  • 解決vue中使用Axios調(diào)用接口時出現(xiàn)的ie數(shù)據(jù)處理問題

    解決vue中使用Axios調(diào)用接口時出現(xiàn)的ie數(shù)據(jù)處理問題

    今天小編就為大家分享一篇解決vue中使用Axios調(diào)用接口時出現(xiàn)的ie數(shù)據(jù)處理問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論