vue3 列表页开发【选择展示列】功能

news2024/12/23 13:12:56

目录

背景描述:

开发流程:

详细开发流程:

总结:


背景描述:

这个功能是基于之前写的   封装列表页  的功能继续写的,加了一个选择展示列的功能,可以随时控制表格里展示那些列的数据,如图,大概样式是这样:


开发流程:

基本上和封装列表页的流程相似,这里不做多余描述,只是需要从父组件里传递tableColumn,也可以在本组件定义

tableColumn除了控制表格的column,还有就是【选择列】的功能的数据从这里来,这里可以设置哪些需要显示与隐藏,如下:

const tableColumn = ref([
  {
    column_id: 'op_name',
    column_name: '操作人',
    default_display: true,
    sortable: true,
    minWidth: 100
  },
  {
    column_id: 'op_roles',
    column_name: '角色',
    default_display: true,
    sortable: true,
    minWidth: 150
  },
 //....
  {
    column_id: 'create_at',
    column_name: '名称12',
    default_display: true,
    sortable: true,
    minWidth: 170
  },
  {
    column_id: 'update_at',
    column_name: '名称13',
    default_display: false,
    sortable: true,
    minWidth: 170
  }
])

详细开发流程:

提示:这里描述项目中遇到的问题:

1.选择展示列

<el-col :span="12">
          <el-popover placement="bottom" trigger="click" :width="300">
            <template #reference>
              <el-button class="right-button" type="default">
                <el-icon><Filter /></el-icon>
              </el-button>
            </template>

            <span style="margin: 0 10px 0 0; font-size: 14px">选择展示列</span>
            <el-select v-model="selectedColumns" multiple collapse-tags :teleported="false" @change="selectColumns">
              <el-option
                v-for="(item, index) in tableCol"
                :key="item.column_id"
                :disabled="index == 0"
                :label="item.column_name"
                :value="item.column_id"
              ></el-option>
            </el-select>
          </el-popover>
        </el-col>

这里的tableCol是从父组件传的tableColumn, tableCol.value = props.tableColumn

2.已选择的展示列怎么控制表格的列显隐

// 已选的展示列
const selectedColumns = ref([])
//选择展示列
const selectColumns = () => {
  showTableCol.value = []
  let arr = []
  if (selectedColumns.value.length && selectedColumns.value.length != 0) {
    selectedColumns.value.forEach((element) => {
      tableCol.value.forEach((item, index) => {
        if (index == 0) {
          item.default_display = true
        }
        item.default_display = false
        if (element == item.column_id || index == 0) {  //比如至少要选择第一列,不能一列都不显示
          arr.push(index)
        }
      })
    })
    arr = [...new Set(arr)]
    arr.forEach((element) => {
      tableCol.value[element].default_display = true
    })

    let dataTable = tableCol.value.filter((item, index) => {
      return item.default_display
    })
    showTableCol.value = dataTable
  } else {
    let dataTable = []
    dataTable = tableCol.value.filter((item) => {
      return item.default_display
    })
    dataTable.forEach((item) => {
      selectedColumns.value.push(item.column_id)
    })
    showTableCol.value = dataTable
  }
}

3. 表格的列显示

 <el-table
        v-loading="loading"
        :data="tableData"
        class="table-small-custom"
        height="calc(100vh - 240px)"
        stripe
        @sort-change="changeTableSort"
      >
        <el-table-column type="index" width="70" label="序号">
          <template #default="scope">
            <span v-text="getIndex(scope.$index)"></span>
          </template>
        </el-table-column>
        <el-table-column
          v-for="(col, index) in showTableCol"
          :key="index"
          :prop="col.column_id"
          :label="col.column_name"
          :min-width="col.minWidth"
          :sortable="col.sortable"
          :is-show-overflow-tooltip="true"
        />
      </el-table>

这里表格的渲染是通过v-for  showTableCol ,主要就是这个。

over


总结:

目前我经常是通过这个方式写【选择展示列】功能,过滤那部分,没怎么考虑最优解,反正数据也不多,直接这样写了,如果有更合适的方式,欢迎分享~

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

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

相关文章

榜样力量激发青少年英语学习新活力

近日,在第二届iEnglish英语风采秀总决选中,12岁的天津女孩田丽雨以出色的英语能力和生动表演赢得了年度舞台之星的称号。田丽雨的英语学习方法引发了社会各界的广泛关注,尤其是她以身边榜样为动力,借助智能英语学习工具iEnglish实现了英语自由阅读和无障碍交流的目标。 据中国青…

[数据挖掘、数据分析] clickhouse在go语言里的实践

系列文章目录 [数据挖掘] clickhouse在go语言里的实践 [数据挖掘] 用户画像平台构建与业务实践 文章目录 系列文章目录前言一、clickhouse的起源二、OLAP/OLTP2.1、主流的OLAP/OLTP数据库 三、go语言开发实践3.1、安装配置go语言环境&#xff0c;配置IDE3.1.1、Go开发环境安装…

Spring框架漏洞学习之第二篇(CVE-2022-22965、CVE-2022-22947、CVE-2018-1273、CVE-2018-1270)

写在前边 如果在浏览本文时发现技术性错误时&#xff0c;欢迎指正&#xff1b;如果需要本框架探测的POC和EXP也可以私信&#xff0c;我看到后也会及时恢复大家。 总之&#xff0c;欢迎各路大佬叨扰&#xff01; Spring Framework 远程代码执行漏洞&#xff08;CVE-2022-22965&…

vue3中computed的用法

一、完整代码 <template><div class"about"><h1>Computed的用法</h1><h3>姓:{{ person.firstName }}</h3><input type"text" v-model"person.firstName"><h3>名:{{ person.lastName }}</h3…

