Vue3+Ant Design表格排序

news2024/11/25 4:45:49

最近在公司做有关报表的项目时,遇到最多的问题-表格排序,刚开始看到UI设计图的时候,还有些纳闷这个排序如何做,其实实际上并没有想象中的那么难,如果说单纯的排序的话ant design这个组件里的表格有自带的排序和筛选功能,但是数据来源于后端,所以操作起来可能不能只考虑前端的功能,强烈推荐需要做有关后台系统这块项目的小伙伴可以去使用这个组件,他有react版本的及Vue版本的,可自行依据使用的框架进行选择。

一,安装ant design

我这里使用的是Vue框架,所以就根据Vue来进行以下步骤,特别提醒在安装这个插件之前一定要先安装nodejs。@后面是安装具体的版本号,这个依据自身需要酌情选择即可。

npm i --save ant-design-vue@4.x

二、全局注册

以下代码便完成了 Antd 的全局注册。需要注意的是,样式文件需要单独引入。

import { createApp } from 'vue';
import Antd from 'ant-design-vue';
import App from './App';
import 'ant-design-vue/dist/reset.css';

const app = createApp(App);

app.use(Antd).mount('#app');

三、项目中引用Antd、并实现排序功能

这里以使用表格为例

(1)组件部分

<template>
  <div class="operat-tab">
    <a-table
      :columns="columns"
      :dataSource="tableData"
      :pagination="false"
      bordered
      @change="handleChange"
      :scroll="{ y: 'calc(100vh - 520px)' }"
    />
    <a-pagination
      v-model:current="page.currentPage"
      v-model:page-size="page.pageSize"
      show-quick-jumper
      show-size-changer
      :total="pageData.total"
      :show-total="(total, range) => `共 ${props.pageData.total || 0} 条`"
    />
  </div>
</template>

(2)script部分

<script setup>
// 需要排序某个字段
const flag = ref()
// 排序标识
const sort = ref()
// 分页
const page = ref({})
// 表格头部信息
const columns = ref([
  {
    title: '序号',
    dataIndex: 'index',
    align: 'center',
    key: 'index'
  },
  {
    title: '等级',
    dataIndex: 'level',
    align: 'center',
    key: 'level'
  },
  {
    title: '路段名称',
    dataIndex: 'road',
    align: 'center',
    key: 'road'
  },
  {
    title: '桩号',
    dataIndex: 'stake',
    align: 'center',
    key: 'stake'
  },
  {
    title: '营运单位',
    dataIndex: 'address',
    align: 'center',
    key: 'address'
  },
  {
    title: '开始时间',
    dataIndex: 'startTime',
    align: 'center',
    key: '1',//利用key值来获取需要排序的字段名
    sorter: true
  },
  {
    title: '时长(分钟)',
    dataIndex: 'time',
    align: 'center',
    key: '2',
    sorter: true
  },
  {
    title: '长度(米)',
    dataIndex: 'length',
    align: 'center',
    key: '3',
    sorter: true
  },
  {
    title: '速度(千米/小时)',
    dataIndex: 'speed',
    align: 'center',
    key: '4',
    sorter: true
  }
])
// 改变asc dsc
const changeTable = (pagination, filters, sorter) => {
  if (sorter.order === 'ascend') {
    flag.value = sorter.columnKey
    sort.value = 'ASC'
    const params = {
      sort: sort.value,
      page: page.value
    }
    getCongestedData(params)
  } else {
    flag.value = sorter.columnKey
    sort.value = 'DESC'
    const params = {
      flag: flag.value,
      sort: sort.value,
      page: page.value
    }
    getCongestedData(params)
  }
}
// 获取表格数据,说明:数据来源于后端,这里仅限于模拟,params是需要传的参数
const getCongestedData = params => {
  return new Promise((resolve, reject) => {
    getCongestedTab(params)
      .then(res => {
        dataSource.value = []
        if (res.code === 200 && res.data) {
          const dataList = res.data.list
          dataList.forEach((item, index) => {
            dataSource.value.push({
              index: index + 1,
              level: item.congestDesc,
              road: item.roadName,
              stake: item.stake,
              address: item.zoneName,
              startTime: item.startTime,
              time: item.duration,
              length: item.length,
              speed: item.speed
            })
          })
          pageData.value = {
            ...pageData.value,
            total: res.data.page.totalNum,
            showTotal: () => `共 ${res.data.page.totalNum || 0} 条`,
            current: res.data.page.currentPage
          }
          // console.log(res, '这个是')
        } else {
          dataSource.value = []
        }
        resolve(res.data)
      })
      .catch(error => {
        reject(error)
      })
  })
}

