当前位置:   article > 正文

el-table实现动态表头,自定义斑马纹等功能_el-table动态表头

el-table动态表头

需求:1.根据选择的日期时间,实现表头的动态显示功能

           2.修改默认表头灰色样式,

           3.斑马纹偶数灰色改为奇数为灰色

           4.表格某一行加分割线区分

1.效果

 2.动态表格实现

1.height:表格的高度设置,内容超出后会显示滚动条,高度固定

2.:row-class-name:行类名,用作设置斑马纹

这俩个就是时间了一个开始一个结束时间,在表头显示

  1. <div v-if="scope.column.property === 'start' && contrastTime.length > 0">
  2. {{ startdata }}
  3. </div>
  4. <div v-else-if="scope.column.property === 'end' && contrastTime.length > 0">
  5. {{ enddata }}
  6. </div>

1.type="datetimerange":表示是时间日期选择器

2.:picker-options="pickerOptions",给选择器加上个快捷的日期选项,最近一周,最近一个月,最近三个月

3.    value-format="yyyy-MM-dd HH:mm:ss",选择好后自动把时间和日期改为"yyyy-MM-dd HH:mm:ss这种格式

  1. <el-date-picker
  2. v-model="contrastTime"
  3. type="datetimerange"
  4. align="right"
  5. range-separator="至"
  6. start-placeholder="开始日期"
  7. end-placeholder="结束日期"
  8. @change="updateTableHeader"
  9. :picker-options="pickerOptions"
  10. value-format="yyyy-MM-dd HH:mm:ss"
  11. ></el-date-picker>

斑马纹根据行的index来选择奇数或者偶数的类名是什么

  1. setRowClassName({ rowIndex }) {
  2. return rowIndex % 2 === 0 ? 'even-row' : 'odd-row';
  3. },

3.完整代码

  1. <!--
  2. * @Descripttion: el-table实现动态表头,自定义斑马纹等功能
  3. * @Author: 叫我欧皇大人
  4. * @email: 13071200550@163.com
  5. * @Date: 2023-07-14
  6. -->
  7. <template>
  8. <div class="content-box">
  9. <div class="container">
  10. <div class="header">
  11. <el-date-picker
  12. v-model="contrastTime"
  13. type="datetimerange"
  14. align="right"
  15. range-separator="至"
  16. start-placeholder="开始日期"
  17. end-placeholder="结束日期"
  18. @change="updateTableHeader"
  19. :picker-options="pickerOptions"
  20. value-format="yyyy-MM-dd HH:mm:ss"
  21. ></el-date-picker>
  22. </div>
  23. <el-table :data="tableData" height="calc(100vh - 64px - 130px - 200px)" :row-class-name="setRowClassName">
  24. <el-table-column
  25. v-for="(header, index) in tableHeaders"
  26. :key="header.prop"
  27. :prop="header.prop"
  28. :label="header.label"
  29. :width="header.width"
  30. align="center"
  31. >
  32. <template slot="header" slot-scope="scope">
  33. <div>{{ header.label }}</div>
  34. <div v-if="scope.column.property === 'start' && contrastTime.length > 0">
  35. {{ startdata }}
  36. </div>
  37. <div v-else-if="scope.column.property === 'end' && contrastTime.length > 0">
  38. {{ enddata }}
  39. </div>
  40. </template>
  41. </el-table-column>
  42. </el-table>
  43. </div>
  44. </div>
  45. </template>
  46. <script>
  47. export default {
  48. data() {
  49. return {
  50. startdata: '',
  51. enddata: '',
  52. tableData: [
  53. { name: '数据1', start: 'A-B-C', end: '结束数据', age: 18 },
  54. { name: '数据1', start: 'A-B-C', end: '结束数据', age: 18 },
  55. { name: '数据1', start: 'A-B-C', end: '结束数据', age: 18 },
  56. { name: '数据1', start: 'A-B-C', end: '结束数据', age: 18 }
  57. ],
  58. tableHeaders: [
  59. { prop: 'name', label: '姓名', width: '200' },
  60. { prop: 'start', label: '开始', width: '200' },
  61. { prop: 'end', label: '结束', width: '200' },
  62. { prop: 'age', label: '年龄', width: '80' }
  63. ],
  64. contrastTime: [],
  65. pickerOptions: {
  66. shortcuts: [
  67. {
  68. text: '最近一周',
  69. onClick(picker) {
  70. const end = new Date();
  71. const start = new Date();
  72. start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
  73. picker.$emit('pick', [start, end]);
  74. }
  75. },
  76. {
  77. text: '最近一个月',
  78. onClick(picker) {
  79. const end = new Date();
  80. const start = new Date();
  81. start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
  82. picker.$emit('pick', [start, end]);
  83. }
  84. },
  85. {
  86. text: '最近三个月',
  87. onClick(picker) {
  88. const end = new Date();
  89. const start = new Date();
  90. start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  91. picker.$emit('pick', [start, end]);
  92. }
  93. }
  94. ]
  95. }
  96. };
  97. },
  98. mounted() {},
  99. methods: {
  100. // 斑马纹
  101. setRowClassName({ rowIndex }) {
  102. return rowIndex % 2 === 0 ? 'even-row' : 'odd-row';
  103. },
  104. updateTableHeader() {
  105. this.startdata = this.contrastTime[0];
  106. this.enddata = this.contrastTime[1];
  107. }
  108. }
  109. };
  110. </script>
  111. <style lang="scss" scoped>
  112. .header {
  113. margin-bottom: 50px;
  114. margin-left: 300px;
  115. }
  116. /deep/ .el-table thead th {
  117. background-color: #fff !important;
  118. color: #000000;
  119. font-weight: bold;
  120. }
  121. // 斑马纹
  122. /deep/ .even-row {
  123. background-color: #f5f5f5; /* 偶数行为灰色 */
  124. }
  125. /deep/ .odd-row {
  126. background-color: #fff; /* 奇数行为白色 */
  127. }
  128. // 给表格加竖线
  129. /deep/ .el-table tbody tr td:nth-child(1) {
  130. border-right: 1px solid #e2e3e6;
  131. }
  132. </style>

文章到此结束,希望对你有所帮助~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/965157
推荐阅读
相关标签
  

闽ICP备14008679号