element-table的动态操作,自动以表格,动态新增行、列,删除行列

灵活的自定义表格行列以及增删改查的操作,右键选中列则是列的删除,效果如下

 

 

 

 

<template>
  <div class="st-table">
    <div style="width: 100%">
      <el-button @click="addRow()" type="primary" icon="CirclePlus">新增行</el-button>
      <el-button @click="addCol()" type="primary" icon="CirclePlus">新增列</el-button>
      <el-input type="text" placeholder="请输入关键字查询" v-model="tableParam.keyword" style="width: 200px;"/>
      <el-button type="info" @click="queryList()">查询</el-button>
    </div>
    <el-table :data="tableData" border style="width: 100%" @header-contextmenu="cellClick">
      <el-table-column prop="type" label="类型" width="180">
        <template slot-scope="scope">
          <el-input type="text" v-model="scope.row.type" v-show="scope.row.iseditor" />
          <span v-show="!scope.row.iseditor">{{scope.row.type}}</span>
        </template>
      </el-table-column>
      <el-table-column prop="code" label="编码" width="180">
        <template slot-scope="scope">
          <el-input type="text" v-model="scope.row.code" v-show="scope.row.iseditor" />
          <span v-show="!scope.row.iseditor">{{scope.row.code}}</span>
        </template>
      </el-table-column>
      <el-table-column prop="value" label="值" width="180">
        <template slot-scope="scope">
          <el-input type="text" v-model="scope.row.value" v-show="scope.row.iseditor" />
          <span v-show="!scope.row.iseditor">{{scope.row.value}}</span>
        </template>
      </el-table-column>
      <el-table-column prop="name" label="名称">
        <template slot-scope="scope">
          <el-input type="text" v-model="scope.row.name" v-show="scope.row.iseditor" />
          <span v-show="!scope.row.iseditor">{{scope.row.name}}</span>
        </template>
      </el-table-column>
      <!-- 添加列 -->
      <el-table-column v-for="(item,index) in tableHeader" :prop="item" :key="index" :label="item">
        <template slot-scope="scope">
          <el-input type="text" v-model="scope.row.item" v-show="scope.row.iseditor" style="position: relative;"/>
          <span v-show="true"></span>
        </template>
      </el-table-column>
      <!-- 添加列 -->
      <el-table-column label="操作" width="240" align="center">
        <template slot-scope="scope">
          <el-button type="primary" @click="edit(scope.row)">编辑</el-button>
          <el-button type="primary" @click="saves(scope.row)">保存</el-button>
          <el-button type="danger" @click="delRow(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-dialog title="添加表格列" :visible.sync="dialogFormVisible" :modal='false' :close-on-click-modal="false" width="30%">
      <el-input v-model="colName" placeholder="请输入要增加的列名" style="width: 100%;"></el-input>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="getcol()">确 定</el-button>
      </div>
    </el-dialog>
    <div class="toolbar" style="padding: 25px;">
      <pagination v-show="tableParam.total>0" :total="tableParam.total" :page.sync="tableParam.pageNumber" :limit.sync="tableParam.pageSize" @pagination="queryList"/>
    </div>
  </div>
