Element Plus Ant Design(react) 表格的分页封装

embedded/2024/10/20 6:23:22/

一、Element Plus

封装代码:

<template><el-table ref="multipleTableRef" :data="searchParams.values" style="width: 100%"@selection-change="handleSelectionChange" border><el-table-column type="selection" width="55" /><el-table-column v-for="item in column" :key="item.prop" :prop="item.prop" :label="item.label" :width="item.width"></el-table-column></el-table><!-- 分页 --><div class="pagination"><el-pagination v-model:currentPage="searchParams.pagenum" v-model:page-size="searchParams.pagesize":page-sizes="[1, 3, 5, 10]" layout="total, sizes, prev, pager, next" :total="total" @size-change="searchList"@current-change="searchList" /></div>
</template>
<script lang="ts" setup>
import { onMounted, reactive, ref, toRaw } from 'vue'
import { ElTable } from 'element-plus'
import moment from 'moment'
interface User {date: stringname: stringaddress: string
}
const multipleTableRef = ref<InstanceType<typeof ElTable>>()
const multipleSelection = ref<User[]>([])
const props = defineProps(['tableData', 'column'])
const emits = defineEmits(['selectChange',])
const searchParams = reactive({/*分页的参数 */query: "",pagesize: 5,pagenum: 1,values: []
})
const total = ref(0)/* 总数 */
const tableRef = ref()
onMounted(() => {searchList()
})
/* 分页的逻辑 */
const searchList = () => {let results = toRaw(props.tableData)console.log(results);// 使用正则表达式进行模糊查询const searchTerm = searchParams.query;const regex = new RegExp(searchTerm, "gi");searchParams.values = results.filter((item) => regex.test(item.username));let len = searchParams.values.length;let num = len - searchParams.pagesize;// // 获取到的数组长度大于页面展示的长度if (num > 0 && searchParams.pagenum === 1) {console.log("展示首页内容!");searchParams.values.splice(searchParams.pagenum, num);} else if (num > 0 && searchParams.pagenum !== 1) {console.log("展示后面的内容!");console.log("前面要删除的数目:" +(searchParams.pagenum - 1) * searchParams.pagesize);searchParams.values.splice(0,(searchParams.pagenum - 1) * searchParams.pagesize);// 二次截断let len2 = searchParams.values.length;searchParams.values.splice(searchParams.pagesize,len2 - searchParams.pagesize);}total.value = len;
};
/* 多选框选中 */
const handleSelectionChange = (val: User[]) => {multipleSelection.value = valemits('selectChange', val)
}
</script><style scoped>
.pagination {margin-top: 20px;display: flex;justify-content: flex-end;
}.handle {color: #0279fe;margin-right: 6px;
}.handle:hover {cursor: pointer;
}
</style>

使用:

<template><el-card><template #header><div class="card-header"><span>数据列表</span></div></template><baseTable v-if="tableData.length !== 0" :tableData="tableData" :column="column" @selectChange="handleSelectionChange"></baseTable></el-card>
</template>
<script setup>
import { onMounted, reactive, ref } from 'vue';
import baseTable from '../../../../components/basTable1.vue'
import axios from 'axios'
const tableData = ref([])//表格数据
onMounted(() => {getTableData()
})
/* 表头 */
const column = reactive([{label: '公司名称',prop: 'corporation',},{label: '管理地区',prop: 'region',width: 200},{label: '所在地区',prop: 'nowregion',},{label: '地址',prop: 'address',},{label: '级别',prop: 'roleId',},{label: '账户姓名',prop: 'username',},{label: '注册手机号',prop: 'phone',},{label: '账户姓名',prop: 'username',},{label: '创建时间',prop: "createTime",width: 200},{label: '状态',prop: 'roleState',},{label: '操作',prop: 'handle',btn: ['赋权', '编辑', '开通', '禁用', '删除'],width: 200},
])
/* 获取表格数据 */
const getTableData = async () => {try {let data = await axios.get("Yourpath")tableData.value = data.data.results} catch (err) {console.log(err);}
}
/* 多选框选中的内容 */
const handleSelectionChange = (val) => {console.log(JSON.parse(JSON.stringify(val)));
}
</script>
<style lang="scss" scoped></style>

二、Ant Design

封装代码:

import React, { useState } from 'react';
import { Space, Table, Tag } from 'antd';const App = ({columns,data}) => {const [pagination, setPagination] = useState({current: 1,pageSize: 3,});const handleTableChange = (pagination) => {setPagination(pagination);};return (<Tablecolumns={columns}dataSource={data}pagination={{current: pagination.current,pageSize: pagination.pageSize,showSizeChanger: true,pageSizeOptions: ['1','3', '5', '10'],showTotal: (total) => `一共 ${total} 条`,onChange: (page, pageSize) => handleTableChange({ current: page, pageSize }),onShowSizeChange: (current, size) => handleTableChange({ current, pageSize: size }),}}/>);
};export default App;

