ElementPlus Table 表格实现可编辑单元格

通过基础的Table表格来实现单元格内容的可编辑

1.首先定位到需要编辑的列,替换el-table-column

html 复制代码
           <el-table-column label="Editable Column" width="300">
              <template #default="{ row, column, $index }">
                <el-input
                  size="small"
                  v-if="
                   tableRowEditId === row.id &&
                   tableColumnEditIndex === column.id
                  "
                  v-model="row.taskId"
                  @blur="blurUnitInput(row, column)"
                  @keyup.enter="blurUnitInput(row, column)"
                />
                <span v-else class="hover-border">{{ row.taskId }}</span>
              </template>
            </el-table-column>

2.el-table 标签下面增加 cell-click 事件,当某个单元格被点击时会触发该事件

html 复制代码
  <el-table :data="tableData" border style="width: 100%" @cell-click="showUnitInput">
    <el-table-column prop="date" label="Date" width="180" />
    <el-table-column prop="name" label="Name" width="180" />
     <el-table-column label="Editable Column" width="300">
              <template #default="{ row, column, $index }">
                <el-input
                  size="small"
                  v-if="
                   tableRowEditId === row.id &&
                   tableColumnEditIndex === column.id
                  "
                  v-model="row.taskId"
                  @blur="blurUnitInput(row, column)"
                  @keyup.enter="blurUnitInput(row, column)"
                />
                <span v-else class="hover-border">{{ row.taskId }}</span>
              </template>
            </el-table-column>
  </el-table>

3. 增加标识变量、事件方法,可以在 blurUnitInput 方法里面实现修改的接口

javascript 复制代码
const tableRowEditId = ref()
const tableColumnEditIndex = ref()
const showUnitInput = (row: any, column: any) => {
  // console.log('row', row)
  // console.log('column', column)
  //赋值给定义的变量
  tableRowEditId.value = row.id //确定点击的单元格在哪行 如果数据中有ID可以用ID判断,没有可以使用其他值判断,只要能确定是哪一行即可
  tableColumnEditIndex.value = column.id //确定点击的单元格在哪列
}
const blurUnitInput = (row: { [x: string]: boolean }, column: any) => {
  tableRowEditId.value = null
  tableColumnEditIndex.value = null
  //在此处调接口传数据
  console.log(row)
  console.log(column)
}

4.增加一个样式,使可编辑的单元格鼠标悬停时显示虚线边框

css 复制代码
.hover-border {
  border: none; /* 默认无边框 */

}

.hover-border:hover {
  border: 1px dotted #165DFF; /* 鼠标悬停时显示虚线边框 */
  padding: 2px;
}
相关推荐
Mr_Wu20184 分钟前
windows electron-builder打包后应用图标更新问题
前端·javascript·electron
liuyang___13 分钟前
es6新语法
前端·javascript·es6
Mintopia14 分钟前
🧙‍♂️《当 Web 遇上 MCP:一场“模型上下文协议”的奇幻漂流》
前端·javascript·aigc
言兴17 分钟前
前端工程化演进之路 —— 从 Webpack 到 Vite 的架构革命
前端·javascript·面试
Mintopia23 分钟前
🧙‍♂️《Next Full-stack 的魔法日记》
前端·javascript·next.js
南篱26 分钟前
JavaScript 异步之巅:深入理解 ES6 Promise
javascript·面试
郭少28 分钟前
🔥 我封装了一个会“思考”的指令!Element-Plus Tooltip 自动检测文本溢出,优雅展示
前端·vue.js·性能优化
Nayana30 分钟前
Clean Code JavaScript小记(一)
javascript
郭少32 分钟前
🔥 放弃 vw!我在官网大屏适配中踩了天坑,用 postcss-px-to-viewport-8-plugin 实现了 Rem 终极方案
vue.js·性能优化·nuxt.js
咸虾米33 分钟前
微信小程序通过uni.chooseLocation打开地图选择位置,相关设置及可能出现的问题
vue.js·微信小程序