element-ui表格编辑

news2024/11/19 7:45:08

前言:

准备:

  1. element-ui
  2. vue3
  3. vscode

实现步骤:

  1. 数据标定
  2. 打开激活
  3. 编辑保存

1. 设定需要编辑的表格单元格是否编辑标识

在请求后台表格数据时进行一个二次包装,如果后端已经处理则不需要在进行包装(此处包装是否编辑的标识为了区分显示编辑框和纯内容显示)
在这里插入图片描述
以上述图片效果为例,需要对三个字段进行标识。

标识数据JS代码:

// 设备分组列表
getList() {
    queryList().then((res) => {
    	// 获取数据后通过foreach循环对数据对象进行标识
        res.data.List.forEach(item => {
            item.xEdit = false;
            item.yEdit = false;
            item.zEdit = false;
            this.list.cameras.push(item)
        });
    });
},

HTML代码:一下代码实现了在未编辑状态下的显示效果

<!-- 添加的标识为了进行控制表格行中的需要编辑的单元格中的span标签和el-input标签的显示与隐藏 -->
<el-table :data="list" stripe style="width: 100%">
  <el-table-column prop="cameraX" label="坐标位置:X">
      <template slot-scope="scope">
          <span v-show="!scope.row.xEdit">{{ scope.row.cameraX }}</span>
          <el-input v-show="scope.row.xEdit" size="mini" v-model="scope.row.cameraX"></el-input>
      </template>
  </el-table-column>
  <el-table-column prop="cameraY" label="坐标位置:Y">
      <template slot-scope="scope">
          <span v-show="!scope.row.yEdit">{{ scope.row.cameraY }}</span>
          <el-input v-show="scope.row.yEdit" size="mini" v-model="scope.row.cameraY"></el-input>
      </template>
  </el-table-column>
  <el-table-column prop="cameraZ" label="坐标位置:Z">
      <template slot-scope="scope">
          <span v-show="!scope.row.zEdit">{{ scope.row.cameraZ }}</span>
          <el-input v-show="scope.row.zEdit" size="mini" v-model="scope.row.cameraZ"></el-input>
      </template>
  </el-table-column>
</el-table>

输出效果

在这里插入图片描述

2. 双击或单击行中单元格进行编辑激活

添加行双击或单机监听事件

element-ui table中提供了单元格被双击或单击的监听事件
在这里插入图片描述

html代码

<el-table :data="list" stripe style="width: 100%" @cell-dblclick="openEditColumn"></el-table>

js代码

// 打印输出测试
openEditColumn(row, column, cell, event) {
      console.log(row, column);
 },

输出效果
在这里插入图片描述
在这里插入图片描述

激活单元格进入编辑状态

 // 由于设定了多个可编辑字段,在此处需要针对判断
 openEditColumn(row, column, cell, event) {
    console.log(row, column)
    if (column.property === "cameraX") {
        this.equipmentList.cameras.forEach(item => {
            if (item.id === row.id) {
            	// 激活当前点击的单元格进入可以编辑(span与el-input标签显示隐藏切换)
                item.xEdit = true
            }
        });
    } else if (column.property === "cameraY") {
        this.equipmentList.cameras.forEach(item => {
            if (item.id === row.id) {
                item.yEdit = true
            }
        });
    } else if (column.property === "cameraZ") {
        this.equipmentList.cameras.forEach(item => {
            if (item.id === row.id) {
                item.zEdit = true
            }
        });
    }
},

效果如下
在这里插入图片描述

3. 编辑内容并保存数据关闭编辑状态

HTML代码

<!-- 给对应编辑的单元格中的el-input添加光标移除后触发事件,进行数据保存与编辑状态关闭 -->
<el-table-column prop="cameraX" label="坐标位置:X">
    <template slot-scope="scope">
        <span v-show="!scope.row.xEdit">{{ scope.row.cameraX }}</span>
        <el-input @blur="editColumnData(scope.row, 'cameraX')"
            @keyup.enter.native="editColumnData(scope.row, 'cameraX')" v-show="scope.row.xEdit"
            size="mini" v-model="scope.row.cameraX"></el-input>
    </template>
