VUE el-table表格实现双击编辑,单机空白处放弃修改,回车提交修改

VUE el-table表格实现双击编辑,单机空白处放弃修改,回车提交修改

template

    <el-row>
      <el-col :span="24">
        <el-table @cell-dblclick="handleCellDBClick" :data="tabledata" border>
          <!-- 生成列-->
          <el-table-column align="center" v-for="column in columns" :key="column.prop"
                           :label="column.columnName" :property="column.prop">
            <template slot-scope="scope">
              <!-- 双击时展示input,save实现数据保存-->
              <el-input :id="column.prop" type="text" v-if="scope.row.isEdit === column.prop"
                        v-model="scope.row[column.prop]"
                        @keyup.enter.native="save(scope)" @blur="blurfun(scope)"/>
              <span v-else :class="[scope.row.id ? '' : 'summary']">{{
                  scope.row[column.prop]
                }}</span>
            </template>
          </el-table-column>
        </el-table>
        <br>
        <!--分页器-->
        <el-pagination
            @current-change="page"
            background
            layout="prev, pager, next"
            :prev-text="'上一页'"
            :next-text="'下一页'"
            :page-size="6"
            :total="total">
        </el-pagination>
      </el-col>
    </el-row>

script

 data() {
    return {
      //  数据量
      total: 100,
      //  表格数据
      tabledata: [
        {
          id: 1,
          name: '张三',
          entrytime: '2022-07-31',
          education: '本科',
          role: '学生',
          username: '23520981',
          password: '123456',
        },
        {
          id: 2,
          name: '张三',
          entrytime: '2022-07-31',
          education: '本科',
          role: '学生',
          username: '23520981',
          password: '123456',
        },
        {
          id: 3,
          name: '张三',
          entrytime: '2022-07-31',
          education: '本科',
          role: '学生',
          username: '23520981',
          password: '123456',
        },
        {
          id: 4,
          name: '张三',
          entrytime: '2022-07-31',
          education: '本科',
          role: '学生',
          username: '23520981',
          password: '123456',
        },
      ],
      //	定义字段
      columns: [
        {
          columnName: '序号',
          prop: 'id'
        },
        {
          columnName: '姓名',
          prop: 'name'
        },
        {
          columnName: '入职时间',
          prop: 'entrytime'
        },
        {
          columnName: '学历',
          prop: 'education'
        },
        {
          columnName: '角色',
          prop: 'role'
        },
        {
          columnName: '用户名',
          prop: 'username'
        },
        {
          columnName: '密码',
          prop: 'password'
        },
      ],
      oldinfo: '',
    }
  },
      
  methods: {
    page(val) {
      this.$message({message: `当前页: ${val}`, type: 'success'})
    },
    handleCellDBClick(row, column, cell, event) {
      this.oldinfo = row[column.property]
      const columnName = column.property
      const unEditColumns = ['id']
      //如果点击的是地区这一列,则提示不可编辑
      if (unEditColumns.includes(columnName)) {
        return this.$message({message: '当前列不可编辑', type: 'error'})
      }
      //设置isEdit属性
      this.$set(row, 'isEdit', columnName)
      this.$nextTick(() => {
        //input标签获取焦点
        document.getElementById(columnName).focus()
      })
    },
    save({row, column}, val, eventStr) {
      this.oldinfo = row[column.property]
      //数据复位,此时input隐藏,展示span
      this.$set(row, 'isEdit', null)
      //调用后台接口保存数据
      //     ...
    },
    blurfun({row, column}, val, eventStr) {
      //  失去焦点事件
      row[column.property] = this.oldinfo
      this.oldinfo = ''
      this.$set(row, 'isEdit', null)
    },

  },

style

/*表格样式*/
/* 基本表格样式 */
table {
    border-collapse: collapse;
    width: 100%;
}

table td, table th {
    border: 1px solid #ddd;
    padding: 8px;
}

table th {
    background-color: #f2f2f2;
    text-align: left;
    height: 50px;
    line-height: 50px;
    font-weight: bold;
}

table td {
    text-align: left;
    font-family: '微软雅黑 Bold', '微软雅黑 Regular', '微软雅黑';
    font-size: 18px;
    cursor: pointer;
    /*font-weight: bold;*/
}

/* 斑马线表格 */
table tr:nth-child(even) {
    background-color: #f2f2f2;
}

/* 悬浮表格 */
table:hover tr:not(:hover) {
    opacity: 0.2;
}

/*tfoot {*/
/*    text-align: center;*/
/*}*/

el-pagination {
    text-align: center;
}

本文作者:春游去动物园

本文链接:https://www.cnblogs.com/chunyouqudongwuyuan/p/17592905.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   春游去动物园  阅读(1245)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 生分 川青
生分 - 川青
00:00 / 00:00
An audio error has occurred.

生分 - 川青

词:莎子

曲:邵翼天

编曲:林亦

混音:罗杨轩

吉他:林亦

制作人:谢宇伦

监制:曾炜超/陈显

策划:+7

统筹:黄染染

出品:漫吞吞文化

『酷狗音乐人 • 星曜计划』

全方位推广,见证星力量!

「版权所有未经许可 不得商业翻唱或使用」

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到

我们最后友人相称

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言

见缝插针

怕不小心我们

成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

有些话一开口会伤人

有些话一开口会伤人

所以我选择默不作声

所以我选择默不作声

爱一个人

若甘愿陪衬

甘愿牺牲

也许换个名分

也不是没可能

我不怕在爱里做个蠢人

我不怕在爱里做个蠢人

也不怕爱过之后再分

也不怕爱过之后再分

爱一个人

有万种身份

万种可能

只是没想到我们最后

友人相称

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡

我们怎么变得那么生分

我们怎么变得那么生分

连说话都要掌握好分寸

怕不注意流言见缝插针

怕不小心我们成陌生人

我们怎么变得那么生分

用了几年也没解开疑问

有些事你不提我也不问

在陌生与熟悉间找平衡