基于 Element UI 的高效前端表格模板开发

news2024/10/5 21:14:27

在前端开发中,表格展示和搜索功能是常见的需求之一。为了提高开发效率,我们可以通过创建一个可复用的表格模板来应对各种类似的场景。本文将分享一个基于 Element UI 的表格模板,它包含了搜索、分页和操作按钮等功能,可以作为未来项目开发的基础。

模板概览

首先,让我们来概览一下这个表格模板的基本结构:

  1. 头部搜索区域:包含设备名称、设备状态和审核状态的搜索条件。
  2. 表格内容:展示数据列表,包括序号、设备名称、设备状态、审核状态和操作按钮。
  3. 分页组件:实现数据的分页显示。

模板效果

代码实现

模板结构

<template>
  <div class="main">
    <div class="content">
      <!-- 头部搜索form -->
      <div class="header">
        <el-form :inline="true" :model="formInline" class="demo-form-inline">
          <el-form-item label="设备名称">
            <el-input v-model="formInline.channelName" placeholder="请输入设备名称" clearable></el-input>
          </el-form-item>
          <el-form-item label="设备状态">
            <el-select v-model="formInline.channelStatus" placeholder="请选择设备状态" clearable>
              <el-option
                v-for="(item, index) in channelStatusOption"
                :key="index"
                :label="item.label"
                :value="Number(item.value)"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="审核状态">
            <el-select v-model="formInline.auditResult" placeholder="请选择审核状态" clearable>
              <el-option
                v-for="(item, index) in auditResultOption"
                :key="index"
                :label="item.label"
                :value="Number(item.value)"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="searchForm()">查询</el-button>
            <el-button @click="resetForm()">重置</el-button>
          </el-form-item>
        </el-form>
      </div>
      <!-- 表格内容 -->
      <el-table
        ref="multipleTable"
        :data="tableData"
        tooltip-effect="dark"
        style="width: 100%"
        stripe
        cell-class-name="cell-class-name"
        :header-cell-style="{
          'background-color': 'transparent',
          'font-weight': '400',
          'font-size': '28px',
          color: '#cbe5fa',
          'text-align': 'center',
          'padding-top': '7px',
          'padding-bottom': '18px',
          height: '64px',
        }"
        :cell-style="{
          'text-align': 'center',
          'font-weight': '400',
          'font-size': '22px',
          color: '#91A5B6',
          height: '64px',
        }">
        <el-table-column label="序号" width="100" type="index" show-overflow-tooltip></el-table-column>
        <el-table-column prop="channelName" label="设备名称" show-overflow-tooltip></el-table-column>
        <el-table-column prop="channelStatus" label="设备状态" show-overflow-tooltip></el-table-column>
        <el-table-column prop="auditResult" label="审核状态" show-overflow-tooltip></el-table-column>
        <el-table-column label="操作" show-overflow-tooltip>
          <template slot-scope="scope">
            <el-button type="text" @click="handleRealtimeVideo(scope.$index, scope.row)">实时视频</el-button>
          </template>
        </el-table-column>
      </el-table>
      <!-- 分页组件 -->
      <div class="paginationContent">
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :page-sizes="[10, 20, 30, 40]"
          :page-size="page.pageSize"
          :current-page="page.currentPage"
          layout="total, sizes, prev, pager, next, jumper"
          :total="totalNum"></el-pagination>
      </div>
    </div>
  </div>
</template>

数据和方法