</el-table-column>

JS代码

// 表格数据编辑保存并关闭编辑
/**
* row:当前编辑行数据
* column:当前编辑列名称(区分作用)
*/
editColumnData(row, column) {
    // 关闭表格编辑
    this.list.forEach(item => {
        if (item.id === row.id) {
            if (column === "cameraX") {
                item.xEdit = false;
            } else if (column === "cameraY") {
                item.yEdit = false;
            } else if (column === "cameraZ") {
                item.zEdit = false;
            }
        }
    });
},

效果如下
在这里插入图片描述

4. 完整代码

<template>
    <div class="app-container">
        <el-table :data="list" stripe style="width: 100%" @cell-dblclick="openEditColumn">
            <el-table-column prop="cameraX" label="坐标位置:X">
                <template slot-scope="scope">
                    <span v-show="!scope.row.xEdit">{{ scope.row.cameraX }}</span>
                    <el-input @blur="editColumnData(scope.row, 'cameraX')"
                        @keyup.enter.native="editColumnData(scope.row, 'cameraX')" v-show="scope.row.xEdit"
                        size="mini" v-model="scope.row.cameraX"></el-input>
                </template>
            </el-table-column>
            <el-table-column prop="cameraY" label="坐标位置:Y">
                <template slot-scope="scope">
                    <span v-show="!scope.row.yEdit">{{ scope.row.cameraY }}</span>
                    <el-input @blur="editColumnData(scope.row, 'cameraY')"
                        @keyup.enter.native="editColumnData(scope.row, 'cameraY')" v-show="scope.row.yEdit"
                        size="mini" v-model="scope.row.cameraY"></el-input>
                </template>
            </el-table-column>
            <el-table-column prop="cameraZ" label="坐标位置:Z">
                <template slot-scope="scope">
                    <span v-show="!scope.row.zEdit">{{ scope.row.cameraZ }}</span>
                    <el-input @blur="editColumnData(scope.row, 'cameraZ')"
                        @keyup.enter.native="editColumnData(scope.row, 'cameraZ')" v-show="scope.row.zEdit"
                        size="mini" v-model="scope.row.cameraZ"></el-input>
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>
<script>
export default {
    name: "handleViewCamera",
    components: {},
    props: {
    },
    data() {
        return {
        	list: {},
        };
    },
    created() {
    },
    mounted() {
        this.getList();
    },
    methods: {
        // 获取数据列表
        getList() {
            queryList(this.regionId).then((res) => {
                res.data.cameras.forEach(item => {
                    item.xEdit = false;
                    item.yEdit = false;
                    item.zEdit = false;
                    this.list.push(item)
                });
            });
        },
		// 打开信息编辑
		openEditColumn(row, column, cell, event) {
		    if (column.property === "cameraX") {
		        this.equipmentList.cameras.forEach(item => {
		            if (item.id === row.id) {
		            	// 激活当前点击的单元格进入可以编辑(span与el-input标签显示隐藏切换)
		                item.xEdit = true
		            }
		        });
		    } else if (column.property === "cameraY") {
		        this.equipmentList.cameras.forEach(item => {
		            if (item.id === row.id) {
		                item.yEdit = true
		            }
		        });
		    } else if (column.property === "cameraZ") {
		        this.equipmentList.cameras.forEach(item => {
		            if (item.id === row.id) {
		                item.zEdit = true
		            }
		        });
		    }
		},
        // 表格数据编辑保存并关闭编辑
        editColumnData(row, column) {
            // 关闭表格编辑
            this.list.forEach(item => {
                if (item.id === row.id) {
                    if (column === "cameraX") {
                        item.xEdit = false;
                    } else if (column === "cameraY") {
                        item.yEdit = false;
                    } else if (column === "cameraZ") {
                        item.zEdit = false;
                    }
                }
            });
        }
    },
};
</script>
<style  lang="scss" scoped>
</style>

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

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

相关文章

手撕前端面试题【javascript~模板字符串、类继承、参数解析器、生成页码等】

