当前位置:   article > 正文

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

基于elementui的前端模板

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

模板概览

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

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

模板效果

代码实现

模板结构

  1. <template>
  2. <div class="main">
  3. <div class="content">
  4. <!-- 头部搜索form -->
  5. <div class="header">
  6. <el-form :inline="true" :model="formInline" class="demo-form-inline">
  7. <el-form-item label="设备名称">
  8. <el-input v-model="formInline.channelName" placeholder="请输入设备名称" clearable></el-input>
  9. </el-form-item>
  10. <el-form-item label="设备状态">
  11. <el-select v-model="formInline.channelStatus" placeholder="请选择设备状态" clearable>
  12. <el-option
  13. v-for="(item, index) in channelStatusOption"
  14. :key="index"
  15. :label="item.label"
  16. :value="Number(item.value)"></el-option>
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item label="审核状态">
  20. <el-select v-model="formInline.auditResult" placeholder="请选择审核状态" clearable>
  21. <el-option
  22. v-for="(item, index) in auditResultOption"
  23. :key="index"
  24. :label="item.label"
  25. :value="Number(item.value)"></el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item>
  29. <el-button type="primary" @click="searchForm()">查询</el-button>
  30. <el-button @click="resetForm()">重置</el-button>
  31. </el-form-item>
  32. </el-form>
  33. </div>
  34. <!-- 表格内容 -->
  35. <el-table
  36. ref="multipleTable"
  37. :data="tableData"
  38. tooltip-effect="dark"
  39. style="width: 100%"
  40. stripe
  41. cell-class-name="cell-class-name"
  42. :header-cell-style="{
  43. 'background-color': 'transparent',
  44. 'font-weight': '400',
  45. 'font-size': '28px',
  46. color: '#cbe5fa',
  47. 'text-align': 'center',
  48. 'padding-top': '7px',
  49. 'padding-bottom': '18px',
  50. height: '64px',
  51. }"
  52. :cell-style="{
  53. 'text-align': 'center',
  54. 'font-weight': '400',
  55. 'font-size': '22px',
  56. color: '#91A5B6',
  57. height: '64px',
  58. }">
  59. <el-table-column label="序号" width="100" type="index" show-overflow-tooltip></el-table-column>
  60. <el-table-column prop="channelName" label="设备名称" show-overflow-tooltip></el-table-column>
  61. <el-table-column prop="channelStatus" label="设备状态" show-overflow-tooltip></el-table-column>
  62. <el-table-column prop="auditResult" label="审核状态" show-overflow-tooltip></el-table-column>
  63. <el-table-column label="操作" show-overflow-tooltip>
  64. <template slot-scope="scope">
  65. <el-button type="text" @click="handleRealtimeVideo(scope.$index, scope.row)">实时视频</el-button>
  66. </template>
  67. </el-table-column>
  68. </el-table>
  69. <!-- 分页组件 -->
  70. <div class="paginationContent">
  71. <el-pagination
  72. @size-change="handleSizeChange"
  73. @current-change="handleCurrentChange"
  74. :page-sizes="[10, 20, 30, 40]"
  75. :page-size="page.pageSize"
  76. :current-page="page.currentPage"
  77. layout="total, sizes, prev, pager, next, jumper"
  78. :total="totalNum"></el-pagination>
  79. </div>
  80. </div>
  81. </div>
  82. </template>

