实现表格可编辑(点击字段出现输入框)vue elementUI

news2024/9/22 13:43:42

实现表格可编辑

参考:el-table 中实现表格可编辑_el表格编辑_快乐征途的博客-CSDN博客

按行保存数据,每行数据最后都有一个保存按钮,如下图所示

在这里插入图片描述

使用的是<template>嵌套<el-input>

完整代码如下:

<template>
  <div>
    <el-table
      :data="tableData"
      size="mini"
      style="width: 600px"
      @cell-click="handleCellClick"
    >
      <el-table-column
        prop="date"
        label="日期"
        width="180">
        <template class="item" slot-scope="scope">
        //初始页面先将input隐藏(display:none)显示txt
          <el-date-picker type="date" value-format="yyyy-MM-dd" placeholder="选择日期" class="item__input" v-model="scope.row.date" style="display:none;"></el-input>
          <div class="item__txt">{{scope.row.date}}</div>
        </template>
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
        <template class="item" slot-scope="scope">
          <el-input class="item__input" v-model="scope.row.name" placeholder="请输入姓名" style="display:none;"></el-input>
          <div class="item__txt">{{scope.row.name}}</div>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
​
<script>
export default {
  data () {
    return {
      // 表格数据
      tableData: [{
        id: 0,
        date: '2016-05-02',
        name: '王小虎'
      }, {
        id: 1,
        date: '2016-05-04',
        name: '王小虎'
      }, {
        id: 2,
        date: '2016-05-01',
        name: '王小虎'
      }, {
        id: 3,
        date: '2016-05-03',
        name: '王小虎'
      }],
      // 需要编辑的属性
      editProp: ['date', 'name'],
      // 保存进入编辑的cell
      clickCellMap: {}
    }
  },
  methods: {
    /** 点击cell */
    handleCellClick (row, column, cell, event) {
    //property是该列绑定的字段名称,若是日期列,则property是date
      const property = column.property
      if (this.editProp.includes(property)) {
        // 保存cell,cell是指具体点击的表格中的单元格
        this.saveCellClick(row, cell)
        //querySelector() 方法返回文档中匹配指定 CSS 选择器的一个元素。参数是必填项
        //隐藏txt显示input输入框
        cell.querySelector('.item__txt').style.display = 'none'
        cell.querySelector('.item__input').style.display = 'block'
        //该单元格的input获得焦点
        cell.querySelector('input').focus()
      }
    },
    /** 保存进入编辑的cell */
    //将进入编辑的cell存入clickCellMap数组中,后面取消编辑状态的时候遍历此数组就可以了
    saveCellClick (row, cell) {
      const id = row.id
      if (this.clickCellMap[id] !== undefined) {
        if (!this.clickCellMap[id].includes(cell)) {
          this.clickCellMap[id].push(cell)
        }
      } else {
        this.clickCellMap[id] = [cell]
      }
    },
    /** 保存数据(这部分内容可以添加到保存按钮中) */
    save (row) {
      const id = row.id
      // 取消本行所有cell的编辑状态
      this.clickCellMap[id].forEach(cell => {
        this.cancelEditable(cell)
      })
      this.clickCellMap[id] = []
    },
    /** 取消编辑状态 */
    cancelEditable (cell) {
      cell.querySelector('.item__txt').style.display = 'block'
      cell.querySelector('.item__input').style.display = 'none'
    },
  }
}
</script>

是否可编辑权限设置

此时,我的表格数据中有一个字段是创建人,若该条数据不是当前系统登陆的用所创建的,则当前用户没有权限编辑此条数据,也就是说用户只能编辑自己创建的那条数据。

需要添加如下代码:

data(){
    return{
        username:'',
        tableDisabled:false
    }
},
created(){
    this.getUserName()
},
methods:{
    getUserName(){
    //若该系统login页面使用的是localStorage存储的用户信息,先打印看一下localStorage然后再获取相应字段
        this.username = localStorage.getItem("username")
    },
    /** 点击cell */
    handleCellClick (row, column, cell, event) {
      const us = row.createUser;
      if(this.username == us){
        this.tableDisabled = true;
      }else{
        this.tableDisabled = false;
      }
      if(!this.tableDisabled){
        this.$message.warning("您无权限更改此条数据")
      }else{
          const property = column.property
          if (this.editProp.includes(property)) {
            this.saveCellClick(row, cell)
            cell.querySelector('.item__txt').style.display = 'none'
            cell.querySelector('.item__input').style.display = 'block'
            cell.querySelector('input').focus()
          }
       }
    },
}

表格点击下一页以后隐藏input