</template>
<script>
import { openMessageSuccess, openMessageWarning, openMessageError } from '@/api/assembly/openMessage'
import Pagination from '@/components/Pagination'
import {query, save,del} from '@/api/zczy/dict'
export default {
  components: {
      Pagination
    },
  created() {
    this.initData()
    document.oncontextmenu = function(){return false}
  },
  data() {
    return {
      colName: '',
      tableParam: {
          pageNumber: 0,
          pageSize: 10,
          total: 0,
          keyword: "",
        },
      tableData: [
        {
          code: "cs1",
          value: "1",
          name: "测试1",
          iseditor: false
        },
        {
          code: "cs2",
          value: "2",
          name: "测试2",
          iseditor: false
        }
      ],
      tableHeader: [],
      dialogFormVisible: false,
      delVisible: false
    };
  },
  methods: {
    queryList(){
      query(this.tableParam).then(res => {
          this.tableData = res.list
          this.tableParam.total = res.total
          this.tableParam.pageNumber = res.pageNumber
          this.tableParam.pageSize = res.pageSize
          this.tableData.forEach(element => {
            this.$set(element,'iseditor',false)
          });
        })
    },
    // 新增行
    addRow(){
      const row = {
          code: "",
          value: "",
          name: "",
          iseditor: true
      };
      this.tableData.push(row)
    },
    //新增列
    addCol(){
      this.dialogFormVisible = true
      if(this.colName !==''){
        this.tableHeader.push(this.colName)
      }
    },
    getcol(){
      this.addCol()
      this.dialogFormVisible = false
      this.colName = ''
    },
    //删除列
    cellClick(column, event) {
      this.$confirm('是否删除列:'+column.label+' ?', "提示", {confirmButtonText: '确定', type: 'info'}).then(() => {
        openMessageSuccess('测试')
            //   saveProject(this.rowData).then(res => {
            //   openMessageSuccess(res.msg)
            //   this.dealClose()
            // })
          })
    },
    delRow(row) {
      const index = this.tableData.indexOf(row)
      this.tableData.splice(index, 1);
      let params = {id:row.id}
      del(params).then(res=>{
        openMessageSuccess(res.msg)
        this.queryList()
      })
    },
    edit(row) {
      row.iseditor = true;
    },
    saves(row) {
      save(row).then(res=>{
        openMessageSuccess(res.msg)
        this.queryList()
      })
    },
    //初始化数据
    initData() {
      // this.queryList()
    }
    },
  }
</script>
<style>
  .mybtn{
    color: #fff;
    background-color: #67c23a;
    border-color: #67c23a;
  }
</style>

为了方便可以直接复制代码查看效果已把动态数据换成自定义数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习FreeRTOS】第17章——FreeRTOS任务通知

1.任务通知的简介 任务通知&#xff1a;用来通知任务的&#xff0c;任务控制块中的结构体成员变量 ulNotifiedValue就是这个通知值。 使用队列、信号量、事件标志组时都需另外创建一个结构体&#xff0c;通过中间的结构体进行间接通信&#xff01; 使用任务通知时&#xff0c…

Django学习笔记-AcApp端授权AcWing一键登录

笔记内容转载自 AcWing 的 Django 框架课讲义&#xff0c;课程链接&#xff1a;AcWing Django 框架课。 AcApp 端使用 AcWing 一键授权登录的流程与之前网页端的流程一样&#xff0c;只有申请授权码这一步有一点细微的差别&#xff1a; 我们在打开 AcApp 应用之后会自动向 AcW…

Mybatis-分页与动态字符

目录 一.Mybatis动态分页 什么是动态分页&#xff1a; 导入pom依赖 配置拦截器 编写Bookmapper文件 配置pageBean文件 配置BookBiz接口类 配置BookBizImpl实现接口类 编写实现类demo 测试结果 ​编辑 不走插件&#xff0c;不会分页 二.Mybatis的特殊字符 编写一个Book…

软件测试知识点总结(一)

文章目录 前言一. 什么是软件测试二. 软件测试和软件调试的区别三. 软件测试和研发的区别四. 优秀的测试人员所应该具备的素质总结 前言 在现实生活中的很多场景下&#xff0c;我们都会进行测试。 比如买件衣服&#xff0c;我们需要看衣服是不是穿着好看&#xff0c;衣服材质如…

java八股文面试[数据结构]——HashMap扩容优化

知识来源&#xff1a; 【2023年面试】HashMap在扩容上做了哪些优化_哔哩哔哩_bilibili

Ansible 自动化安装软件

例子如下&#xff1a; 创建一个名为/ansible/package.yml 的 playbook : 将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上 将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上 将 dev 主机组中主机上的所有软件包更新为最新版本 --- - name:…

k8s之工作负载、Deployment、DaemonSet、StatefulSet、Job、CronJob及GC

文章目录 1、工作负载1.1、定义1.2、分类 2、Deployment2.1、定义2.2、Deployment创建2.3、Deployment 更新机制2.3.1、比例缩放&#xff08;Proportional Scaling&#xff09;2.3.2、HPA&#xff08;动态扩缩容&#xff09;2.3.2.1、需要先安装metrics-server2.3.2.2、配置hpa…

JVM工具-1. jps:虚拟机进程状态工具

