import { useState, useMemo } from 'react';
import { Table, Form, Row, Col, Input, Button, message } from 'antd';
import { PlusOutlined, PlusCircleOutlined } from '@ant-design/icons';
import TitleCard from '@components/TitleCard';
import st from './index.module.scss';
export default function NotAddedUsersCard({ notAddedUsers, setNotAddedUsers, setAddedUsers }) {
const [form] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [selectedRows, setSelectedRows] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [searchValues, setSearchValues] = useState({
accountNum: '',
nickName: '',
});
const filteredData = useMemo(() => {
return notAddedUsers.filter((user) => {
const matchAccountNum = searchValues.accountNum ? user.accountNum?.includes(searchValues.accountNum) : true;
const matchNickName = searchValues.nickName ? user.nickName?.includes(searchValues.nickName) : true;
return matchAccountNum && matchNickName;
});
}, [notAddedUsers, searchValues]);
const handleAdd = (record) => {
setNotAddedUsers((draft) => {
const index = draft.findIndex((user) => user.accountId === record.accountId);
if (index > -1) {
draft.splice(index, 1);
}
});
setAddedUsers((draft) => {
draft.push(record);
});
};
const handleBatchAdd = () => {
if (selectedRows.length === 0) {
message.warning('请至少选择一个用户');
return;
}
setNotAddedUsers((draft) => {
const selectedAccountIds = selectedRows.map((row) => row.accountId);
for (let i = draft.length - 1; i >= 0; i--) {
if (selectedAccountIds.includes(draft[i].accountId)) {
draft.splice(i, 1);
}
}
});
setAddedUsers((draft) => {
selectedRows.forEach((row) => {
draft.push(row);
});
});
setSelectedRowKeys([]);
setSelectedRows([]);
};
const columns = [
{
key: 'accountId',
title: '用户ID',
dataIndex: 'accountId',
},
{
key: 'accountNum',
title: '账号',
dataIndex: 'accountNum',
},
{
key: 'nickName',
title: '昵称',
dataIndex: 'nickName',
},
{
key: 'operation',
title: '操作',
render: (text, record) => <Button type='link' onClick={() => handleAdd(record)} icon={<PlusCircleOutlined />} />,
},
];
const onSearch = () => {
const values = form.getFieldsValue();
setSearchValues({
accountNum: values.accountNum || '',
nickName: values.nickName || '',
});
setCurrentPage(1);
};
const onReset = () => {
form.resetFields();
setSearchValues({
accountNum: '',
nickName: '',
});
setCurrentPage(1);
};
const onSelectChange = (newSelectedRowKeys, selectedRows) => {
setSelectedRowKeys(newSelectedRowKeys);
setSelectedRows(selectedRows);
};
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
};
return (
<TitleCard
title='添加用户到用户组'
titleTip='从系统用户中选择需要添加到当前用户组的成员'
actionBtnTxt='批量添加'
type='primary'
btnIcon={<PlusOutlined />}
actionBtnClick={handleBatchAdd}
>
<Form form={form} labelWrap labelAlign='left'>
<Row gutter={24}>
<Col span={12}>
<Form.Item label='账号' name='accountNum'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item label='昵称' name='nickName'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={24} className={st.operations}>
<Button onClick={onReset}>重置</Button>
<Button type='primary' onClick={onSearch}>
查询
</Button>
</Col>
</Row>
</Form>
<Table
columns={columns}
dataSource={filteredData}
rowKey='accountId'
pagination={{
showSizeChanger: true,
pageSize,
total: filteredData.length,
showTotal: (total) => `共${total}条`,
position: ['bottomCenter'],
size: 'default',
current: currentPage,
onChange: (page, size) => {
setCurrentPage(page);
setPageSize(size);
},
showQuickJumper: true,
}}
rowSelection={rowSelection}
scroll={{ y: 'calc(100vh - 40.3rem)' }}
/>
</TitleCard>
);
}import { useState, useMemo } from 'react';
import { Table, Form, Row, Col, Input, Button, message } from 'antd';
import { PlusOutlined, PlusCircleOutlined } from '@ant-design/icons';
import TitleCard from '@components/TitleCard';
import st from './index.module.scss';
export default function NotAddedUsersCard({ notAddedUsers, setNotAddedUsers, setAddedUsers }) {
const [form] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [selectedRows, setSelectedRows] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [searchValues, setSearchValues] = useState({
accountNum: '',
nickName: '',
});
const filteredData = useMemo(() => {
return notAddedUsers.filter((user) => {
const matchAccountNum = searchValues.accountNum ? user.accountNum?.includes(searchValues.accountNum) : true;
const matchNickName = searchValues.nickName ? user.nickName?.includes(searchValues.nickName) : true;
return matchAccountNum && matchNickName;
});
}, [notAddedUsers, searchValues]);
const handleAdd = (record) => {
setNotAddedUsers((draft) => {
const index = draft.findIndex((user) => user.accountId === record.accountId);
if (index > -1) {
draft.splice(index, 1);
}
});
setAddedUsers((draft) => {
draft.push(record);
});
};
const handleBatchAdd = () => {
if (selectedRows.length === 0) {
message.warning('请至少选择一个用户');
return;
}
setNotAddedUsers((draft) => {
const selectedAccountIds = selectedRows.map((row) => row.accountId);
for (let i = draft.length - 1; i >= 0; i--) {
if (selectedAccountIds.includes(draft[i].accountId)) {
draft.splice(i, 1);
}
}
});
setAddedUsers((draft) => {
selectedRows.forEach((row) => {
draft.push(row);
});
});
setSelectedRowKeys([]);
setSelectedRows([]);
};
const columns = [
{
key: 'accountId',
title: '用户ID',
dataIndex: 'accountId',
},
{
key: 'accountNum',
title: '账号',
dataIndex: 'accountNum',
},
{
key: 'nickName',
title: '昵称',
dataIndex: 'nickName',
},
{
key: 'operation',
title: '操作',
render: (text, record) => <Button type='link' onClick={() => handleAdd(record)} icon={<PlusCircleOutlined />} />,
},
];
const onSearch = () => {
const values = form.getFieldsValue();
setSearchValues({
accountNum: values.accountNum || '',
nickName: values.nickName || '',
});
setCurrentPage(1);
};
const onReset = () => {
form.resetFields();
setSearchValues({
accountNum: '',
nickName: '',
});
setCurrentPage(1);
};
const onSelectChange = (newSelectedRowKeys, selectedRows) => {
setSelectedRowKeys(newSelectedRowKeys);
setSelectedRows(selectedRows);
};
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
};
return (
<TitleCard
title='添加用户到用户组'
titleTip='从系统用户中选择需要添加到当前用户组的成员'
actionBtnTxt='批量添加'
type='primary'
btnIcon={<PlusOutlined />}
actionBtnClick={handleBatchAdd}
>
<Form form={form} labelWrap labelAlign='left'>
<Row gutter={24}>
<Col span={12}>
<Form.Item label='账号' name='accountNum'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item label='昵称' name='nickName'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={24} className={st.operations}>
<Button onClick={onReset}>重置</Button>
<Button type='primary' onClick={onSearch}>
查询
</Button>
</Col>
</Row>
</Form>
<Table
columns={columns}
dataSource={filteredData}
rowKey='accountId'
pagination={{
showSizeChanger: true,
pageSize,
total: filteredData.length,
showTotal: (total) => `共${total}条`,
position: ['bottomCenter'],
size: 'default',
current: currentPage,
onChange: (page, size) => {
setCurrentPage(page);
setPageSize(size);
},
showQuickJumper: true,
}}
rowSelection={rowSelection}
scroll={{ y: 'calc(100vh - 40.3rem)' }}
/>
</TitleCard>
);
}import { useState, useMemo } from 'react';
import { Table, Form, Row, Col, Input, Button, message } from 'antd';
import { PlusOutlined, PlusCircleOutlined } from '@ant-design/icons';
import TitleCard from '@components/TitleCard';
import st from './index.module.scss';
export default function NotAddedUsersCard({ notAddedUsers, setNotAddedUsers, setAddedUsers }) {
const [form] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [selectedRows, setSelectedRows] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [searchValues, setSearchValues] = useState({
accountNum: '',
nickName: '',
});
const filteredData = useMemo(() => {
return notAddedUsers.filter((user) => {
const matchAccountNum = searchValues.accountNum ? user.accountNum?.includes(searchValues.accountNum) : true;
const matchNickName = searchValues.nickName ? user.nickName?.includes(searchValues.nickName) : true;
return matchAccountNum && matchNickName;
});
}, [notAddedUsers, searchValues]);
const handleAdd = (record) => {
setNotAddedUsers((draft) => {
const index = draft.findIndex((user) => user.accountId === record.accountId);
if (index > -1) {
draft.splice(index, 1);
}
});
setAddedUsers((draft) => {
draft.push(record);
});
};
const handleBatchAdd = () => {
if (selectedRows.length === 0) {
message.warning('请至少选择一个用户');
return;
}
setNotAddedUsers((draft) => {
const selectedAccountIds = selectedRows.map((row) => row.accountId);
for (let i = draft.length - 1; i >= 0; i--) {
if (selectedAccountIds.includes(draft[i].accountId)) {
draft.splice(i, 1);
}
}
});
setAddedUsers((draft) => {
selectedRows.forEach((row) => {
draft.push(row);
});
});
setSelectedRowKeys([]);
setSelectedRows([]);
};
const columns = [
{
key: 'accountId',
title: '用户ID',
dataIndex: 'accountId',
},
{
key: 'accountNum',
title: '账号',
dataIndex: 'accountNum',
},
{
key: 'nickName',
title: '昵称',
dataIndex: 'nickName',
},
{
key: 'operation',
title: '操作',
render: (text, record) => <Button type='link' onClick={() => handleAdd(record)} icon={<PlusCircleOutlined />} />,
},
];
const onSearch = () => {
const values = form.getFieldsValue();
setSearchValues({
accountNum: values.accountNum || '',
nickName: values.nickName || '',
});
setCurrentPage(1);
};
const onReset = () => {
form.resetFields();
setSearchValues({
accountNum: '',
nickName: '',
});
setCurrentPage(1);
};
const onSelectChange = (newSelectedRowKeys, selectedRows) => {
setSelectedRowKeys(newSelectedRowKeys);
setSelectedRows(selectedRows);
};
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
};
return (
<TitleCard
title='添加用户到用户组'
titleTip='从系统用户中选择需要添加到当前用户组的成员'
actionBtnTxt='批量添加'
type='primary'
btnIcon={<PlusOutlined />}
actionBtnClick={handleBatchAdd}
>
<Form form={form} labelWrap labelAlign='left'>
<Row gutter={24}>
<Col span={12}>
<Form.Item label='账号' name='accountNum'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item label='昵称' name='nickName'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={24} className={st.operations}>
<Button onClick={onReset}>重置</Button>
<Button type='primary' onClick={onSearch}>
查询
</Button>
</Col>
</Row>
</Form>
<Table
columns={columns}
dataSource={filteredData}
rowKey='accountId'
pagination={{
showSizeChanger: true,
pageSize,
total: filteredData.length,
showTotal: (total) => `共${total}条`,
position: ['bottomCenter'],
size: 'default',
current: currentPage,
onChange: (page, size) => {
setCurrentPage(page);
setPageSize(size);
},
showQuickJumper: true,
}}
rowSelection={rowSelection}
scroll={{ y: 'calc(100vh - 40.3rem)' }}
/>
</TitleCard>
);
}
import { useState, useMemo } from 'react';
import { Table, Form, Row, Col, Input, Button, message } from 'antd';
import { PlusOutlined, PlusCircleOutlined } from '@ant-design/icons';
import TitleCard from '@components/TitleCard';
import st from './index.module.scss';
export default function NotAddedUsersCard({ notAddedUsers, setNotAddedUsers, setAddedUsers }) {
const [form] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [selectedRows, setSelectedRows] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [searchValues, setSearchValues] = useState({
accountNum: '',
nickName: '',
});
const filteredData = useMemo(() => {
return notAddedUsers.filter((user) => {
const matchAccountNum = searchValues.accountNum ? user.accountNum?.includes(searchValues.accountNum) : true;
const matchNickName = searchValues.nickName ? user.nickName?.includes(searchValues.nickName) : true;
return matchAccountNum && matchNickName;
});
}, [notAddedUsers, searchValues]);
const handleAdd = (record) => {
setNotAddedUsers((draft) => {
const index = draft.findIndex((user) => user.accountId === record.accountId);
if (index > -1) {
draft.splice(index, 1);
}
});
setAddedUsers((draft) => {
draft.push(record);
});
};
const handleBatchAdd = () => {
if (selectedRows.length === 0) {
message.warning('请至少选择一个用户');
return;
}
setNotAddedUsers((draft) => {
const selectedAccountIds = selectedRows.map((row) => row.accountId);
for (let i = draft.length - 1; i >= 0; i--) {
if (selectedAccountIds.includes(draft[i].accountId)) {
draft.splice(i, 1);
}
}
});
setAddedUsers((draft) => {
selectedRows.forEach((row) => {
draft.push(row);
});
});
setSelectedRowKeys([]);
setSelectedRows([]);
};
const columns = [
{
key: 'accountId',
title: '用户ID',
dataIndex: 'accountId',
},
{
key: 'accountNum',
title: '账号',
dataIndex: 'accountNum',
},
{
key: 'nickName',
title: '昵称',
dataIndex: 'nickName',
},
{
key: 'operation',
title: '操作',
render: (text, record) => <Button type='link' onClick={() => handleAdd(record)} icon={<PlusCircleOutlined />} />,
},
];
const onSearch = () => {
const values = form.getFieldsValue();
setSearchValues({
accountNum: values.accountNum || '',
nickName: values.nickName || '',
});
setCurrentPage(1);
};
const onReset = () => {
form.resetFields();
setSearchValues({
accountNum: '',
nickName: '',
});
setCurrentPage(1);
};
const onSelectChange = (newSelectedRowKeys, selectedRows) => {
setSelectedRowKeys(newSelectedRowKeys);
setSelectedRows(selectedRows);
};
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
};
return (
<TitleCard
title='添加用户到用户组'
titleTip='从系统用户中选择需要添加到当前用户组的成员'
actionBtnTxt='批量添加'
type='primary'
btnIcon={<PlusOutlined />}
actionBtnClick={handleBatchAdd}
>
<Form form={form} labelWrap labelAlign='left'>
<Row gutter={24}>
<Col span={12}>
<Form.Item label='账号' name='accountNum'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item label='昵称' name='nickName'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={24} className={st.operations}>
<Button onClick={onReset}>重置</Button>
<Button type='primary' onClick={onSearch}>
查询
</Button>
</Col>
</Row>
</Form>
<Table
columns={columns}
dataSource={filteredData}
rowKey='accountId'
pagination={{
showSizeChanger: true,
pageSize,
total: filteredData.length,
showTotal: (total) => `共${total}条`,
position: ['bottomCenter'],
size: 'default',
current: currentPage,
onChange: (page, size) => {
setCurrentPage(page);
setPageSize(size);
},
showQuickJumper: true,
}}
rowSelection={rowSelection}
scroll={{ y: 'calc(100vh - 40.3rem)' }}
/>
</TitleCard>
);
}
import { useState, useMemo } from 'react';
import { Table, Form, Row, Col, Input, Button, message } from 'antd';
import { PlusOutlined, PlusCircleOutlined } from '@ant-design/icons';
import TitleCard from '@components/TitleCard';
import st from './index.module.scss';
export default function NotAddedUsersCard({ notAddedUsers, setNotAddedUsers, setAddedUsers }) {
const [form] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [selectedRows, setSelectedRows] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [searchValues, setSearchValues] = useState({
accountNum: '',
nickName: '',
});
const filteredData = useMemo(() => {
return notAddedUsers.filter((user) => {
const matchAccountNum = searchValues.accountNum ? user.accountNum?.includes(searchValues.accountNum) : true;
const matchNickName = searchValues.nickName ? user.nickName?.includes(searchValues.nickName) : true;
return matchAccountNum && matchNickName;
});
}, [notAddedUsers, searchValues]);
const handleAdd = (record) => {
setNotAddedUsers((draft) => {
const index = draft.findIndex((user) => user.accountId === record.accountId);
if (index > -1) {
draft.splice(index, 1);
}
});
setAddedUsers((draft) => {
draft.push(record);
});
};
const handleBatchAdd = () => {
if (selectedRows.length === 0) {
message.warning('请至少选择一个用户');
return;
}
setNotAddedUsers((draft) => {
const selectedAccountIds = selectedRows.map((row) => row.accountId);
for (let i = draft.length - 1; i >= 0; i--) {
if (selectedAccountIds.includes(draft[i].accountId)) {
draft.splice(i, 1);
}
}
});
setAddedUsers((draft) => {
selectedRows.forEach((row) => {
draft.push(row);
});
});
setSelectedRowKeys([]);
setSelectedRows([]);
};
const columns = [
{
key: 'accountId',
title: '用户ID',
dataIndex: 'accountId',
},
{
key: 'accountNum',
title: '账号',
dataIndex: 'accountNum',
},
{
key: 'nickName',
title: '昵称',
dataIndex: 'nickName',
},
{
key: 'operation',
title: '操作',
render: (text, record) => <Button type='link' onClick={() => handleAdd(record)} icon={<PlusCircleOutlined />} />,
},
];
const onSearch = () => {
const values = form.getFieldsValue();
setSearchValues({
accountNum: values.accountNum || '',
nickName: values.nickName || '',
});
setCurrentPage(1);
};
const onReset = () => {
form.resetFields();
setSearchValues({
accountNum: '',
nickName: '',
});
setCurrentPage(1);
};
const onSelectChange = (newSelectedRowKeys, selectedRows) => {
setSelectedRowKeys(newSelectedRowKeys);
setSelectedRows(selectedRows);
};
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
};
return (
<TitleCard
title='添加用户到用户组'
titleTip='从系统用户中选择需要添加到当前用户组的成员'
actionBtnTxt='批量添加'
type='primary'
btnIcon={<PlusOutlined />}
actionBtnClick={handleBatchAdd}
>
<Form form={form} labelWrap labelAlign='left'>
<Row gutter={24}>
<Col span={12}>
<Form.Item label='账号' name='accountNum'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item label='昵称' name='nickName'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={24} className={st.operations}>
<Button onClick={onReset}>重置</Button>
<Button type='primary' onClick={onSearch}>
查询
</Button>
</Col>
</Row>
</Form>
<Table
columns={columns}
dataSource={filteredData}
rowKey='accountId'
pagination={{
showSizeChanger: true,
pageSize,
total: filteredData.length,
showTotal: (total) => `共${total}条`,
position: ['bottomCenter'],
size: 'default',
current: currentPage,
onChange: (page, size) => {
setCurrentPage(page);
setPageSize(size);
},
showQuickJumper: true,
}}
rowSelection={rowSelection}
scroll={{ y: 'calc(100vh - 40.3rem)' }}
/>
</TitleCard>
);
}
import { useState, useMemo } from 'react';
import { Table, Form, Row, Col, Input, Button, message } from 'antd';
import { PlusOutlined, PlusCircleOutlined } from '@ant-design/icons';
import TitleCard from '@components/TitleCard';
import st from './index.module.scss';
export default function NotAddedUsersCard({ notAddedUsers, setNotAddedUsers, setAddedUsers }) {
const [form] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [selectedRows, setSelectedRows] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [searchValues, setSearchValues] = useState({
accountNum: '',
nickName: '',
});
const filteredData = useMemo(() => {
return notAddedUsers.filter((user) => {
const matchAccountNum = searchValues.accountNum ? user.accountNum?.includes(searchValues.accountNum) : true;
const matchNickName = searchValues.nickName ? user.nickName?.includes(searchValues.nickName) : true;
return matchAccountNum && matchNickName;
});
}, [notAddedUsers, searchValues]);
const handleAdd = (record) => {
setNotAddedUsers((draft) => {
const index = draft.findIndex((user) => user.accountId === record.accountId);
if (index > -1) {
draft.splice(index, 1);
}
});
setAddedUsers((draft) => {
draft.push(record);
});
};
const handleBatchAdd = () => {
if (selectedRows.length === 0) {
message.warning('请至少选择一个用户');
return;
}
setNotAddedUsers((draft) => {
const selectedAccountIds = selectedRows.map((row) => row.accountId);
for (let i = draft.length - 1; i >= 0; i--) {
if (selectedAccountIds.includes(draft[i].accountId)) {
draft.splice(i, 1);
}
}
});
setAddedUsers((draft) => {
selectedRows.forEach((row) => {
draft.push(row);
});
});
setSelectedRowKeys([]);
setSelectedRows([]);
};
const columns = [
{
key: 'accountId',
title: '用户ID',
dataIndex: 'accountId',
},
{
key: 'accountNum',
title: '账号',
dataIndex: 'accountNum',
},
{
key: 'nickName',
title: '昵称',
dataIndex: 'nickName',
},
{
key: 'operation',
title: '操作',
render: (text, record) => <Button type='link' onClick={() => handleAdd(record)} icon={<PlusCircleOutlined />} />,
},
];
const onSearch = () => {
const values = form.getFieldsValue();
setSearchValues({
accountNum: values.accountNum || '',
nickName: values.nickName || '',
});
setCurrentPage(1);
};
const onReset = () => {
form.resetFields();
setSearchValues({
accountNum: '',
nickName: '',
});
setCurrentPage(1);
};
const onSelectChange = (newSelectedRowKeys, selectedRows) => {
setSelectedRowKeys(newSelectedRowKeys);
setSelectedRows(selectedRows);
};
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
};
return (
<TitleCard
title='添加用户到用户组'
titleTip='从系统用户中选择需要添加到当前用户组的成员'
actionBtnTxt='批量添加'
type='primary'
btnIcon={<PlusOutlined />}
actionBtnClick={handleBatchAdd}
>
<Form form={form} labelWrap labelAlign='left'>
<Row gutter={24}>
<Col span={12}>
<Form.Item label='账号' name='accountNum'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item label='昵称' name='nickName'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={24} className={st.operations}>
<Button onClick={onReset}>重置</Button>
<Button type='primary' onClick={onSearch}>
查询
</Button>
</Col>
</Row>
</Form>
<Table
columns={columns}
dataSource={filteredData}
rowKey='accountId'
pagination={{
showSizeChanger: true,
pageSize,
total: filteredData.length,
showTotal: (total) => `共${total}条`,
position: ['bottomCenter'],
size: 'default',
current: currentPage,
onChange: (page, size) => {
setCurrentPage(page);
setPageSize(size);
},
showQuickJumper: true,
}}
rowSelection={rowSelection}
scroll={{ y: 'calc(100vh - 40.3rem)' }}
/>
</TitleCard>
);
}
import { useState, useMemo } from 'react';
import { Table, Form, Row, Col, Input, Button, message } from 'antd';
import { PlusOutlined, PlusCircleOutlined } from '@ant-design/icons';
import TitleCard from '@components/TitleCard';
import st from './index.module.scss';
export default function NotAddedUsersCard({ notAddedUsers, setNotAddedUsers, setAddedUsers }) {
const [form] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [selectedRows, setSelectedRows] = useState([]);
const [currentPage, setCurrentPage] = useState(1);
const [pageSize, setPageSize] = useState(10);
const [searchValues, setSearchValues] = useState({
accountNum: '',
nickName: '',
});
const filteredData = useMemo(() => {
return notAddedUsers.filter((user) => {
const matchAccountNum = searchValues.accountNum ? user.accountNum?.includes(searchValues.accountNum) : true;
const matchNickName = searchValues.nickName ? user.nickName?.includes(searchValues.nickName) : true;
return matchAccountNum && matchNickName;
});
}, [notAddedUsers, searchValues]);
const handleAdd = (record) => {
setNotAddedUsers((draft) => {
const index = draft.findIndex((user) => user.accountId === record.accountId);
if (index > -1) {
draft.splice(index, 1);
}
});
setAddedUsers((draft) => {
draft.push(record);
});
};
const handleBatchAdd = () => {
if (selectedRows.length === 0) {
message.warning('请至少选择一个用户');
return;
}
setNotAddedUsers((draft) => {
const selectedAccountIds = selectedRows.map((row) => row.accountId);
for (let i = draft.length - 1; i >= 0; i--) {
if (selectedAccountIds.includes(draft[i].accountId)) {
draft.splice(i, 1);
}
}
});
setAddedUsers((draft) => {
selectedRows.forEach((row) => {
draft.push(row);
});
});
setSelectedRowKeys([]);
setSelectedRows([]);
};
const columns = [
{
key: 'accountId',
title: '用户ID',
dataIndex: 'accountId',
},
{
key: 'accountNum',
title: '账号',
dataIndex: 'accountNum',
},
{
key: 'nickName',
title: '昵称',
dataIndex: 'nickName',
},
{
key: 'operation',
title: '操作',
render: (text, record) => <Button type='link' onClick={() => handleAdd(record)} icon={<PlusCircleOutlined />} />,
},
];
const onSearch = () => {
const values = form.getFieldsValue();
setSearchValues({
accountNum: values.accountNum || '',
nickName: values.nickName || '',
});
setCurrentPage(1);
};
const onReset = () => {
form.resetFields();
setSearchValues({
accountNum: '',
nickName: '',
});
setCurrentPage(1);
};
const onSelectChange = (newSelectedRowKeys, selectedRows) => {
setSelectedRowKeys(newSelectedRowKeys);
setSelectedRows(selectedRows);
};
const rowSelection = {
selectedRowKeys,
onChange: onSelectChange,
};
return (
<TitleCard
title='添加用户到用户组'
titleTip='从系统用户中选择需要添加到当前用户组的成员'
actionBtnTxt='批量添加'
type='primary'
btnIcon={<PlusOutlined />}
actionBtnClick={handleBatchAdd}
>
<Form form={form} labelWrap labelAlign='left'>
<Row gutter={24}>
<Col span={12}>
<Form.Item label='账号' name='accountNum'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={12}>
<Form.Item label='昵称' name='nickName'>
<Input allowClear placeholder='请输入' />
</Form.Item>
</Col>
<Col span={24} className={st.operations}>
<Button onClick={onReset}>重置</Button>
<Button type='primary' onClick={onSearch}>
查询
</Button>
</Col>
</Row>
</Form>
<Table
columns={columns}
dataSource={filteredData}
rowKey='accountId'
pagination={{
showSizeChanger: true,
pageSize,
total: filteredData.length,
showTotal: (total) => `共${total}条`,
position: ['bottomCenter'],
size: 'default',
current: currentPage,
onChange: (page, size) => {
setCurrentPage(page);
setPageSize(size);
},
showQuickJumper: true,
}}
rowSelection={rowSelection}
scroll={{ y: 'calc(100vh - 40.3rem)' }}
/>
</TitleCard>
);
}你需要把里面的中文都提取出来(注释内的不需要),每一个都作为object的key,对应的value是一个数组,数组第一个元素和key相同,第二个元素是key翻译出来的英文,直接给结果 (不要遗漏中文,我发现你前几次会遗漏中文) ,再给这个文件加上import { useTranslation } from 'react-i18next’;(加在文件顶部)
const {
t,
i18n: { language },
} = useTranslation();(要加在组件内)不要增减注释,每个中文要用t('')包裹起来,中文中间有变量的,要把变量前后的中文分别用t('')包裹起来,直接给结果,我需要的两种结果分开给我