antd vue table控件的使用(三)

今天就讲讲Ant Design Vue下的控件----table表格(分页、编辑和删除功能)

结合项目中的需求,看看如何配置,让table即可以展示列表,又可以直接编辑数据。需求:

(1)展示即将检查的数据列表,数据量较大,要分页;

(2)当数据有错误时,点击编辑;

(3)数据改完后刷新,保存,恢复列表展示功能;

(4)出现多余的数据时,可删除;

模板中代码如下:

<template>
        <a-table
          class="ant-table-striped"
          style="width: 100%; height: 100%"
          bordered="true"
          size="small"
          :columns="cols"
          :dataSource="dataTable"
          :pagination="pagination"
          :scroll="{ x: srcollWidth, y: tableScrollY }"
          :loading="loading"
          :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)"
          @change="pageIndexChange">
          <template #bodyCell="{ column, text, record }">
            <template v-if="!['operation', 'well_id', 'table_id', 'order_no'].includes(column.dataIndex)">
              <div>
                <a-input v-if="editableData[record.key]" v-model:value="editableData[record.key][column.dataIndex]" style="margin: -5px 0" />
                <template v-else>
                  {{ text }}
                </template>
              </div>
            </template>
            <template v-else-if="column.dataIndex === 'operation'">
              <div class="editable-row-operations">
                <span v-if="editableData[record.key]">
                  <a-typography-link @click="saveRecord(record)">保存</a-typography-link>
                  <a-popconfirm title="是否取消修改?" @confirm="cancelRecord(record.key)">
                    <a>取消</a>
                  </a-popconfirm>
                </span>
                <span v-else>
                  <a @click="editRecord(record)">修改</a> |
                  <a-popconfirm title="是否确定删除该记录?删除后无法恢复,请谨慎操作。" @confirm="deleteRecord(record)">
                    <a>删除</a>
                  </a-popconfirm>
                </span>
              </div>
            </template>
          </template>
        </a-table>
      </template>

先声明与table有关的变量

//表格设置
  const tableScrollY = 'calc(100vh - 280px)';
  const srcollWidth = '100%';
  const loading = ref(false);
  const cols: Ref<Array<any>> = ref([
    {
      title: 'XXXX列',
      dataIndex: 'XX',
      key: 'XXX',
      width: 100,
      checked: true,
    },
    {
        title: '操作',
        fixed: true,
        dataIndex: 'operation',
        width: '110px',
      }
  ]);
const dataTable: Ref<Array<any>> = ref(new Array<any>());

1.分页展示

(1)声明与分页有关的变量

//总页数
  const totalRows = ref(1);
//当前页码
  const p_curPage = ref(1);
//默认每页显示条数
  const defaultPageSize = ref(100);

(2)通过计算属性控制分页

const pagination = computed(() => ({
    total: totalRows.value,
    current: p_curPage.value,
    pageSize: defaultPageSize.value,
    showTotal: (total, range) => {
      if (range && total && range != null) {
        return `共${total}条数据,当前显示${range[0]}~${range[1]}条`;
      }
    },
  }));

(3)分页事件change(change:用于分页、排序、筛选变化时触发)

//分页
  async function pageIndexChange(e) {
    loading = true;
    p_curPage.value = e.current;
    defaultPageSize.value = e.pageSize;
    await queryTableData(activeItem.value, '');
  }
  //根据表名查询表格数据
  //tableName:表名
  async function queryTableData(tableName: string, dtoName: string) {
    dataTable.value = [];
    let wellName = '',
      wellid = '';

    let strWhere = {
      p_well_name: wellName,
      p_well_id: wellid,
      p_table_name: tableName,
      p_curPage: p_curPage.value,//往api传入当前页码
      p_pageSize: defaultPageSize.value,//每页条数
      p_totalRecords: 1,//总记录数
      p_totalPages: 1,//总页数
    };
    let queryProc = {
      whereStr: JSON.stringify(strWhere),
      packageCode: 'getdatacheck',
    };
    let res = await getCommonTableData(queryProc);//调用api
    dataTable.value = res;
    if (res.length > 0) {
      totalRows.value = res[0].total;//总记录数
    }
    loading = false;
  }

注意:dataTable中的列必须含有key这个列。如图:

分页功能实现效果如下图:

2. 实现编辑功能

(1)声明与编辑功能有关的变量

const editableData = reactive({});

