3.若依前后端分离版开发用户自定义配置表格功能

news2024/11/24 14:13:44

一、背景

在项目上线测试的时候,关于同一个界面的表格,不同的用户会出现不同的字段排列需求,有些用户希望把A字段排在最前面,有些用户则希望A字段不显示。针对这种情况,开发一个表格自定义配置的功能,每个用户根据自己的需求自己去设定表单字段的显示、隐藏、字段的宽度、左右固定等。

二、效果图

1.配置界面,可以拖动字段的顺序,是否显示、宽度、左右固定
在这里插入图片描述

三、实现方式

3.1 整体实现思路

将前端表格配置好的字段方式的Json存到数据库,用户打开界面的时候去数据库读取这个配置,前端用循环动态的渲染elemnet-table的表头即可。如果这个用户没有配置过,则读取默认的配置,默认配置写在前端一个JSON里面,每个vue界面的table设置一个table key用来标识table列表,数据库层面查找的时候根据用户code和tablekey来找到这个用户关于这个表格的配置。
最后’在前端进行动态渲染表头即可。整个功能的重点在于前端动态的拿到后端的json跟默认的存在前端的Json进行比较,然后生成最终的一个配置的json(注意:要以前端的默认Json为准,因为要考虑到字段的新增和删除的情况

3.2 建立配置表 test_table_config
 CREATE TABLE `test_table_config` (
  `Id` int NOT NULL AUTO_INCREMENT,
  `UserCode` varchar(100) COLLATE utf8mb4_bin NOT NULL COMMENT '用户编码',
  `TableKey` varchar(200) COLLATE utf8mb4_bin NOT NULL COMMENT '表名key',
  `TableConifgJsonStr` varchar(8000) COLLATE utf8mb4_bin NOT NULL COMMENT '配置的字段Json',
  `IsDelete` tinyint NOT NULL COMMENT '是否删除',
  `CreateTime` datetime DEFAULT NULL COMMENT '创建时间',
  `CreateUserId` int DEFAULT NULL COMMENT '创建人id',
  `UpdateTime` datetime DEFAULT NULL COMMENT '更新时间',
  `DeleteTime` datetime DEFAULT NULL COMMENT '删除时间',
  `UpdateUserId` int DEFAULT NULL COMMENT '更新用户',
  `DeleteUserId` int DEFAULT NULL COMMENT '删除人',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='table配置表';
3.3 服务端test_table_config的crud
    /**
     * 新增table配置
     */
   // @PreAuthorize("@ss.hasPermi('system:tableconfig:add')")
    public AjaxResult add( TestTableAddInput testTableAddInput)
    {
   

        TestTableConfig  testTableConfig = new TestTableConfig();
        testTableConfig.setUserCode(this.getUsername());
        testTableConfig.setTableKey(testTableAddInput.getTableKey());
        testTableConfig.setTableConifgJsonStr(testTableAddInput.getTableConifgJsonStr());
        testTableConfig.setCreateUserId(this.getUserId());
        testTableConfig.setCreateBy(this.getUsername());
        testTableConfig.setCreateTime(new Date());
        testTableConfig.setIsDelete(0l);
        return toAjax(testTableConfigService.insertTestTableConfig(testTableConfig));
    }


    @Log(title = "编辑table配置", businessType = BusinessType.INSERT)
    @PostMapping
    @Anonymous
    @ApiOperation("编辑table配置")
    public   AjaxResult addAndUpdate(@RequestBody TestTableAddInput testTableAddInput)
    {
   
        TestTableConfig  testTableConfig = new TestTableConfig();

        if(testTableAddInput.getTableConifgJsonStr() == null || testTableAddInput.getTableConifgJsonStr().length()==0)
        {
   
            return  error("没有传入配置Json");
        }
      // 先查询
        testTableConfig = testTableConfigService.selectTestTableConfigByUserAndTableKey(this.getUsername(),testTableAddInput.getTableKey());
        if(testTableConfig==null) // 更新
        {
   
            return   add(testTableAddInput);
        }
        else
        {
   
            testTableConfig.setTableConifgJsonStr(testTableAddInput.getTableConifgJsonStr());
            // 修改
            return   edit(testTableConfig);
        }

    }


    /**
     * 修改table配置
     */
  //  @PreAuthorize("@ss.hasPermi('system:tableconfig:edit')")
    public AjaxResult edit(TestTableConfig testTableConfig)
    {
   

        testTableConfig.setUpdateUserId(this.getUserId());
        testTableConfig.setUserCode(this.getUsername());
        testTableConfig.setUpdateTime(new Date());
        testTableConfig.setIsDelete(0l);
        return toAjax(testTableConfigService.updateTestTableConfig(testTableConfig));
    }
3.4 前端配置组件界面
<template>
    <div>
<div>
    <vuedraggable v-model="paramClounm">
                      <transition-group>
                          <div v-for="(item,index) in paramClounm" :key="item.key" style="margin:10px; text-align: left;">
                            <el-row :gutter="24">
                            <el-col :span="8"> <el-checkbox  :label="item.label" v-model="item.visable"></el-checkbox></el-col>
                            <el-col :span="6"> <el-input-number v-model="item.width" placeholder="宽度"></el-input-number></el-col>
                            <el-col :span="4">  <el-checkbox v-model="item.isfix" label="固定"></el-checkbox></el-col>
                            <el-col :span="6">  <el-switch :span="8" v-model="item.fixlorr" active-text="固定右侧" inactive-text="固定左侧"></el-switch></el-col>
                         
                          </el-row>
                          </div> 
                      </transition-group>
                  </vuedraggable>
  </div>
    
<div>

    <span slot="footer" class="dialog-footer">
              <el-button class="buttonLeft" type="primary" plain @click="recoverChecked">恢复默认</el-button>
              <!-- <el-button @click="dialogVisible = false" class="buttonRight">取 消</el-button> -->
              <el-button type="primary" @click="submit" class="buttonRight" >确 定</el-button>
          </span>

</div>

</div>

</template>
<script>
  import vuedraggable from 'vuedraggable';
  import {
    getConfig, addAndUpdate  } from "@/api/system/tableconfig";

  export default{
   
    name: 'configTest',
      components: {
   
      vuedraggable
    },
    data(){
   
        return{
   
            paramClounm:[], // 参数列
            dialogVisible:false,

        }
       
    },

    // 计算属性
    computed:{
   
      activeFields: function(){
   
        //  alert(0);
          return this.fields.filter((item)=>{
   
              return item.visible;
          })
      }
    },

    // 加载完
    mounted(){
   

       // 加载列名 ;  
       this.loadingTableClounm(Object.assign([],this.$parent.$parent.teacherTableClonms));
    },

    methods:{
         

        getRowKey(v){
   
        return v.id
      },

      // 指令之前
      beforeHandleCommand(index

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

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

相关文章

水浒传思维导图怎么绘制?试试这样绘制

水浒传思维导图怎么绘制&#xff1f;绘制水浒传思维导图可以帮助我们更好地理解和记忆水浒传的故事情节和人物关系。通过将大量信息组织成一个视觉图&#xff0c;我们可以更清晰地看到每个人物的特点和角色关系&#xff0c;更好地理解整个故事的发展和结构。此外&#xff0c;绘…

优思学院|六西格玛黑带的9大任务和7大技能

六西格玛黑带是六西格玛管理中最为重要的一个角色&#xff0c;他们专职&#xff08;也可以是兼职&#xff09;从事六西格玛改进项目&#xff0c;是成功完成六西格玛项目的技术骨干成员&#xff0c;是六西格玛组织的核心力量。他们的努力程度决定着六西格玛管理的成败。 六西格玛…

变更通知在开源SpringBoot/SpringCloud微服务中的最佳实践

目录导读 变更通知在开源SpringBoot/SpringCloud微服务中的最佳实践1. 什么是变更通知2. 变更通知的场景分析3. 变更通知的技术方案3.1 变更通知的技术实现方案 4. 变更通知的最佳实践总结5. 参考资料 变更通知在开源SpringBoot/SpringCloud微服务中的最佳实践 1. 什么是变更通…

IDEA 设置为护眼的豆沙绿

代码区域设置成护眼色 先打开 IDEA 的设置界面&#xff0c;然后按照下图按顺序店了设置就可以了 这个时候&#xff0c;可以看到&#xff0c;只有代码区域别成了护眼色&#xff0c;其他地方还是白的刺眼&#xff0c;我们来一个一个的解决掉 左侧的文件页修改为护眼色 还是先…

CNN(五):DenseNet+SE-Net实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 SE-Net(Squeeze-and-Excitation Networks)是ImageNet2017(ImageNet收官赛)的冠军模型&#xff0c;是由WMW团队发布。具有复杂度低&#xff0c…

ardupilot开发 --- log篇

懂的都懂&#xff0c;你也要懂 log作用记录您的飞行数据&#xff1b; 两种方式或类型&#xff1a; Data flash log &#xff0c;通常记录在SD卡上&#xff0c;可通过地面站下载&#xff1b; Telemetry logs&#xff08;Tlogs&#xff09;&#xff0c;地面站通过无线设备进行实…

软件测试(黑皮书)学习一

第一部分 软件测试综述 第一章 软件测试背景 1.1软件缺陷&#xff08;software bug&#xff09; 软件失败的术语 故障&#xff08;fault&#xff09;失败&#xff08;failure&#xff09; 缺点&#xff08;defect&#xff09; ------严重、危险异常&#xff08;anomaly&…

STEP/STP模型文件在线查看【3D CAD】

STEP 文件&#xff08;正式称为 ISO 10303&#xff09;是 3D 模型的流行文件格式。 该格式名称中的字母代表“产品数据交换标准”。 这种文件格式是由 ISO 自动化系统和集成技术委员会&#xff08;称为 TC 184&#xff09;于 20 世纪 80 年代中期开发的。STEP 格式的创建是为了…

java.lang.Long cannot be cast to java.lang.Integer解决

出错代码:接收泛型指定是Integer 但是在接测试中 频频抛出java.lang.Long cannot be cast to java.lang.Integer异常&#xff0c;debug 发现Map中的参数确实是Long类型的。 解决办法&#xff1a; 使用父类的Number接收&#xff0c;在使用intValue()方法转成int 原因分析&#…

恒运资本:机构持仓比例多少是重仓?

组织投资者关于股票商场的影响越来越大&#xff0c;其持股份额已成为点评一只股票好坏的重要目标之一。但组织持仓份额究竟多少才算是重仓呢&#xff1f;这涉及到许多要素&#xff0c;让我们从多个视点进行剖析。 1.不同组织的界说不同 首要需求注意的是&#xff0c;不同的组织…

OpenCV-Python中的图像处理-图像特征

OpenCV-Python中的图像处理-图像特征 图像特征Harris角点检测亚像素级精度的角点检测Shi-Tomasi角点检测SIFT(Scale-Invariant Feature Transfrom)SURF(Speeded-Up Robust Features)FAST算法BRIEF(Binary Robust Independent Elementary Features)算法ORB (Oriented FAST and R…

网络综合布线实训室建设方案

一、网络综合布线系统概述 网络综合布线系统是为了满足数据通信需求而设计和建立的一套基础设施。它提供了数据传输、信号传输和电力供应的基础结构&#xff0c;支持各种网络设备和终端设备之间的连接。 网络综合布线系统通常包括以下组成部分&#xff1a; 1&#xff09; 数据…

Element:input输入框远程搜索返回输入建议的代码详解

文章目录 1 原始代码2 代码详解3 添加注释后的代码&#xff1a;4 createStateFilter方法中0代表什么&#xff1f;5 包含即返回建议值 1 原始代码 官网链接&#xff1a;https://element.eleme.cn/#/zh-CN/component/input 官网代码&#xff1a; <template><el-autoc…

Betty核心源码解析(二)--ServerBootstrap启动过程

serverbootstrap用于建立netty服务端&#xff0c;核心逻辑-- 设置线程池-- bossGroup和workGroup设置accept连接handler定义服务器的色弱v儿serversocketchannel实现设置IO读写的业务逻辑相关childHanlder绑定监听端口-- 创建serversocketchannel对象初始化serversocketchanne…

​ Spring Clould 配置中心 - Nacos

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; Nacos配置管理-Nacos实现配置管理&#xff08;P24、P25&#xff09; Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 当微服务部署的实例越来越多&#xff0c…

java练习4.快速查找

题目: 数组 arr[6,1,3,7,9,8,5,4,2],用快速排序进行升序排序. import java.util.Random;public class recursionDemo {public static void main(String[] args) {/*快速排序:* 第一轮:以0索引为基准数,确定基准数在数组正确的位置,* 比基准数小的放到左边,比基准数大的放在右边…

Python数据分析实战-*和**实现可变多参数的传入或变量的拆解(附源码和实现效果)

实现功能 *和**实现多参数的传入或变量的拆解 实现代码 # 1、实现多参数的传入 def one(a,*b):"""a是一个普通传入参数&#xff0c;*b是一个非关键字星号参数"""print(b) one(1,2,3,4,5,6) 其中&#xff0c;第一个的输入可以理解为&#xff1a…

记一次微信小游戏渗透测试

本文转载于&#xff1a;https://www.freebuf.com/vuls/371936.html 准备工作 因为目标站点只能用微信打开&#xff0c;微信又不能调试看代码。这里推荐可以使用pc端旧版微信3.2.1&#xff0c;具体方法放链接里&#xff1a; https://blog.csdn.net/qq_45863248/article/details/…

(7)(7.3) 自动任务中的相机控制

文章目录 前言 7.3.1 概述 7.3.2 自动任务类型 7.3.3 创建合成图像 前言 本文介绍 ArduPilot 的相机和云台命令&#xff0c;并说明如何在 Mission Planner 中使用这些命令来定义相机勘测任务。这些说明假定已经连接并配置了相机触发器和云台(camera trigger and gimbal hav…

批量爬虫采集大数据的技巧和策略分享

作为一名专业的爬虫程序员&#xff0c;今天主要要和大家分享一些技巧和策略&#xff0c;帮助你在批量爬虫采集大数据时更高效、更顺利。批量爬虫采集大数据可能会遇到一些挑战&#xff0c;但只要我们掌握一些技巧&#xff0c;制定一些有效的策略&#xff0c;我们就能在数据采集…