vue+antdv 实现table表格编辑删除添加操作

实现效果如下
vue ^2.6 ant-design-vue^1.7.8
在这里插入图片描述在这里插入图片描述

<template>
  <div>
    <a-table :pagination="false" :columns="columns" :dataSource="dataSource">
      //循环展示数据或input输入框
      <template
        v-for="col in ['abbreviation', 'fullName', 'nodes']"
        :slot="col"
        slot-scope="text, record, index"
      >
        <div :key="col">
          <a-input v-if="editableData[record.key]" v-model="editableData[record.key][col]" />
          <template v-else>{{ text }}</template>
        </div>
      </template>
      //操作
      <template slot="operation" slot-scope="text, record, index">
        <span v-if="editableData[record.key]">
          <a-icon type="check" @click="save(record.key)" />
        </span>
        <span v-else>
          <a-icon type="delete" @click="deleteItem(record.key)" />
          <a-icon type="edit" @click="edit(record.key)" />
          <a-icon type="plus" v-if="index==dataSource.length-1" @click="addItem(record.key)" />
        </span>
      </template>
    </a-table>
  </div>
</template>
<script>
import { cloneDeep } from "lodash";
export default {
  data() {
    return {
      editableData: [], //正在编辑的数组
      columns: [
        {
          title: "简称",
          dataIndex: "abbreviation",
          scopedSlots: {
            customRender: "abbreviation"
          }
        },
        {
          title: "全称",
          dataIndex: "fullName",
          scopedSlots: {
            customRender: "fullName"
          }
        },
        {
          title: "来源",
          dataIndex: "nodes",
          scopedSlots: {
            customRender: "nodes"
          }
        },
        {
          title: "操作",
          dataIndex: "operation",
          scopedSlots: { customRender: "operation" }
        }
      ],
      //表格数据
      dataSource: [
        {
          key: 0,
          abbreviation: "简称1",
          fullName: "全称1",
          nodes: "来源1"
        },
        {
          key: 1,
          abbreviation: "简称2",
          fullName: "全称2",
          nodes: "来源2"
        },
        {
          key: 2,
          abbreviation: "简称3",
          fullName: "全称3",
          nodes: "来源3"
        },
        {
          key: 3,
          abbreviation: "简称14",
          fullName: "全称14",
          nodes: "来源14"
        }
      ]
    };
  },
  components: {},
  props: ["tableDatas"],
  watch: {},
  updated() {},
  created() {},
  methods: {
    addItem(key) {
      let item = {
        key: key + 1,
        abbreviation: "",
        fullName: "",
        nodes: ""
      };
      this.dataSource.splice(key + 1, 0, item);
      this.$set(this.editableData, key + 1, item);
    },
    deleteItem(key) {
      this.dataSource = this.dataSource.filter(item => item.key !== key);
    },
    edit(key) {
      let editItem = cloneDeep(
        this.dataSource.filter(item => key === item.key)[0]
      );
      this.$set(this.editableData, key, editItem);
    },
    save(key) {
      Object.assign(
        this.dataSource.filter(item => key === item.key)[0],
        this.editableData[key]
      );
      this.$set(this.editableData, key, null);
    }
  }
};
</script>
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值