• vue3实现表格的分页以及确认消息弹窗


     表格的分页实例展示

    效果1:表格按照每行10条数据分页,且编号也会随之分页自增

    实现按照页码分页效果

    第二页 展示编号根据分页自动增长

    固定表格高度

    这边设置了滚动条,同时表格高度实现自适应滚动条高度

    template部分

    表格代码

    编号是按照页码条数进行循环并根据索引自增   

    {{ (currentPage - 1) * pageSize + scope.$index + 1 }} 

    • pageSize 是每页的条数  scope.$index + 1   是自增的索引从1开始需要加1

    这边有个小细节 设置了 el-scrollbar height="400px"的高度之后

     style="width: 100%" height="auto" max-height="100%" 

    自身适应滚轮的高度 ,需要将表格高度设置为自动 最高高度设置为父级高度的100%

    这样如果数据未达到滚轮最高的高度滚轮是不会显示的,达到最高高度下滑会显示滚轮

    这边本想固定表头的,可是这个命令基本没用,后续看怎么搞吧

    :header-cell-style="{ 'position': 'sticky', 'top': '0' }"

    1. <el-scrollbar height="400px">
    2. <el-table :data="getCurrentPageData" style="width: 100%" height="auto" max-height="100%" :header-cell-style="{ 'position': 'sticky', 'top': '0' }">
    3. <el-table-column type="index" label="编号" width="60px" align="center">
    4. <template #default="scope">
    5. {{ (currentPage - 1) * pageSize + scope.$index + 1 }}
    6. template>
    7. el-table-column>
    8. <el-table-column prop="nickname" label="昵称" align="center">el-table-column>
    9. <el-table-column prop="communityContent" label="社区动态" align="center">el-table-column>
    10. <el-table-column prop="attractionName" label="景点" align="center">el-table-column>
    11. <el-table-column prop="communityContentTime" label="发布时间" align="center">el-table-column>
    12. <el-table-column prop="communityImgUrl" label="封面" align="center">
    13. <template #default="scope">
    14. <el-avatar shape="square" :size="50" :src="scope.row.communityImgUrl" />
    15. template>
    16. el-table-column>
    17. <el-table-column prop="status" label="状态" align="center">
    18. <template #default="scope">
    19. <el-switch active-value="1" inactive-value="0" v-model="scope.row.status">el-switch>
    20. template>
    21. el-table-column>
    22. <el-table-column label="操作" align="center">
    23. <template #default="scope">
    24. <el-button link type="primary" size="small" @click="detailCommunity(scope.row.id)">动态详情el-button>
    25. <el-button link type="primary" size="small" @click="editCommunity(scope.row.id)">动态编辑el-button>
    26. <el-button link type="primary" size="small" @click="delCommunity(scope.row.id)">动态删除el-button>
    27. template>
    28. el-table-column>
    29. el-table>
    30. el-scrollbar>
     分页代码

    这边布局采用了弹性布局 第一层让其居中 第二层让两个元素固定在中间左右

     

     @size-change="handleSizeChange" 切换页码时候调整每页的条数 即点击分页按钮页码时候会跳转到当前页码并显示对应的条数  

    layout="prev, pager, next" 是获取当前 布局

    当我按pre 即左箭头 跳到之前一页   

    按next 即右箭头 跳到之后一页

    : total  是绑定总数 这边是绑定一个数组长度 动态根据条适应变化

    @current-change="handleCurrentChange" 显示当前的页面

    1. <div style="display: flex; justify-content: center; margin-top: 20px;">
    2. <div style=" text-align: center; display: flex ; justify-content: center;">
    3. <div style="margin: 10px; color: #999; font-size: 12px; line-height: 32px">
    4. 每页 {{ pageSize }} 条记录
    5. div>
    6. <el-pagination
    7. background
    8. :current-page="currentPage"
    9. :page-size="pageSize"
    10. :total="commentArr.length"
    11. @current-change="handleCurrentChange"
    12. layout="prev, pager, next"
    13. style="flex-grow: 1"
    14. @size-change="handleSizeChange"
    15. >
    16. el-pagination>
    17. div>
    18. div>

     js部分

    初始化

    定义响应式变量 来初始化 pagesize页面和当前页码

    1. // 分页相关
    2. const currentPage = ref(1);
    3. const pageSize = ref(10);
    定义方法

    动态获取 当前页面和页码尺寸

    1. const handleCurrentChange = (val) => {
    2. currentPage.value = val;
    3. };
    4. const handleSizeChange = (val) => {
    5. pageSize.value = val;
    6. currentPage.value = 1; // 切换每页行数时,返回第一页
    7. };

    动态获取响应式数据 利用数组的slice方法 根据索引的开头和结尾截取数组元素

    1. // 获取当前页应显示的数据
    2. const getCurrentPageData = computed(() => {
    3. const startIndex = (currentPage.value - 1) * pageSize.value;
    4. const endIndex = currentPage.value * pageSize.value;
    5. return commentArr.value.slice(startIndex, endIndex);
    6. });

    确定弹窗的的实例展示

    效果: 当点击取消按钮的时候或者窗口出的❌,弹出确认弹窗

     template代码

    弹窗dialog部分

    :before-close是绑定调用方法handleBeforeClose

    取消按钮@click绑定方法handleCancel()

    1. "dialogTitle" style="width:1000px;padding:40px;"
    2. v-model="dialogVisible" :before-close="handleBeforeClose">
    3. <template #footer>
    4. <el-button @click="handleCancel()" style="background-color: #5CC4C3">取消el-button>
    5. el-button>

    js部分

    组件样式使用的是 ElMessageBox  要导包

    import {ElMessageBox} from "element-plus";

     我这边 调用确认弹窗主要是让弹窗消失,当然可以包括清除弹窗中的数据(常用)

    1. const handleBeforeClose = (done) => {
    2. // 仅处理右上角关闭按钮的逻辑
    3. ElMessageBox.confirm('是否关闭本窗口?', '提示', {
    4. type: 'warning'
    5. }).then(() => {
    6. done();
    7. }).catch(() => {});
    8. };
    9. const handleCancel = () => {
    10. // 点击取消按钮时弹出确认框
    11. ElMessageBox.confirm('确定要取消操作吗?', '提示', {
    12. type: 'warning'
    13. }).then(() => {
    14. dialogVisible.value = false; // 用户确认后关闭弹窗
    15. }).catch(() => {});
    16. };

  • 相关阅读:
    刷爆力扣之等价多米诺骨牌对的数量
    Go的函数(function)
    What is an HTTP Flood DDoS attack?
    百度知道问答聚合采集软件反爬版说明文档/Python采集脚本
    第二章:jQuery基本操作
    每日一题|2022-11-4|754. 到达终点数字|数学|Golang
    顺丰科技2024届春季校园招聘常见问题解答及SHL测评题库
    C++之STL容器(2/3)
    安卓记录2
    R语言如何连接 SQL Server 2016之前的数据库并使用此连接?
  • 原文地址:https://blog.csdn.net/qq_61549190/article/details/139727075