基础表格 BaseList
BaseList 是一个基于 rc-table 的查询表格,可复用的基础列表组件,集成了查询表单、功能操作区、分页、多选操作等常见数据展示功能。
✅ 表格 Demo 示例 (完整的增删改查)
- 示例
- 源码

import { Delete } from 'lucide-react';
import React, { useMemo, useRef, useState } from 'react';
import { BaseList } from '@itera-web/react-ui-baselist';
import { Button, Input, Modal, Space } from '@itera-web/react-ui-core';
import { FormControl, FormField, FormItem, FormLabel, FormMessage } from '@itera-web/react-ui-form';
import { Intl } from '@itera-web/utils-locale-toggle';
import { message } from '@itera-web/utils-message';
import { useGlobalStore } from '@/store';
import { requestDelUserById, requestUserList } from '@/services/user';
import UserManageSaveOrUpdateWrap from '../SaveOrUpdate/wrap';
import UserManageViewModal from '../View';
import styles from './index.scss';
function UserManage() {
const dict = useGlobalStore((state) => state.dict);
//列表组件方法
const ref = useRef();
const [localEditData, setLocalData] = useState({});
const [localViewData, setLocalViewData] = useState({});
const [saveVisible, setSaveVisible] = useState(false);
const [viewVisible, setViewVisible] = useState(false);
//搜索表单
const searchData = useRef([
{
key: 'account',
value: (
<FormField
name="account"
render={({ field }) => (
<FormItem>
<FormLabel>手机号</FormLabel>
<FormControl>
<Input {...field} placeholder="请输入手机号" />
</FormControl>
<FormMessage />
</FormItem>
)}
/>
),
defaultValue: '',
},
]);
//表头
const columns = useMemo(() => {
if (!dict || Object.keys(dict).length === 0) return [];
return [
{
title: '序号',
key: 'index',
fixed: 'left',
width: 80,
align: 'center',
customTh: <div>序号</div>,
render: (value) => value,
},
{
title: '基础信息',
key: 'base',
align: 'center',
children: [
{
title: '手机号',
key: 'mobile',
width: 160,
align: 'center',
render: (value) => value,
},
{
align: 'center',
title: '邀请码',
key: 'invite_code',
width: 200,
render: (value) => value,
},
],
},
{
align: 'center',
title: '状态',
width: 200,
fixed: 'right',
wrap: true,
key: 'status',
render: (value) => {
const txt = value;
const color = dict?.['SystemUserStatus']?.find?.((item) => item.value === txt)?.color || '';
const label = dict?.['SystemUserStatusMap']?.get?.(txt) || txt;
return <span className={color}>{label}</span>;
},
},
{
align: 'center',
title: '操作',
key: 'actions',
width: 200,
fixed: 'right',
wrap: true,
render: (_, record) => (
<Space center size={12}>
<Button color="primary" onClick={() => onEdit(record)} size="zero" variant="text">
{Intl.v('编辑')}
</Button>
<Button color="danger" onClick={() => onDelete(record)} size="zero" variant="text">
{Intl.v('删除')}
</Button>
<Button color="info" onClick={() => onView(record)} size="zero" variant="text">
{Intl.v('查看')}
</Button>
</Space>
),
},
];
}, [dict]);
//列头操作按钮
const optionButtonGroup = useRef([
<Button color="primary" key="save" onClick={onSave} variant="translucent">
{Intl.v('新增')}
</Button>,
<Button color="danger" key="del" onClick={onBatchDelete} variant="translucent">
{Intl.v('批量删除')}
</Button>,
]);
//查询列表数据
async function requestListData(params = {}, callback) {
const res = await requestUserList(params);
if (res?.code !== 200) {
res?.msg && message.warning(res?.msg);
callback?.(false);
return;
}
//将数据格式整理成 如下然后传入查询表格组件
const data = {
dataSource: res.data?.list?.map((item) => ({ ...item, id: item.uuid })) || [],
total: res.data?.total,
};
callback?.(data);
}
//删除
function onDelete(record) {
Modal.confirm({
title: `确认删除【${record?.mobile}】?`,
icon: <Delete />,
wrapClassName: 'centered-modal',
onOk: async () => {
const res = await requestDelUserById({ uuid: record.uuid });
if (res?.code !== 200) {
res?.msg && message.warning(res?.msg);
return;
}
//清理多选项
ref.current?.onChangeRowSelection(record.uuid);
message.success(res?.msg + record?.mobile);
//刷新列表
ref.current?.onSearch?.();
},
});
}
//批量删除
function onBatchDelete() {
const mobile = ref.current
?.state()
.selectedRows.map((item) => item.mobile)
.join(',');
const uuids = ref.current?.state().selectedRowKeys.join(',');
if (!mobile) {
message.warning('请先选择用户');
return;
}
Modal.confirm({
title: `确认删除【${mobile}】?`,
icon: <Delete />,
wrapClassName: 'centered-modal',
onOk: async () => {
const res = await requestDelUserById({
uuid: uuids,
});
if (res?.code !== 200) {
res?.msg && message.warning(res?.msg);
return;
}
//清理多选项
ref.current?.onChangeRowSelection(uuids);
message.success(res?.msg + mobile);
//刷新列表
ref.current?.onSearch?.();
},
});
}
//新增
function onSave() {
setLocalData({
data: null,
title: '新增用户',
});
onUserManageEditOpen();
}
//编辑
function onEdit(data) {
setLocalData({
data,
title: '编辑用户',
});
onUserManageEditOpen();
}
//查看
function onView(data) {
setLocalViewData({
data,
title: '查看用户信息',
});
onUserManageViewOpen();
}
//关闭编辑弹窗
function onUserManageEditCancel(isRefresh) {
setSaveVisible(false);
isRefresh && ref.current?.onSearch?.();
}
//打开编辑弹窗
function onUserManageEditOpen() {
setSaveVisible(true);
}
//关闭查看弹窗
function onUserManageViewCancel() {
setViewVisible(false);
}
//打开查看弹窗
function onUserManageViewOpen() {
setViewVisible(true);
}
return (
<div className={styles.UserManage}>
<BaseList
border
columns={columns} //表头
drag
isShowRowTitleName="mobile"
openRowSelection
optionButtonGroup={optionButtonGroup.current} //表头上方操作按钮
ref={ref}
searchParamList={searchData.current}
serviceFunc={requestListData} // 请求数据方法
/>
{/*新建编辑弹出层*/}
<UserManageSaveOrUpdateWrap {...localEditData} onCancel={onUserManageEditCancel} open={saveVisible} />
{/*查看弹出层*/}
<UserManageViewModal {...localViewData} onCancel={onUserManageViewCancel} open={viewVisible} />
</div>
);
}
export default UserManage;