vue2表格显隐列的封装【升级缓存版】

news2024/12/23 17:44:40

背景

我们知道,若依后台有列表页、表格字段有显隐列的功能,但是,页面一旦刷新,就又回到初始状态了,但是有时候我们想要刷新后也保留我们设置的显隐列,就需要自己封装了
若依显隐列示例图如下:
在这里插入图片描述

源码

效果展示

效果图如下,点击设置显隐列图标,弹框设置界面,点击修改后会保存设置,刷新后按照我们的设置来显示,即缓存版
在这里插入图片描述

使用方法
    1. 在合适的位置(一般在表格上方)放置显隐列组件,该组件默认只展示一个图标,图标可自定义
    1. 为表格的字段添加v-if判断,详见下图
      在这里插入图片描述
    1. 在data()中设置默认的展示字段
data() {
  return {
     // 需要展示的字段
	 checkList: [], 
	 // 字段信息,弹框中展示用的
	 fieldDisplayList: [
	   { label: "缺陷编号", prop: "dangerCode", },
	   { label: "缺陷类型", prop: "dangerType", },
	   { label: "缺陷分类", prop: "dangerCategory", },
	   { label: "缺陷状态", prop: "step", },
	   { label: "缺陷等级", prop: "dangerLevel", },
	   { label: "上报内容", prop: "dangerContent", },
	   { label: "缺陷位置", prop: "startAxis", },
	   { label: "上报人", prop: "reportName", },
	   { label: "上报时间", prop: "reportTime", },
	],
  }	
}
    1. 在created()中设置默认初始为全部显示即可
this.fieldDisplayList.map((f) => {
  this.checkList.push(f.prop);
});
源码
<template>
  <div>
    <el-tooltip effect="dark" content="设置展示字段">
      <img class="field-setting" @click="showDialog = true" src="@/assets/images/fieldSetting.jpg" alt="设置展示字段">
    </el-tooltip>

    <el-dialog
      title="设置展示字段"
      :visible.sync="showDialog"
      :close-on-press-escape="false"
      :width="width"
      append-to-body
      v-dialog-drag
    >
      <el-row :gutter="gutter">
        <el-checkbox-group v-model="checkArray">
<!--          :key="index"-->
          <template v-for="(item,index) in list">
            <el-col :span="item.elCol || elCol" v-if="item.hide !== true">
              <el-checkbox :label="item.prop" :disabled="false">{{ item.label }}</el-checkbox>
            </el-col>
          </template>
        </el-checkbox-group>
      </el-row>
      <template v-slot:footer>
        <el-button @click="submits" type="primary">修改</el-button>
        <el-button @click="cancel">取消</el-button>
      </template>
    </el-dialog>
  </div>
</template>

<script>

export default {
  model: {
    prop: 'myValue', // 默认是value
    event: 'myInput', // 默认是input
  },
  props: {
    // 名称
    name:{
      type: String,
      default: () => '',
    },
    /**
     * 所有显示字段的列表
     * 格式: {
     *   prop: 唯一键名,
     *   label: 显示的名称
     *   hide: 是否隐藏,默认不填不隐藏,为true时隐藏
     * }
     * */
    list: {
      type: Array,
      default: () => [],
    },
    // 默认显示的主要字段列表
    defaultCheckList: {
      type: Array,
      default: () => [],
    },
    gutter: {
      type: Number,
      default: () => 10,
    },
    elCol: {
      type: Number,
      default: () => 8,
    },
    width: {
      type: String,
      default: "500px",
    },
  },
  data() {
    return {
      checkArray:[],
      showDialog: false
    }
  },
  watch: {
    list(val) {
      this.checkArray = val.map(p=>p.prop)
      this.init()
    },
  },
  mounted() {
    this.checkArray = this.list.map(p=>p.prop)
    this.init()
  },
  methods: {
    init() {
      const localCheckArray = localStorage.getItem(this.name)
      // 如果本地缓存有,那么就存储起来,显示全部
      if(localCheckArray) {
        this.checkArray = localCheckArray.split(',')
        this.$emit("myInput", this.checkArray);
      } else {
        // 如果本地存储没有,且设置的默认展示字段数量大于0,那么就展示传入的主要字段
        if(this.defaultCheckList.length > 0) {
          this.checkArray = this.defaultCheckList
          this.$emit("myInput", this.checkArray);
        }
      }
    },
    // 提交更改的时候,刷新主表格的key值
    submits() {
      const checkArray = this.checkArray.join(',') || '';
      localStorage.setItem(this.name, checkArray)
      this.$emit("myInput", checkArray)
      this.$emit('change', Math.random())
      this.cancel()
    },
    cancel() {
      this.showDialog = false
    }
  },
};
</script>

