最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

element-plus的el-table自定義表頭篩選查詢功能實現(xiàn)

 更新時間:2024年07月22日 10:15:15   投稿:mrr  
這篇文章主要介紹了element-plus的el-table自定義表頭篩選查詢功能實現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

一、效果

二、代碼

1.代碼可直接復(fù)制使用

<template>
  <div class="page-view" @click="handleClickOutside">
    <el-button @click="resetFilters">Reset Filters</el-button>
    <el-table ref="tableRef" row-key="date" :data="filteredData" style="width: 100%">
      <el-table-column prop="date" label="Date" sortable width="180" column-key="date" />
      <el-table-column prop="name" label="Name" sortable width="180">
        <template #header>
          <div style="display: inline-block; align-items: center;">
            <span>Name</span>
            <el-icon ref="buttonRef" @click.stop="toggleNameFilter(buttonRef, 'nameFilter')"
              style="cursor: pointer; margin-left: 10px;"
              :style="{ color: searchDate.nameFilter ? '#007d7b' : '#85888e' }">
              <Filter />
            </el-icon>
          </div>
        </template>
        <template #default="scope">
          <span>{{ scope.row.name }}---</span>
        </template>
      </el-table-column>
      <el-table-column prop="address" label="Address" width="300" />
      <el-table-column prop="tag" label="Tag">
        <template #header>
          <div style="display: inline-block; align-items: center;">
            <span>Tag</span>
            <el-icon ref="buttonRef2" @click.stop="toggleNameFilter(buttonRef2, 'tagFilter')"
              style="cursor: pointer; margin-left: 10px;"
              :style="{ color: searchDate.tagFilter ? '#007d7b' : '#85888e' }">
              <Filter />
            </el-icon>
          </div>
        </template>
        <template #default="scope">
          <el-tag :type="scope.row.tag === 'Home' ? 'primary' : 'success'">{{ scope.row.tag }}</el-tag>
        </template>
      </el-table-column>
    </el-table>
    {{ visible }}
    <pre>{{ searchDate }}</pre>
    <el-popover :visible="visible" :virtual-ref="refName" placement="bottom" :width="'fit-content'">
      <div>
        <el-input v-if="showKey === 'nameFilter'" v-model="searchDate.nameFilter" placeholder="輸入框"
          @input="applyNameFilter" clearable style="margin-top: 10px; width: 150px;" />
        <el-select v-if="showKey === 'tagFilter'" v-model="searchDate.tagFilter" placeholder="Select Tag"
          @change="applyTagFilter" clearable style="margin-top: 10px; width: 150px;">
          <el-option label="Home" value="Home" />
          <el-option label="Office" value="Office" />
        </el-select>
        <div class="mt" style="text-align: right;">
          <el-button type="info" link @click="cancelFilter">重置</el-button>
          <el-button type="primary" link @click="searchFilter">篩選</el-button>
        </div>
      </div>
    </el-popover>
  </div>
</template>
<script setup>
import { ref, computed, unref } from 'vue'
// import { ElIconSearch, ElIconSArrowDown } from '@element-plus/icons-vue'
import { Filter } from '@element-plus/icons-vue'
import { ClickOutside as vClickOutside } from 'element-plus'
const buttonRef = ref()
const buttonRef2 = ref()
const popoverRef = ref()
const onClickOutside = () => {
  console.log(123);
  if (unref(popoverRef) && unref(popoverRef).popperRef) {
    unref(popoverRef).popperRef?.delayHide?.()
  }
}
const showKey = ref(undefined) // 當(dāng)前展示哪個篩選窗
const visible = ref(false) // 手動控制篩選窗顯隱
const refName = ref(null) // 動態(tài)綁定在哪個表頭圖標(biāo)下
const tableRef = ref() // 表格ref
const searchDate = ref({
  nameFilter: undefined,
  tagFilter: undefined,
}) // 查詢參數(shù)
// 全局重置
const resetFilters = () => {
  searchDate.value.nameFilter = undefined
  searchDate.value.tagFilter = undefined
  applyNameFilter()
  applyTagFilter()
  getData()
}
// 觸發(fā)篩選
const toggleNameFilter = (ref, key) => {
  if (showKey.value !== key) {
    visible.value = false
    getData()
  }
  refName.value = ref
  showKey.value = key
  visible.value = !visible.value
}
// 點擊其他元素
const handleClickOutside = () => {
  // visible.value = false;
};
// 重置
const cancelFilter = () => {
  searchDate.value[showKey.value] = undefined
  visible.value = false;
  getData()
}
// 篩選
const searchFilter = () => {
  visible.value = false;
  getData()
}
// 單獨(dú)過濾
const applyNameFilter = () => {
  // Filtering logic can be customized if needed
}
const applyTagFilter = () => {
  // Filtering logic can be customized if needed
}
// 原數(shù)據(jù)
const tableData = [
  {
    date: '2016-05-03',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
    tag: 'Home',
  },
  {
    date: '2016-05-02',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
    tag: 'Office',
  },
  {
    date: '2016-05-04',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
    tag: 'Home',
  },
  {
    date: '2016-05-01',
    name: 'Jack',
    address: 'No. 189, Grove St, Los Angeles',
    tag: 'Office',
  },
]
// 列表顯示的數(shù)據(jù)
// const filteredData = computed(() => {
//   return tableData.filter((item) => {
//     const nameMatch = searchDate.value.nameFilter ? item.name.toLowerCase().includes(searchDate.value.nameFilter.toLowerCase()) : true
//     const tagMatch = searchDate.value.tagFilter ? item.tag === searchDate.value.tagFilter : true
//     return nameMatch && tagMatch
//   })
// })
const filteredData = ref(JSON.parse(JSON.stringify(tableData)))
// 獲取數(shù)據(jù)
const getData = () => {
  filteredData.value = tableData.filter((item) => {
    const nameMatch = searchDate.value.nameFilter ? item.name.toLowerCase().includes(searchDate.value.nameFilter.toLowerCase()) : true
    const tagMatch = searchDate.value.tagFilter ? item.tag === searchDate.value.tagFilter : true
    return nameMatch && tagMatch
  })
}
</script>
<style lang="scss" scoped>
:deep(.el-popover) {
  width: fit-content !important;
}
:deep(.el-popover.el-popper) {
  width: fit-content !important;
}
</style>