前端的那些基本标签&#x1f353;&#x1f353;模板字符串&#x1f353;&#x1f353;类继承&#x1f353;&#x1f353;参数解析器&#x1f353;&#x1f353;生成页码&#x1f353;&#x1f353;js中哪些操作会造成内存泄漏?html页面的骨架&#xff0c;相当于人的骨头&#…

react router6.x官方DEMO

Tutorial v6.4.2 | React Router 初始化项目 import React from "react"; import ReactDOM from "react-dom/client"; import {createBrowserRouter,RouterProvider,Route, } from "react-router-dom"; import "./index.css";const …

用CSS设置颜色、背景和图像效果

&#x1f4dc;个人简介 ⭐️个人主页&#xff1a;微风洋洋&#x1f64b;‍♂️ &#x1f351;博客领域&#xff1a;编程基础&#x1f4a1;,后端&#x1f4a1;,大数据,信息安全 &#x1f345;写作风格&#xff1a;干货,干货,还是tmd的干货 &#x1f338;精选专栏&#xff1a;【J…

js数组常用方法(19种)|你会的到底有多少呢?

一、改变原数组的方法 1.push&#xff08;&#xff09; 末尾添加数据 语法: 数组名.push(数据) 作用: 就是往数组末尾添加数据 返回值: 就是这个数组的长度 //push var arr [10, 20, 30, 40] res arr.push(20) console.log(arr);//[10,20,30,40,20] console.log(res);//52. …

【Cesium】使用TLE轨道两行数计算轨道信息,并生成CZML格式文件

TLE为轨道两行数&#xff0c;简单的说是用两行数字表示轨道的相关信息&#xff0c;本文即用轨道两行数来计算任一时刻卫星的位置信息和速度信息&#xff0c;并生成CZML文件能够读取的格式 1、satellite.js库简介 简而言之&#xff0c;satellite.js库可以根据TLE轨道两行数&…

vue 项目适配笔记本1920*1080 125%缩放

前言 在台式机上开发pc端项目时&#xff0c;由于是1920*1080的分辨路和100缩放&#xff0c;看起来是没有问题。在笔记本上有问题 因为现在很多14寸的笔记本&#xff0c;出厂默认就是125%或150%的显示。导致很多时候我们的项目&#xff0c;自己开发的时候都是按照100%比例来开发…

Vue使用Serial连接串口

本来只是随手记录一下&#xff0c;发现看的人多了&#xff0c;想着还是修复一下bug吧&#xff0c;供各位看官指正 2022-10-24本次更新: 1、修复在不支持Serial的情况下&#xff0c;控制台报错 2022-09-19本次更新: 1、修复了传输数据接收分隔的情况(增加数据缓存) 2、修复串口连…

【中兴】web训练营~一文带你走进前端 | 百图制作

&#x1f4e2;作者简介&#xff1a;物联网领域创作者&#xff0c;&#x1f3c5;阿里云专家博主&#x1f3c5; &#x1f3c5;华为云享专家&#x1f3c5; ✒️个人主页&#xff1a;Choice~ &#x1f310;格言&#xff1a;可正因为难&#xff0c;才有价值&#xff01;&#x1f536…

Linux 使用Nginx部署web(vue、react)项目

前言 本文基于&#xff1a;操作系统 CentOS 7.6 使用的工具&#xff1a;Xshell7、Xftp7 1.安装所需依赖 安装gcc yum -y install gcc安装pcre、pcre-devel yum -y install pcre pcre-devel安装zlib、zlib-devel yum install -y zlib zlib-devel安装openssl、openssl-dev…

【uni-app】点击左上角返回按钮,弹出弹窗或者是携带参数返回上一页

目录 1、弹出弹窗 2、把这一页的数据带回到上一页&#xff08;获取下一页的数据 &#xff09; 3、跳转页面并携带参数&#xff0c;接受页获取参数 1、弹出弹窗 当我返回上一页的时候需要做一个判断是否需要保存 onBackPress 只支持APP和H5 但不支持小程序 &#xff0c;可以…

Java web—访问http://localhost:8080/xx/xx.jsp报404错误问题

