Vue+element UI 可编辑表格

这篇具有很好参考价值的文章主要介绍了Vue+element UI 可编辑表格。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前端开发过程中,我们都会尽量避免多层弹窗的嵌套,最多两层弹窗嵌套。这么做的原因是为了方便管理代码和防止多层嵌套弹窗造成bug。但是有时候,内层的弹窗可能展示了一个表格,并且需要操作表格中的数据,这个时候我们只能自己DIY一个表格,取代弹窗处理的方法。

1,实现效果和逻辑

效果:表格展示数据,并且表格可以编辑数据(增、删、改)。

逻辑:实现可编辑表格的主要思想:使用table创立一个表格,正常展示数据,需要操作某一行数据时,根据行数据的ID作为标志,将该行HTML换成编辑框或者其他form组件。

2,效果图

vue可编辑表格组件,Vue方法笔记,vue.js,elementui,前端,javascript

 2,代码

HTML:

<!--
*
*checkedList:table表格行数据列表
*customCurrentId:编辑某行时,编辑行ID
*item.id !== customCurrentId:控制该行显示HTML内容,不同时显示文本,相同是显示编辑状态
*@click="addOtherForm":新增行数据
*
-->
<table border="1" cellspacing="0" cellpadding="0" class="sinorock-table">
  <tr class="bg-style">
    <td class="table-label" style="width: 8%;">序号</td>
    <td class="table-label" style="width: 20%;">节点名称</td>
    <td class="table-label" style="width: 24%;">验收人</td>
    <td class="table-label" style="width: 20%;">人员信息</td>
    <td class="table-label" style="width: 18%;">方式</td>
    <td class="table-label" style="width: 10%;">操作</td>
  </tr>
  <tr v-for="(item,index) in checkedList" :key="item.id + index" class="bg-style">
      <template v-if="item.id !== customCurrentId">
        <td style="width: 8%;">{{ index+1 }}</td>
        <td style="width: 20%;">{{ item.name }}</td>
        <td style="width: 24%;">
          <el-radio v-model="item.type" :label="0" disabled>全部人员</el-radio>
          <el-radio v-model="item.type" :label="1" disabled>指定人员</el-radio>
        </td>
        <td style="width: 20%;" v-if="item.type === 1">{{ item.accepterName }}</td>
        <td style="width: 20%;" v-if="item.type === 0">全部</td>
        <td style="width: 18%;">
          <el-radio v-model="item.way" :label="0" disabled>会签</el-radio>
          <el-radio v-model="item.way" :label="1" disabled>或签</el-radio>
        </td>
        <td style="width: 10%;">
          <div class="explain-btn">
            <el-button type="text" icon="el-icon-edit" style="color:#39A1FF;" @click="customEditHandle(item)"></el-button>
            <el-button type="text" icon="el-icon-delete" style="color:#FD7474;" @click="customDeleteHandle(item)"></el-button>
          </div>
        </td>
      </template>
      <template v-else>
        <td style="width: 8%;">{{ index+1 }}</td>
        <td style="width: 20%;">
          <el-input type="text" size="mini" placeholder="请输入字段名" v-model="customCurrentObj.name" maxlength="10" clearable></el-input>
        </td>
        <td style="width: 24%;">
          <el-radio v-model="customCurrentObj.type" :label="0" @change="typeChangeHandle">全部人员</el-radio>
          <el-radio v-model="customCurrentObj.type" :label="1">指定人员</el-radio>
        </td>
        <td style="width: 20%;" v-if="customCurrentObj.type === 1">
          <el-input 
            placeholder="请选择" 
            size="mini"
            v-model="customCurrentObj.accepterName" 
            @focus="selectShow()"
            @clear="clearHandle()"
            clearable>
          </el-input>
        </td>
        <td style="width: 20%;" v-if="customCurrentObj.type === 0">全部</td>
        <td style="width: 18%;">
          <el-radio v-model="customCurrentObj.way" :label="0" :disabled="customCurrentObj.type === 0">会签</el-radio>
          <el-radio v-model="customCurrentObj.way" :label="1" :disabled="customCurrentObj.type === 0">或签</el-radio>
        </td>
        <td style="width: 10%;">
          <el-button type="text" icon="el-icon-circle-check" style="color:#39A1FF;" @click="customCheckOK(item)"></el-button>
          <el-button type="text" icon="el-icon-circle-close" @click="customCheckcancel(item)"></el-button>
        </td>
      </template>
  </tr>
  <tr class="bg-style">
    <td style="width: 8%;border: 0;"></td>
    <td style="width: 20%;border: 0;"></td>
    <td style="width: 24%;border: 0;text-align: right;">
      <div class="add-check-custom" @click="addOtherForm">
        <i class="el-icon-circle-plus-outline" style="color: #39A1FF;"></i>
        <span>添加验收节点</span>
      </div>
    </td>
    <td style="width: 20%;border: 0;"></td>
    <td style="width: 18%;border: 0;"></td>
    <td style="width: 10%;border: 0;"></td>
  </tr>
