iView實現表格拖拽列寬度,列顯示順序及顯示字段

需要實現表格列寬度調整,選擇展示表格字段,以及顯示順序,先看效果,每次變動后保存到本地緩存中,也可以與后臺配合保存到數據庫,實現用戶自定義表格.
在這里插入圖片描述

1.安裝vuedraggable實現拖拽

npm i vuedraggable

2.新建組件 FilterColumns.vue

我這里默認把操作列放到最后一個并且不允許編輯,如不需要可刪除

<template><RadioGroup type="button"><Radio title="篩選列"><Icon type="md-list" class="showColumn" @click="modalVisible = true"></Icon><Modaltitle="篩選列"v-model="modalVisible":mask-closable="false":width="800"><Form ref="form" inline><FormItem style="width: 98%" class="showcolumns"><CheckboxGroup v-model="selectTitles" @on-change="changeColumns"><draggablev-model="sortTitles"chosenClass="active"animation="500"@end="changeColumns"><Checkboxv-for="(item, index) in sortTitles":key="index":label="item"v-show="!['操作', 'undefined'].includes(item + '')"><span>{{ item }}</span></Checkbox></draggable></CheckboxGroup></FormItem></Form><div slot="footer"><Button type="text" @click="clear">重置</Button><Button type="text" @click="modalVisible = false">取消</Button><Button type="success" @click="reverseSelect">反選</Button></div></Modal></Radio></RadioGroup>
</template><script>
import draggable from "vuedraggable";
export default {name: "FilterColumns",components: { draggable },props: {columns: {type: Array,default: () => [],},cacheKey: {type: String,default: "",},},data() {return {key: "",modalVisible: false, // 添加或編輯顯示selectTitles: [],sortTitles: [],widthTitles:{init:"0",},};},methods: {changeColumnsWidth(v){if(v){this.widthTitles[v[2].title] = v[0];this.changeColumns();}},clear(){this.removeStore(`select::${this.key}`);this.removeStore(`sort::${this.key}`);this.removeStore(`width::${this.key}`);this.init();},init() {//this.key = this.$route.name;if (this.cacheKey) {this.key = this.cacheKey;} else {this.key = this.$route.name;}this.initData();this.changeColumns();},initData() {//此處保存到本地緩存,可換成請求后臺接口獲取用戶自定義數據let selectTitleStr = this.getStore(`select::${this.key}`);this.selectTitles = selectTitleStr && selectTitleStr != "[]"? JSON.parse(selectTitleStr) : [];let sortColumsStr = this.getStore(`sort::${this.key}`);this.sortTitles =sortColumsStr && sortColumsStr != "[]" ? JSON.parse(sortColumsStr) : [];let widthColumsStr = this.getStore(`width::${this.key}`);this.widthTitles =widthColumsStr && widthColumsStr != "{}" ? JSON.parse(widthColumsStr) : { init:"0"};},changeColumns() {var that = this;if (!!!this.sortTitles.length) {this.sortTitles = this.columns.map((item) => item.title).filter((item) => item && item.title != "操作");}this.columns.forEach(item => {item.resizable = true;if(!item.width && item.minWidth){item.width = item.minWidth} else if(!item.width && !item.minWidth){item.width = 200;}});if (this.widthTitles.init=="0") {this.columns.forEach(item=>{that.widthTitles[item.title] = item.width;})that.widthTitles.init = "1";}//如果選中標題不存在則賦予全部if (!!!this.selectTitles.length) {this.selectTitles = JSON.parse(JSON.stringify(this.sortTitles));}//此處保存到本地緩存,可換成請求后臺接口,保存至數據庫this.setStore(`select::${this.key}`, JSON.stringify(this.selectTitles));this.setStore(`sort::${this.key}`, JSON.stringify(this.sortTitles));this.setStore(`width::${this.key}`, JSON.stringify(this.widthTitles));let currentColumns = this.columns.filter((item) =>this.selectTitles.includes(item.title) ||!!!item.title ||item.title == "操作").map((item, index) => {if (item.title !== "操作" && item.title) {item.titleSort = this.sortTitles.findIndex((sortTitle) => item.title == sortTitle);} else if (item.title == "操作") {item.titleSort = this.sortTitles.length;} else {item.titleSort = -this.sortTitles.length + index;}return item;});currentColumns.sort((a, b) => a.titleSort - b.titleSort);currentColumns.forEach(item=>{item.width = that.widthTitles[item.title];})delete currentColumns[currentColumns.length-1].widthcurrentColumns[currentColumns.length-1].minWidth= 162;this.$emit("on-change", currentColumns);},reverseSelect() {if (this.selectTitles.length > 0) {this.selectTitles = [];} else {this.selectTitles = JSON.parse(JSON.stringify(this.sortTitles));this.changeColumns();}},},mounted() {this.init();this.$nextTick(function() {this.$on('changeCWidth', function(newWidth, oldWidth, column, event) {this.changeColumnsWidth(newWidth, oldWidth, column, event);});});},
};
</script>
<style lang="less" scoped>
.filter-columns-btn {width: 30px;height: 30px;line-height: 25px;text-align: center;border-radius: 2px;border: 1px solid #4383f3;cursor: pointer;
}
</style>

3.在main.js中注冊成全局組件

import FilterColumns from '@/views/my-components/FilterColumns'
Vue.component('filterColumns', FilterColumns);

4.使用方法

在合適位置(一般搜索按鈕后,會顯示篩選按鈕)引入組件

  <filterColumnsref="fc":columns="columns"@on-change="currentColumns = $event"/><Table@on-column-width-resize="$refs.fc.changeColumnsWidth(arguments)":columns="currentColumns":data="data"ref="table"></Table><script>
export default {data() {//可展示的字段columns:[{type: "selection",width: 35,align: "center",},{type: "index",width: 55,align: "center",},],//需要展示的字段,設置為空數組即可currentColumns:[],}
}
</script>

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

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

相關文章

機器學習(五) -- 監督學習(3) -- 決策樹

系列文章目錄及鏈接 上篇&#xff1a;機器學習&#xff08;五&#xff09; -- 監督學習&#xff08;2&#xff09; -- 樸素貝葉斯 下篇&#xff1a;機器學習&#xff08;五&#xff09; -- 監督學習&#xff08;4&#xff09; -- 集成學習方法-隨機森林 前言 tips&#xff1a…

學習Uni-app開發小程序Day23

今天學習了將上一章的所有核算的js&#xff0c;抽離出去&#xff0c;讓在其他地方可以直接調用&#xff0c;然后和適配抖音的辦法&#xff0c;封裝網絡請求&#xff1b; 抽離公共方法 如何將公共方法抽離&#xff1f; 1、在根目錄創建一個目錄&#xff0c;一般起名是:utils 2…

物聯網網關在電梯按需維保方案中起到什么作用?梯聯網網關

為減少電梯故障和預防電梯事故&#xff0c;保障人身和財產安全&#xff0c;基于物聯網技術的電梯按需維保已在全國多地陸續推行&#xff0c;做到了電梯安全隱患預測式排查&#xff0c;處理問題更具科學性、針對性和精準性&#xff0c;有效提升了電梯運行的安全性。那么&#xf…

深度學習之基于YoloV5入侵檢測系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景 隨著信息技術的飛速發展&#xff0c;網絡安全問題日益凸顯。入侵檢測系統&#xff08;IDS&#xff0…

IC設計運營管理ERP適合中小型芯片公司

在數字化、智能化的今天&#xff0c;企業資源計劃(ERP)系統已成為企業管理的重要工具。特別是在中小型芯片公司中&#xff0c;IC設計運營管理ERP更是發揮著舉足輕重的作用。 首先&#xff0c;ERP系統能夠實現對企業內各種資源的集成管理&#xff0c;包括資金、人力資源、設備和…

我的第一個JAVA程序IDEA版

目錄 第一步 新建一個空項目第二步 新建模塊第三步 新建包第四步 新建類第五步 新建main方法 第一步 新建一個空項目 第二步 新建模塊 第三步 新建包 第四步 新建類 然后在包文件夾下新建類 第五步 新建main方法

線程池(C++)

個人主頁&#xff1a;Lei寶啊 愿所有美好如期而遇 線程池 實現線程類 #pragma once#include <pthread.h> #include <iostream> #include <vector> #include <string> #include <cstdlib> #include <cstring> #include <functional&…

Python深度學習基于Tensorflow(12)實戰生成式模型

文章目錄 Deep Dream風格遷移參考資料 Deep Dream DeepDream 是一項將神經網絡學習模式予以可視化展現的實驗。與孩子們觀察云朵并嘗試解釋隨機形狀相類似&#xff0c;DeepDream 會過度解釋并增強其在圖像中看到的圖案。 DeepDream為了說明CNN學習到的各特征的意義&#xff0c…

「51媒體」線下活動媒體同步直播,云分發,分流直播

傳媒如春雨&#xff0c;潤物細無聲&#xff0c;大家好&#xff0c;我是51媒體網胡老師。 線下活動除了邀請嘉賓&#xff0c;邀請媒體&#xff0c;邀請行業大咖KOL&#xff0c;來為活動站臺&#xff0c;背書外&#xff0c;我們也可以將線下的活動同步在線上進行直播&#xff0c…

Codeforces Round 821 (Div. 2) C. Parity Shuffle Sorting (構造之全變成一樣的)

給你一個數組 a a a &#xff0c;其中有 n n n 個非負整數。你可以對它進行以下操作。 選擇兩個索引 l l l 和 r r r ( 1 ≤ l < r ≤ n ) ( 1≤l<r≤n ) (1≤l<r≤n)。 如果 a l a r a_la_r al?ar? 是奇數&#xff0c;則進行 a r : a l a_r:a_l ar?:al?…

react【框架原理詳解】JSX 的本質、SyntheticEvent 合成事件機制、組件渲染過程、組件更新過程

JSX 的本質 JSX 代碼本身并不是 HTML&#xff0c;也不是 Javascript&#xff0c;在渲染頁面前&#xff0c;需先通過解析工具&#xff08;如babel&#xff09;解析之后才能在瀏覽器中運行。 babel官網可查看 JSX 解析后的效果 更早之前&#xff0c;Babel 會把 JSX 轉譯成一個 R…

AI大模型探索之路-實戰篇4:DB-GPT數據應用開發框架調研實踐

目錄 前言一、DB-GPT總體概述二、DB-GPT關鍵特性1、私域問答&數據處理&RAG2、多數據源&GBI3、多模型管理4、自動化微調5、Data-Driven Multi-Agents&Plugins6、隱私安全 三、服務器資源準備1、創建實例2、打開jupyterLab 四、DB-GPT啟動1、激活 conda 環境2、切…

區塊鏈fisco聯盟鏈搭建(二)搭建多群組聯盟鏈

本文章只講搭建的命令方法 以單機、四機構、三群組、八節點的星形組網拓撲為例 第一步創建并進入工作目錄&#xff08;繼續以fisco為例&#xff09; mkdir /fisco cd /fisco 獲取搭鏈腳本上一篇文章區塊鏈fisco聯盟鏈搭建 (一)搭建單群組四節點聯盟鏈中有 第二步生成多群組…

抖音小店沒有流量不出單?歸根到底,就是轉化率不行!

哈嘍~我是電商月月 新手做抖音小店&#xff0c;最憂愁的就是&#xff1a;店鋪不出單怎么辦&#xff1f; 商家通常會把沒有銷量的原因&#xff0c;都推向于“店鋪沒有流量” 但在抖音&#xff0c;這個日活量高達9億的平臺來說&#xff0c;任何商鋪最不缺的應該就是流量了 但…

61850的總體建模原則

IEC 61850標準是電力系統自動化領域的一個重要標準,它定義了數據的模型和設備描述,使得不同廠家的設備之間能夠實現互操作性。下面將圍繞“61850的總體建模原則”展開討論,主要包括物理設備建模基礎、邏輯設備組合規則、邏輯節點功能劃分、數據模型統一標準、配置文件規范描…

炒股前你要知道的股票知識

一、股票組成 A股股票組成板塊有:地區板塊、行業板塊、證監會板塊,概念板塊。 其中各個板塊還可以分為: A農、林、牧、漁業; B采礦業; C制造業; D電力、熱力、燃氣及水生產和供應業; E建筑業; F批發和零售業; G交通運輸、倉儲和郵政業; H住宿和餐飲業; I…

《Qt》使用Windeployqt發布程序

之前都是使用QTVS開發&#xff0c;這次直接使用QT開發&#xff0c;記錄一下程序發布過程&#xff0c;方便后期使用查閱。 添加環境變量 在path目錄下添加如下路徑&#xff1a; 之前使用QTVS2013&#xff0c;添加如下路徑 D:\App\Qt5.9.3\5.9.3\msvc2013_64\bin; D:\App\Qt…

dll文件是什么?電腦丟失某個dll文件有什么解決辦法

Dll文件是什么&#xff1f;這個文件在電腦中是什么樣的地位&#xff1f;如果電腦提示丟失了某個dll文件那么有什么辦的解決這個問題呢&#xff1f;如何將丟失的dll文件進行修復呢&#xff1f;今天這篇文章將按就來教大家幾種修復丟失dll文件問題的方法。 DLL 文件&#xff0c;全…

[Redis]基本全局命令

Redis存儲方式介紹 在 Redis 中數據是以鍵值對的凡事存儲的&#xff0c;鍵&#xff08;Key&#xff09;和值&#xff08;Value&#xff09;是基本的數據存儲單元。以下是對 Redis 鍵值對的詳細講解&#xff1a; 鍵&#xff08;Key&#xff09;&#xff1a; 類型&#xff1a;…

JVM、JRE和JDK的區別

首先需要確定的是JDK里是包含JRE的&#xff0c;而JRE里又包含JVM&#xff0c;它們區別在于面向的服務對象不同所以進行了不同的包裝。 JVM&#xff1a;JVM是面向操作系統&#xff0c;.Class字節碼->機器碼以及程序運行的內存的管理。 JRE&#xff1a;JRE是面向于程序的&am…