</script>

(3)css部分

<style lang="less" scoped>
.operat-tab {
  .ant-table-wrapper {
    height: calc(100% - 70px);
  }
  .ant-pagination {
    font-size: 14px;
    margin-top: 10px;
  }
  .ant-pagination-item {
    min-width: 32px;
    height: 32px;
    margin-right: 8px;
    line-height: 30px;
  }
  .ant-pagination-prev,
  .ant-pagination-next,
  .ant-select-selector,
  .ant-pagination-options-quick-jumper {
    min-width: 28px;
    height: 28px;
    margin-top: 10px;
    line-height: 28px;
    font-size: 14px;
    align-items: center;
    input {
      position: relative;
      display: inline-block;
      width: 100%;
      min-width: 0;
      padding: 4px 11px;
      color: rgba(0, 0, 0, 0.85);
      font-size: 14px;
      line-height: 1.5715;
      background-color: #fff;
      background-image: none;
      border: 1px solid #d9d9d9;
      border-radius: 2px;
      transition: all 0.3s;
      width: 50px;
      height: 32px;
      margin: 0 8px;
    }
  }
  ::v-deep .ant-table {
    max-height: calc(100vh - 3.4vw - 25px - 128px - 76px - 100px);
    background: #f0f5ff;
  }

  ::v-deep .ant-table-thead > tr > th {
    background-color: #dee9ff;
  }

  ::v-deep .ant-table-tbody tr:nth-child(2n) {
    background-color: #fff;
  }

  ::v-deep .ant-pagination.mini .ant-pagination-total-text {
    flex: 1;
  }

  ::v-deep .ant-pagination.mini .ant-pagination-item {
    margin-left: 0.42vw;
  }
}
</style>

四、展示

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

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

相关文章

知名专业定制线缆源头工厂推荐-精工电联:智能制造线缆的前沿技术探索

优质定制线缆源头厂家推荐-精工电联&#xff1a;智能制造线缆的前沿技术探索 知名专业定制线缆源头工厂推荐-精工电联&#xff1a;智能制造线缆的前沿技 在科技飞速发展的当今时代&#xff0c;智能制造已成为工业4.0的核心驱动力。精工电联&#xff0c;作为智能制造领先的高品质…

基于Python的LSTM网络实现单特征预测回归任务(pytorch版)

一、数据集 自建数据集--【load.xlsx】。包含2列&#xff1a; date列&#xff08;时间列&#xff0c;记录2022年6月2日起始至2023年12月31日为止&#xff0c;日度数据&#xff09;price列&#xff08;价格列&#xff0c;记录日度数据对应的某品牌衣服的价格&#xff0c;浮点数…

【LAMMPS学习】八、基础知识(2.2)类型标签

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

请核对您的姓名、证件号码、有效期和年限是否选择正确,请勿使用挂失过的身份证

问题 请核对您的姓名、证件号码、有效期和年限是否选择正确&#xff0c;请勿使用挂失过的身份证 详细问题 笔者在专利业务办理系统进行新用户注册&#xff0c;注册时间为晚上大概22&#xff1a;00以后。注册时已核对姓名、证件号码、有效期和年限&#xff0c;已确保正确&…

【C++】拆分详解 - 内存管理

文章目录 前言一、C/C内存分布二、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free三、C内存管理方式  3.1 new/delete操作内置类型  3.2 new和delete操作自定义类型  3.3 operator new与operator delete函数 四、new和delete的实现原理  4.1 内置类型…

【Java集合】面试题汇总

Java 集合Java 集合概览1. List, Set, Queue, Map 四者的区别&#xff1f;2. ArrayList 和 Array&#xff08;数组&#xff09;的区别&#xff1f;3. ArrayList 和 Vector 的区别?4. Vector 和 Stack 的区别?&#xff08;了解即可&#xff09;5. ArrayList 可以添加 null 值吗…

python+appium调@pytest.mark.parametrize返回missing 1 required positional argument:

出错描述&#xff1a; 1、在做pythonappium自动化测试时&#xff0c;使用装饰器pytest.mark.parametrize&#xff08;“参数”&#xff0c;[值1&#xff0c;值2&#xff0c;值3]&#xff09;&#xff0c;测试脚本执行返回test_xx() missing 1 required positional argument:“…

Bitmap OOM

老机器Bitmap预读仍然OOM&#xff0c;无奈增加一段&#xff0c;终于不崩溃了。 if (Build.VERSION.SDK_INT < 21)size 2; 完整代码&#xff1a; Bitmap bitmap; try {//Log.e(Thread.currentThread().getStackTrace()[2] "", surl);URL url new URL(surl);…