(2)与编辑功能有关的事件

//编辑事件
function editRecord(record) {
    let keyId = record.key;
    editableData[keyId] = cloneDeep(record);//深拷贝
  }

3.实现保存功能

//保存事件
function saveRecord(record) {
    let keyId = record.key;
    Object.assign(dataTable.value.filter((item) => keyId === item.key)[0], editableData[keyId]);
    let updateParam = {
      tableName: activeItem.value,
      whereStr: JSON.stringify(editableData[keyId]),
    };
    updateCommonData(updateParam).then((res) => {//api
      if (res && res.length > 0) {
        message.warning(res);
      } else {
        message.info('保存成功');
      }
    });

    delete editableData[keyId];
  }
//取消事件
function cancelRecord(keyId) {
    delete editableData[keyId];//对象移除
  }

Object.assign()方法

//assign静态方法:将一个或者多个源对象中所有可枚举的自有属性复制到目标对象,并返回修改后的目标对象

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);

console.log(target);
// Expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget === target);
// Expected output: true

4. 实现删除功能

function deleteRecord(record) {
    let keyId = record.key;

    let param = {
      tableName: activeItem.value,
      whereStr: JSON.stringify(record),
    };
    if (record.table_id && record.order_no) {
      deleteCommonData(param).then((res) => {//api
        if (res && res.length > 0) {
          message.warning(res);
        } else {
          message.info('删除成功');
          queryTableData(activeItem.value, '');
        }
      });
    } else {
      message.info('删除条件table_id,order_no不能为空');
    }
  }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过WebShell登录SQL Server主机并使用SSRS报表服务

背景信息 RDS SQL Server提供了WebShell功能&#xff0c;允许用户通过Web界面登录到RDS SQL Server实例的操作系统中&#xff0c;并在该操作系统中执行命令、上传下载文件等操作。WebShell功能方便用户对RDS SQL Server实例的管理和维护&#xff0c;特别是在无法使用SSH客户端的…

FlashAttention V1 学习笔记

Flash Attention 是一种新型的注意力机制&#xff0c;旨在解决传统 Transformer 模型在处理长序列数据时面临的计算和内存效率问题。它通过一系列创新的技术优化&#xff0c;显著提高了注意力机制的计算速度和内存使用效率&#xff0c;同时保持了精确的结果&#xff0c;不依赖于…

超好用的iframe的postMessage穿参

前言 ❝ 跨域&#xff0c;简单来说是指不同域之间相互请求资源&#xff0c;例如AJAX请求&#xff0c;浏览器根据同源策略对响应结果进行拦截&#xff0c;这是浏览器对JavaScript实施的安全限制。所谓同源是指相同的域名、协议和端口&#xff0c;只要其中一项不同就为跨域 ❞ 背…

C++11异常:到底是怎么个异常

目录​​​​​​​ 一、C/C如何处理错误 1.1C语言传统的处理错误的方式 1.2C异常概念 二、异常的使用 2.1异常的抛出和捕获 2.2try/catch的使用 2.3异常安全 2.4异常的重新抛出 2.5异常的规范 三、服务器开发中异常体系的模拟 一、C/C如何处理错误 1.1C语言传统的处…

SEO关键词布局时如何查找用户爱搜索的关键词?

在关键词布局中&#xff0c;确定完核心词后&#xff0c;就要考虑在网站关键词扩展时&#xff0c;找到用户爱搜索的词&#xff0c;只有在网站页面关键词布局时&#xff0c;布局用户爱搜索的词&#xff0c;才能够使用户在搜索时网站的页面能够有机会出现在用户的搜索结果页&#…

蓝桥杯算法题:栈(Stack)

这道题考的是递推动态规划&#xff0c;可能不是很难&#xff0c;不过这是自己第一次靠自己想出状态转移方程&#xff0c;所以纪念一下&#xff1a; 要做这些题目&#xff0c;首先要把题目中会出现什么状态给找出来&#xff0c;然后想想他们的状态可以通过什么操作转移&#xf…

个人成长秘籍:参加六西格玛绿带培训的好处

在当今竞争激烈的商业环境中&#xff0c;追求卓越与持续改进已成为企业和个人成功的关键。六西格玛绿带培训&#xff0c;作为一种全面提升管理技能和工作效率的培训课程&#xff0c;不仅帮助企业优化流程、提高质量和效率&#xff0c;也为个人职业发展开辟了一条光明大道。张驰…

