vue3封装Element表格自适应

表格高度自适应
分页跟随表格之后

1. 满屏时出现滚动条

在这里插入图片描述

2. 不满屏时不显示滚动条

在这里插入图片描述

表格设置maxHeight后不出现滚动条

解决方案

表格外层元素设置max-height
el-table–fit 设置高度100%

.table-box {
  max-height: calc(100% - 120px);
}
.el-table--fit {
  height: 100%;
}

示例代码

<template>
  <div class="outer-box">
    <div class="form-box">
      <DymanicForm
        ref="formRef"
        :inline="true"
        :schema="schema"
        v-model="searchValue"
      >
        <el-form-item>
          <el-button type="primary" @click="handleQuery">查询</el-button>
          <el-button @click="handleReset">重置</el-button>
        </el-form-item>
      </DymanicForm>
    </div>
    <div class="table-box">
      <Table
        :tableData="tableData"
        :haveCheckBox="true"
        :haveIndex="true"
        :columns="tableColumn"
        :stripe="true"
        :border="true"
        max-height="100%"
        @select-change="handleSelectChange"
        @row-click="handleRowClick"
      />
    </div>
    <div class="page-box">
      <Pagination
        :total="total"
        v-model:currentPage="queryParams.currentPage"
        v-model:currentSize="queryParams.currentSize"
        @pagination="handleGetTableData"
      />
    </div>
  </div>
</template>
<script setup lang="ts">
import { ref, reactive } from "vue";
import type { ItemSchema } from "~/types/dymanic";
import DymanicForm from "~/components/DymanicForm.vue";
import { ElMessage } from "element-plus";

const formRef = ref<InstanceType<typeof DymanicForm>>();
const schema = ref<ItemSchema>({
  userId: {
    formItem: {
      label: "用户ID:",
    },
    style: {
      width: "200px",
    },
    componentName: "ElInput",
    placeholder: "请输入用户ID",
    maxlength: 20,
  },
  username: {
    formItem: {
      label: "账号:",
    },
    style: {
      width: "200px",
    },
    componentName: "ElInput",
    placeholder: "请输入账号",
    maxlength: 20,
  },
  name: {
    formItem: { label: "用户名:" },
    style: {
      width: "200px",
    },
    componentName: "ElInput",
    placeholder: "请输入用户名",
    maxlength: 20,
  },
  date: {
    formItem: {
      label: "日期:",
    },
    style: {
      width: "200px",
    },
    componentName: "ElDatePicker",
    type: "daterange",
    startPlaceholder: "开始日期",
    endPlaceholder: "结束日期",
  },
});
const searchValue = reactive({
  userId: "",
  username: "",
  name: "",
});
const handleQuery = () => {
  formRef.value.validate((valid: boolean) => {
    if (valid) {
      console.log("查询", searchValue);
      // 查询逻辑
    }
  });
};

const handleReset = () => {
  formRef.value.resetFields();
};

const tableData = ref([
  {
    date: "2016-05-03",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
    userid: "123456789",
    username: "admin",
    password: "123456",
    role: "管理员",
    status: "正常",
    createTime: "2023-03-01 12:00:00",
    updateTime: "2023-03-01 12:00:00",
    remark: "备注",
  },
  {
    date: "2016-05-02",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
    userid: "123456789",
    username: "admin",
    password: "123456",
    role: "管理员",
    status: "正常",
    createTime: "2023-03-01 12:00:00",
    updateTime: "2023-03-01 12:00:00",
    remark: "备注",
  },
  {
    date: "2016-05-04",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
    userid: "123456789",
    username: "admin",
    password: "123456",
    role: "管理员",
    status: "正常",
    createTime: "2023-03-01 12:00:00",
    updateTime: "2023-03-01 12:00:00",
    remark: "备注",
  },
  {
    date: "2016-05-01",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
    userid: "123456789",
    username: "admin",
    password: "123456",
    role: "管理员",
    status: "正常",
    createTime: "2023-03-01 12:00:00",
    updateTime: "2023-03-01 12:00:00",
    remark: "备注",
  },
]);

