记录element el-table的自定义表头和表格

这篇博客详细介绍了如何在前端使用EL-Table组件实现自定义表头和表格内容的展示,包括设置表格列宽、居中对齐、显示溢出提示等。同时,展示了如何通过JavaScript处理表格数据,如获取用户排班信息并根据日期显示不同颜色的按钮。此外,还涉及到按钮的点击事件,用于打开用户排班对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义表头和表格内容

<el-table ref="multipleTable"
                  show-overflow-tooltip
                  :class="{'table-line-no': !tableLineNo}"
                  :height="tableHeight"
                  :data="tableData"
                  style="width: 100%">
          <el-table-column show-overflow-tooltip
                           align="center"
                           width="120">
	            <template slot="header">
	              <div>
	                <p>初始班次</p>
	              </div>
	            </template>
	            <template slot-scope="scope">
	              <span class="begin-btn">{{ scope.row.beginScheduleName || '未设置' }}</span>
	            </template>
          </el-table-column>
          <el-table-column v-for="(item, index) in dateList"
                           :key="index"
                           width="120"
                           align="center">
            <!-- 自定义表头 -->
            <template slot="header">
              <div>
                <p>{{ item.day }}</p>
                <p>{{ number2Chinese(item.week) }}</p>
              </div>
            </template>
            <template slot-scope="scope">
              <el-button class="user-schedule-btn"
                         :style="{
                           backgroundColor: getUserTableText(item.date, scope.row).color
                         }"
                         :disabled="new Date(item.date).getTime() <= Date.now() - 3600 * 1000 * 24 * 1"
                         @click="openUserScheduleDialog(getUserTableText(item.date, scope.row), item.date, scope.row)">
                {{ getUserTableText(item.date, scope.row).scheduleName || '' }}
              </el-button>
            </template>
          </el-table-column>
        </el-table>

	JS:
		// 根据表头日期和员工排班表日期,显示表格文字
	    getUserTableText(headerDate, row) {
	      let text = {
	        scheduleName: '',
	        color: ''
	      };
	      row.userWorkSchedules.map((item) => {
	        if (item.calendarDay === headerDate) {
	          text = item;
	          if (text.scheduleName === '休息') {
	            item.color = '#dedee2';
	          }
	        }
	      });
	      text.ruleId = row.ruleId;
	      return text;
	    },

注:

			tableDatas:[
				{beginScheduleId: 49
				beginScheduleName: "中班"
				clearFlag: false
				employeeId: 97
				employeeName: "李唯一"
				groupId: 28
				groupName: "dfd"
				id: 387
				index: 0
				ruleId: 21
				ruleName: "春节值班"
				userWorkSchedules: Array(30)}
				]
			dateList:[
				{date: "2022-06-01"
				day: "01"
				week: 3}
				]
### 实现 Element Plus 的 `el-table` 组件自定义表头列 在使用 Element Plus 的 `el-table` 组件时,可以通过多种方法实现自定义表头列的功能。以下是详细的说明以及代码示例。 #### 自定义表头 通过 `header-cell-style` 或者 `header-cell-class-name` 属性可以修改表头样式[^2]。如果需要更复杂的逻辑,则可以在 `<template>` 中覆盖默认的表头内容。具体做法如下: 1. 使用插槽 `#header` 定义自定义表头。 2. 结合 Vue 的模板语法动态生成复杂结构。 ```vue <template> <el-table :data="tableData"> <!-- 自定义某一列的表头 --> <el-table-column prop="name" label="姓名"> <template #header> <span style="color: red;">自定义姓名</span> </template> </el-table-column> <!-- 动态生成多列表--> <el-table-column v-for="(column, index) in columns" :key="index" :prop="column.prop" :label="column.label"> <template #header="{ column }"> <div>{{ column.label }} (可编辑)</div> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '张三', age: 20 }, { name: '李四', age: 25 } ], columns: [ { prop: 'age', label: '年龄' } ] }; } }; </script> ``` 上述代码展示了如何利用插槽 `#header` 来重写表头内容,并且支持动态生成多个列及其对应的表头--- #### 自定义列 对于列的定制,除了简单的文字展示外,还可以嵌入其他组件或者执行特定操作。例如,在单元格中加入按钮、输入框或其他交互控件。 ```vue <template> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"></el-table-column> <!-- 增加一个带有按钮的操作列 --> <el-table-column label="操作"> <template #default="scope"> <el-button size="mini" @click="handleEdit(scope.row)">编辑</el-button> <el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: '王五', id: 1 }, { name: '赵六', id: 2 } ] }; }, methods: { handleEdit(row) { console.log(`正在编辑 ${row.name}`); }, handleDelete(row) { console.log(`正在删除 ${row.name}`); } } }; </script> ``` 此部分演示了如何向表格中添加功能性的操作列,比如编辑或删除按钮。 --- #### 虚拟化表格注意事项 当处理大量数据时,推荐使用 `el-table-v2` 进行性能优化。然而需要注意以下几点[^3]: - **宽度设置**:每列都需显式指定 `width` 字段,单位为像素(仅接受数字类型),否则可能导致布局错乱或无法正常渲染。 - **兼容性问题**:截至 Element Plus 版本 2.4.2,该组件仍处于实验阶段,可能存在不稳定情况。若追求更高的稳定性功能性,可以选择第三方库如 VXE-Table--- #### 总结 以上介绍了基于 Element Plus 的 `el-table` `el-table-v2` 如何实现自定义表头与列的方式。无论是静态还是动态场景下,都可以灵活运用 Vue 提供的强大能力完成需求开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值