Vue2+Vuex通过数组动态生成store数据(分组模式)

article/2025/6/23 5:16:08

         在项目开发中,将数据集中存储在Vuex的store中,能便于数据的统一管理和维护。开发者可以在一个地方对数据进行操作和更新,以避免在组件中分散管理数据带来的混乱和复杂性。

        对于状态数据较多情况下,界面操作数据又是数组结构,因业务需求,数组内每个元素都需要单独定义一个状态,那么每个单独定义即费时又费力;所以,我们可以利用数组,动态生成store中的state、getter、mutation和action等代码。        

        在Vue2+vuex中,通过数组动态生成store数据是一种灵活且高效的方式,但是在使用过程中需要注意数据结构的复杂性、性能问题以及调试难度等缺点,权衡利弊,合理地根据业务需求选择合适的数据管理方式。

        该篇将在上一篇的基础上,实现更为复杂的功能需求。上一篇地址:Vue2+Vuex通过数组动态生成store数据(扁平模式)-CSDN博客

一、业务需求

        如下图,左侧表格为管理系统中用户操作记录数据,右侧为控制表格列显示与隐藏的开关。当对应列名被勾选上,表格中则显示该列,否则隐藏该列信息。

        对于这个需求,可以将表格中列定义为数组,通过 v-for 遍历 tableColumns 数组动态生成表格的列,根据 tableColumns 列数据中的 visible 属性过滤出当前需要显示的列。

        在某些特定场景下,表格的列需要通过状态属性来判断是否显示或隐藏,则可以通过 v-if 或 v-show 来控制其列的显/隐。

        图中所见,是完全可以在本组件内操控列的显/隐,为什么要大费周章通过vuex呢?此时我们把配置项移至全局设置弹框中,两者并全在同一组件内,这种场景则更为适合使用vuex。

        此案例目的是为让程序员能够快速定义和处理批量状态数据,提升开发效率;所以,不纠结场景,旨在通过vuex来完成每列的显示与隐藏操作。

二、创建界面

        首页创建页面中所需要的模拟数据,在src/data/目录中添加data.js,用于定义表格数据和列信息。代码如下:

export const firstData = [{"id": 1,"operator": "admin","departmentName": "研发部门","mainframe": "127.0.0.1","operationgLocation": "内网IP","operationgStatus": "成功","logNumber": 110,"operationType": "修改","systemModule": "用户管理","operationTime": "2025-03-02 23:17:56"},{"id": 2,"operator": "admin","departmentName": "研发部门","mainframe": "127.0.0.1","operationgLocation": "内网IP","operationgStatus": "成功","logNumber": 120,"operationType": "删除","systemModule": "用户管理","operationTime": "2025-03-03 22:30:29"},{"id": 3,"operator": "admin","departmentName": "研发部门","mainframe": "127.0.0.1","operationgLocation": "内网IP","operationgStatus": "成功","logNumber": 124,"operationType": "删除","systemModule": "用户管理","operationTime": "2025-03-04 19:51:54"},{"id": 4,"operator": "admin","departmentName": "研发部门","mainframe": "127.0.0.1","operationgLocation": "内网IP","operationgStatus": "成功","logNumber": 138,"operationType": "修改","systemModule": "角色管理","operationTime": "2025-03-05 20:10:09"},{"id": 5,"operator": "admin","departmentName": "研发部门","mainframe": "127.0.0.1","operationgLocation": "内网IP","operationgStatus": "成功","logNumber": 146,"operationType": "新增","systemModule": "用户管理","operationTime": "2025-03-06 19:51:45"}
]/*** 表格 列数据*/
export const firstTableColumns = [{ prop: "logNumber", name: "日志编号", visible: true },{ prop: "systemModule", name: "系统模块", visible: true },{ prop: "operationType", name: "操作类型", visible: true },{ prop: "operator", name: "操作人员", visible: true },{ prop: "departmentName", name: "部门名称", visible: true },{ prop: "mainframe", name: "主机", visible: true },{ prop: "operationgLocation", name: "操作地点", visible: true },{ prop: "operationgStatus", name: "操作状态", visible: true },{ prop: "operationTime", name: "操作时间", visible: true }
]/*** checkbox 控制选项*/
export const roleOptions = [{ id: 1, prop: "operation", name: "操作记录", data: firstTableColumns }
]

        然后,在src/views目录下,创建store.vue模板文件,并添加到router路由配置中;配置好后,通过路由地址访问该页面。页面代码如下:

<template><div class="store-wrap"><el-row><el-col :span="15"><!-- first --><div class="list-box first"><div class="title"><h3>操作记录</h3></div><el-table :data="tableFirstData" style="width: 100%"><el-table-column prop="logNumber" label="日志编号" /><el-table-column prop="systemModule" label="系统模块" /><el-table-column prop="operationType" label="操作类型" /><el-table-column prop="operator" label="操作人员" /><el-table-column prop="departmentName" label="部门名称" /><el-table-column prop="mainframe" label="主机" /><el-table-column prop="operationgLocation" label="操作地点" /><el-table-column prop="operationgStatus" label="操作状态" /><el-table-column prop="operationTime" label="操作时间" width="150px"><template slot-scope="scope">{{ scope.row.operationTime }}</template></el-table-column></el-table></div><!-- /first --></el-col><el-col :span="1">&nbsp;</el-col><el-col :span="8"><!-- role-wrap --><div class="role-wrap"><div class="title"><h3>-</h3></div><div class="role-list-box"><!-- list-item --><div class="list-item" v-for="(item, index) in roleList" :key="index"><div class="title"><h4>{{ item.name }}</h4></div><div class="content"><el-checkbox-group v-model="item.checkedList" v-if="Array.isArray(item.data)"><el-checkbox :label="sub.prop" v-for="(sub, i) in item.data" :key="

http://www.hkcw.cn/article/WiBysuYsKT.shtml

相关文章

生成式AI模型学习笔记

文章目录 生成式AI模型1. 定义2. 生成式模型与判别式模型3. 深度生成式模型的类型3.1 能量模型3.2 变分自编码3.2.1 变分自编码器&#xff08;Variational Autoencoder, VAE&#xff09;简介3.2.2 代码示例&#xff08;以 PyTorch 为例&#xff09; 3.3 生成对抗网络3.4 流模型…

DAY 16 numpy数组与shap深入理解

一、NumPy 数组基础笔记 1. 理解数组的维度 &#xff08;Dimensions&#xff09; NumPy 数组的维度 &#xff08;Dimension&#xff09; 或称为 轴 &#xff08;Axis&#xff09; 的概念&#xff0c;与我们日常理解的维度非常相似。 直观判断&#xff1a; 数组的维度层数通常…

Maven 安装与配置指南(适用于 Windows、Linux 和 macOS)

Apache Maven 是一款广泛应用于 Java 项目的项目管理和构建工具。 本文提供在 Windows、Linux 和 macOS 系统上安装与配置 Maven 的详细步骤&#xff0c;旨在帮助开发者快速搭建高效的构建环境。 一、前置条件&#xff1a;安装 Java Development Kit (JDK) Maven 依赖于 Java …

Java对象克隆:从浅到深的奥秘

浅克隆与深克隆在Java中的应用及区别 核心概念 浅克隆 复制对象时仅克隆基本数据类型字段&#xff0c;引用类型字段共享原对象引用。实现方式&#xff1a; class Person implements Cloneable {String name;Address address; // 引用类型字段Overrideprotected Object clone…

【HW系列】—日志介绍

文章目录 一、日志介绍二、Apache日志详解1. 日志存放位置2. 日志类型3. 日志级别4. 常用日志分析命令&#xff08;Linux环境&#xff09; 三、IIS日志详解四、日志分析工具&#xff1a;360星图 一、日志介绍 为什么要使用日志 故障诊断&#xff1a;快速定位系统错误根源安全审…

cuda_fp8.h错误

现象&#xff1a; cuda_fp8.h错误 原因&#xff1a; CUDA Toolkit 小于11.8,会报fp8错误&#xff0c;因此是cuda工具版本太低。通过nvcc --version查看 CUDA Toolkit 是 NVIDIA 提供的一套 用于开发、优化和运行基于 CUDA 的 GPU 加速应用程序的工具集合。它的核心作用是让开发…

内容中台构建数字化管理新路径

数字化内容管理核心架构 现代企业数字化内容管理的核心架构依托于动态元数据架构构建策略与多源数据智能整合体系的双重支撑。通过建立三层架构模型——数据采集层、逻辑处理层与应用服务层&#xff0c;系统能够实现跨平台内容资产的统一索引与语义关联。其中&#xff0c;Bakl…

【连载21】基础智能体的进展与挑战综述-交互风险

