ant-design-vue的table组件的首列复选框设置问题,包括设置默认选中,设置禁选条件

想要使用表格的复选框列并控制复选框是否可选,先上代码如下

javascript 复制代码
html部分
  <a-table :rowKey="(record,index)=>{return record.id?record.id: index}"
      :columns="columns" :data-source="tableData"
             :row-selection="showSelection?rowSelection: null"
             :pagination="pagination">
      <template slot="isWarn" slot-scope="text">
        <span style="color: #D9001B;">{{ text==='1'?'预警': '未预警' }}</span>
      </template>
</a-table>

js部分
data() {
	return {
		showSelection: true,
		pagination: {
          total: 0,
          pageSize: 10, // 每页中显示10条数据
          showSizeChanger: true,
          showQuickJumper: true,
          current: 1,
          pageSizeOptions: ['10', '20', '50', '100'], // 每页中显示的数据
          // showTotal: (total) => `共有 ${total} 条数据`, // 分页中显示总的数据 this.$t('COMMON.INTER_TOTAL', { total }), //
          // showTotal: (total, range) => `共 ${total} 条记录,第${this.pagination.current}`,
          onChange: (pageNumber) => {
            this.pagination.current = pageNumber;
            this.getOrderListFn();
          },
          onShowSizeChange: (current, pageSize) => {
            this.pagination.pageSize = pageSize;
            this.pagination.current = 1;
            this.getOrderListFn();
          }
        },
        columns: [
	       	{
	           title: '是否预警',
	            dataIndex: 'isWarn',
	            key: 'isWarn',
	            scopedSlots: { customRender: 'isWarn' }
	          },
	          {
	           title: '状态',
	            dataIndex: 'checkState',
	            key: 'checkState'
	          }
        ],
        tableData: [
        	{
				id: 1,
				checkState: null,
				isWarn: '1'
			},
			{
				id: 2,
				checkState: 1,
				isWarn: '0'
			},
			{
				id: 3,
				checkState: null,
				isWarn: '2'
			}
		],
	}
},
computed: {
	rowSelection() {
        return {
          onChange: (selectedRowKeys, selectedRows) => {
            console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
            this.selectedRowKeys = selectedRowKeys;
          },
          getCheckboxProps: (record) => ({
            props: {
              disabled: !record.checkState, // 禁选的条件
            }
          }),
          selectedRowKeys: this.selectedRowKeys,// 可以通过给this.selectedRowKeys赋值来设置默认选中项,注意,如果有禁选条件,赋值时要把禁选的给剔除掉
          // onSelectAll: (selected, selectedRows) => {
          //   // 重置全选状态,确保禁用的复选框不会被选中
          //   const newSelectedRows = selectedRows.filter(row => !row.checkState||!row.sendState);
          //   console.log('newSelectedRows', newSelectedRows);
          //   return newSelectedRows
          //   // 其余逻辑保持不变
          // },
        };
      },
	}
注意的点如下

1、给表格设置rowKey时,尽量不用索引来设置,使用索引来设置会出现禁选项虽然禁选了,但是点击表头全选框的时候依然能被选中的情况,如下图

2、rowSelection写在computed里

3、有禁选项时,给表格行设置默认选中时需要把禁选的项给剔除掉

相关推荐
2401_844137575 分钟前
PHP智驭未来悦享生活智慧小区物业管理小程序系统源码
前端·微信·微信小程序·小程序·生活·微信开放平台
软件技术NINI18 分钟前
element实现动态路由+面包屑
前端·vue.js
加勒比海涛2 小时前
掌握 JavaScript ES6+:现代编程技巧与模块化实践
开发语言·javascript·es6
Zhen (Evan) Wang2 小时前
vs code: pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本
vue.js·vscode·npm·node.js·angular
爆更小小刘2 小时前
Python基础语法(2)
开发语言·前端·python
暴富暴富暴富啦啦啦2 小时前
el-table 的单元格 + 图表 + 排序
javascript·vue.js·elementui
前端小菜鸟也有人起2 小时前
ElementUI大坑Notification修改样式
android·前端·elementui
终末圆3 小时前
JDBC与MyBatis:数据库访问技术的变迁【后端 15】
前端·数据结构·数据库·后端·算法·mybatis·jdbc
花下的晚风3 小时前
Vue实用操作-2-如何使用网页开发者工具
前端·javascript·vue.js
安冬的码畜日常3 小时前
【D3.js in Action 3 精译_022】3.2 使用 D3 完成数据准备工作
前端·javascript·信息可视化·数据挖掘·数据可视化·d3.js