cog predict docker unknown flag: --file

如图&#xff1a; 使用cog predict -i image“link-to-image” 出现docker unknown flag: --file的问题。 解决方法&#xff08;对我可行&#xff09;&#xff1a;切换cog版本。 这个是我一开始的cog安装命令&#xff08;大概是下的最新版&#xff1f;&#xff09;&#xff1…

cannal的使用

搭建MySQL 安装canal 1.新建文件夹logs, 新建文件canal.properties instance.properties docker.compose.yml instance.properties ################################################# ## mysql serverId , v1.0.26 will autoGen # canal.instance.mysql.slaveId0# enable g…

【话题:工作生活】2022年工作总结--疫情下的上海,疫情中的我。

现在是阳历2023年11月27日星期一&#xff0c;我再次开始撰写自己的年终工作总结。希望再过1、2个月&#xff0c;这份年终总结能够出炉&#xff0c;与大家相遇。 给自己定个小目标&#xff0c;年终的工作生活总结坚持写10年。我2017年毕业&#xff0c;之后就开始写每年的年终总结…

MathJax的基本使用

一、引言 MathJax引擎是一个开源的JavaScript库&#xff0c;它允许Web开发者在网页中嵌入高质量的数学公式。通过利用Web的最新技术&#xff0c;MathJax引擎可以解析LaTeX、MathML和AsciiMath等数学标记语言&#xff0c;并将其渲染为可视化的数学公式&#xff0c;这些公式可以…

【智能制造-1】涂胶解决方案

平面或立体转角处的等距点胶&#xff0c;既是技术上的难点也是实现上的痛点。 如何更好地保证拐角点胶的均匀性&#xff1f; 1、位置同步输出算法&#xff08;PSO&#xff09;&#xff1a;可以在点胶阀设定频率不变的情况下实现恒速等距点胶&#xff0c;完美解决拐角堆胶问题…

jsonpath在线解析器网址

jsonpath在线解析器网址&#xff1a;https://jsonpath.com/

梦想CAD 在线编辑软件

前言 有用户集成网页CAD之后&#xff0c;需要提取图纸的各种信息和数据&#xff0c;下面我们讲一下Web版CAD如何在前端直接提取修改和转换后的图纸信息&#xff0c;没有集成过在线CAD的小伙伴可以先看一下快速入门&#xff08;https://help.mxdraw.com/?pid32&#xff09; 在…

Vue2.x实现商城购物车

1.实现购物车页面 在页面中显示购物车中的商品信息&#xff0c;并能进行数量增减及商品删除操作&#xff0c;购物车中金额也随商品数量的变化而变化 2.创建cart.html页面 创建cart.html页面&#xff0c;在其中创建Vue实例&#xff0c;实例中首先准备一些商品信息以供显示&a…

逆向入门:为CTF国赛而战day05day06

用的汉化版的 昨天做了一道题目&#xff0c;然后下了那个apkide改之理,就没了 今天再来一题。 我发现&#xff1a;ascii表要好好学。这里#号是35就被写到题目里去了。 CTF reverse 不一样的flag_ctf reverse flag.bin-CSDN博客

云原生技术:开启你的数字王国

在科技领域的飞速进步中&#xff0c;云计算已经成为了现代企业和个人不可或缺的技术。在这股云计算的热潮中&#xff0c;"云原生"这一概念正逐步成为焦点。云原生的话题越来越普及&#xff0c;无论是在日常生活中还是在专业工作场合&#xff0c;这个术语都频繁出现。…

1. VirtualBox安装CentOS

安装 VirtualBox 地址:https://www.virtualbox.org/wiki/Downloads 版本: 6.1和7.0+版本都可以 安装: windows上安装需要admin权限,右键菜单选中 “Run as administrator” 安装 CentOS 6.10 地址:https://vault.centos.org/6.10/isos/x86_64/ 版本: 如果不需要GUI,选择…

无人新零售引领的创新浪潮

无人新零售引领的创新浪潮 在数字化时代加速演进的背景下&#xff0c;无人新零售作为商业领域的一股新兴力量&#xff0c;正以其独特的高效性和便捷性重塑着传统的购物模式&#xff0c;开辟了一条充满创新潜力的发展道路。 依托人脸识别、物联网等尖端技术&#xff0c;无人新…

8.排序(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序)的模拟实现

1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录…