<script>
  import { basicOverviewList } from '@/api/bigScreen_sxycpc/home.js'
  export default {
    name: 'basicOverviewList',
    data() {
      return {
        // 设备状态下拉选项
        channelStatusOption: [
          {
            label: '在线',
            value: '1',
          },
          {
            label: '不在线',
            value: '0',
          },
        ],
        // 审核状态下拉选项
        auditResultOption: [
          {
            label: '未审核',
            value: '0',
          },
          {
            label: '审核未通过',
            value: '1',
          },
          {
            label: '审核已通过',
            value: '2',
          },
        ],
        // 头部搜索条件绑定数据
        formInline: {
          channelName: '', //设备名称
          channelStatus: '', // 设备状态
          auditResult: '', //审核状态
        },
        // 分页数据
        page: {
          pageSize: 10,
          currentPage: 1,
        },
        // 列表总数
        totalNum: 0,
        // 列表数据
        tableData: [],
      }
    },
    computed: {},
    mounted() {
      this.getData()
    },
    methods: {
      // 查看实时视频
      handleRealtimeVideo(index, row) {
        console.log(index, row, '实时视频')
      },
      // 获取列表
      getData() {
        console.log('获取列表')
        let params = {
          pageNum: this.page.currentPage,
          pageSize: this.page.pageSize,
          channelName: this.formInline.channelName,
          channelStatus: this.formInline.channelStatus,
          auditResult: this.formInline.auditResult,
        }
        basicOverviewList(params).then(res => {
          console.log(res, '列表')
          this.tableData = res.rows
          this.totalNum = res.total
        })
      },
      // 查询按钮
      searchForm() {
        this.page.currentPage = 1
        this.getData()
      },
      // 重置按钮
      resetForm() {
        this.formInline = {
          channelName: '',
          channelStatus: '',
          auditResult: '',
        }
        this.page.currentPage = 1
        this.getData()
      },
      // 切换每页几条数据
      handleSizeChange(val) {
        console.log(`每页 ${val} 条`)
        this.page.pageSize = val
        this.page.currentPage = 1
        this.getData()
      },
      // 切换当前第几页
      handleCurrentChange(val) {
        console.log(`当前页: ${val}`)
        this.page.currentPage = val
        this.getData()
      },
    },
  }
</script>

样式定制

在前端开发中,样式定制是一个动态的过程,它需要根据当前项目的需求和设计稿进行调整。在本表格模板中,我们提供了一套基础的样式代码,并为关键部分添加了注释,这样做的目的是为了在将来设计稿更新或需求变更时,能够快速地定位和调整相应的样式。

以下是一些关键的样式部分,以及它们可能需要根据设计稿进行调整的场景:

        1.表格头部和单元格样式:表格的头部和单元格样式对于数据的展示至关重要。设计稿可能会指定字体样式、背景色、边框等。通过注释,你可以快速定位到 ::v-deep .el-table th::v-deep .el-table td 类名,并根据设计稿的要求进行调整。

        2.表单输入框和按钮样式:这些样式通常需要与设计稿中的颜色方案、字体大小和按钮尺寸保持一致。通过查看注释,你可以迅速找到 ::v-deep .el-input__inner::v-deep .el-button 等类名,并根据需要调整它们的属性。

        3.表格的斑马纹和悬浮效果:为了增强数据的可读性,我们可能需要为表格行添加斑马纹或悬浮效果。通过注释,你可以轻松地定位到 ::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td 和相关的悬浮效果类名,并进行相应的调整。

        4.分页组件的样式:分页组件的样式同样需要与整体设计保持一致,包括按钮的颜色、大小和激活状态的高亮。注释将指导你到 ::v-deep .el-pager li 和其他相关类名,以便快速修改。

通过这种方式,样式代码不仅是页面呈现的基础,也是快速响应设计变更的关键。在未来的项目中,无论是颜色方案的更新、布局的调整还是新功能的添加,你都可以利用这些注释来快速定位和修改样式,确保开发效率和最终的用户体验。