const tableColumn = reactive([
  {
    prop: "date",
    label: "日期",
    width: "180",
    align: "center",
  },
  {
    prop: "name",
    label: "姓名",
    width: "180",
    align: "center",
  },
  {
    prop: "address",
    label: "地址",
    width: "280",
    align: "left",
  },
  {
    prop: "userid",
    label: "用户ID",
    width: "180",
    align: "center",
  },
  {
    prop: "username",
    label: "用户名",
    width: "180",
    align: "center",
  },
  {
    prop: "password",
    label: "密码",
    width: "180",
    align: "center",
  },
  {
    prop: "role",
    label: "角色",
    width: "180",
    align: "center",
  },
  {
    prop: "status",
    label: "状态",
    width: "180",
    align: "center",
  },
  {
    prop: "createTime",
    label: "创建时间",
    width: "180",
    align: "center",
  },
  {
    prop: "updateTime",
    label: "更新时间",
    width: "180",
    align: "center",
  },
  {
    prop: "remark",
    label: "备注",
    width: "180",
    align: "center",
  },
  {
    prop: "operation",
    label: "操作",
    width: "280",
    align: "center",
    fixed: "right",
    operate: [
      {
        label: "编辑",
        icon: "Edit",
        type: "primary",
        click: (row: any) => {
          ElMessage.success("点击了编辑" + row.name);
        },
      },
      {
        label: "删除",
        icon: "Delete",
        type: "danger",
        click: (row: any) => {
          ElMessage.error("点击了删除" + row.name);
        },
      },
    ],
  },
]);

const handleSelectChange = (selection: any) => {
  ElMessage.success("选择了" + selection[0].name);
  console.log(selection);
};

const handleRowClick = (row, column, event) => {
  ElMessage.success("点击了" + row.name);
  console.log(row);
  console.log(column);
  console.log(event);
};

const total = ref(100);
const queryParams = ref({
  currentPage: 2,
  currentSize: 30,
});
const handleGetTableData = () => {
  ElMessage.success(
    `当前页:${queryParams.value.currentPage},每页条数:${queryParams.value.currentSize}`
  );
  console.log(queryParams.value);
};
</script>
<style lang="scss" scoped>
.outer-box {
  display: flex;
  flex-direction: column;
  height: 100%;
  width: 100%;
}
.form-box {
  height: 60px;
  display: flex;
  align-items: center;
}
.table-box {
  max-height: calc(100% - 120px);
}
.el-table--fit {
  height: 100%;
}
.page-box {
  height: 60px;
  display: flex;
  justify-content: flex-end;
  align-items: center;
  margin-top: 20px;
}
</style>

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

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

相关文章

会声会影剪刀为什么灰色 会声会影分割素材的方法 会声会影视频制作教程 会声会影2023旗舰版下载 会声会影快捷键

会声会影是一款操作简单&#xff0c;功能齐全&#xff0c;适合新手使用的视频剪辑软件。在使用会声会影剪辑的过程中&#xff0c;我们一般需要使用【剪刀工具】&#xff0c;但有时会声会影剪刀是灰色无法使用的状态&#xff0c;这个时候该怎么办呢&#xff1f;本文将为大家介绍…

pytest--python的一种测试框架--简介

一、什么是接口测试 接口测试是软件测试的一种类型&#xff0c;用于验证不同软件系统之间的接口是否按照设计规范进行通信和交互。接口测试通常涉及以下方面&#xff1a; 功能性验证&#xff1a;确认接口按照规范执行预期的功能。 性能测试&#xff1a;验证接口在不同负载条…

木地板 VS 瓷砖,不同风格应该怎么选?福州中宅装饰,福州装修

不同装修风格应该怎么选择地板铺贴材质&#xff1f;是选择木地板还是瓷砖&#xff1f;以下分点阐述&#xff1a; ①现代简约风格 推荐使用瓷砖。因为瓷砖的表面光滑&#xff0c;能反射出灯光的倒影&#xff0c;营造出简洁明亮的视觉效果。同时&#xff0c;瓷砖耐磨、易清洁&am…

CNN卷积神经网络股票价格预测

部分代码&#xff1a; %% 清空环境变量 warning off % 关闭报警信息 close all % 关闭开启的图窗 clear % 清空变量 clc % 清空命令行 %% 重构数据 data_Trend xlsread("dataguOne.xlsx") dT …

idea-创建java8的springboot项目

现在使用IDEA创建 Spring Boot 项目&#xff0c;jdk 版本最低要求为 17。Spring Boot 官方在全力维护 3.x 版本&#xff0c;而 Spring Boot 3.x 对 jdk 版本的最低要求为17。 如果需要继续使用 jdk8&#xff0c;则需要修改 Server URL &#xff0c;改成&#xff1a;https://st…

electron的学习基础汇总

通过学习electron了解一下做项目中好奇的问题&#xff0c;我觉得下面这张图就可以说明一切了&#xff0c;就是在初次创建并显示主窗口后&#xff0c;一切都将建立在渲染进程和主进程的通信上&#xff0c;而用的技术就是ipcMain和ipcRender&#xff0c;那么渲染进程如何与主进程…

X-Bogus逆向分析(纯算+补环境)

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 前言 此平台 本人 仅限…

储能逆变器测试负载箱解决方案

储能逆变器是新能源领域的重要设备&#xff0c;其性能的优劣直接影响到整个系统的运行效率和稳定性。因此&#xff0c;对储能逆变器进行严格的测试和验证是保证其性能的关键步骤。在这个过程中&#xff0c;负载箱是必不可少的工具&#xff0c;它可以模拟真实的负载条件&#xf…