使用:

import React from 'react'
import BaseTable from '../../../component/baseTable'
import { Space, Tag } from 'antd';
export default function UserData() {const columns = [{title: 'Name',dataIndex: 'name',key: 'name',render: (text) => <a>{text}</a>,},{title: 'Age',dataIndex: 'age',key: 'age',},{title: 'Address',dataIndex: 'address',key: 'address',},{title: 'Tags',key: 'tags',dataIndex: 'tags',render: (_, { tags }) => (<>{tags.map((tag) => {let color = tag.length > 5 ? 'geekblue' : 'green';if (tag === 'loser') {color = 'volcano';}return (<Tag color={color} key={tag}>{tag.toUpperCase()}</Tag>);})}</>),},{title: 'Action',key: 'action',render: (_, record) => (<Space size="middle"><a>Invite {record.name}</a><a>Delete</a></Space>),},]const data = [{key: '1',name: 'John Brown',age: 32,address: 'New York No. 1 Lake Park',tags: ['nice', 'developer'],},{key: '2',name: 'Jim Green',age: 42,address: 'London No. 1 Lake Park',tags: ['loser'],},{key: '3',name: 'Joe Black',age: 32,address: 'Sydney No. 1 Lake Park',tags: ['cool', 'teacher'],},];return (<div><BaseTable columns={columns} data={data}/></div>)
}


http://www.ppmy.cn/embedded/93453.html

相关文章

【实战营彩蛋InternLM 1.8B 模型 Android 端侧部署实践

项目地址&#xff1a;https://github.com/InternLM/Tutorial/tree/camp3/docs/EasterEgg/Android 一、根据教程配置环境 二、编译模型 三、执行结果&#xff08;可能因为环境问题&#xff0c;执行报错&#xff09; 四、安卓手机部署待定

docker搭建frp内网穿透

华子目录 实验前的准备工作1.frp介绍1.1frp的工作原理 2.docker简介3.下载frp4.配置docker镜像加速5.准备frp服务端和frp客户端6.frp客户端与frp服务端关闭firewalld和selinux 实验步骤1.docker下运行nginx服务2.上传frp包3.解压frp包4.配置frp-server端配置文件5.配置frp-clie…

【Android】手写笔适配

以下代码分别用于检测 是否为手写笔事件是否为橡皮擦事件是否为手写笔主按钮是否为手写笔辅按钮 override fun dispatchTouchEvent(event: MotionEvent): Boolean {val isStylus event.getToolType(event.actionIndex) MotionEvent.TOOL_TYPE_STYLUSval isEraser event.ge…

LeetCode Hot100 73.矩阵置零

法一&#xff1a;找到第一个为0的元素的行row和列col&#xff0c;用第row行和第col列的其余位置来记录其余行列清零情况 class Solution { public:void setZeroes(vector<vector<int>>& matrix) {//找到第一个为0的元素的行row和列col//用那一行和列的其余位置…

openssl版本不同引发的崩溃

本文介绍了如何避免由于运行环境存在动态库的多个版本而引发的各种问题&#xff0c;如崩溃等。 实际项目遇到了运行环境中崩溃的问题&#xff0c;但是在其它环境是正常的&#xff0c;下面进行问题分析&#xff1a; 1.崩溃栈信息 (gdb) bt #0 0x00007f76899da13e in ?? () …

大数据算法岗位分析推荐:基于Python的招聘大数据爬虫可视化分析推荐系统(完整系统源码+数据库+详细开发文档+万字论文+详细部署教程等全资料)

文章目录 大数据算法岗位分析推荐&#xff1a;基于Python的招聘大数据爬虫可视化分析推荐系统&#xff08;完整系统源码数据库详细开发文档万字论文详细部署教程等全资料&#xff09;源码等全资料获取在文章末尾一、项目概述二、项目说明三、研究意义四、系统总体架构设计总体框…

Adobe Substance 3D Sampler v4.2.2.3719 解锁版下载及安装教程(3D材质管理软件)

前言 Substance 3D Sampler简称“Sa”是一款由Adobe新推出的3D真实材质贴图制作软件。允许用户通过调整和混合现有材料&#xff0c;或通过扫描&#xff08;单个或多个图像&#xff09;中提取新材料来创建和迭代材料集合&#xff0c;从而轻松将真实的图片转换为具有真实感的表面…