</table>

JavaScript:

<script>
    export default {
        data() {
            return {
                checkedList: [], // 验收节点列表
                customCurrentId: '', // 验收节点编辑时节点ID
                customCurrentObj: {}, // 验收节点编辑时节点数据
            }
        },
        methods: {
            // 新增验收节点
            addOtherForm(){
              let num = new Date().getTime()
              this.checkedList.push({name:'', type:0, accepter:'', accepterName:'', accepterList: [], way:1, id: 'addNew'+num })
              this.customCurrentId = 'addNew'+num
              this.customEditHandle(this.checkedList[this.checkedList.length-1])
            },
            // 删除验收节点
            customDeleteHandle(item) {
              this.checkedList = this.checkedList.filter((ele) => {
                return ele.id !== item.id
              })
              // 至少保留一条验收节点
              if(this.checkedList && this.checkedList.length === 0) {
                this.$message({
                  message: '请至少保留一条验收节点!',
                  type: 'error',
                  duration: 1000,
                  onClose: () => {
                    this.addOtherForm()
                  }
                })
              }
            },
            // 编辑验收节点
            customEditHandle(data){
                this.customCurrentId = data.id
                try {
                  this.customCurrentObj = JSON.parse(JSON.stringify(data))
                } catch (error) {
          
                }
            },
            // 修改确认验收节点
            customCheckOK(data){
              // 验收节点,填写完整的校验
              let columsEntityFlag = false
              let checkedPersonFlag = false
              if(this.customCurrentObj.type === 0) {
                checkedPersonFlag = false
              }else if(this.customCurrentObj.type === 1 && this.customCurrentObj.accepter === '') {
                checkedPersonFlag = true
              }
              if(!this.customCurrentObj.name || checkedPersonFlag) {
                columsEntityFlag = true
              }
              if(columsEntityFlag) {
                this.$message({
                  message: '请将您添加的验收节点填写完整!',
                  type: 'error',
                })
                return false
              }
              this.checkedList.forEach((item, index) => {
                if(item.id === this.customCurrentId) {
                  try {
                    this.checkedList[index] = JSON.parse(JSON.stringify(this.customCurrentObj))
                  } catch (error) {
            
                  }
                }
              })
              this.$message({
                message: '修改成功',
                type: 'success',
                duration: 1000,
                onClose: () => {
                  this.customCurrentId = ''
                }
              });
            },
            // 取消修改验收节点
            customCheckcancel(){
              let columsEntityFlag = false
              let checkedPersonFlag = false
              if(this.customCurrentObj.type === 0) {
                checkedPersonFlag = false
              }else if(this.customCurrentObj.type === 1 && this.customCurrentObj.accepter === '') {
                checkedPersonFlag = true
              }
              if(!this.customCurrentObj.name || checkedPersonFlag) {
                columsEntityFlag = true
              }
              if(columsEntityFlag) {
                this.$message({
                  message: '请将验收节点填写完整!',
                  type: 'error',
                })
                return false
              }
                this.customCurrentId = ''
            },
        }
    }
</script>

可编辑表格功能就记录到此了,有需要的小伙伴拿去用,希望对你们有所帮助。

这个方法实现可能比较low,谁有更好的方法请多多指导。

拜了个拜,迪迦。。。文章来源地址https://www.toymoban.com/news/detail-766120.html