若当前页的表格没有点击保存按钮将input输入框隐藏,直接点击别的页面,那么别的页面input输入框的显示状态和之前页面是一样的,这样可能会导致该页面数据不是该用户创建的,但是那条数据缺显示了可编辑的输入框。

导致如上bug的原因是:根据cell设置的input的状态,但是分页了以后,第一页和第二页相同的单元格都显示input。比如:我点击左上角的单元格显示输入框,当进入下一页的时候,左上角的输入框同样是显示的状态。

现在,需要点击分页进入别的页面之前,将所有的input输入框隐藏。

在表格分页条的current-change事件中添加代码:

currentChangeHandle(val){
    this.pageNum = val;
    let id = ''
    //此时tableData的数据还是之前的页面数据还未更新
    for(let i=0;i<this.tableData.length;i++){
        id = this.tableData[i].id;
    //如果当前行不存在input显示,this.clickCellMap[id]是undefined
        if(this.clickCellMap[id] !==undefined){
        //取消cell编辑状态,显示txt
            this.clickCellMap[id].forEach(cell=>{
            //此方法在最上面的代码中写了
                this.cancelEditTable(cell);
            })
        this.clickCellMap[id] = []
        }
    }
    //调用后端接口更新表格数据
    this.getList()
}

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

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

相关文章

【计算机视觉 | 目标检测】RT-DETR:DETRs Beat YOLOs on Real-time Object Detection

文章目录 一、前言二、简介三、相关方法3.1 实时目标检测器3.2 端到端目标检测器3.3 目标检测的多尺度特征 四、检测器端到端速度4.1 分析NMS4.2 端到端速度基准 五、The Real-time DETR5.1 方法概览5.2 高效混合编码器5.2.1 计算瓶颈分析5.2.2 Hybrid design5.2.3 IoU-Aware查…

【LeetCode】105. 从前序与中序遍历序列构造二叉树

1.问题 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null…

“访达”不能完成操作,因为不能读取或写入“”中某些数据。

“访达”不能完成操作&#xff0c;因为不能读取或写入“”中某些数据。 复制文件夹时出现「“访达”不能完成该操作&#xff0c;因为不能读取或写入“”中的某些数据。 &#xff08;错误代码-36&#xff09;」及icloud中文件夹无法下载提示「未能下载项目“XX”。」 最近1个月…

1.Mybatis基本介绍

为什么使用MyBatis&#xff1f; 1.JDBC在创建Connection的时候&#xff0c;存在硬编码问题&#xff08;也就是直接把连接信息写死&#xff0c;不方便后期维护&#xff09; 2.preparedStatement对象在执行sql语句的时候存在硬编码问题 3.每次在进行一次数据库连接后都会关闭数据…

【SWAT水文模型】ArcSWAT输入准备:土地利用/土壤/气象数据

ArcSWAT输入准备&#xff1a;土地利用/土壤/气象数据 1 土地利用数据的处理1.1 数据下载 2 土壤库建立2.1 数据下载 3 气象数据库参考 1 土地利用数据的处理 1.1 数据下载 下载地址如下&#xff1a; 中科院1km土地利用数据 清华大学高精度土地利用数据 2 土壤库建立 SW…

pytest学习二(通过配置文件运行、分组执行,及其它一些参数)

接上一篇说到了环境的配置&#xff0c;以及一个用例的编写&#xff0c;接下来继续记录一些它的运行方式和一些平常使用的标签 一、通过全局配置文件&#xff08;pytest.ini&#xff09;运行 pytest.ini配置文件的编写规则 ①编码格式一般为ANSI ②一般放在项目的根目录下&a…

个人杂笔记

docker里面的-p暴露端口是确确实实写了才会映射到主机 docker run -d --hostname my-rabbit --name my-rabbit -e RABBITMQ_DEFAULT_USERroot -e RABBITMQ_DEFAULT_PASS250772730 -p 8080:8080 -p 15672:15672 -p 5672:5672 rabbitmq:3-managementpip安装提示warning 可能原因…

【 Spring Mybatis 复杂的查询操作 】

文章目录 引言一、参数占位符 #{} 和 ${}二、SQL 注入三、like 模糊查询四、返回类型&#xff1a;resultType 和 resultMap五、多表查询 引言 前面我们已经学会了使用 Mybatis 进行增&#xff0c;删&#xff0c;改操作&#xff0c;也实现了简单的查询操作 &#xff01;下面我们…

执着于考研考公却一再挫败,拿什么拯救你的职场后半生?

今天之所以想写一篇这样的文章&#xff0c;确确实实是有感而发&#xff0c;因为从近来接触的学员身上&#xff0c;能够最直观地感受到&#xff1a;考公考研失败后的同学&#xff0c;他们内心的那种焦虑感远超往期&#xff01; 用他们的话讲&#xff1a;“目前的状态就是感觉自…