通俗易懂HTTP和HTTPS区别

HTTP&#xff1a;超文本传输协议&#xff0c;它是使用一种明文的方式发送我们的内容&#xff0c;没有任何的加密&#xff0c;例如我们要在网页上输入账号密码&#xff0c;如果使用HTTP协议&#xff0c;账号密码就可能会被暴露&#xff0c;默认端口是80. HTTPS&#xff1a;是HT…

动态规划解决背包问题

目录 动态规划步骤&#xff1a; 1.01背包问题 2.完全背包问题 动态规划步骤&#xff1a; step1.分析问题&#xff0c;定义dp数组&#xff08;下标含义&#xff09; step2.初始化dp数组&#xff08;边界&#xff09; step3.写dp状态转换方程&#xff08;明确dp数组遍历顺序…

【Super数据结构】二叉搜索树与二叉树的非递归遍历(含前/中/后序)

&#x1f3e0;关于此专栏&#xff1a;Super数据结构专栏将使用C/C语言介绍顺序表、链表、栈、队列等数据结构&#xff0c;每篇博文会使用尽可能多的代码片段图片的方式。 &#x1f6aa;归属专栏&#xff1a;Super数据结构 &#x1f3af;每日努力一点点&#xff0c;技术累计看得…

【饿了么笔试题汇总】[全网首发]2024-04-12-饿了么春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新饿了么近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x…

.cur 鼠标光标文件读取

备份icon掩码开发代码-CSDN博客 代码改写自 目前bug是高度不足&#xff0c;顶上的几十个像素图片打印需要加常数&#xff0c; i的改写是 i/3,参考上面链接的自简书的代码 #include <stdio.h> #include <windows.h> #pragma warning(disable : 4996) // visu…

[lesson20]初始化列表的使用

初始化列表的使用 类成员的初始化 C中提供了初始化列表对成员变量进行初始化 语法规则 注意事项 成员的初始化顺序与成员的声明顺序相同成员的初始化顺序与初始化列表中的位置无关初始化列表先于构造函数的函数体执行 类中的const成员 类中的const成员会被分配空间的类中…

【Linux】环境搭建

昙花一现&#xff0c;却等待了整个白昼 蝉鸣一夏&#xff0c;却蛰伏了几个四季 目录 购买云服务器 总结 使用 XShell 远程登陆到 Linux 利用Linux编写一个简单C程序 ⭐toush -- 创建文件 ⭐vi -- 文本编译器 ⭐ll -- 查看文件的显示结果分析 ⭐gcc -o ⭐cat -- 查看源代码 契子…

利用细粒度检索增强和自我检查提升对话式问题解答能力

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 论文标题&#xff1a;Boosting Conversational Question Answering with Fine-Grained Retrieval-Augmentation and Self-Check 论文地址&#xff1a;https://arxiv.org/abs/2403.18243 检索增强生成…

【报错】AttributeError: ‘NoneType‘ object has no attribute ‘pyplot_show‘(已解决)

【报错】AttributeError: ‘NoneType’ object has no attribute ‘pyplot_show’ 问题描述&#xff1a;python可视化出现下面报错 我的原始代码&#xff1a; import matplotlib.pyplot as pltplt.figure() plt.plot(x, y, bo-) plt.axis(equal) plt.xlabel(X) plt.ylabe…

最短路径问题——(弗洛伊德算法与迪杰斯特拉算法)

最短路径问题——&#xff08;弗洛伊德算法与迪杰斯特拉算法&#xff09;【板子】 题目&#xff1a; 对于下面的图片所给出的关系,回答下面两个问题&#xff1a; 利用迪杰斯特拉算法求点A到每一个点之间的最小距离。利用弗洛伊德算法求每两个点之间的最短路径。 &#xff0…

[RK3399 Linux] 使用ubuntu 20.04.5制作rootfs

一、ubuntu base ubuntu base是用于为特定需求创建自定义映像的最小rootfs,是ubuntu可以运行的最小环境。 1.1 下载源码 下载ubuntu-base的方式有很多,可以从官方的地址:ttp://cdimage.ubuntu.com/ubuntu-base/releases。 也可以其它镜像地址下载,如清华源:https://mi…

弹性云服务器性能对比(内附测试数据),快快网络服务器崭露头角

随着计算技术的不断革新&#xff0c;云服务器已成为企业和个人部署应用与服务的首选。尤其线上业务日益盛行的今天&#xff0c;云服务商的实力更是备受瞩目。对于企业而言&#xff0c;高稳定&#xff0c;存储速度都是不可或缺的基本要求&#xff0c;这些都对公有云的云端编解码…