到了这里,关于Vue+element UI 可编辑表格的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分页表格】Vue2 + Element UI实现自定义的分页表格组件(自定义Vue组件)

    这篇文章,主要介绍Vue2 + Element UI实现自定义的分页表格组件(自定义Vue组件)。 目录 一、分页表格 1.1、运行效果 1.2、运行环境 1.3、案例代码

    2024年02月11日
    浏览(46)
  • vue element-ui表格组件动态多级表头

    实际项目的需求,需要根据后端动态获取的方式来初始化表格的表头包含哪些信息,且有很多信息是有规律的,所以我们需要Element UI动态生成多级表头。需要的效果图如下: 由于统计维度是可变化的(它可以是省市也可以是区县),所以需要专门设置一个表格的数据来保存

    2024年02月10日
    浏览(41)
  • 【TSX】vue3 + element-ui + tsx 通用表格组件

    简介: 基于 vue3 + el-table 封装的通用表格组件 的 tsx写法,想要参考模板写法的可以到我另一篇博客喔~ TS + vue3.2 + vite2 + element-plus 通用表格组件封装 话不多说,本组件分为四部分: 组件调用:   属性及方法使用说明: 注意:如果你在使用 Sortable插件想要拖动排序表格时,t

    2024年02月15日
    浏览(39)
  • Vue中使用Element UI的Table组件实现嵌套表格(最简单示例)

    以下是一个简单的示例代码,演示如何在Vue中使用Element UI的Table组件实现嵌套表格: 上面的代码通过type=\\\"expand\\\"设置了一个展开按钮,点击该按钮会显示与当前行关联的子表格内容。 在上面的示例中,我们定义了一个包含姓名和年龄的主表格,以及一个展开列用于显示与每行

    2024年02月02日
    浏览(39)
  • element ui 表格组件与分页组件的二次封装 【扩展】vue中的render函数

    目录 效果图  组件封装  parseTime函数 debounce 函数 render通用渲染模版 页面使用 【扩展】vue 函数式组件 函数式组件特点: 函数式组件的优点: 【扩展】vue中的render函数 一、初步认识render函数 二、为什么使用render函数 三、render函数的解析 【扩展】添加操作栏显示权限 结构

    2024年02月09日
    浏览(47)
  • vue中element-ui表格组件el-table封装,在table表格中插入图片

            这次写的项目是写后台管理系统这部分,对于后台管理使用vue写,用组件的话,table组件用得次数比较多,可以封装一个table组件。         1.如封装的table组件:  :prop=\\\"item.prop\\\"  :label=\\\"item.label\\\"是必须要有的,其他的可以根据自己需要写 。 2.封装之后是就是使

    2024年02月15日
    浏览(41)
  • vue | element-ui中 如何修改表格Table组件中滚动条的样式

    在Table表格中,当内容超出容器时就会出现滚动条,elemnt-ui自带的滚动条有时无法满足需求,那么我们可以通过css伪类来实现对滚动条的自定义。 滚动条由两部分组成的: 滑块:可以滑动的部分。 轨道:滚动条的轨道,即滑块的轨道。一般来说滑块的颜色比轨道的颜色深一

    2024年02月11日
    浏览(43)
  • vue3 + vite自定义封装vue + element-ui 表格组件,发布到npm包的全过程。

    当我们项目中用到的表格太多的话,就会导致我们的代码量一直增加,所以我们要封装一个公共得组件,通过传参引入来使用,下面这篇文章主要给大家介绍了关于vue3+vite自定义封装vue组件发布到npm包的相关资料,需要的朋友可以参考下。 提示我们要安装 create-vite@4.1.0 得依赖

    2024年02月02日
    浏览(54)
  • 【Vue】Vue 使用 Print.js 打印选中区域的html,用到的是Element ui table表格,解决页面样式不出现或者table表格样式错乱问题!!!

    需求 : 打击打印按钮,文字内容以及表格中的内容 解决方案 加上这句就好了!完美! 一、因为表格数据过多,之前加了表格滚动条,但是打印出来 会把表格上的滚动条也打印出来,所以这里改成了 给弹框加滚动条,去掉表格中的滚动条 2.1 原因: table-layout: fixed导致的,

    2024年02月09日
    浏览(54)
  • VUE element-ui实现表格动态展示、动态删减列、动态排序、动态搜索条件配置、表单组件化。

        1、本组件支持列表的表头自定义配置,checkbox实现 2、本组件支持列表列排序,vuedraggable是拖拽插件,上图中字段管理里的拖拽效果 ,需要的话请自行npm install 3、本组件支持查询条件动态配置,穿梭框实现 https://download.csdn.net/download/askuld/88216937

    2024年01月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包