由于我们在eclipse ee中把项目部署在web端经常会出现报404错误。 原因为&#xff1a; 404状态码是一种http状态码&#xff0c;其意思是&#xff1a; 所请求的页面不存在或已被删除。通俗的讲就是当用户输入了错误的链接时&#xff0c;返回的页面。 以下描述几种情况&#xff1a…

IDEA从零到精通(24)之lombok插件的安装与使用

文章目录作者简介引言导航概述安装插件使用小结导航热门专栏推荐作者简介 作者名&#xff1a;编程界明世隐 简介&#xff1a;CSDN博客专家&#xff0c;从事软件开发多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是从零开始一步步把学习成长、深知学习和积累的重要性…

【Vue】 组件封装

目录1 组件封装1.1 全局注册1.2 局部注册1.2.1 命名1.2.2 引用组件1.2.2.1 传统写法1.2.2.2 setup1.2.2.3 easycom1.3 父子组件间的数据传递1.3.1 子组件 data() 中设置数据1.3.2 父组件通过 prop 将数据传递给子组件1.3.3 子组件不能直接修改 prop 中的值1.3.4 子组件通过 emi…

Pinia中action使用详解

actions的使用 动作相当于组件中的方法。它们可以使用actionsin 属性进行定义。 并且在pinia中的action既可以有同步函数也可以有异步函数。 在actions中可以通过this访问该仓库所有实例 export const useUsers defineStore(users,{state:()>{userData:null},actions:{a…

【SpringMVC】集成Web、MVC执行流程、数据响应、数据交互

文章目录前言一.Spring集成Web二.对于SpringMVC的理解三.MVC执行流程&#xff08;&#x1f3f3;️‍&#x1f308;&#xff09;1.组件解析2.RequestMapping四.SpringMVC数据响应页面跳转回写数据五.SpringMVC获得请求数据前言 SpringMVC确实很麻烦&#xff0c;零碎的点太多 一…

小程序自定义tabbar导航栏、动态控制tabbar功能实现(uniapp)

uniapp开发小程序&#xff0c;不同角色/已登录未登录&#xff0c;都有不一样的底部导航栏&#xff0c;这些情况下就需要自行定义tabbar&#xff0c;从而实现动态tabbar的实现。 1.首先我们需要在pages.json配置tabbar 我这里并没有开启custom(自定义)&#xff0c;不开启的话&a…

vue实现思维导图

介绍 前景&#xff1a; 仿幕布实现思维导图效果 技术实现&#xff1a;jsmind 完整代码&#xff1a;vue-jsmind 参考文章&#xff1a; 在vue中使用jsmind组织架构或思维导图 实现效果&#xff1a; 功能描述&#xff1a; 编辑、删除、插入、拖拽、展开/收起节点分布结构切换…

数字IC前端面试问题总结

本篇主要参考了 1、新芯设计(3条消息) 新芯设计的博客_CSDN博客-如何成为一名高级数字 IC 设计工程师,数字 IC 技能拓展,基于 SoC 的卷积神经网络车牌识别系统设计领域博主 2、小汪的IC自习室 (3条消息) 小汪的IC自习室的博客_CSDN博客-数字IC设计,SystemVerilog & I…

前端使用xlsx插件读取excel文件数据(保姆级教程)

本人属于一个实习菜鸟&#xff0c;大神请谨慎阅读............ 在开发过程中&#xff0c;难免会碰到用前端来处理excel文件的需求&#xff0c;我们需要解析出excel文件的内容然后在以对象的形式展示或者与后端对接 功能的实现思路&#xff1a; 文件选择 > FileReader对象…

微信小程序中使用vant框架,方法步骤清晰,简单适用

1.说到vant框架相信大家应该并不陌生了吧&#xff0c;做过移动端开发的小伙伴们应该都知道它吧。 2.Vant 是有赞前端团队开源的移动端组件库&#xff0c;于 2017 年开源&#xff0c;已持续维护 4 年时间。Vant 对内承载了有赞所有核心业务&#xff0c;对外服务十多万开发者&am…