Vue3+Element plus 实现表格可编辑

发布时间 2023-11-15 09:28:29作者: WinnieIns

<template> <div> <el-button type="primary" @click="handleAdd"> 新增 </el-button> </div> <div> <el-table :data="tableData" style="width: 100%" border @cell-click="showUnitInput" > <el-table-column prop="date" label="Date"></el-table-column> <el-table-column prop="name" label="Name"> <template #default="{ row, column }"> <el-input v-if=" tableRowEditId === row.id &&tableColumnEditIndex === column.id" @blur="blurValueInput(row, column)" @keyup.enter="blurValueInput(row, column)" v-model="row.name" /> <span v-else>{{ row.name }}</span> </template> </el-table-column> <el-table-column prop="address" label="Address"> <template #default="{ row, column }"> <el-input v-if=" tableRowEditId === row.id &&tableColumnEditIndex === column.id" @blur="blurValueInput(row, column)" @keyup.enter="blurValueInput(row, column)" v-model="row.address" /> <span v-else>{{ row.address }}</span> </template> </el-table-column> <el-table-column prop="value" label="Value"> <template #default="{ row, column }"> <el-input v-if=" tableRowEditId === row.id &&tableColumnEditIndex === column.id " @blur="blurValueInput(row, column)" @keyup.enter="blurValueInput(row, column)" v-model="row.value" /> <span v-else>{{ row.value }}</span> </template> </el-table-column> <el-table-column label="Operate"> <template #default="{ row }"> <el-button type="danger" link @click="handleDelete(row)">Delete</el-button> </template> </el-table-column> </el-table> </div> </template> <script setup> import { ref } from 'vue' let tableRowEditId = ref(null) // 控制可编辑的每一行 let tableColumnEditIndex = ref(null) //控制可编辑的每一列 const showUnitInput = (row, column) => { //赋值给定义的变量 tableRowEditId.value = row.id //确定点击的单元格在哪行 如果数据中有ID可以用ID判断,没有可以使用其他值判断,只要能确定是哪一行即可 tableColumnEditIndex.value = column.id //确定点击的单元格在哪列 } const blurValueInput = (row, column) => { // tableRowEditId.value = null // tableColumnEditIndex.value = null //在此处调接口传数据 } 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 handleDelete = (row) => { const index = tableData.value.indexOf(row) if (index !== -1) { tableData.value.splice(index, 1) } } const handleAdd = () => { tableData.value.unshift({ id:tableData.value.length+1, date: '2016-05-05', name: 'Tom', address: 'No. 189, Grove St, Los Angeles', value: tableData.value.length+1 }); } </script> <style> </style>

效果图: