antd-vue 累加表单编辑和删除

news2024/12/24 2:55:06

一、业务场景:
最近在使用Antd-Vue组件库的时候,发现在累加表单 时没有直接可以用的,必须自己在官网上手动合并几个才能实现,为了大家后面遇到和我一样的问题,给大家分享一下

二、具体实现步骤:

<template>
  <div>
    <a-table :columns="columns" :data-source="data" bordered :pagination="false">
      <template
        v-for="col in ['name', 'age', 'address']"
        :slot="col"
        slot-scope="text, record, index"
      >
        <div :key="col">
          <a-input
            v-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="name" slot-scope="text, record, index">
        <a-select default-value="lucy" style="width: 100%" v-model="record.name" :disabled="ifdisabled">
          <a-select-option value="jack">
            Jack
          </a-select-option>
          <a-select-option value="lucy">
            Lucy
          </a-select-option>
          <a-select-option value="disabled" disabled>
            Disabled
          </a-select-option>
          <a-select-option value="Yiminghe">
            yiminghe
          </a-select-option>
        </a-select>

      </template>
      <template slot="age" slot-scope="text, record, index">
        <a-input v-model="record.age" :disabled="ifdisabled"/>
      </template>

      <template slot="operation" slot-scope="text, record, index">
        <div class="editable-row-operations">
        <span v-if="record.editable">
          <a @click="() => save(record.key)">保存</a>
          <a-popconfirm title="您确定要取消吗?"
                        okText="确定"
                        cancelText="取消" @confirm="() => cancel(record.key)">
            <a>取消</a>
          </a-popconfirm>
        </span>
          <span v-else>
          <a :disabled="editingKey !== ''" @click="() => edit(record.key)">编辑</a>
        </span>
          <a-popconfirm
            v-if="data.length"
            title="您确定要删除吗?"
            okText="确定"
            cancelText="取消"
            @confirm="() => onDelete(record.key)"
          >
            <a href="javascript:;">删除</a>
          </a-popconfirm>
        </div>
      </template>
    </a-table>
    <a-button class="editable-add-btn" @click="handleAdd">
      添加
    </a-button>
  </div>
</template>
<script>
  const columns = [
    {
      title: '账号类型',
      dataIndex: 'name',
      width: '25%',
      scopedSlots: {customRender: 'name'},
    },
    {
      title: '账号信息',
      dataIndex: 'age',
      width: '15%',
      scopedSlots: {customRender: 'age'},
    },
    // {
    //   title: 'address',
    //   dataIndex: 'address',
    //   width: '40%',
    //   scopedSlots: { customRender: 'address' },
    // },
    {
      title: '操作',
      dataIndex: 'operation',
      scopedSlots: {customRender: 'operation'},
    },
  ];

  const data = [];
  for (let i = 0; i < 0; i++) {
    data.push({
      key: i.toString(),
      name: `Edrward ${i}`,
      age: ``,
    });
  }
  export default {
    data() {


      return {
        ifdisabled: true,
        data,
        columns,
        editingKey: '',
      };
    },
    mounted() {
      this.cacheData = this.data.map(item => ({...item}));
      console.log(this.cacheData)
    },
    methods: {
      handleChange(value, key, column) {
        const newData = [...this.data];
        const target = newData.find(item => key === item.key);
        if (target) {
          target[column] = value;
          this.data = newData;
        }
      },

      handleAdd() {
        // 如果文本框是禁用的状态,就可以继续添加
        if (this.ifdisabled == true) {
          const {count, data} = this;
          const newData = {
            key: JSON.stringify(new Date()),
            name: ``,
            age: ``,
            address: ``
          };
          this.data = [...data, newData];
          this.count = count + 1;
          // this.ifdisabled = true
          this.cacheData = this.data.map(item => ({...item}));
          // 表格的数据
          console.log(this.cacheData)
        } else {
          this.$message.warning('请先进行保存再添加下一条信息')
          return false
        }


      },
      onDelete(key) {
        const dataSource = [...this.data];
        this.data = dataSource.filter(item => item.key !== key);
      },

      edit(key) {
        console.log(key)

        const newData = [...this.data];
        const target = newData.find(item => key === item.key);
        this.editingKey = key;
        if (target) {
          this.ifdisabled = false
          target.editable = true;
          this.data = newData;
        }
      },
      save(key) {
        this.ifdisabled = true
        console.log(key)
        const newData = [...this.data];
        const newCacheData = [...this.cacheData];
        const target = newData.find(item => key === item.key);
        const targetCache = newCacheData.find(item => key === item.key);
        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.find(item => key === item.key);
        this.editingKey = '';
        if (target) {
          Object.assign(target, this.cacheData.find(item => key === item.key));
          delete target.editable;
          this.data = newData;
        }
      },
    },
  };
</script>
<style scoped>
  .editable-row-operations a {
    margin-right: 8px;
  }
</style>

三、效果展示:
请添加图片描述

你已经成功了,撒花。
今天的分享到此结束,欢迎小伙伴们一起交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息安全简介

文章目录Basics of Information SecurityUnsecure SystemsEvolution of SecurityBuild a Security ProgramComputer Security Model: CIA triadThe OSI security architectureFundamentals of Security DesignReferencesBasics of Information Security 我们掌握的信息越多&am…

数字逻辑·时序线路设计【状态化简与编码】

化简原理 等价状态: 1、必要条件&#xff1a;在同样的输入作用下&#xff0c;有相同的输出 2、同样的输入条件下&#xff0c;相应的次态彼此等价 等价次态&#xff1a; 1、对应的次态相同 2、次态为两个现态本身或交错 3、两个次态为状态对封闭链中的一对 4、两个次态的某一后…

图书馆座位预约小程序毕业设计,图书馆座位预约系统设计与实现,微信小程序毕业设计论文怎么写毕设源码开题报告需求分析怎么做

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于微信小程序预约订座小程序&#xff0c;前台用户使用小程序&#xff0c;后台管理使用JavaMysql开发&#xff0c;后台使用了springboot框架&#xff1b;通过后台添加座位类型、座位号&#xff0c;用户通过…

通过分割受损的叶子自动检测昆虫捕食(matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

程序员留的后门,怎么能管它叫热部署呢?

前言 这篇文章给大家分享一个热部署相关的知识点。 这可是一个好东西啊&#xff0c;当年在学习学 JSP 的时候&#xff0c;哐哐哐一顿操作&#xff0c;发现服务没重启&#xff0c;我在 JSP 里面写的东西就直接生效了。 当场我就是一个大大的震惊&#xff0c;而旁边教我的人只…

[附源码]Python计算机毕业设计Django在线教育系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

offsetWidth、offsetHeight、clientHeight、clientWidth、scrollHeight、scrollWidth详细对比

offsetWidth、offsetHeight、clientHeight、clientWidth、scrollHeight、scrollWidth详细对比 代码测试 box-sizing:content-box时 box-sizing:border-box时 总结 offsetHeight、offsetWidth其实就是元素在屏幕上所占的实际宽高&#xff08;包括border、padding&#xff0…

Java数据结构与Java算法学习Day11---有向图、拓扑排序、加权无向图、最小生成图、加权有向图、最短路径(简略笔记记录)

目录 一、有向图 157 1.1有向图的定义及相关术语 157 1.2有向图的实现 158 二、拓扑排序 159 2.1检测有向图中的环 160 2.1.1检测有向图中环API设计 160 2.1.2检测有向环实现 161 2.2基于深度优先顶点排序 162 2.2.1顶点排序API设计 2.2.2顶点排序实现的原理过程 2.…

【Day2】零基础学java--》牛客网刷题【字符集合】

大家好&#xff0c;我是良辰丫&#x1f49e;&#xff01;好久不见&#xff0c;一个多月没写博客了&#xff0c;都有些生疏了&#xff0c;学校的一些事情&#xff0c;考试&#xff0c;实训&#xff0c;各种实验&#xff0c;嘿嘿嘿&#xff01;其实也不能为自己找借口&#xff0c…

PDF文件怎么添加水印?一定要学会的两个方法

相信大家都遇到过这种难题&#xff0c;那就是自己制作PDF文件传输给别人之后&#xff0c;害怕文件内容被别人使用&#xff0c;窃取自己的劳动成果&#xff0c;所以需要对自己的文件进行保护&#xff0c;我们通常的做法是给PDF文件添加水印&#xff0c;这样就可以尽可能的保护文…

Redis这个内存回收,确实有点牛逼!!!

1. 过期 key 处理 Redis 之所以性能强&#xff0c;最主要的原因就是基于内存存储。然而单节点的 Redis 其内存大小不宜过大&#xff0c;会影响持久化或主从同步性能。 我们可以通过修改配置文件来设置 Redis 的最大内存&#xff1a; maxmemory 1gb当内存使用达到上限时&…

【LeetCode】1812. 判断国际象棋棋盘中一个格子的颜色

题目描述 给你一个坐标 coordinates &#xff0c;它是一个字符串&#xff0c;表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。 如果所给格子的颜色是白色&#xff0c;请你返回 true&#xff0c;如果是黑色&#xff0c;请返回 false 。 给定坐标一定代表国际象棋…

五、卷积神经网络CNN5(卷积相关问题2)

采用宽卷积的好处有什么 窄卷积和宽卷积 对于窄卷积来说&#xff0c;是从第一个点开始做卷积&#xff0c;每次窗口滑动固定步幅。比如下图左部分为窄卷积。那么注意到越在边缘的位置被卷积的次数越少。于是有了宽卷积的方法&#xff0c;可以看作在卷积之前在边缘用 0 补充&…

MySQL数据库学习(1)

一、概述 MySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一。 在本教程中&#xff0c;会让大家快速掌握 MySQL 的基本知识&#xff0c;并轻松使用 M…

【畅购商城】微信支付模块之微信支付二维码

目录 流程分析 微信支付概述 账号申请 已有账号 ​​​​​​​支付接口和SDK(了解)​​​​​​​ ​​​​​​​入门案例 统一下单 ​​​​​​​查询订单 ​​​​​​​JS版二维码&#xff1a;QRCode.js ​​​​​​​概述 ​​​​​​​入门案例 ​​​​…

字节跳动3-2专家强烈推荐入广告核心部门,要学的12大技术实战PDF

前言 你了解过字节跳动的薪资和职级是什么样的吗&#xff1f; 想必大家都对字节跳动的薪资和职级都有一定的了解了&#xff0c;下面就给大家介绍字节3-1专家推荐的进入字节跳动需要储备知识技能&#xff01;&#xff01;&#xff01; 应届生进入字节跳动的是711的学习路线&am…

Innodb如何实现表--下篇

Innodb如何实现表--下篇Innodb数据页结构File HeaderPage HeaderInfimum和Supremum RecordUser Records和Free SpacePage DirectoryFile Trailer实例分析Innodb数据页结构 Innodb数据页由以下7个部分组成: File Header(文件头) Page Header(页头) Infimun和Supremum Records U…

Abaqus二次开发:局部坐标系的建立与应用

问题描述 在单向复材中&#xff0c;纤维的力学性能往往是横观各向同性的&#xff0c;于是需要规定材料方向。 通常需要新建局部坐标系用于材料方向的定义&#xff0c;而在实际建立坐标系中&#xff0c;坐标系会储存在对应的Part下&#xff1a; mdb.models[‘Model-1’].parts[…

GraphQL基础使用--mongoDB数据库操作

GraphQL hello world 首先我们要安装好执行GraphQL的环境 因为其是运行在node服务器端的&#xff0c;所以我们要安装 express express-graphql graphql mongoose 安装好后的package.json文件是这个样子的 其次我们就要开始配置端口为3000的node服务器 const express requir…

Leetcode---2.两数之和

目录题目分析链表最终代码实现&#xff08;内含注释&#xff09;题目 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和…