20. 智能体外部安全性&#xff1a;交互风险 随着人工智能智能体的发展以及与日益复杂的环境互动&#xff0c;与这些互动相关的安全风险已成为一个关键问题。本章聚焦于人工智能智能体与记忆系统、物理和数字环境及其他智能体的互动。这些互动使人工智能智能体面临各种脆弱性&a…

【Day41】

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 →…

C++:参数传递方法(Parameter Passing Methods)

目录 1. 值传递&#xff08;Pass by Value&#xff09; 2. 地址传递&#xff08;Pass by Address&#xff09; 3. 引用传递&#xff08;Pass by Reference&#xff09; 数组作为函数参数&#xff08;Array as Parameter&#xff09; 数组作为函数返回值 什么是函数&#xff…

【iOS】方法交换

方法交换 method-swizzling是什么相关API方法交换的风险method-swizzling使用过程中的一次性问题在当前类中进行方法交换类方法的方法交换 方法交换的应用 method-swizzling是什么 method-swizzling的含义是方法交换&#xff0c;他的主要作用是在运行的时候将一个方法的实现替…

GoogLeNet网络模型

GoogLeNet网络模型 诞生背景 在2014年的ImageNet图像识别挑战赛中&#xff0c;一个GoogLeNet的网络架构大放异彩&#xff0c;与VGG不同的是&#xff0c;VGG用的是3*3的卷积&#xff0c;而GoogLeNet从1*1到7*7的卷积核都用&#xff0c;也就是使用不同大小的卷积核组合。 网络…

Linux:动静态库

一&#xff1a;什么是库 库是写好的&#xff0c;现有的&#xff0c;成熟的可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人都从零开始写&#xff0c;因此库的存在一样非同寻常 本质上库是一种可执行代码的二进制形式&#xff0c;可以被操作…

【图像处理入门】2. Python中OpenCV与Matplotlib的图像操作指南

一、环境准备 import cv2 import numpy as np import matplotlib.pyplot as plt# 配置中文字体显示&#xff08;可选&#xff09; plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False二、图像的基本操作 1. 图像读取、显示与保存 使用OpenCV…

设计模式——装饰器设计模式(结构型)

摘要 文中主要介绍了装饰器设计模式&#xff0c;它是一种结构型设计模式&#xff0c;可在不改变原有类代码的情况下&#xff0c;动态为对象添加额外功能。文中详细阐述了装饰器模式的角色、结构、实现方式、适合场景以及实战示例等内容&#xff0c;还探讨了其与其他设计模式的…

生活小记啊

最近生活上的事情还是蛮多的&#xff0c;想到哪写到哪。 工作 三月的某个周六&#xff0c;正在加班写技术方案&#xff0c;大晚上写完了听到调动通知&#xff0c;要去新的团队了。 还是蛮不舍的&#xff0c;看着产品从无到有&#xff0c;一路走过来&#xff0c;倾注了不少感…

【android bluetooth 案例分析 04】【Carplay 详解 2】【Carplay 连接之手机主动连车机】

1. 背景 在【android bluetooth 案例分析 04】【Carplay 详解 1】【CarPlay 在车机侧的蓝牙通信原理与角色划分详解】中我们从整理上介绍了车机中 carplay 相关基础概念。 本节 将详细分析 iphone手机主动 连接 车机carplay 这一过程。 先回顾一下 上一节&#xff0c; carpla…

【Kotlin】数字字符串数组集合

【Kotlin】简介&变量&类&接口 【Kotlin】数字&字符串&数组&集合 文章目录 Kotlin_数字&字符串&数组&集合数字字面常量显式转换数值类型转换背后发生了什么 运算字符串字符串模板字符串判等修饰符数组集合通过序列提高效率惰性求值序列的操…

FreeCAD源码分析: 串行化工具

本文分析FreeCAD中的串行化工具。 注1&#xff1a;限于研究水平&#xff0c;分析难免不当&#xff0c;欢迎批评指正。 注2&#xff1a;文章内容会不定期更新。 零、预修 0.1 QDataStream 0.2 Boost.Iostreams 0.3 Zipios 0.4 Xerces-C 一、核心组件 1.1 Base::Writer 1.2 Ba…

【R语言编程绘图-plotly】

安装与加载 在R中使用plotly库前需要安装并加载。安装可以通过CRAN进行&#xff0c;使用install.packages()函数。加载库使用library()函数。 install.packages("plotly") library(plotly)测试库文件安装情况 # 安装并加载必要的包 if (!requireNamespace("p…