a-table表头添加复选框勾选

该文章已生成可运行项目,

需求:表格表头添加复选框,每一行添加复选框,勾选数据时数据图表数据跟着变化

直接上代码 

<a-table :row-selection="rowSelection" :columns="columnList"
        :scroll="{ x: '100%', y: tableMaxHeight }" :row-key="(record) => record.id" 
             :data-source="tableData"
        bordered :pagination="false">
        <!-- 自定义表头渲染 -->
        <template #headerCell="{ column, title }">
          <div v-if="
            column.dataIndex !== 'index' &&
            column.name !== '日期' 
          ">
            <a-checkbox v-model:checked="column.checkboxChecked" @change="handleHeaderCheckboxChange(column, title)" />
            {{ column.name || "--" }}
          </div>
          <div v-else>
            {{ column.name }}
          </div>
        </template>
        <template #bodyCell="{ text, record, index, column }">
          <template v-if="column.dataIndex === 'index'">
            <span>{{ getIndex(index) }}</span>
          </template>
          <template v-else>
            <span>{{
              getFieldValue(record, column.dataIndex, column, text) || "--"
            }}</span>
          </template>
        </template>
</a-table>

逻辑

//处理表头复选框
const handleHeaderCheckboxChange = (column) => {
   //表头选中的数据
  const filterHeader = columnList.filter((a) => a.checkboxChecked);
  .......
};
//行复选框
const rowSelection = reactive({
  selectedRowKeys: [], // 初始化选中的行的 key 数组
  selectedRows: [], // 初始化选中的行数据
  fixed: true,
  onChange: (selectedRowKeys, selectedRows) => {
    rowSelection.selectedRowKeys = selectedRowKeys;
    rowSelection.selectedRows = selectedRows;
  },
});
//添加序号  页码自定义
const getIndex = (index) => {
  const { pageNum, pageSize } = state.orderListQuery;
  if (!Number.isFinite(pageNum) || !Number.isFinite(pageSize)) {
    return "--";
  }
  return (pageNum - 1) * pageSize + index + 1;
};
//显示内容
const getFieldValue = (record, fieldId, column, text) => {
    //处理数据就行了
};

数据源模拟

const columnList= ref([
     {
         name: "序号",
         dataIndex: "index",
         align: "center",
         width: 100,
         fixed: "left",
     },
     {
         name: "日期",
         dataIndex: "date",
         key: "name",
         checkboxChecked: false, // 用于绑定表头 Checkbox 的状态
         align: "center",
     },
    {
        title: "姓名",
        dataIndex: "name",
        key: "name",
        checkboxChecked: false, // 用于绑定表头 Checkbox 的状态
        align: "center",
    },
    {
        title: "年龄",
        dataIndex: "age",
        key: "age",
        checkboxChecked: false,
        align: "center",
    },
]);

const tableData = ref([
    {
        key: "1",
        name: "张三",
        age: 28,
        checked: false, // 用于绑定行 Checkbox 的状态
    },
    {
        key: "2",
        name: "张三",
        age: 28,
        checked: false, // 用于绑定行 Checkbox 的状态
    },
    {
        key: "3",
        name: "李四",
        age: 32,
        checked: false,
    },
]);

 效果:

本文章已经生成可运行项目
在使用 `a-table` 组件时,若需要添加复选框功能,可以通过配置 `row-selection` 属性来实现。该属性允许用户通过勾选行来选择数据,并且可以监听选中状态的变化以执行后续操作。 ### 基本用法 在模板中使用 `a-table` 并绑定 `row-selection`: ```vue <template> <a-table :row-selection="rowSelection" :columns="columns" :data-source="dataSource" :row-key="record => record.id" /> </template> ``` 在脚本中定义 `rowSelection` 和相关方法: ```javascript <script> export default { data() { return { selectedRowKeys: [], // 存储选中的行 key dataSource: [ { id: '1', name: '张三' }, { id: '2', name: '李四' }, { id: '3', name: '王五' } ], columns: [ { title: 'ID', dataIndex: 'id', key: 'id' }, { title: '姓名', dataIndex: 'name', key: 'name' } ] }; }, computed: { rowSelection() { return { selectedRowKeys: this.selectedRowKeys, onChange: (selectedRowKeys, selectedRows) => { this.selectedRowKeys = selectedRowKeys; console.log('选中的行 keys:', selectedRowKeys); console.log('选中的行数据:', selectedRows); } }; } } }; </script> ``` ### 自定义表头复选框 如果需要在表头也显示一个复选框用于全选或取消全选操作,可以使用 `headerCell` 插槽来自定义渲染内容: ```vue <template #headerCell="{ column }"> <div v-if="column.key === 'selection'"> <a-checkbox :checked="isAllSelected" :indeterminate="isIndeterminate" @change="onSelectAllChange" /> </div> <div v-else>{{ column.title }}</div> </template> ``` 在 `methods` 中定义处理函数: ```javascript methods: { onSelectAllChange(e) { const checked = e.target.checked; this.selectedRowKeys = checked ? this.dataSource.map(item => item.id) : []; } }, computed: { isAllSelected() { return this.selectedRowKeys.length === this.dataSource.length; }, isIndeterminate() { return this.selectedRowKeys.length > 0 && !this.isAllSelected; } } ``` 以上代码展示了如何在 `a-table` 中添加复选框功能,并对选中状态进行管理和响应[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值