Antd Table组件的头部单元格水平居中

Antd Table组件的头部单元格水平居中🧐

const columns1 = [
	{
		dataIndex: 'title',
		title: '栏目名称',
		width: '150px',
	},
	{
		dataIndex: 'show',
		title: '是否展示',
		width: '620px',
		customHeaderCell: () => ({
			style: {
					textAlign: 'center',  //头部单元格水平居中
			},
		}),
	},
	{
		dataIndex: 'align',
		title: '居中方式',
		width: 200,
		scopedSlots: { customRender: 'alignAlias' },
		align: 'center', //头部单元格和列内容水平居中
	}
]

实测简单好用!

本人只是记录工作过程中遇到的一些比较不常见的需求,来作为记录!

### 使用 Ant Design Vue 实现 Tree Data 表格并合并单元格 在 Ant Design Vue 中,`a-table` 组件支持展示树状结构的数据,并允许通过自定义渲染函数来实现复杂的表格布局,包括合并单元格。为了达到这一目的,可以利用 `rowClassName` 和 `customRow` 属性以及列配置中的 `colSpan` 方法。 对于树形数据的支持,可以通过设置 `treeData` 或者使用 `children` 字段嵌套子项的方式来构建层次化的数据集[^1]。当处理需要合并的单元格时,逻辑上要遍历整个数据集合,在适当的位置调整 `colSpan` 和 `rowSpan` 值以控制显示效果[^2]。 下面是一个简单的例子,展示了如何创建带有树形结构并且能够合并相同内容单元格的表格: ```vue <template> <a-table :columns="columns" :data-source="dataSource" :expanded-row-keys.sync="expandedRowKeys"> <!-- 自定义列模板用于判断是否应该跨越多行 --> <span slot="name" slot-scope="text, record">{{ text }}</span> </a-table> </template> <script> export default { data() { return { expandedRowKeys: [], columns: [ { title: 'Name', dataIndex: 'name', key: 'name', scopedSlots: { customRender: 'name' } }, { title: 'Age', dataIndex: 'age', key: 'age' }, { title: 'Address', dataIndex: 'address', key: 'address' } ], dataSource: [] }; }, methods: { // 计算每一行的实际跨行数 getRowSpan(data, index) { let span = 0; const currentKey = `${data[index].key}`; while (index >= 0 && this.dataSource[index]?.key === currentKey) { ++span; --index; } return span; }, prepareDataSource(treeData) { function flattenTree(list, parent = null, level = 0) { return list.reduce((acc, item, idx) => { acc.push({ ...item, parentId: parent ? parent.key : '', children: undefined, _level: level }); if (Array.isArray(item.children)) { acc.push(...flattenTree(item.children, item, level + 1)); } return acc; }, []); } const flatList = flattenTree(treeData); const result = []; for (let i = 0; i < flatList.length; i++) { const row = flatList[i]; Object.keys(row).forEach(key => { if (!result.some(r => r.key === row[key])) { result.push({ ...row }); ['name'].forEach(col => { if (i > 0 && col in row) { const prevIndex = i - 1; if (flatList[prevIndex][col] === row[col]) { result[result.length - 1][`${col}ColSpan`] = 0; if (!(`${col}RowSpan` in result.find(r => r[col] === row[col]))) { result.find(r => r[col] === row[col])[`${col}RowSpan`] = this.getRowSpan(flatList.map(d => d[col]), prevIndex); } } } }); } }); this.dataSource = result.filter(r => !r.hidden); } } }, mounted() { // 初始化 tree 数据源 const treeData = [ { name: "Parent 1", age: 32, address: "New York No. 1 Lake Park", key: "1", children: [ { name: "Child 1-1", age: 32, address: "New York No. 2 Lake Park", key: "1-1" }, { name: "Child 1-2", age: 32, address: "New York No. 3 Lake Park", key: "1-2" } ] }, { name: "Parent 2", age: 42, address: "London No. 1 Lake Park", key: "2" } ]; this.prepareDataSource(treeData); } }; </script> ``` 此代码片段实现了基于给定树形数据生成扁平化列表的功能,并在此过程中计算哪些单元格应当被合并及其对应的行列跨度值。注意这里简化了一些细节以便更好地理解核心概念;实际应用中可能还需要考虑更多边界情况和性能优化措施。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值