el-table封裝點擊列篩選行數據功能,支持篩選,搜索,排序功能

數據少的話,可以前端實現,如果多的話,建議還是請求接口比較合理父組件:

<template>

? <div class="home">

? ? <!-- <img alt="Vue logo" src="../assets/logo.png">

? ? ? <HelloWorld msg="Welcome to Your Vue.js App" /> -->

? ? <el-button @click="calculateSum">求和</el-button>

? ? <el-input v-model="searchValue"></el-input>

? ? <el-table :data="tableData" height="250" border style="width: 100%;position: relative;" id="table1">

? ? ? <el-table-column prop="date" label="日期" width="180">

? ? ? ? <template v-slot:header>

? ? ? ? ? <i class="el-icon-search" style="margin-right: 15px;" @click.stop="filterData($event, 'date')"></i>

? ? ? ? ? <span class="table-heard-filter" style="color: red; font-weight: bold;">0</span>

? ? ? ? </template>

? ? ? </el-table-column>

? ? ? <el-table-column prop="name" label="姓名" width="180">

? ? ? ? <template v-slot:header>

? ? ? ? ? <el-checkbox v-model="checked2" @change="changeFnc('name')"></el-checkbox>

? ? ? ? ? <i class="el-icon-search" style="margin-right: 15px;" @click.stop="filterData($event, 'name')"></i>

? ? ? ? ? <span class="table-heard-filter">1</span>

? ? ? ? </template>

? ? ? </el-table-column>

? ? </el-table>

? ? <TableTool v-if="showFilterTool" ref="selectTool" :filterToolLeft="filterToolLeft" :filterToolTop="filterToolTop"

? ? ? @closeTool="closeTool" @saveSeach="saveSeach" :ids="ids" :type="type" />

? </div>

</template>

<script>

// @ is an alias to /src

import HelloWorld from '@/components/HelloWorld.vue'

import TableTool from '@/components/TableTool.vue'

import ColumnDialog from './ColumnDialog.vue'

import { Checkbox } from 'element-ui';

export default {

? name: 'HomeView',

? components: {

? ? HelloWorld,

? ? TableTool,

? ? ColumnDialog

? },

? data() {

? ? return {

? ? ? checked: false,

? ? ? checked2: false,

? ? ? summaryShow: false,

? ? ? summary: [], ?// 用于存放總計數據的數組

? ? ? searchValue: "",

? ? ? CheckboxArr: [],

? ? ? ids: [], // 初始化ids為空數組

? ? ? type: "",

? ? ? currentSummaryColumn: null, // 當前點擊的列名

? ? ? tableData: [{

? ? ? ? date: '2016-05-03',

? ? ? ? name: 56,

? ? ? ? address: 8,

? ? ? ? id: "0"

? ? ? }, {

? ? ? ? date: '2016-05-02',

? ? ? ? name: 78,

? ? ? ? address: 8,

? ? ? ? id: "1"

? ? ? }, {

? ? ? ? date: '2016-05-04',

? ? ? ? name: 0,

? ? ? ? address: 8,

? ? ? ? id: "2"

? ? ? }

? ? ? ],

? ? ? showFilterTool: false,

? ? ? CheckboxArr: [],

? ? ? ids: [],

? ? ? type: "",

? ? ? currentSummaryColumn: null // 當前點擊的列名

? ? }

? },

? mounted() {

? ? localStorage.setItem('CheckboxArr', JSON.stringify(this.tableData))

? ? // this.scroll()

? ? this.closeTableToolFnc()

? },

? beforeDestroy() {

? ? // this.scroll()

? ? this.closeTableToolFnc()

? },

? methods: {

? ? //子組件只用@click.stop防止事件冒泡,父組件單擊任意位置關閉子組件

? ? closeTableToolFnc() {

? ? ? document.addEventListener("click", (e) => {

? ? ? ? // if (!this.$refs.selectTool.contains(e.target)) {

? ? ? ? this.closeTool()

? ? ? ? // }

? ? ? });

? ? },

? ? filterData(e, type) {

? ? ? console.log(type);

? ? ? this.type = type

? ? ? this.showFilterTool = false;

? ? ? this.$nextTick(() => {

? ? ? ? this.filterToolTop = e.pageY;

? ? ? ? this.filterToolLeft = e.pageX;

? ? ? ? this.ids = []

? ? ? ? this.tableData.forEach(t => {

? ? ? ? ? this.ids.push(t.id)

? ? ? ? })

? ? ? ? this.showFilterTool = true;

? ? ? });

? ? },

? ? closeTool() {

? ? ? this.showFilterTool = false;

? ? },

? ? saveSeach(data) {

? ? ? this.tableData = []

? ? ? this.tableData = data

? ? ? this.closeTool();

? ? },

? }

}

</script>

<style>