数据和方法

  1. <script>
  2. import { basicOverviewList } from '@/api/bigScreen_sxycpc/home.js'
  3. export default {
  4. name: 'basicOverviewList',
  5. data() {
  6. return {
  7. // 设备状态下拉选项
  8. channelStatusOption: [
  9. {
  10. label: '在线',
  11. value: '1',
  12. },
  13. {
  14. label: '不在线',
  15. value: '0',
  16. },
  17. ],
  18. // 审核状态下拉选项
  19. auditResultOption: [
  20. {
  21. label: '未审核',
  22. value: '0',
  23. },
  24. {
  25. label: '审核未通过',
  26. value: '1',
  27. },
  28. {
  29. label: '审核已通过',
  30. value: '2',
  31. },
  32. ],
  33. // 头部搜索条件绑定数据
  34. formInline: {
  35. channelName: '', //设备名称
  36. channelStatus: '', // 设备状态
  37. auditResult: '', //审核状态
  38. },
  39. // 分页数据
  40. page: {
  41. pageSize: 10,
  42. currentPage: 1,
  43. },
  44. // 列表总数
  45. totalNum: 0,
  46. // 列表数据
  47. tableData: [],
  48. }
  49. },
  50. computed: {},
  51. mounted() {
  52. this.getData()
  53. },
  54. methods: {
  55. // 查看实时视频
  56. handleRealtimeVideo(index, row) {
  57. console.log(index, row, '实时视频')
  58. },
  59. // 获取列表
  60. getData() {
  61. console.log('获取列表')
  62. let params = {
  63. pageNum: this.page.currentPage,
  64. pageSize: this.page.pageSize,
  65. channelName: this.formInline.channelName,
  66. channelStatus: this.formInline.channelStatus,
  67. auditResult: this.formInline.auditResult,
  68. }
  69. basicOverviewList(params).then(res => {
  70. console.log(res, '列表')
  71. this.tableData = res.rows
  72. this.totalNum = res.total
  73. })
  74. },
  75. // 查询按钮
  76. searchForm() {
  77. this.page.currentPage = 1
  78. this.getData()
  79. },
  80. // 重置按钮
  81. resetForm() {
  82. this.formInline = {
  83. channelName: '',
  84. channelStatus: '',
  85. auditResult: '',
  86. }
  87. this.page.currentPage = 1
  88. this.getData()
  89. },
  90. // 切换每页几条数据
  91. handleSizeChange(val) {
  92. console.log(`每页 ${val} 条`)
  93. this.page.pageSize = val
  94. this.page.currentPage = 1
  95. this.getData()
  96. },
  97. // 切换当前第几页
  98. handleCurrentChange(val) {
  99. console.log(`当前页: ${val}`)
  100. this.page.currentPage = val
  101. this.getData()
  102. },
  103. },
  104. }
  105. </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 和其他相关类名,以便快速修改。

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

  1. <style lang="scss" scoped>
  2. /* 主容器样式 */
  3. .main {
  4. display: flex;
  5. flex-direction: column;
  6. align-items: flex-start;
  7. width: 100%;
  8. height: 100%;
  9. box-sizing: border-box;
  10. /* 内容容器样式 */
  11. .content {
  12. width: 100%;
  13. flex: 1;
  14. display: flex;
  15. flex-direction: column;
  16. /* 头部搜索区域样式 */
  17. .header {
  18. width: 100%;
  19. height: 48px; // 使用pxToRem函数转换为rem单位
  20. margin-bottom: 22px;
  21. /* 深度选择器,确保样式能够覆盖Element UI的默认样式 */
  22. ::v-deep .el-form {
  23. display: flex;
  24. align-items: center;
  25. /* 将查询和重置按钮放在表单的末尾 */
  26. ::v-deep .el-form-item:last-child {
  27. margin-left: auto;
  28. }
  29. }
  30. /* 搜索表单项样式 */
  31. ::v-deep .el-form-item {
  32. display: flex;
  33. align-items: center;
  34. /* 搜索框和下拉选择框的标签样式 */
  35. ::v-deep .el-form-item__label {
  36. font-weight: 400;
  37. font-size: 28px;
  38. color: rgba(255, 255, 255, 0.6);
  39. padding: 0 17px 0 0;
  40. }
  41. /* 输入框样式 */
  42. ::v-deep .el-input__inner {
  43. width: 200px;
  44. height: 48px;
  45. background: #000000;
  46. border-radius: 4px;
  47. font-weight: 400;
  48. font-size: 20px;
  49. color: #3671c0;
  50. border: 1px solid #3694e8;
  51. padding: 2px 24px;
  52. }
  53. /* 按钮样式 */
  54. ::v-deep .el-button {
  55. width: 87px;
  56. height: 48px;
  57. background: rgba(54, 113, 192, 0.5);
  58. border-radius: 4px;
  59. border: 1px solid #3694e8;
  60. font-weight: 400;
  61. font-size: 20px;
  62. color: #ffffff;
  63. }
  64. }
  65. }
  66. /* 分页组件样式 */
  67. .paginationContent {
  68. margin-top: 20px;
  69. margin-left: auto;
  70. /* 分页组件中总页数的样式 */
  71. ::v-deep .el-pagination__total {
  72. font-weight: normal;
  73. font-size: 16px;
  74. color: #ffffff;
  75. }
  76. /* 分页组件中选择每页显示数量的下拉框样式 */
  77. ::v-deep .el-pagination .el-select .el-input .el-input__inner {
  78. font-size: 16px;
  79. color: #ffffff;
  80. background: transparent;
  81. border-radius: 4px;
  82. border: 1px solid #b9b9b9;
  83. }
  84. /* 分页组件中分页按钮的样式 */
  85. ::v-deep .el-pager li {
  86. margin-right: 8px;
  87. background: rgba(10, 65, 139, 0.5);
  88. border-radius: 4px;
  89. color: #ffffff;
  90. }
  91. /* 当前激活的分页按钮样式 */
  92. ::v-deep .el-pager li.active {
  93. background: #046bff;
  94. }
  95. }
  96. }
  97. }
  98. /* 表格操作按钮的样式 */
  99. ::v-deep .el-button--text {
  100. font-family: Source Han Sans CN, Source Han Sans CN;
  101. font-weight: 400;
  102. font-size: 22px;
  103. color: #48a8ff;
  104. }
  105. /* 表格单元格提示的样式 */
  106. ::v-deep .el-tooltip__popper {
  107. font-weight: 400;
  108. font-size: 22px;
  109. color: #ffffff;
  110. }
  111. /* 表格滚动条的样式 */
  112. ::v-deep .el-table__body-wrapper {
  113. height: 450px;
  114. overflow-y: auto;
  115. }
  116. /* 表格斑马纹样式 */
  117. ::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td {
  118. background: rgba(10, 65, 139, 0.31);
  119. }
  120. /* 表格头部单元格样式 */
  121. ::v-deep .el-table th.el-table__cell > .cell {
  122. height: 28px;
  123. display: flex;
  124. align-items: center;
  125. justify-content: center;
  126. }
  127. /* 表格内容单元格样式 */
  128. ::v-deep .el-table td.el-table__cell div {
  129. height: 28px;
  130. display: flex;
  131. align-items: center;
  132. justify-content: center;
  133. }
  134. /* 去除表格单元格边框 */
  135. ::v-deep .el-table__row > td {
  136. border: none;
  137. }
  138. /* 去除表格头部单元格上边框 */
  139. ::v-deep .el-table th.is-leaf {
  140. border: none;
  141. }
  142. /* 去除表格底部边框 */
  143. ::v-deep .el-table::before {
  144. height: 0;
  145. }
  146. /* 设置表格边框颜色 */
  147. ::v-deep .el-table {
  148. --el-table-border-color: #fff;
  149. }
  150. /* 表格背景色设置 */
  151. ::v-deep .el-table,
  152. ::v-deep .el-table__expanded-cell {
  153. background-color: transparent;
  154. }
  155. /* 表格内部背景色设置 */
  156. ::v-deep .el-table th,
  157. ::v-deep .el-table tr,
  158. ::v-deep .el-table td {
  159. background-color: transparent;
  160. }
  161. /* 表格行悬浮背景色设置 */
  162. ::v-deep .el-table .el-table__body tr:hover > td {
  163. background-color: inherit;
  164. }
  165. }
  166. </style>

使用说明

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

结语

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

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

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/910964
推荐阅读
相关标签
  

闽ICP备14008679号