vue3+element-plus 可编辑列表

<template>
  <div class="p-10">
    <el-table :data="tableData" border @cell-dblclick="handleEdit">
      <el-table-column prop="date" label="Date"></el-table-column>
      <el-table-column prop="name" label="Name"></el-table-column>
      <el-table-column prop="address"  label="address"></el-table-column>
      <el-table-column prop="value"  label="Value"></el-table-column>
      <el-table-column prop="operate" label="Operate">
        <template #default="{ row }">
<!--          <el-button link @click="handleEdit(row)">Edit</el-button>-->
<!--          <el-button type="primary" link @click="handleSave(row)">Save</el-button>-->
          <el-button type="danger" link @click="handleDelete(row)"
          >Delete</el-button
          >
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const tableData = ref([
  {
    id: 1,
    date: '2016-05-03',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
    value: '1'
  },
  {
    id: 2,
    date: '2016-05-02',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
    value: '2'
  },
  {
    id: 3,
    date: '2016-05-04',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
    value: '3'
  },
  {
    id: 4,
    date: '2016-05-01',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
    value: '4'
  }
])
const editIndex = ref(-1)

const handleEdit = (row:any, column:any, cell:any, event:any) => {
  // editIndex.value = tableData.value.indexOf(row)
  console.log(row, column, cell, event);
  // 定义我们要排除的编辑的列,
  let noEditColumns = [];
  // 全表格可编辑的话直接注释下一行即可
  noEditColumns = ["name1", "operate", "priority", "classtypeChinese", "操作"];
  /**
   * 注意对应关系
   * 1、column.property--对应的是我们的数据列名
   * 2、column.label ---对应的是标题的中文名称
   * */
  if (noEditColumns.indexOf(column.property) != -1) {
    return;
  }
  // 记录要编辑的表格,原本的值
  let msg = row[column.property];
  event.target.innerHTML = "";
  // 双击添加input框
  let cellInput = document.createElement("input");
  //设置input框样式及类型
  cellInput.value = msg;
  cellInput.setAttribute("type", "input");
  cellInput.style.width = "80%";
  cellInput.style.height = "30px";
  cellInput.style.paddingLeft = "20px";
  cellInput.style.border = "1px solid #288EFE";
  cellInput.style.borderRadius = "3px";
  cell.appendChild(cellInput);
  // --注意此处需要将焦点设置给cellInput,否则onBlur不好使
  cellInput.focus();
  //为鼠标添加失去焦点事件
  cellInput.onblur = async () => {
    // 判断输入是否为空,为空则删除input
    if (cellInput.value == "") {
      cell.removeChild(cellInput);
      event.target.innerHTML = msg;
    } else {
      cell.removeChild(cellInput);
      // 修改值
      event.target.innerHTML = cellInput.value;
      // 自己的请求在这里书写,下边只是示例
      let form = {
        id: column.property === 'id' ? cellInput.value : row.id,
        date: column.property === 'date' ? cellInput.value : row.date,
        name: column.property === 'name' ? cellInput.value : row.name,
        address: column.property === 'address' ? cellInput.value : row.address,
        value: column.property === 'value' ? cellInput.value : row.value
      }
      console.log(form)
    }
  }
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值