.Tableone ::-webkit-scrollbar,

::-webkit-scrollbar-track,

::-webkit-scrollbar-thumb {

? display: none

}

</style>

子組件:

<template>

? ? <div class="tableTool" :style="{ top: filterToolTop + 30 + 'px', left: filterToolLeft - 20 + 'px' }" @click.stop>

? ? ? ? <el-button @click="shengFnc">升序</el-button>

? ? ? ? <el-button @click="jiangFnc">降序</el-button>

? ? ? ? <el-input v-model="keyword" prefix-icon="el-input__icon el-icon-search" type="text" placeholder="搜索"

? ? ? ? ? ? @blur="blurFnc"></el-input>

? ? ? ? <div class="select-box">

? ? ? ? ? ? <el-checkbox v-model="checkAll" @change="handleCheckAllChange">全選</el-checkbox>

? ? ? ? ? ? <el-checkbox-group v-model="checkedList">

? ? ? ? ? ? ? ? <el-checkbox v-for="(item, index) in CheckboxArr" :label="item.id" :key="index" :value="item.id">

? ? ? ? ? ? ? ? ? ? <span>{{ item[type] }}</span>

? ? ? ? ? ? ? ? </el-checkbox>

? ? ? ? ? ? </el-checkbox-group>

? ? ? ? </div>

? ? ? ? <div class="bottom">

? ? ? ? ? ? <el-button size="mini" @click="$emit('closeTool')">取消</el-button>

? ? ? ? ? ? <el-button type="primary" size="mini" @click="save">確認</el-button>

? ? ? ? </div>

? ? ? ? <i class="el-icon-caret-top"></i>

? ? </div>

</template>

<script>