JUC并发编程——对于synchronized关键字的理解

现象&#x1f50d;&#xff1a; 两个线程对初始值为 0 的静态变量一个做自增&#xff0c;一个做自减&#xff0c;各做 5000 次&#xff0c;最后输出的 counter一定为0 吗&#xff1f; Slf4j(topic "c.Test17") public class Test17 {static int counter 0;public…

可望而不可即的“人文关怀”

死亡既然是最后的归宿&#xff0c;生命的必然&#xff0c;自然也就没有必要过多地害怕了。一切顺其自然&#xff0c;交给“命运”就是了。 我参观过英国的临终关怀医院&#xff0c;这是世界上最早的一所临终关怀医院&#xff0c;已有100多年历史。 那里的大多数病人都只剩一个…

第1章.提示词:开启AI智慧之门的钥匙

什么是提示词&#xff1f; 提示词&#xff0c;是引导语言模型的指令&#xff0c;让用户能够驾驭模型的输出&#xff0c;确保生成的文本符合需求。 ChatGPT&#xff0c;这位文字界的艺术大师&#xff0c;以transformer架构为基石&#xff0c;能轻松驾驭海量数据&#xff0c;编织…

【机器学习之---数学】马尔科夫链

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 马尔科夫 1. 概念 1.1 引言 马尔可夫链在许多领域都有应用&#xff0c;包括物理学、生物学、工程学、经济学和计算机科学等。在计算机科学中&#xff0…

QT使用数据库

数据库就是保存数据的文件。可以存储大量数据&#xff0c;包括插入数据、更新数据、截取数据等。用专业术语来说&#xff0c;数据库是“按照数据结构来组织、存储和管理数据的仓库”。 什么时候需要数据库&#xff1f;在嵌入式里&#xff0c;存储大量数据&#xff0c;或者记录数…

Kubernetes篇(二)— 集群环境搭建

目录 前言一、 环境规划集群类型安装方式主机规划 二、环境搭建主机安装环境初始化安装docker安装kubernetes组件准备集群镜像集群初始化安装网络插件 三、 服务部署 前言 本章节主要介绍如何搭建kubernetes的集群环境 一、 环境规划 集群类型 kubernetes集群大体上分为两类…

(C语言) fgetc与fputc函数详解

目录 1 fgetc函数详解 1.1 从文件流中读取数据 1.2 从标准输入流中读取数据 2 fputc函数详解 2.1 向文件流中写入数据 2.2 向标准输出流中写入数据 1 fgetc函数详解 头文件&#xff1a;stdio.h 该函数只有一个参数&#xff1a;stream 作用&#xff1a;从输入流中获得一个…

Gif动态图片如何制作?悄悄告诉你两招就能做!

怎么制作gif动态图片&#xff1f;Gif动图在我们的日常生活中非常的常见&#xff0c;尤其是在各大聊天软件中。当我们想要自己制作这种有趣的gif动图的时候要怎么办呢&#xff1f;很简单&#xff0c;制作gif动图的方法通常有两种&#xff0c;一种是视频转换gif另一种就是图片合成…

最大子序列(蓝桥杯,acwing,单调队列)

题目描述&#xff1a; 输入一个长度为 n 的整数序列&#xff0c;从中找出一段长度不超过 m 的连续子序列&#xff0c;使得子序列中所有数的和最大。 注意&#xff1a; 子序列的长度至少是 1。 输入格式&#xff1a; 第一行输入两个整数 n,m。 第二行输入 n 个数&#xff0…

CATSploit:一款基于CATS的自动化渗透测试执行工具

关于CATSploit CATSploit是一款基于CATS的自动化渗透测试执行工具&#xff0c;该工具基于网络攻击技术评分&#xff08;CATS&#xff09;方法实现其功能&#xff0c;可以在无需渗透测试人员操作的情况下&#xff0c;自动对目标应用执行安全渗透测试。 在执行渗透测试的过程中&…

【leetcode】力扣简单题两数之和

题目 思路 代码实现 #include<iostream> #include<unordered_map>using namespace std;class Solution { public:vector<int> TwoNumber(const vector<int>& nums, int target){vector<int> number_vector;unordered_map<int, int> …

【PyQt学习篇 · ⑮】:qrc/rcc资源系统

文章目录 qrc使用介绍rcc编译资源rcc 的安装与基本使用 编译成Python文件使用资源系统文件方式一&#xff1a;导入资源系统文件方式二&#xff1a;整合资源系统文件 qrc使用介绍 在PyQt中&#xff0c;qrc文件是一种资源文件&#xff0c;用于将应用程序所需的资源&#xff08;如…