540. 有序数组中的单一元素

给你一个仅由整数组成的有序数组&#xff0c;其中每个元素都会出现两次&#xff0c;唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。 示例 1: 输入: nums [1,1,2,3,3,4,4,8,8] 输出: 2 示…

“开发人员必备技能:Python接口自动化测试全攻略“:了解接口测试的基础知识,并通过Python编写测试用例,提升自己的测试技能

目录 摘要 一、基础知识 二、工具选择 三、实现步骤 1.安装依赖库 2.编写测试用例 3.运行测试用例 4.查看测试结果 四、代码实现 总结 摘要 随着互联网行业的不断发展&#xff0c;越来越多的企业开始注重自动化测试的重要性。而在自动化测试中&#xff0c;接口自动化…

同为科技(TOWE)防雷科普篇(二)——雷击灾害急救方法大全

前 言 当雷击发生时&#xff0c;空气中的各种微粒互相碰撞和摩擦便会使该空气介质两面的正负电荷的量持续积累&#xff0c;这时加于该空气介质的电压也会同时增加&#xff0c;当局部电压达到当时条件下空气的击穿电压时&#xff0c;该空气介质的局部便会发生电击穿而持续成为等…

我国激光打标机行业分析:防疫放开医疗行业激光打标机需求迫切 行业将迈向自动化、智能化的未来

1、激光打标机行业定义、分类及应用范围 激光打标机是用激光束在各种不同的物质表面打上永久标记的激光设备。激光打标技术相比传统的标识技术&#xff0c;不仅仅在对于材料的损耗&#xff0c;标识效果更具有优势&#xff0c;并且在生产加工的效率和产出方面更是有过之而无不及…

【复现与代码分析】Apache APISIX Dashboard API权限绕过导致RCE(CVE-2021-45232)

Apache APISIX Dashboard API权限绕过导致RCE&#xff08;CVE-2021-45232&#xff09; 0x00漏洞信息 Apache APISIX 是一个动态、实时、高性能的 API 网关&#xff0c; 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。Apache APISIX …

节点流和处理流

节点流可以从一个特定的数据源读写数据&#xff0c;如FileReader&#xff0c;FileWriter处理流&#xff08;也叫包装流&#xff09;是“连接”在已存在的流&#xff08;节点流或处理流&#xff09;之上&#xff0c;为程序提供更为强大的读写功能&#xff0c;也更加灵活&#xf…

JavaEE IP协议详细讲解

详细讲解IP协议 O > O 文章目录 JavaEE & IP协议1. 地址管理1.1 IP协议报文格式1.2 动态分配IP地址1.3 NAT机制1.4 IP协议1.4 IP协议工作过程1.5 IPV6协议1.6 IP地址的组成1.7 特殊的IP地址 2. 路由选择 JavaEE & IP协议 1. 地址管理 我们希望&#xff0c;每个网络…

免费AI人工智能在线写作伪原创-百度ai自动写文章

免费伪原创洗稿工具 免费伪原创洗稿工具现在终于推出了&#xff01;你是否在写作的时候&#xff0c;经常因为缺乏灵感而苦恼&#xff1f;或者&#xff0c;你在撰写文章的时候&#xff0c;发现自己的语言表述不够丰富&#xff0c;缺乏变化&#xff0c;语句重复率太高&#xff1f…

从零学习SDK(9)SDK的局限

SDK是一种便捷而实用的工具&#xff0c;但软件开发者不能视SDK为万能的解决之道&#xff0c;SDK也有局限性&#xff0c;并且这些局限性可能会十分“致命”。软件开发者在选择SDK产品之前&#xff0c;需要先了解SDK的不足之处。本文将介绍SDK存在的三种问题&#xff0c;以引起软…

新手必看!ChatGPT常见问题总整理,你遇到了几个?

随着ChatGPT火爆全球,使用人数以指数型成长,许多使用上的问题呈现在网路上。 今天这篇文章会用实作的方式带大家了解ChatGPT有哪些常见问题,以此减少踩坑的机会。 并用简单的示例让大家感受GPT-3.5与GPT-4的能力差异,希望对大家有所帮助。 大家会有这些问题,其实就是希望…

【手把手做ROS2机器人系统开发一】开发环境搭建

【手把手做ROS2机器人系统开发一】开发环境搭建 目录 【手把手做ROS2机器人系统开发一】开发环境搭建 一、专栏介绍&#xff1a; 二、开发环境搭建&#xff1a; 1.Ubuntu系统安装 2.ROS2系统环境安装 3.测试系统运行 一、专栏介绍&#xff1a; 大家好&#xff0c;今天给大家…