Ant-design表格添加索引列

博客介绍了分页索引的两种情况,一是每一页索引都从1开始,二是有分页且索引连续自增。

分为两种情况:
1、每一页索引都从1开始

<a-table :colums="colums"></a-table>
//配置表格的columns:
...
colums: [
    {
        title: '排名',
        customRender:(text,record,index) => index + 1
    },
    {
        title: '姓名',
        dataIndex:'uname'
    },
    {
        title: '分数',
        dataIndex:'score'
    }
    //...
]

2、有分页情况且连续自增

<a-table :colums="colums" :pagination="pagination"></a-table>

data() {
    return {
        pagination:
        {
            total: 0,
            defaultCurrent: 1,
            defaultPageSize: 10,
            showTotal: (total) => `共${total}条数据`,
            showSizeChanger: true,
            pageSizeOptions: ['5', '10', '15', '20'],
            onShowSizeChange: (current, pageSize) => {
              // this.pageSize = pageSize;
              this.pagination.defaultCurrent = current;
              this.pagination.defaultPageSize = pageSize;
            },
            onChange: (current, pageSize) => {
              // this.pageSize = pageSize;
              this.pagination.defaultCurrent = current;
              this.pagination.defaultPageSize = pageSize;
            },
          }},
        colums: [
            {
                title: '排名',
                customRender:(text,record,index) => 
                this.pagination ? `${(this.pagination.defaultCurrent-1)*(thi.pagination.defaultPageSize)+index+1}` :index+1
            },
            {
                title: '姓名',
                dataIndex:'uname'
            },
            {
                title: '分数',
                dataIndex:'score'
            }
            //...
        ],
        
    }
};


### Ant Design Table 组件实现 RowSpan 行合并功能 在 `ant-design` 的表格组件中,可以通过自定义渲染函数来实现行合并的效果。以下是详细的实现方法: #### 自定义配置中的 `customRender` 通过设置 `columns` 中的 `customRender` 属性,可以控制每一行的数据展示方式。如果需要实现跨行显示,则可以在 `customRender` 函数中动态调整 `rowSpan` 和 `colSpan` 值。 以下是一个完整的代码示例[^2]: ```javascript const columns = [ { title: '主营单位', key: 'mainDept', dataIndex: 'mainDept', align: 'center', customRender: (value, row, index) => { const obj = { children: value, attrs: {} }; // 合并第3行到第4行 if (index === 2) { obj.attrs.rowSpan = 2; } // 被合并的单元格不显示 if ([3].includes(index)) { obj.attrs.rowSpan = 0; } return obj; }, }, ]; const data = [ { key: '1', mainDept: '部门A' }, { key: '2', mainDept: '部门B' }, { key: '3', mainDept: '部门C' }, { key: '4', mainDept: '' }, // 此处为空字符串,因为被上一行合并 { key: '5', mainDept: '部门D' }, ]; ``` 上述代码实现了将第三行和第四行的内容进行合并。具体逻辑如下: -索引为 `2` 时,设置其 `rowSpan=2`,表示该单元格向下扩展两行。 - 对于索引为 `3` 的行,将其 `rowSpan=0`,从而隐藏此单元格内容。 #### 动态计算合并规则 对于更复杂的场景(如根据数据动态决定哪些行需要合并),可以预先处理数据数组,在其中添加额外字段用于标记是否参与合并。例如: ```javascript // 数据预处理阶段 let prevValue = null; data.forEach((item, index) => { if (prevValue !== item.mainDept && !prevValue) { item.isMergedStart = true; // 标记当前行为合并起始位置 } else { item.isMergedEnd = false; // 非起始位置则无需特殊标记 } prevValue = item.mainDept ? item.mainDept : ''; }); // 配置更新 { title: '主营单位', key: 'mainDept', dataIndex: 'mainDept', align: 'center', customRender: (value, row, index) => { const obj = { children: value, attrs: {} }; if (row.isMergedStart) { let count = 1; while (data[index + count]?.mainDept === value) { count++; } obj.attrs.rowSpan = count; } else { obj.attrs.rowSpan = 0; } return obj; }, } ``` 这段代码会自动检测连续相同的值,并对其进行跨行操作。 --- ### 导出 Excel 文件支持样式定制 当需要导出带有特定样式的 Excel 文件时,可借助第三方库(如 `xlsx` 或 `file-saver`)。由于 `ant-design-vue` 不直接提供样式化导出功能,因此需手动构建 Excel 工作簿对象[^1]。 以下是一个简单的导出示例: ```javascript import XLSX from 'xlsx'; import FileSaver from 'file-saver'; function exportTableToExcel(tableID, filename = 'exported_table') { const tableElm = document.getElementById(tableID); const wb = XLSX.utils.table_to_book(tableElm); // 添加样式或其他自定义逻辑... const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'array' }); try { FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), `${filename}.xlsx`); } catch (e) { console.error(e); } } // 使用方法 exportTableToExcel('your-table-id'); ``` 以上代码能够捕获指定 DOM 元素内的 HTML 结构并转换成 Excel 文件下载。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值