<style lang="scss" scoped>
.el-col {
  padding: 10px 0;
}
/* 设置显示隐藏 */
.field-setting {
  float: right;
  cursor: pointer;
}

</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568笔记五十八:基于SIP的视频通话测试

若该文为原创文章,转载请注明原文出处。 一、简介 记录SIP的视频通话测试过程,以前有做过GB28181了解过SIP协议,后面由于一些原因,没有在做了,在安防领域上,有很多终端设备使用SIP协议实现视频对讲等功能。 此篇记录交叉编译eXosip和osip,并编写检测的SIP客户端,通过…

【kubernetes】kubernetes Deployment 详解

Deployment 详解 kubernetes Deployment 详解创建与删除kubernetes Deployment更新/回滚/缩放/暂停/恢复部署操作 发布策略1、在zs命名空间下创建3个httpd副本并查看结果2、尝试删除其中一个副本并查看结果3、删除所有副本并查看结果4、使用k8s做金丝雀发布测试 kubernetes Dep…

teamtalk最近联系会话

最近联系人相关信令和协议设计 enum BuddyListCmdID {CID_BUDDY_LIST_RECENT_CONTACT_SESSION_REQUEST 513,CID_BUDDY_LIST_RECENT_CONTACT_SESSION_RESPONSE 514,};流程图 根据最新的时间戳查找最新的会话更新客户端的会话时间 /*** 获取最近会话接口** param pPdu …

Java数据结构(七)——优先级队列与PriorityQueue

文章目录 优先级队列与PriorityQueue堆基本概念和性质建堆堆的插入堆的删除堆的应用 PriorityQueuePriorityQueue的构造方法PriorityQueue的常用方法PriorityQueue的模拟实现 经典TopK问题 优先级队列与PriorityQueue 优先级队列是一种特殊类型的队列&#xff0c;其中元素按照…

聊聊 OceanBase 内存管理

内存配置管理是数据库日常管理中非常重要的工作&#xff0c;正确合理配置数据库内存是保障系统高效运行的前提条件。 OceanBase 数据库是一个支持多租户架构的准内存级的分布式数据库&#xff0c;对大容量内存的管理和使用提出了很高的要求。实际使用上&#xff0c;OceanBase …

1.【R语言】R语言的下载和安装

R语言是一种开源编程语言&#xff0c;它提供了丰富的统计模型和图形绘制功能&#xff0c;广泛用于数据科学、统计分析、数据挖掘和机器学习。R有一个活跃的社区和大量的包&#xff0c;可以满足各种需求&#xff0c;如数据清洗、绘图和报告生成。其强大的数据处理能力和灵活的可…

【ESP-IDF FreeRTOS】队列管理

先包含下头文件。 #include "freertos/queue.h" 队列大家应该不陌生&#xff0c;就是一个先进先出的容器。用在FreeRTOS里用途就多了。 首先是可以让任务与任务之间以及中断之间通信&#xff0c;任务A把数据塞进队列再让任务B取出&#xff0c;这样就可以传递数据了…

BMC lighttpd kvm数据分析(websocket)

1.说明 lighttpd源码: https://github.com/lighttpd/lighttpd1.4.gitlighttpd wiki: https://redmine.lighttpd.net/projects/lighttpd/wiki/libfcgi: https://github.com/toshic/libfcgi/tree/master 注意: 本章的代码仓库: https://gitee.com/wit_yuan/lighttpd_kvm 2.编…

3127.构造相同颜色的正方形

1.题目描述 给你一个二维 3 x 3 的矩阵 grid &#xff0c;每个格子都是一个字符&#xff0c;要么是 B &#xff0c;要么是 W 。字符 W 表示白色&#xff0c;字符 B 表示黑色。 你的任务是改变 至多一个 格子的颜色&#xff0c;使得矩阵中存在一个 2 x 2 颜色完全相同的正方形。…

无敌美少男和无敌美少女构建企业级私有仓库(harbor)

一&#xff1a;harbor简介 Harbor 是由 vmware 公司开源的企业级 Docker Registry 项目。 它提供了以下主要功能和特点&#xff1a; 基于角色的访问控制&#xff08;RBAC&#xff09;&#xff1a;可以为不同的用户和用户组分配不同的权限&#xff0c;增强了安全性和管理的灵…

Linux下的MySQL8.0报错:[Err]1055

Linux下的MySQL8.0报错&#xff1a;[Err]1055 报错信息解决办法 报错信息 在Linux环境下的MySQL里执行SQL语句报如下错误&#xff1a;[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column information_schema.PROFIL…

maven 父子工程创建详解

maven 父子工程创建详解 一、Maven工程继承关系 继承概念 maven继承是指的Maven的项目中&#xff0c;让一个项目从另外项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一个配置信息&#xff0c;简化项目的管理和维护工作 继承作用&#xff1a;在父工程中统一管理…

Datawhale AI夏令营 第五期 CV方向 Task3笔记

Task3&#xff1a;上分思路——数据集增强与模型预测 Part1&#xff1a;数据增强 数据增强是机器学习和深度学习中的一种技术&#xff0c;通过在原始数据集上应用一系列变换来人工地增加数据样本的数量和多样性&#xff0c;从而提高模型的泛化能力&#xff0c;减少过拟合&…

简单的 nginx 学习

简单的 nginx 学习 1. nginx的安装 1.1 下载安装包 去官网下载对应的nginx包&#xff0c;推荐使用稳定版本&#xff0c;上传nginx到linux系统 1.2 安装依赖环境 安装gcc环境 yum install gcc-c安装PCRE库&#xff0c;用于解析正则表达式 yum install -y pcre pcre-develzlib压…

【立体匹配】双目相机外参自标定方法介绍

双目相机外参自标定方法 原理实践 双目相机外参自标定方法是一种无需固定标定板&#xff0c;在拍摄实际场景的两张图像时&#xff0c;通过计算两幅图像之间的匹配特征点对&#xff0c;结合相机的内参矩阵&#xff0c;来实时求解两个相机之间相对位置&#xff08;即外参&#xf…

ThermoParser 介绍

ThermoParser是一个工具包&#xff0c;用于简化专业材料科学代码产生的数据分析&#xff0c;以热电学为中心&#xff0c;但也适用于任何与电子和/或声子传输有关的内容。ThermoParser是一个Python库&#xff0c;它包含数据检索、操作和绘图的函数&#xff0c;只需几行代码就可以…

HashMap 链表转红黑树的阈值为何为 8

与一个重要的统计学原理——泊松分布密切相关&#xff1a;该原理阐明了在单位时间&#xff08;或面积、体积&#xff09;内&#xff0c;随机事件的平均发生次数遵循泊松分布 为什么这因子设定为0.5呢&#xff1f; 在忽略方差的情况下&#xff0c;哈希表容量占比的期望值约为 0.…

揭秘扩散模型:DDPM的数学基础与代码实现全攻略!

(DDPM) denoising diffusion probabilistic models 理论学习 本文价值 本文是 Diffusion 这一类模型的开山之作&#xff0c;首次证明 diffusion 模型能够生成高质量的图片&#xff0c;且奠定了所有后续模型的基本原理&#xff1a;加噪 --> 去噪。DDPM 模型的效果如下&#x…

springboot+vue+mybatis计算机毕业设计飞机订票系统+PPT+论文+讲解+售后

快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省时间和提高工作效率&#xff0c;越来越多的人选择利用互联网进行线上打理各种事务&#xff0c;然后线上管理系统也就相继涌现。与此同时&#xff0c;人们开始接受方便的生活方式…

IDEA向mysql写入中文字符时出现乱码问题

可参考该博客&#xff1a;https://www.cnblogs.com/bb1008/p/7704458.html 第一步是将IDEA软件中的编码方式全部改为utf8 File -> Settings -> Editor -> File Encodings 第二步是在数据库链接中加入 ?characterEncodingUTF-8