2023年中国水稻收割机产量、销量及市场规模分析[图]

水稻收割机行业是指以收割水稻为主要功能的农业机械行业&#xff0c;随着农业现代化的推进&#xff0c;水稻收割机行业也在不断发展和创新&#xff0c;以满足不断提高的农业生产效率和降低劳动成本的需求。 水稻收割机分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网…

地方文化的守护者:TikTok如何保护和传承传统?

在全球化和数字化的时代&#xff0c;地方文化的保护和传承变得尤为重要。社交媒体平台如TikTok已经成为一种有力的工具&#xff0c;帮助地方文化传统得以传承和分享。本文将深入探讨TikTok在保护和传承地方文化方面的作用&#xff0c;并分析它如何成为地方文化的守护者。 TikTo…

使用 ClickHouse 深入了解 Apache Parquet (二)

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 这篇文章是我们的 Parquet 和 ClickHouse 博客系列的第二部分。在这篇文章中&#xff0c;我们将更详细地探讨 Parquet 格式&#xff0c;重点介绍使用 ClickHouse 读写文…

jsp debug模式

1、复制 action 后面名称 全局搜找到对应的java文件 2、点击debug模式 点击断点 3、进入页面 数据就能打印出来 4、按f8 查看下一条数据

支付宝小程序介入人脸识别(金融级--前端部分)

在这里只做前端部分说明: 详情参考文档:如何通过集成支付宝小程序唤起实人认证服务_实人认证-阿里云帮助中心 操作步骤 调用 API 发起认证。 发起认证服务。 调用 startBizService 接口请求认证。 function startAPVerify(options, callback) {my.call(startBizService, {n…

Vue-vue项目Element-UI 表单组件内容要求判断

整体添加判断 <el-formref"ruleFormRef":model"formModel"class"demo-ruleForm"label-position"top"status-icon:rules"rules"><el-form-item label"姓名" prop"applyUsers" class"form-…

python代理服务器搭建,Python代理IP怎么使用?

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全和隐私保护。代理服务器是一种可以隐藏用户真实IP地址的工具&#xff0c;通过代理服务器可以让人们在使用网络时更加安全和隐蔽。搭建Python代理服务器可以让我们更好地了解网络协议、加强网络安全等。 搭建Python代理…

【VSCode】设置自动保存

首先打开设置 然后在搜索栏上搜索auto save&#xff0c;此时可以看见&#xff0c;默认off不保存 files:autoSaveDelay 设置自动保存的间隔 1.AfterDelay 将在配置的 “#files:autoSaveDelay#” 后自动保存。 2.onFocusChange 当编辑器失去焦点时&#xff0c;将自动保存。也就…

laravel的默认首页怎么改-laravel框架默认欢迎页面如何修改

laravel的默认首页怎么改 搭建好的laravel的默认首页怎么改 我们有两种改动方式&#xff1a; 第一种修改默认路由&#xff1a; 下一步是要移除Laravel应用程序默认的欢迎页路由。这个路由可以在routes/web.php文件的顶部找到&#xff0c;看起来类似于以下代码&#xff1a; …

关于CSGO游戏搬砖,想给大家的几点忠告

关于CSGO游戏搬砖&#xff0c;想给大家的几点忠告 1、新出的箱子&#xff0c;里面开出的皮肤短时间内会溢价&#xff0c;价格虚高&#xff0c;后期会呈逐渐下跌趋势&#xff0c;这就是我们不让大家碰新品的原因&#xff0c;哪怕利润再高也不建议购入或者囤货&#xff0c;实在要…

蜻蜓c影视追剧系统-多个小程序添加说明

多小程序添加设置 蜻蜓c影视追剧 支持多小程序添加&#xff0c;也就是可以管理不同前端的小程序。 此处id 对应前端小程序的mp值 关于添加小程序&#xff1a; 此处有所有填写内容的参考方式&#xff0c;要注意是必须开通了微信支付才可以添加&#xff0c;这里需要添加证书信息…

60 最长有效括号

最长有效括号 题目描述题解1 DPstack题解2 stack题解3 DP题解4 左右指针 题目描述 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输出&#xff1…

CTF Reverse入门(1) 环境安装

前言 逆向重点是分析和理解计算机程序、二进制文件或者其他软件的逆向工程技术。在CTF比赛中&#xff0c;参赛者通常会收到一个或多个二进制文件、程序、固件或者其他类型的软件&#xff0c;他们的任务是分析这些文件&#xff0c;识别潜在的漏洞或安全问题。 学逆向需要会密码…

(三)QT中使用QVTKOpenGLNativeWidget的简单教程以及案例,利用PCLVisualizer显示点云

先添加一个带有ui的QT应用程序。 一、在ui界面中添加QVTKOpenGLNativeWidget控件 先拖出来一个QOpenGLWidget控件 修改布局如下&#xff1a; 然后将QOpenGLWidget控件提升为QVTKOpenGLNativeWidget控件&#xff0c;步骤如下&#xff1a; 右击QOpenGLWidget窗口&#xff0c;选…

【数据结构】线性表(六)堆栈:顺序栈及其基本操作(初始化、判空、判满、入栈、出栈、存取栈顶元素、清空栈)

文章目录 一、堆栈1. 定义2. 基本操作 二、顺序栈0. 顺序表1. 头文件和常量2. 栈结构体3. 栈的初始化4. 判断栈是否为空5. 判断栈是否已满6. 入栈7. 出栈8. 查看栈顶元素9. 清空栈10. 主函数11. 代码整合 堆栈Stack 和 队列Queue是两种非常重要的数据结构&#xff0c;两者都是特…