文章目录 1. jps介绍2. jps命令格式3. jps工具主要选项4. jps -q5. jps -m6. jps -l7. jps -v 1. jps介绍 jps(JVM Process Status Tool)&#xff1a;虚拟机进程状态工具&#xff0c;可以列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类&#xff08;Main Class&…

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮

目录 0.1 效果展示 0.2 实现步骤 1 数据准备 2 属性查询 2.1 射线检测 2.2 获取FeatureID 2.3 属性查询 2.4 属性显示 3 单体高亮 3.1 构建材质参数集 3.2 材质参数设置 3.3 添加Cesium Encode Metadata插件 3.4 从纹理中取出特定FeatureId属性信息 3.5 创建…

netdata监控服务器主机(包括Docker容器)

效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…

【业务功能篇83】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-应用层实战

五、ElasticSearch应用 1.ES 的Java API两种方式 Elasticsearch 的API 分为 REST Client API&#xff08;http请求形式&#xff09;以及 transportClient API两种。相比来说transportClient API效率更高&#xff0c;transportClient 是通过Elasticsearch内部RPC的形式进行请求…

MAVEN利器:一文带你了解IDEA中如何使用Maven

前言&#xff1a; 强大的构建工具——Maven。作为Java生态系统中的重要组成部分&#xff0c;Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用&#xff0c;Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…

windows10 docker 安装在D盘

win10安装docker后发现c盘空间急速减少&#xff0c;360管家查看发现images镜像安装在C盘&#xff0c;于是重装docker desktop以为在安装过程中能够选择&#xff0c;遗憾的是没有提供选择权限&#xff0c;默认直接就安装到了c盘。 desktop 迁移 百度得知可以将c盘的docker安装…

SpringCloud学习笔记(二)_Eureka注册中心

一、Eureka简介 Eureka是一项基于REST&#xff08;代表性状态转移&#xff09;的服务&#xff0c;主要在AWS云中用于定位服务&#xff0c;以实现负载均衡和中间层服务器的故障转移。我们称此服务为Eureka Server。Eureka还带有一个基于Java的客户端组件Eureka Client&#xff…

网络安全之红蓝对抗实战

前言 背景介绍&#xff1a;目标是拿到企业www.xxx.com的《上市商业计划书.docx》&#xff0c;通过 OPENVPN 访问。特别提出的得分规则修改&#xff0c;权限的得分必须有 WEBSHELL/交互式 SHELL&#xff0c;只有一个漏洞回显不给分&#xff0c;更加偏向考察**漏洞利用**而非漏洞…

大红喜庆版UI猜灯谜小程序源码/猜字谜微信小程序源码

今天给大家带来一款UI比较喜庆的猜灯谜小程序&#xff0c;大家看演示图的时候当然也是可以看得到那界面是多么的喜庆&#xff0c;而且新的一年也很快就来了,所以种种的界面可能都比较往喜庆方面去变吧。 这款小程序搭建是免服务器和域名的&#xff0c;只需要使用微信开发者工具…

ARM--day7(cortex_M4核LED实验流程、异常源、异常处理模式、异常向量表、异常处理流程、软中断编程、cortex_A7核中断实验)

软中断代码&#xff1a;&#xff08;keil软件&#xff09; .text .global _start _start:1.构建异常向量表b resetb undef_interruptb software_interruptb prefetch_dataabortb data_abortb .b irqb fiq reset:2.系统一上电&#xff0c;程序运行在SVC模式1>>初始化SVC模…

Mysql B+数索引结构

一、B树和B树区别 二、 B 树形成过程 三、页分裂过程 3.1 页分裂过程实例 3.1.1 原有数据1、3、5形成如下数据页 3.1.2 先新插入数据4&#xff0c;因为 页10 最多只能放3条记录所以我们不得不再分配一个新页&#xff1a; 新分配的数据页编号可能并不是连续的&#xff0c;也…

Pytorch06-复杂模型构建

https://github.com/ExpressGit/Pytorch_Study_Demo 1、PyTorch 复杂模型构建 1、模型截图2、模型部件实现3、模型组装 2、模型定义 2.1、Sequential 1、当模型的前向计算为简单串联各个层的计算时&#xff0c; Sequential 类可以通过更加简单的方式定义模型。2、可以接收…