Vue动态表格列显隐实战:打造灵活可配置的数据展示界面

在Vue企业级项目中,表格是数据展示的核心组件之一。当面对复杂业务需求时,我们经常需要实现表格列的​​动态隐藏与显示​ ​功能,这不仅能够提升用户体验,还能根据不同场景灵活配置数据展示。本文将深入探讨如何基于this.adviceColumn[jclIndex].hidden = true配合:tableColumns="adviceColumn.filter(col => !col.hidden)"实现这一功能。

一、核心实现原理

动态隐藏表格列的核心思想是:​​通过控制列配置对象的属性,配合计算属性实时过滤隐藏列​​。让我们看一个精简版实现:

javascript 复制代码
// 列配置数组
adviceColumn: [
  { label: '药品代码', prop: 'YPDM', hidden: false },
  { label: '药品名称', prop: 'SPMC', hidden: false },
  { label: '加成率(%)', prop: 'JCL', hidden: false },
  // ...其他列
],

// 表格组件使用过滤后的列
<MultiDataTable 
  :tableColumns="visibleColumns"
  // ...其他属性
>
// 插槽计算值
<template #JCL="{row}">
              <span>
                {{
                  row.XBZJHJ && Number(row.XBZJHJ) !== 0
                    ? (((Number(row.XBZLSJ) - Number(row.XBZJHJ)) / Number(row.XBZJHJ)) * 100).toFixed(2)
                    : ''
                }}
              </span>
            </template>

</MultiDataTable>

// 计算属性
computed: {
  visibleColumns() {
    return this.adviceColumn.filter(col => !col.hidden);
  }
}

或者直接:
// 表格组件使用过滤后的列
<MultiDataTable
:tableColumns="adviceColumn.filter(col => !col.hidden)"
// ...其他属性
/>

二、实战代码解析

1. 条件隐藏列的实现

在项目代码中,我们根据业务条件动态设置列的隐藏状态:

javascript 复制代码
async openwithparm_w_md_yptj_yptjxz(lstr_mess) {
  // ...前置代码
  
  // 获取权限配置
  let ls_bzw = '';
  await handlerRequest(3911, {
    gs_bjbmbh: this.$store.state.user.deptCode,
  }).then(res => {
    if (res.code == 200 && res.data) {
      ls_bzw = res.data[0].BZW;
    }
  });
  
  // 根据权限配置隐藏加成率列
  if (ls_bzw[4] === '1' || ls_bzw[6] === '1' || 
      ls_bzw[8] === '1' || ls_bzw[9] === '1' || 
      ls_bzw[10] === '1') {
    const jclIndex = this.adviceColumn.findIndex(col => col.prop === 'JCL');
    if (jclIndex !== -1) {
      this.$set(this.adviceColumn[jclIndex], 'hidden', true);
    }
  }
  
  // ...后续代码
}

或者通过方法的形式隐藏:

复制代码
// 是否展示报损原因列
toggleBSYYColumn(show) {
  this.showBSYY = show;
  // 根据状态动态生成表格列配置
  this.adviceColumn = this.adviceColumn.filter(column => {
    if (column.prop === 'BSYY') {
      // 仅在showBSYY为true时添加BSYY列
      return this.showBSYY;
    }
    // 其他列始终保留
    return true;
  });
},
相关推荐
To_OC17 小时前
从一头雾水到跑通全流程:我用一个周末啃透了JWT登录鉴权
前端·后端·http
excel19 小时前
研究 Vue 3 源码的收获
前端·vue.js
可乐鸡翅yeah_20 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
lerhxx21 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
计算机魔术师21 小时前
METR 演示 AI 智能体如何篡改 Inspect 评估记录以掩盖不当行为
前端
前端snow21 小时前
ai agent --- 异步处理之 Rabbit MQ
前端
念何架构之路21 小时前
zap扩展生态与总结
java·前端·数据库
独孤九剑打醒他1 天前
【原创开源】【概念设计】源 - 栅 - 漏 - 栅 - 源 横向双栅 MOS,低压交流多值逻辑芯片探索
前端·其他·架构·开源·硬件工程
mantou1321 天前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
默_笙1 天前
🍕 一个主编、三个工种、两本手册:搭一支 AI 调研队
前端·javascript