export default {

? ? name: "tableCol",

? ? props: {

? ? ? ? filterToolLeft: {

? ? ? ? ? ? required: true,

? ? ? ? ? ? type: Number

? ? ? ? },

? ? ? ? filterToolTop: {

? ? ? ? ? ? required: true,

? ? ? ? ? ? type: Number

? ? ? ? },

? ? ? ? ids: {

? ? ? ? ? ? type: Array

? ? ? ? },

? ? ? ? type: {

? ? ? ? ? ? type: String

? ? ? ? }

? ? },

? ? data() {

? ? ? ? return {

? ? ? ? ? ? keyword: "",

? ? ? ? ? ? checkAll: false,

? ? ? ? ? ? checkedList: [],

? ? ? ? ? ? options: [],

? ? ? ? ? ? isIndeterminate: true,

? ? ? ? ? ? allOptions: [],

? ? ? ? ? ? CheckboxArr: JSON.parse(localStorage.getItem('CheckboxArr')),

? ? ? ? ? ? c: []

? ? ? ? };

? ? },

? ? mounted() {

? ? },

? ? methods: {

? ? ? ? shengFnc() {

? ? ? ? ? ? this.CheckboxArr.sort((a, b) => a.id - b.id);

? ? ? ? },

? ? ? ? jiangFnc() {

? ? ? ? ? ? this.CheckboxArr.sort((a, b) => b.id - a.id);

? ? ? ? },

? ? ? ? blurFnc() {

? ? ? ? ? ? console.log(this.keyword);

? ? ? ? ? ? if (this.keyword) {

? ? ? ? ? ? ? ? this.CheckboxArr = this.CheckboxArr.filter(item => {

? ? ? ? ? ? ? ? ? ? if (this.$props.type == 'date') {

? ? ? ? ? ? ? ? ? ? ? ? return item.date == this.keyword;

? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? return item.name == this.keyword;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? });

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? this.CheckboxArr = JSON.parse(localStorage.getItem('CheckboxArr'))

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? handleCheckAllChange(val) {

? ? ? ? ? ? console.log(val, this.checkedList);

? ? ? ? ? ? this.checkedList = val ? this.CheckboxArr.map(item => item.id) : [];

? ? ? ? },

? ? ? ? save() {

? ? ? ? ? ? this.c = []

? ? ? ? ? ? this.CheckboxArr.forEach(r => {

? ? ? ? ? ? ? ? this.checkedList.forEach(i => {

? ? ? ? ? ? ? ? ? ? if (r.id == i) {

? ? ? ? ? ? ? ? ? ? ? ? this.c.push(r)

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? })

? ? ? ? ? ? })

? ? ? ? ? ? this.$emit("saveSeach", this.c);

? ? ? ? },


?

? ? },

? ? mounted() {

? ? ? ? console.log(this.CheckboxArr, "傳入的數據");

? ? ? ? this.checkedList = [...this.$props.ids]

? ? ? ? if (this.CheckboxArr.length == this.checkedList.length) {

? ? ? ? ? ? this.checkAll = true

? ? ? ? } else {

? ? ? ? ? ? this.checkAll = false

? ? ? ? }

? ? },

};

</script>

<style scoped>

.tableTool {

? ? position: fixed;

? ? background: #fff;

? ? box-shadow: 0 0 5px #ccc;

? ? padding: 10px;

? ? z-index: 999;


?

}

/deep/.el-input__inner {

? ? padding-left: 30px;

}

.select-box {

? ? border: #ccc solid 1px;

? ? padding: 10px;

? ? margin-top: 10px;

? ? max-height: 280px;

? ? overflow: auto;

? ? max-width: 400px;

}

/deep/ .el-checkbox {

? ? display: block;

? ? margin-top: 5px;

}

/deep/ .el-radio-group {

? ? display: flex;

? ? flex-direction: column;

}

.bottom {

? ? display: flex;

? ? justify-content: flex-end;

? ? margin-top: 10px;

}

.el-icon-caret-top {

? ? position: absolute;

? ? color: #fff;

? ? top: -13px;

? ? font-size: 20px;

}

.el-checkbox:last-of-type {

? ? margin-right: none;

}

</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41417.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41417.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41417.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Hilbert編碼 思路和scala 代碼

需求&#xff1a; 使用Hilbert 曲線對遙感影像瓦片數據進行編碼&#xff0c;獲取某個區域的編碼值即可 Hilbert 曲線編碼方式 思路 大致可以對四個方向的數據進行歸類 左下左上右上右下 這個也對應著編碼的順序 思考在不同Hilbert深度&#xff08;階&#xff09;情況下的…

【fastadmin開發實戰】經營數據自動識別錄入

項目場景描述&#xff1a;每日錄入各個門店的員工經營數據&#xff0c;直接從微信復制報數、系統識別錄入。 解決方案&#xff1a;各個門店按照固定的匯報模板進行匯報&#xff08;如福田店有員工1、2、3、4、5號員工&#xff0c;每個員工按模板報數&#xff09; 例如&#xf…

Qt學習:Qt窗口組件以及窗口類型

一、Qt的窗口組件有哪些 Qt是一個跨平臺的C應用程序開發框架&#xff0c;它的窗口組件&#xff0c;也稱為用戶界面元素&#xff0c;為開發者提供了豐富的可視化界面設計選項。在Qt中&#xff0c;窗口組件主要包括&#xff1a; 窗口&#xff08;Window&#xff09;&#xff1a;…

JMH320【親測】【御劍九歌】唯美仙俠手游御劍九歌+WIN學習手工端+視頻教程+開服清檔+運營后臺+授權GM物品充值后臺

資源介紹&#xff1a; 這也是仙夢奇緣的一個游戲 注意&#xff1a;外網14位IP或域名 ———————————————————————————————————– ps后臺介紹: 1區運營后臺&#xff1a;http://ip:9981/admin/admintool/ 2區運營后臺&#xff1a;http://ip…

Day44:LeedCode 188.買賣股票的最佳時機IV 309.最佳買賣股票時機含冷凍期 714.買賣股票的最佳時機含手續費

188. 買賣股票的最佳時機 IV 給你一個整數數組 prices 和一個整數 k &#xff0c;其中 prices[i] 是某支給定的股票在第 i 天的價格。 設計一個算法來計算你所能獲取的最大利潤。你最多可以完成 k 筆交易。也就是說&#xff0c;你最多可以買 k 次&#xff0c;賣 k 次。 注意&…

[深度學習]卷積理解

單通道卷積 看這個的可視化就很好理解了 https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md 多通道卷積 當輸入有多個通道時,卷積核需要擁有相同的通道數. 假設輸入有c個通道,那么卷積核的每個通道分別于相應的輸入數據通道進行卷積,然后將得到的特征圖對…

51單片機STC89C52RC——14.1 直流電機調速

目錄 目的/效果 1&#xff1a;電機轉速同步LED呼吸燈 2 通過獨立按鍵 控制直流電機轉速。 一&#xff0c;STC單片機模塊 二&#xff0c;直流電機 2.1 簡介 2.2 驅動電路 2.2.1 大功率器件直接驅動 2.2.2 H橋驅動 正轉 反轉 2.2.3 ULN2003D 引腳、電路 2.3 PWM&…

智能光伏開發都能用到什么軟件和工具?

隨著全球對可再生能源的日益重視和光伏技術的快速發展&#xff0c;智能光伏開發已成為推動能源轉型的重要力量。在光伏項目的全生命周期中&#xff0c;從設計、建設到運營管理&#xff0c;各種軟件和工具的應用發揮著至關重要的作用。 一、光伏系統設計軟件 1、PVsyst PVsyst…

Linux 端口

什么是虛擬端口 計算機程序之間的通訊&#xff0c;通過IP只能鎖定計算機&#xff0c;但是無法鎖定具體的程序。通過端口可以鎖定計算機上具體的程序&#xff0c;確保程序之間進行溝通。 IP地址相當于小區地址&#xff0c;在小區內可以有許多用戶&#xff08;程序&#xff09;&…

java并發編程 JUC-基礎篇 快速入門

1.進程與線程的概念 &#xff08;1&#xff09;進程 程序有指令與數據組成&#xff0c;指令要運行&#xff0c;數據要讀寫&#xff0c;就必須指令加載到CPU。數據加載到內容&#xff0c;指令運行需要用到磁盤。 當一個程序被運行時&#xff0c;從磁盤加載這個程序的代碼至內…

探索Vue Router:構建高效單頁面應用的指南

引言 Vue Router&#xff0c;作為Vue.js的官方路由管理器&#xff0c;為構建SPA提供了強大的支持 Vue Router 基礎 Vue Router 的基本概念和作用 Vue Router 是一個用于構建單頁面應用的 Vue.js 插件。它允許我們通過定義路由規則來將不同的 URL 映射到不同的組件&#xff…

1023記錄

米哈游二面 自動化測試中自動化驅動的能力&#xff1f; pytest的驅動能力&#xff1a; 1&#xff0c;自動發現測試用例&#xff1a;以"test_"開頭的Python文件、以"Test"開頭的類和以"test_"開頭的函數&#xff0c;將它們識別為測試用例 2&…

植物大戰僵尸融合版最新版1.0下載及安裝教程

《植物大戰僵尸融合版》最新版1.0已經發布&#xff0c;為粉絲們帶來了全新的游戲體驗。這個版本由B站UP主藍飄飄fly精心打造&#xff0c;引入了創新的植物融合玩法&#xff0c;讓玩家可以享受策略和創意的結合。以下是游戲的詳細介紹和安裝指南&#xff1a; 游戲特色介紹 全新…

基于深度學習的圖像背景剔除

在過去幾年的機器學習領域&#xff0c;我一直想打造真正的機器學習產品。 幾個月前&#xff0c;在參加了精彩的 Fast.AI 深度學習課程后&#xff0c;似乎一切皆有可能&#xff0c;我有機會&#xff1a;深度學習技術的進步使許多以前不可能實現的事情成為可能&#xff0c;而且開…

Java--繼承

1.繼承的本質是對某一批類的抽象&#xff0c;從而實現對世界更好的建模 2.extends的意思是“擴展”&#xff0c;子類是父親的擴展 3.Java中只有單繼承&#xff0c;沒有多繼承 4.繼承關系的兩個類&#xff0c;一個為子類&#xff08;派生類&#xff09;&#xff0c;一個為父類…

QML-Grid和OpacityMask

一個格子條&#xff0c;點擊縮短 import QtQuick 2.0 import QtQuick.Window 2.12 import QtQuick.Controls 2.5 //導入 import QtGraphicalEffects 1.12Window {id:windowwidth: 600height: 500color: "white"visible: trueGrid {visible: falseid:gridwidth:405he…

STAR 命令參數解釋

以這個為例子解釋STAR參數含義 STAR 命令參數解釋 STAR \ --outFilterType BySJout \ --runThreadN 8 \ --outFilterMismatchNmax 2 \ --genomeDir <hg19_STARindex> \ --readFilesIn <un_aligned.fastq> \ --outFileNamePrefix <HEK293> \ --outSAMtype B…

歐科云鏈大咖對話:Web3原生創新靜默期,科技巨頭卻在兩極化發展

出品&#xff5c;OKG Research 作者&#xff5c;Hedy Bi 上周末&#xff0c;歐科云鏈研究院接受FT中文的邀請&#xff0c;作為圓桌嘉賓參與了由FT中文網與上海交通大學上海高級金融學院聯合主辦的金融大師課。在圓桌環節&#xff0c;筆者與各位教授和金融行業科技創新前沿實踐…

案例精選 | 聚銘網絡助力南京市玄武區教育局構建內網日志審計合規體系

南京市玄武區教育局作為江蘇省教育領域的先鋒機構&#xff0c;其工作重點涵蓋了教育政策的實施、教育現代化與信息化的融合、教育資源的優化、教育質量的提升以及教育公平的促進。在這一背景下&#xff0c;網絡安全管理成為了確保教育信息化順利推進的關鍵環節之一。 根據玄武…

Nacos單機部署、集群部署以及Nacos默認持久化derby數據庫和配置mysql數據庫

1. Nacos Windows 下載 1.1 去nacos官網下載nacos-server 發布歷史 | Nacos 官網https://nacos.io/download/release-history/ 下載版本為 nacos-server-2.3.1.zip 2. Derby數據庫 2.1 默認使用Derby數據庫 官網下載Derby數據庫即可。 Apache Derby數據庫https://db.apac…