<style lang="scss" scoped>
  /* 主容器样式 */
  .main {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    width: 100%;
    height: 100%;
    box-sizing: border-box;
    /* 内容容器样式 */
    .content {
      width: 100%;
      flex: 1;
      display: flex;
      flex-direction: column;
      /* 头部搜索区域样式 */
      .header {
        width: 100%;
        height: 48px; // 使用pxToRem函数转换为rem单位
        margin-bottom: 22px;
        /* 深度选择器,确保样式能够覆盖Element UI的默认样式 */
        ::v-deep .el-form {
          display: flex;
          align-items: center;
          /* 将查询和重置按钮放在表单的末尾 */
          ::v-deep .el-form-item:last-child {
            margin-left: auto;
          }
        }
        /* 搜索表单项样式 */
        ::v-deep .el-form-item {
          display: flex;
          align-items: center;
          /* 搜索框和下拉选择框的标签样式 */
          ::v-deep .el-form-item__label {
            font-weight: 400;
            font-size: 28px;
            color: rgba(255, 255, 255, 0.6);
            padding: 0 17px 0 0;
          }
          /* 输入框样式 */
          ::v-deep .el-input__inner {
            width: 200px;
            height: 48px;
            background: #000000;
            border-radius: 4px;
            font-weight: 400;
            font-size: 20px;
            color: #3671c0;
            border: 1px solid #3694e8;
            padding: 2px 24px;
          }
          /* 按钮样式 */
          ::v-deep .el-button {
            width: 87px;
            height: 48px;
            background: rgba(54, 113, 192, 0.5);
            border-radius: 4px;
            border: 1px solid #3694e8;
            font-weight: 400;
            font-size: 20px;
            color: #ffffff;
          }
        }
      }
      /* 分页组件样式 */
      .paginationContent {
        margin-top: 20px;
        margin-left: auto;
        /* 分页组件中总页数的样式 */
        ::v-deep .el-pagination__total {
          font-weight: normal;
          font-size: 16px;
          color: #ffffff;
        }
        /* 分页组件中选择每页显示数量的下拉框样式 */
        ::v-deep .el-pagination .el-select .el-input .el-input__inner {
          font-size: 16px;
          color: #ffffff;
          background: transparent;
          border-radius: 4px;
          border: 1px solid #b9b9b9;
        }
        /* 分页组件中分页按钮的样式 */
        ::v-deep .el-pager li {
          margin-right: 8px;
          background: rgba(10, 65, 139, 0.5);
          border-radius: 4px;
          color: #ffffff;
        }
        /* 当前激活的分页按钮样式 */
        ::v-deep .el-pager li.active {
          background: #046bff;
        }
      }
    }
  }
  /* 表格操作按钮的样式 */
  ::v-deep .el-button--text {
    font-family: Source Han Sans CN, Source Han Sans CN;
    font-weight: 400;
    font-size: 22px;
    color: #48a8ff;
  }
  /* 表格单元格提示的样式 */
  ::v-deep .el-tooltip__popper {
    font-weight: 400;
    font-size: 22px;
    color: #ffffff;
  }
  /* 表格滚动条的样式 */
  ::v-deep .el-table__body-wrapper {
    height: 450px;
    overflow-y: auto;
  }
  /* 表格斑马纹样式 */
  ::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td {
    background: rgba(10, 65, 139, 0.31);
  }
  /* 表格头部单元格样式 */
  ::v-deep .el-table th.el-table__cell > .cell {
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  /* 表格内容单元格样式 */
  ::v-deep .el-table td.el-table__cell div {
    height: 28px;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  /* 去除表格单元格边框 */
  ::v-deep .el-table__row > td {
    border: none;
  }
  /* 去除表格头部单元格上边框 */
  ::v-deep .el-table th.is-leaf {
    border: none;
  }
  /* 去除表格底部边框 */
  ::v-deep .el-table::before {
    height: 0;
  }
  /* 设置表格边框颜色 */
  ::v-deep .el-table {
    --el-table-border-color: #fff;
  }
  /* 表格背景色设置 */
  ::v-deep .el-table,
  ::v-deep .el-table__expanded-cell {
    background-color: transparent;
  }
  /* 表格内部背景色设置 */
  ::v-deep .el-table th,
  ::v-deep .el-table tr,
  ::v-deep .el-table td {
    background-color: transparent;
  }
  /* 表格行悬浮背景色设置 */
  ::v-deep .el-table .el-table__body tr:hover > td {
    background-color: inherit;
  }
}
</style>

使用说明

  1. 数据绑定:将 formInline 对象中的属性与搜索表单的输入框进行绑定。
  2. 获取数据getData 方法用于从后端获取数据,并根据搜索条件进行筛选。
  3. 分页控制:通过监听 size-change 和 current-change 事件来控制分页。
  4. 样式定制:根据项目需求调整表格和分页组件的样式。

结语

通过使用这个模板,你可以快速地为项目添加表格展示和搜索功能,大大提升开发效率。同时,模板的可复用性和可定制性也使得它能够适应不同的项目需求。

希望这个分享能够帮助到正在前端开发道路上的你,如果你有任何问题或建议,欢迎在评论区交流。让我们一起进步,创造更高效、更优雅的前端代码!

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

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

相关文章

基于zemax的圆孔、矩形衍射、双缝干涉与自定义孔径面型应用分析

自学案例节选自某乎 1&#xff1a;圆孔、矩形衍射、双缝干涉与自定义孔径面型应用分析 讨论一些基本的光学衍射、干涉现象&#xff0c;在加深对光学知识理解的同时&#xff0c;重点介绍一下自定义孔径的用法&#xff0c;主要是为了对软件的运用更为了解&#xff0c;并不针对某…

图说设计模式:单例模式

更多C学习笔记&#xff0c;关注 wx公众号&#xff1a;cpp读书笔记 5. 单例模式 单例模式 模式动机模式定义模式结构时序图代码分析模式分析实例优点缺点适用环境模式应用模式扩展总结 5.1. 模式动机 对于系统中的某些类来说&#xff0c;只有一个实例很重要&#xff0c;例如…

Linux:多线程的操作

多线程操作 进程与线程线程的创建 create_pthread创建线程池给线程传入对象的指针 线程等待 pthread_join退出线程 pthread_exit线程等待参数 retval 与 线程退出参数 retval 线程中断 pthread_cancel获取线程编号 pthread_self线程分离 pthread_detach 进程与线程 进程是资源…

【学习笔记】Kali

纯个人总结&#xff0c;有什么不对的地方欢迎指正。 笔记根据个人学习进度持续更新… 一、 认识Kali 基础了解 Kali是一套基于Debian发行版的一款操作系统。&#xff08;这里讲一个误区&#xff0c;我以前一直以为kali就属于deepin下的操作系统&#xff0c;但是我知道deepin是…

记录一下:vue3+antd-vue a-form包含a-table实现表格行内校验, 清除 指定行 指定字段 的校验

问题描述下&#xff1a; 目标VLAN值可以输入&#xff0c; 也可以点击后面的按钮进行弹窗选择。由于检验原因&#xff0c;光标失焦但是没有填写就会校验爆红&#xff0c;然后点击选择之后由于没有失焦过程没有触发校验&#xff0c;依然还是红的。这个时候就需要清除 目标VLAN值 …

企业跨境文件传输的核心痛点,怎样保证稳定可靠的传输性能?

随着经济和国际贸易的发展&#xff0c;企业跨境文件传输日趋频繁&#xff0c;多个行业均存在高频且大量的跨境文件传输需求&#xff1a; 跨境电子商务&#xff1a; 跨境电商平台需要进行跨国的订单、支付和物流信息的传输&#xff0c;以便顺利完成交易和配送。涉及跨国企业的内…

Python爬虫实战(实战篇)—18获取【小红书】首页信息写入Excel(仅用于学习-附完整版代码)

文章目录 专栏导读背景1、分析首页页面2、分析获取信息2-1,获取:笔记类型2-2,获取:标题2-3,获取:用户信息2-4,获取:用户ID2-5,获取:用户头像2-6,获取:文章连接完整代码总结专栏导读 文章名称链接Python爬虫实战(实战篇)—16获取【百度热搜】数据—写入Ecel(附完整…

一篇文章看懂Redission原理

文章目录 ☃️可重入锁原理☃️锁重试和WatchDog机制☃️MutiLock原理 上一篇文章讲解了 Rediision的使用 ,这篇文章讲解其原理 ☃️可重入锁原理 在Lock锁中&#xff0c;他是借助于底层的一个voaltile的一个state变量来记录重入的状态的&#xff0c;比如当前没有人持有这把锁…

Vue配置项之生命周期(组件生命周期)

Lifecycle Hooks 首先说明一下&#xff0c;本人是前端小学生级别的菜鸡&#xff0c;吐槽的话请口下留情&#xff0c;在评论区指出错误或者补充不足&#xff0c;我会很喜欢&#xff0c;互喷不会进步&#xff0c;相互指点才会。。。。谢谢大家啦 目录 Lifecycle Hooks 目录创建…

指针的深入理解(3)(包括数组名的理解、一维数组传参的本质以及指针数组的相关知识及使用)

文章目录 1 数组名的理解2 使用指针访问数组3 一维数组传参的本质4 指针数组5 指针数组的使用 1 数组名的理解 当我们运行以下代码&#xff1a; #include <stdio.h> int main() {int arr[10] { 0 };printf("%p\n", &arr[0]);printf("%p\n", a…

踩坑!被node-sass折磨的一天

文章目录 被node-sass折磨的一天折磨过程了解原因注意事项 被node-sass折磨的一天 折磨过程 起因是要开发一个老项目&#xff0c;照常拉代码、下依赖、启动三步走 依赖开始下载不对了&#xff0c;以为是node版本问题&#xff0c;寻找node-sass对应的node版本 利用nvm&#…

IP地址乱成一团?用Shell一键搞定!

在日常的运维工作中&#xff0c;我们经常需要对各种数据进行处理和分析&#xff0c;其中包括对IP地址的管理和排序。排序后的IP地址列表可以帮助我们更好地进行日志分析、网络流量监控和故障排除。 本文将模拟一个运维场景&#xff0c;展示如何对IP地址进行排序&#xff0c;并探…

云原生应用开发培训,开启云计算时代的新征程

在云计算时代&#xff0c;云原生应用开发技术已经成为IT领域的热门话题。如果您想要转型至云原生领域&#xff0c;我们的云原生应用开发培训将帮助您开启新征程。 我们的课程内容涵盖了云原生技术的基础概念、容器技术、微服务架构、持续集成与持续发布&#xff08;CI/CD&#…

传统零售运营模式有什么缺点?新零售模式下的运营思维好在哪里?

随着科技的进步、消费者需求的多样化以及市场竞争的加剧&#xff0c;传统零售模式已逐渐难以满足现代消费者对购物体验的期待。新零售&#xff0c;作为一个创新的概念&#xff0c;应运而生&#xff0c;它不仅代表着零售行业的未来趋势&#xff0c;更是一种全新的商业思维和运营…

pytest中一个场景测试的demo

注意点1&#xff1a; allure.severity 是一个装饰器&#xff0c;用于设置测试用例的严重性级别。 allure.severity_level.CRITICAL 是Allure提供的严重性级别之一&#xff0c;表示这个测试用例极为重要。allure.severity_level.BLOCKER&#xff1a;阻塞级别的问题&#xff0c…

python发送http请求

python有个内置模块发送请求urllib的request的 openurl()方法&#xff0c;打开一个链接&#xff0c;就是发送一个请求&#xff0c;&#xff0c; 因为内置模块发请求不是那么好用&#xff0c;一般都会使用第三方的请求包&#xff0c;requests模块&#xff0c; 请求头 User-Ag…

Unity基础(一)unity的下载与安装

目录 一:下载与安装 1.官网下载地址 2.推荐直接下载UnityHub 3.选择编辑器版本(推荐长期支持版) 4.在UnityHub安装选择相应的模块 二:创建项目 简介: Unity 是一款广泛应用的跨平台游戏开发引擎。 它具有以下显著特点&#xff1a; 强大的跨平台能力&#xff1a;能将开发的游…

CPI降温仍猛砍降息预期!美联储继续按兵不动,预计今年仅降息一次

要点&#xff1a; 美联储继续保持利率不变&#xff0c;符合市场预期。 决议声明不再说降通胀缺乏进一步进展&#xff0c;改称取得适度的进... 要点&#xff1a; 美联储继续保持利率不变&#xff0c;符合市场预期。 决议声明不再说降通胀缺乏进一步进展&#xff0c;改称取得适度…

Spring Boot集成antlr实现词法和语法分析

1.什么是antlr&#xff1f; Antlr4 是一款强大的语法生成器工具&#xff0c;可用于读取、处理、执行和翻译结构化的文本或二进制文件。基本上是当前 Java 语言中使用最为广泛的语法生成器工具。Twitter搜索使用ANTLR进行语法分析&#xff0c;每天处理超过20亿次查询&#xff1…

【Redis】Redis常见问题——缓存更新/内存淘汰机制/缓存一致性

目录 回顾数据库的问题如何提高 mysql 能承担的并发量&#xff1f;缓存解决方案应对的场景 缓存更新问题定期生成如何定期统计定期生成的优缺点 实时生成maxmemory 设置成多少合适呢&#xff1f;项目类型上来说 新的问题 内存淘汰策略Redis淘汰策略为什么redis要内存淘汰内存淘…