react使用antd的table生成一个表格,columns包括财务组织,hr部门,是否默认,是否默认列为checkbox,是否默认这一列只能单选,如果数据的是否默认的值为1,则默认勾选
时间: 2024-10-16 18:22:24 浏览: 31
react-cron:基于react和antd完成的一个生成cron表达式的插件
在React中使用Ant Design的Table组件创建一个包含财务组织、HR部门和默认列的表格,你可以这样做:
首先,确保已经安装了`antd`库,然后按照以下步骤构建你的表格:
1. 导入必要的组件:
```jsx
import React, { useState } from 'react';
import { Table, FormattedMessage, Checkbox, Space } from 'antd';
```
2. 定义数据源和列配置:
```jsx
const data = [
// 假设你的数据结构如下
[
{ org: '财务部', dept: '财务组织', defaultChecked: true },
{ org: 'HR部', dept: 'HR部门', defaultChecked: false },
// 更多数据...
],
];
const columns = [
{
title: <FormattedMessage id="default" defaultMessage="是否默认" />,
dataIndex: 'defaultChecked',
key: 'defaultChecked',
width: 100, // 设置列宽度
render: (text, record) => (
<Checkbox
defaultChecked={record.defaultChecked} // 根据data中的值初始化默认选中状态
onChange={() => handleCheckboxChange(record.key)} // 当改变时触发处理函数
disabled={record.defaultChecked && !canOnlyOneChecked(record.key)} // 阻止复选框多选,只允许单选
/>
// 添加一个描述性的文本,如 `{'默认:{text}'}` 或者直接显示文字
<span>{text ? '默认' : ''}</span>
),
},
{ title: '财务组织', dataIndex: 'org', key: 'org' },
{ title: 'HR部门', dataIndex: 'dept', key: 'dept' },
];
```
3. 创建处理函数来控制默认选中和单选:
```jsx
const canOnlyOneChecked = (checkedKey) => {
const singleChecked = selectedRows.find(row => row.defaultChecked && row.key === checkedKey);
return Boolean(selectedRows.length > 1 || !singleChecked);
};
const handleCheckboxChange = (key) => {
// 更新选中状态,并检查是否满足单选条件
const newData = data.map((row) => ({ ...row, defaultChecked: key === row.key }));
setData(newData);
if (!canOnlyOneChecked(key)) {
// 如果不符合单选规则,取消其他行的默认选中
newData.forEach((row) => {
if (row.key !== key && row.defaultChecked) {
row.defaultChecked = false;
}
});
}
// 假设selectedRows是你保存已选行的地方,可以在这里更新
setSelectedRows([...selectedRows, { key, defaultChecked: newData.find(row => row.key === key).defaultChecked }]);
};
```
4. 使用表格组件和状态管理(如useState)来展示数据:
```jsx
const [selectedRows, setSelectedRows] = useState([]);
// 初始化state
useEffect(() => {
setSelectedRows(data.map((row) => ({ key: row[0].key, defaultChecked: row[0].defaultChecked })));
}, []);
<Table columns={columns} dataSource={data} rowKey={(row) => row.key} onSelect={handleCheckboxChange} />
```
在这个例子中,`selectedRows`数组用于记录已选中的行,`handleCheckboxChange`负责处理默认选中和单选限制。当你点击checkbox时,它会根据`defaultChecked`值来自动勾选/取消勾选,并确保仅允许单行默认选中。
阅读全文