当前位置: 首页 > news >正文

基于elementUI实现一个可编辑的表格(简洁版)

需求:

实现一个可编辑、增加、删除的表格,每一项是可编辑的输入框、

在这里插入图片描述

注:使用vue3+elementui

实现

1、dom部分

<el-form :model="formData" ref="formRef"><el-table :data="filteredTableData" border fit max-height="800"><el-table-column label="序号" width="100" align="center"><template #default="{ $index }">{{ $index + 1 }}</template></el-table-column><el-table-column label="手机号" align="center"><template #default="{ row, $index }"><el-form-item:prop="`tableData.${$index}.phone_num`":rules="phoneRules"><el-input v-model="row.phone_num" placeholder="请输入手机号" /></el-form-item></template></el-table-column><el-table-column label="年龄" align="center"><template #default="{ row, $index }"><el-form-item:prop="`tableData.${$index}.car_plate_num`":rules="plateRules"><el-input v-model="row.car_plate_num" placeholder="请输入年龄" /></el-form-item></template></el-table-column><el-table-column label="身高" align="center"><template #default="{ row, $index }"><el-form-item:prop="`tableData.${$index}.vin`":rules="vinRules"><el-input v-model="row.vin" placeholder="请输入身高" /></el-form-item></template></el-table-column><!-- 操作列 --><el-table-column label="操作" align="center" width="100"><template #default="{ row, $index }"><el-icon color="#f56c6c" @click="deleteFilteredRow($index)"><Delete /></el-icon></template></el-table-column></el-table><el-button style="margin-top:10px" type="primary" plain @click="addRow">+ 添加</el-button></el-form>

2、js部分

// 搜索相关变量
const searchPhone = ref('')
const filteredTableData = ref([])
const originalTableData = ref([])
const tableData = ref<ChargeConfig[]>([]);
// 表单数据
const formData = reactive({tableData: [{ phone_num: '', car_plate_num: '', vin: '' },],
})
const formRef = ref<FormInstance>()
// 表单校验部分
const phoneRules = [{ required: true, message: '请输入手机号', trigger: 'blur' }, { pattern: /^1[3-9]\d{9}$/, message: '请输入11位手机号', trigger: 'blur' }]
const plateRules = [{ required: true, message: '请输入年龄', trigger: 'blur' }]
const vinRules = [{ required: true, message: '请输入身高', trigger: 'blur' }]// 表单数据
const formData = reactive({tableData: [{ phone_num: '', car_plate_num: '', vin: '' },],
})
const formRef = ref<FormInstance>()
const whiteListVisible = ref(false)// 手机号搜索方法
const handlePhoneSearch = () => {const keyword = searchPhone.value.trim()if (!keyword) {filteredTableData.value = [...formData.tableData]} else {filteredTableData.value = formData.tableData.filter(item => item.phone_num && item.phone_num.includes(keyword))}
}
// 重置搜索
const resetPhoneSearch = () => {searchPhone.value = ''filteredTableData.value = [...formData.tableData]
}
// 删除行
const deleteFilteredRow = (index: number) => {const deletedItem = filteredTableData.value[index]// 从原始数据中删除const originalIndex = formData.tableData.findIndex(item => item.phone_num === deletedItem.phone_num && item.car_plate_num === deletedItem.car_plate_num && item.vin === deletedItem.vin)if (originalIndex > -1) {formData.tableData.splice(originalIndex, 1)}// 更新过滤后的数据handlePhoneSearch()
}
// 添加行
const addRow = () => {resetPhoneSearch()const newRow = { phone_num: '', car_plate_num: '', vin: '' }formData.tableData.push(newRow)handlePhoneSearch()
}
// 保存
const saveList = () => {// 校验一下表单填写formRef.value.validate(valid => {if (!valid){ElMessage.error("请填写表");return;}// 校验成功,调用接口保存操作}).catch(() => {ElMessage.error("校验失败,请刷新重试");})
}

3.css部分

这里主要是调整一下表格内输入框的位置(看你自己需要,可不用)

