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

Anti Desgin Vue 实现 表格可编辑、新增、删除功能

1、效果图
新增:
在这里插入图片描述
在这里插入图片描述
删除:
在这里插入图片描述
在这里插入图片描述
修改:
在这里插入图片描述
代码:

<template><div><button @click="add">添加</button><span style="margin-left: 8px"><template v-if="hasSelected">{{ `Selected ${selectedRowKeys.length} items` }}</template></span><a-table:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }":columns="columns":data-source="data"bordered><template v-for="col in ['name','barcode','price','num','amount','type','standard']" :slot="col" slot-scope="text, record"><div :key="col"><a-inputv-if="record.editable"style="margin: -5px 0":value="text"@change="e => handleChange(e.target.value, record.key, col)"/><template v-else>{{ text }}</template></div></template><template slot="operation" slot-scope="text, record"><div class="editable-row-operations"><span v-if="record.editable"><a @click="() => save(record.key)">保存</a><a-popconfirmtitle="确定取消?"okText="确定"cancelText="取消"@confirm="() => cancel(record.key)"><a>取消</a></a-popconfirm></span><span v-else><a :disabled="editingKey !== ''" @click="() => edit(record.key)">修改</a><a  @click="() =>deleteItem(record.key)">删除</a></span></div></template></a-table></div>
</template>
<script>
const columns = [{title: "样品名称",dataIndex: "name",// width: "25%",align: 'center',scopedSlots: { customRender: "name" }},{title: '规格型号',dataIndex: 'barcode',align: 'center',scopedSlots: { customRender: "barcode" }},{title: '数量',dataIndex: 'price',align: 'center',scopedSlots: { customRender: "price" }},{title: '生成批号',dataIndex: 'num',align: 'center',scopedSlots: { customRender: "num" }},{title: '生产单位',dataIndex: 'amount',align: 'center',scopedSlots: { customRender: "amount" }},{title: '检验类别',dataIndex: 'type',align: 'center',scopedSlots: { customRender: "type" }},{title: '试验标准',dataIndex: 'standard',align: 'center',scopedSlots: { customRender: "standard" }},{title: "操作",dataIndex: "operation",align: 'center',scopedSlots: { customRender: "operation" }}];let data = [];
// 数组创建时候的下标
var numbe = 0;
export default {data() {this.cacheData = data.map(item => ({ ...item }));return {data,columns,editingKey: "",selectedRowKeys: []};},methods: {add() {data.push({key: numbe.toString(),name: "hah",// 规格型号barcode:'E200',price: "1",num: "1",amount: "xxx公司",type: "1",standard: "国家标准",});numbe++;console.log(data);this.cacheData = data.map(item => ({ ...item }));},handleChange(value, key, column) {const newData = [...this.data];const target = newData.filter(item => key === item.key)[0];if (target) {target[column] = value;this.data = newData;}},edit(key) {const newData = [...this.data];const target = newData.filter(item => key === item.key)[0];this.editingKey = key;if (target) {target.editable = true;this.data = newData;}},deleteItem(key){console.log('删除前',this.data);console.log('cacheData',this.cacheData)console.log('删除',key)const newData = [...this.data];this.data = newData.filter(item=>item.key !== key)this.cacheData = this.cacheData.filter(item=>item.key !== key)data=this.dataconsole.log('删除后',this.data);this.editingKey = "";},save(key) {const newData = [...this.data];console.log('newData',newData)const newCacheData = [...this.cacheData];console.log('newCacheData',newCacheData)const target = newData.filter(item => key === item.key)[0];console.log('target',target)const targetCache = newCacheData.filter(item => key === item.key)[0];console.log('targetCache',targetCache)if (target && targetCache) {delete target.editable;this.data = newData;Object.assign(targetCache, target);this.cacheData = newCacheData;}this.editingKey = "";},cancel(key) {const newData = [...this.data];const target = newData.filter(item => key === item.key)[0];this.editingKey = "";if (target) {Object.assign(target,this.cacheData.filter(item => key === item.key)[0]);delete target.editable;this.data = newData;}},onSelectChange(selectedRowKeys) {console.log("selectedRowKeys changed: ", selectedRowKeys);this.selectedRowKeys = selectedRowKeys;}},computed: {hasSelected() {return this.selectedRowKeys.length > 0;}}
};
</script>
<style scoped>
.editable-row-operations a {margin-right: 8px;
}
</style>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端开发工程师——webpack
  • HOOK定义
  • 力扣爆刷第144天之二叉树四连刷(完结二叉搜索树改变树结构)
  • VS2022 嘿嘿
  • 【C++】二叉树进阶(二叉搜索树)
  • 【Java面试】二、Redis篇(中)
  • VMware ESXi 7.0U3q macOS Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)
  • Elasticsearch开启安全认证
  • Helm安装kafka3.7.0无持久化(KRaft 模式集群)
  • FTP协议——BFTPD基本操作(Ubuntu+Win)
  • PHP之fastadmin系统配置分组增加配置和使用
  • 【java】常见面试题目
  • Modular military character
  • 全球AI新闻速递527
  • nginx代理前端html
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • CEF与代理
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Javascript弹出层-初探
  • Java方法详解
  • JDK9: 集成 Jshell 和 Maven 项目.
  • nodejs:开发并发布一个nodejs包
  • php ci框架整合银盛支付
  • PHP那些事儿
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Sass Day-01
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 三分钟教你同步 Visual Studio Code 设置
  • 再次简单明了总结flex布局,一看就懂...
  • Java性能优化之JVM GC(垃圾回收机制)
  • Prometheus VS InfluxDB
  • Spring第一个helloWorld
  • ​520就是要宠粉,你的心头书我买单
  • ​flutter 代码混淆
  • ​ssh免密码登录设置及问题总结
  • # 透过事物看本质的能力怎么培养?
  • #pragma multi_compile #pragma shader_feature
  • $$$$GB2312-80区位编码表$$$$
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (JS基础)String 类型
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (poj1.3.2)1791(构造法模拟)
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (汇总)os模块以及shutil模块对文件的操作
  • (算法)区间调度问题
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一) storm的集群安装与配置
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)shell调试方法
  • (转)项目管理杂谈-我所期望的新人
  • .net wcf memory gates checking failed
  • .net 获取url的方法
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)