三、問題

1.使用el-popover完成篩選框

同時通過:visible="visible"來控制篩選框顯隱,但是在el-popover下就不能使用<template #reference>子元素 (如使用子元素,就沒法將篩選框其定位到每個表頭;除非你給每一個表頭的el-icon圖表外都寫一個el-popover來包裹,那樣10個表頭需要寫10個el-popover)。所以控制臺會報警告提示:

ElementPlusError: [ElOnlyChild] no valid child node found at debugWarn (chunk-32EVVALS.js?v=a0ab03ed:9136:37)

暫無好的解決辦法,大家有方案可提供下。

——————————————————————————————————————————————————
更新: 我直接把el-table也給進(jìn)行了封裝,動態(tài)遍歷渲染表格(也就動態(tài)渲染了表頭,也就可以給表頭el-icon圖標(biāo)外包裹一個el-popover來實現(xiàn)各個表頭的篩選,且不會報告警報錯)

到此這篇關(guān)于element-plus的el-table自定義表頭篩選查詢的文章就介紹到這了,更多相關(guān)element-plus的el-table表頭篩選查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決npm安裝錯誤:No matching version found for XXX@3.3.6問題

    解決npm安裝錯誤:No matching version found for&

    這篇文章主要介紹了解決npm安裝錯誤:No matching version found for XXX@3.3.6問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue中vant組件樣式失效問題及解決

    vue中vant組件樣式失效問題及解決

    這篇文章主要介紹了vue中vant組件樣式失效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue router 組件的高級應(yīng)用實例代碼

    vue router 組件的高級應(yīng)用實例代碼

    這篇文章主要介紹了vue-router 組件的高級應(yīng)用,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • vue組件編寫之todolist組件實例詳解

    vue組件編寫之todolist組件實例詳解

    這篇文章主要介紹了vue組件編寫之todolist組件的實例講解,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-01-01
  • vue實現(xiàn)上傳圖片添加水印

    vue實現(xiàn)上傳圖片添加水印

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)上傳圖片添加水印,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • v-model中如何使用過濾器

    v-model中如何使用過濾器

    這篇文章主要介紹了v-model中如何使用過濾器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vuex的使用和簡易實現(xiàn)

    vuex的使用和簡易實現(xiàn)

    這篇文章主要介紹了vuex的使用和簡易實現(xiàn),幫助大家更好的理解和使用vuex,感興趣的朋友可以了解下
    2021-01-01
  • Vue 實現(xiàn)雙向綁定的四種方法

    Vue 實現(xiàn)雙向綁定的四種方法

    這篇文章主要介紹了Vue 實現(xiàn)雙向綁定的四種方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • 解決vue-router 二級導(dǎo)航默認(rèn)選中某一選項的問題

    解決vue-router 二級導(dǎo)航默認(rèn)選中某一選項的問題

    今天小編就為大家分享一篇解決vue-router 二級導(dǎo)航默認(rèn)選中某一選項的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Mint UI組件庫CheckList使用及踩坑總結(jié)

    Mint UI組件庫CheckList使用及踩坑總結(jié)

    這篇文章主要介紹了Mint UI組件庫CheckList使用及踩坑總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論

鸡东县| 兰考县| 封丘县| 米易县| 丰台区| 临西县| 万山特区| 清徐县| 久治县| 德格县| 丽江市| 丽江市| 繁昌县| 山阴县| 临漳县| 西贡区| 湄潭县| 高安市| 岳普湖县| 甘德县| 宿迁市| 嘉祥县| 万全县| 菏泽市| 竹溪县| 会泽县| 洱源县| 错那县| 自贡市| 墨竹工卡县| 乌兰县| 雅江县| 平果县| 布尔津县| 杭锦旗| 固阳县| 太白县| 芦山县| 乳山市| 长治县| 武隆县|