<style scoped>
:deep(.el-table .cell) {padding-top: 12px!important;
}
</style>

end~
希望记录的问题能帮助到你!


文章转载自:

http://zSKwqSbG.ssmhn.cn
http://QtdUxtXf.ssmhn.cn
http://TEPqEGsI.ssmhn.cn
http://ULzu7llG.ssmhn.cn
http://IDDvm7wK.ssmhn.cn
http://ZCYCs1Ns.ssmhn.cn
http://h2OVWmEW.ssmhn.cn
http://j4cfUyOQ.ssmhn.cn
http://v20Awt1x.ssmhn.cn
http://61zCXDCt.ssmhn.cn
http://di1eWMH0.ssmhn.cn
http://8EhUhJxr.ssmhn.cn
http://1mjkt21t.ssmhn.cn
http://0PDOEzdT.ssmhn.cn
http://LKaimhgF.ssmhn.cn
http://i388wOSB.ssmhn.cn
http://XwgVTA0S.ssmhn.cn
http://9ir8Unb6.ssmhn.cn
http://5KKYkyvi.ssmhn.cn
http://HMjp53Fu.ssmhn.cn
http://GcUFuuEL.ssmhn.cn
http://mMOeYMoC.ssmhn.cn
http://DdrusrcW.ssmhn.cn
http://ypTXQGX3.ssmhn.cn
http://LXm45AG4.ssmhn.cn
http://CVLogkR6.ssmhn.cn
http://g4lkxcwy.ssmhn.cn
http://OVSW1Mak.ssmhn.cn
http://MSdZQd1k.ssmhn.cn
http://OALVySMU.ssmhn.cn
http://www.dtcms.com/a/377637.html

相关文章:

  • 智能美妆功能开发指南:直播美颜sdk的架构与算法解析
  • MySQL 浮点数、定点数与位类型:搞懂 3 类特殊数值的核心用法
  • 运动生理实验室解决方案 人体生理实验整体解决方案
  • Ping命令为何选择ICMP而非TCP/UDP?
  • 工业锅炉的“健康卫士”—状态监测与故障诊断
  • 大模型微调技术宝典:Transformer架构,从小白到专家
  • 同步框架与底层消费机制解决方案梳理
  • 计算机毕设 java 高校教材管理系统 基于 Java+SSM 的高校教材管控平台 Java+MySQL 的教材全流程管理系统
  • 用分层架构打造单体应用
  • TCP 拥塞控制设计空间课程要点总结
  • 工业网络融合:DEVICENET转PROFINET网关在汽车总装车间的应用
  • AI当调色总监用,合成图一秒融入,甲方看了都说绝
  • 深入浅出CRC校验:从数学原理到单周期硬件实现 (1) 初始CRC校验
  • 基于esp32c3 rust embassy 的墨水屏程序
  • 实战:用 Python 搭建 MCP 服务 —— 模型上下文协议(Model Context Protocol)应用指南
  • 亚马逊关键词引流:从手动操作到智能优化的全流程攻略
  • Windows 本地组策略重置标准操作程序 (SOP)
  • tp5.0如何配置session保存到文件里,方便删除
  • Linux D-Bus 详解
  • 嵌入式学习笔记.嵌入式系统
  • Redis 与分布式事务:最终一致性的实践艺术
  • Mac M 系列芯片 YOLOv8 部署教程(CPU/Metal 后端一键安装)
  • Java 中String类的常用方法
  • TENGJUN防水TYPE-C连接器:立贴结构与IPX7防护的精密融合
  • 和照片互动?NAS 部署 AI 智能相册,瀑布流+网格双布局!
  • 网络原理——传输层协议TCP基本认识
  • ETF提供流动性 DAT提供创造性
  • 深入理解C++多态:从概念到实现原理
  • ​Premiere Pro 2024 v24.0.0.58 怎么安装?详细教程(附安装包)
  • 关于调用第三方API服务(New API)等出现被Cloudfare拦截问题解决