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,
    },
]);

 效果:

### 实现 el-table 表头根据表单复选框动态增加功能 要在 Element UI 的 `el-table` 中通过表单复选框动态添加列,可以通过监听复选框的变化事件来更新表格的配置数据结构。以下是具体实现方式: #### 动态管理表格列的核心逻辑 1. **定义初始列配置** 使用 Vue 数据绑定的方式维护一个数组变量(如 `columns`),该数组存储当前显示的所有列的信息。 2. **响应复选框变化** 当用户点击复选框时,触发回调函数修改 `columns` 数组的内容。如果复选框勾选,则向 `columns` 添加对应的新列;反之则移除对应的列。 3. **渲染表格组件** 利用 `v-for` 指令遍历 `columns` 数组,在模板中动态生成 `<el-table-column>` 组件。 --- #### 示例代码 以下是一个完整的示例代码片段,展示如何基于复选框状态动态调整 `el-table` 的列配置: ```vue <template> <div> <!-- 复选框区域 --> <el-checkbox v-model="showColumnA" @change="updateColumns">显示列 A</el-checkbox> <el-checkbox v-model="showColumnB" @change="updateColumns">显示列 B</el-checkbox> <!-- 表格区域 --> <el-table :data="tableData"> <el-table-column v-for="(column, index) in columns" :key="index" :prop="column.prop" :label="column.label"></el-table-column> </el-table> </div> </template> <script> export default { data() { return { showColumnA: true, showColumnB: false, tableData: [ { name: '张三', age: 25 }, { name: '李四', age: 30 } ], availableColumns: [ { prop: 'name', label: '姓名' }, // 默认固定列 { prop: 'age', label: '年龄' } // 可选项之一 ], columns: [{ prop: 'name', label: '姓名' }] // 初始化默认列 }; }, methods: { updateColumns() { const newColumns = []; // 始终保留固定的列 if (this.availableColumns[0]) { newColumns.push(this.availableColumns[0]); } // 根据复选框的状态决定是否加入额外列 if (this.showColumnA && this.availableColumns.includes({ prop: 'age', label: '年龄' })) { newColumns.push({ prop: 'age', label: '年龄' }); } // 更新视图中的列配置 this.columns = newColumns; } } }; </script> ``` 上述代码实现了如下功能: - 用户可以勾选或取消勾选复选框以控制特定列的显示与否。 - 表格会实时反映这些更改并重新渲染相应的列[^1]。 --- #### 关键点解析 1. **动态列的数据源** 定义了一个名为 `availableColumns` 的数组作为所有可能列的集合,并从中筛选出需要显示的部分存入 `columns`。 2. **双向绑定与事件处理** - `v-model` 将复选框的状态绑定到布尔型变量上。 - 调用自定义方法 `updateColumns()` 来同步更新 `columns` 和实际界面。 3. **性能优化建议** 如果涉及大量列或者复杂操作场景下,考虑引入防抖机制减少不必要的 DOM 渲染开销。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值