import React, { useState, useRef, useEffect } from 'react'; import { useIntl, FormattedMessage, useAccess } from '@umijs/max'; import { Card, Col, Dropdown, FormInstance, Row, Space, Switch } from 'antd'; import { Button, message, Modal } from 'antd'; import { ActionType, FooterToolbar, PageContainer, ProColumns, ProTable } from '@ant-design/pro-components'; import { PlusOutlined, DeleteOutlined, ExclamationCircleOutlined, DownOutlined, EditOutlined } from '@ant-design/icons'; import { getUserList, removeUser, addUser, updateUser, exportUser, getUser, changeUserStatus, updateAuthRole, resetUserPwd } from '@/services/system/user'; import UpdateForm from './edit'; import { getDictValueEnum } from '@/services/system/dict'; import { DataNode } from 'antd/es/tree'; import { getDeptTree } from '@/services/system/user'; import DeptTree from './components/DeptTree'; import ResetPwd from './components/ResetPwd'; import { getPostList } from '@/services/system/post'; import { getRoleList } from '@/services/system/role'; import AuthRoleForm from './components/AuthRole'; const { confirm } = Modal; /* * * * @author whiteshader@163.com * @datetime 2023/02/06 * * */ /** * 添加节点 * * @param fields */ const handleAdd = async (fields: API.System.User) => { const hide = message.loading('正在添加'); try { await addUser({ ...fields }); hide(); message.success('添加成功'); return true; } catch (error) { hide(); message.error('添加失败请重试!'); return false; } }; /** * 更新节点 * * @param fields */ const handleUpdate = async (fields: API.System.User) => { const hide = message.loading('正在配置'); try { await updateUser(fields); hide(); message.success('配置成功'); return true; } catch (error) { hide(); message.error('配置失败请重试!'); return false; } }; /** * 删除节点 * * @param selectedRows */ const handleRemove = async (selectedRows: API.System.User[]) => { const hide = message.loading('正在删除'); if (!selectedRows) return true; try { await removeUser(selectedRows.map((row) => row.userId).join(',')); hide(); message.success('删除成功,即将刷新'); return true; } catch (error) { hide(); message.error('删除失败,请重试'); return false; } }; const handleRemoveOne = async (selectedRow: API.System.User) => { const hide = message.loading('正在删除'); if (!selectedRow) return true; try { const params = [selectedRow.userId]; await removeUser(params.join(',')); hide(); message.success('删除成功,即将刷新'); return true; } catch (error) { hide(); message.error('删除失败,请重试'); return false; } }; /** * 导出数据 * * */ const handleExport = async () => { const hide = message.loading('正在导出'); try { await exportUser(); hide(); message.success('导出成功'); return true; } catch (error) { hide(); message.error('导出失败,请重试'); return false; } }; const UserTableList: React.FC = () => { const [messageApi, contextHolder] = message.useMessage(); const formTableRef = useRef(); const [modalVisible, setModalVisible] = useState(false); const [resetPwdModalVisible, setResetPwdModalVisible] = useState(false); const [authRoleModalVisible, setAuthRoleModalVisible] = useState(false); const actionRef = useRef(); const [currentRow, setCurrentRow] = useState(); const [selectedRows, setSelectedRows] = useState([]); const [selectDept, setSelectDept] = useState({ id: 0 }); const [sexOptions, setSexOptions] = useState([]); const [statusOptions, setStatusOptions] = useState([]); const [postIds, setPostIds] = useState(); const [postList, setPostList] = useState(); const [roleIds, setRoleIds] = useState(); const [roleList, setRoleList] = useState(); const [deptTree, setDeptTree] = useState(); const access = useAccess(); /** 国际化配置 */ const intl = useIntl(); useEffect(() => { getDictValueEnum('sys_user_sex').then((data) => { setSexOptions(data); }); getDictValueEnum('sys_normal_disable').then((data) => { setStatusOptions(data); }); }, []); const showChangeStatusConfirm = (record: API.System.User) => { let text = record.status === "1" ? "启用" : "停用"; const newStatus = record.status === '0' ? '1' : '0'; confirm({ title: `确认要${text}${record.userName}用户吗?`, onOk() { changeUserStatus(record.userId, newStatus).then(resp => { if (resp.code === 200) { messageApi.open({ type: 'success', content: '更新成功!', }); actionRef.current?.reload(); } else { messageApi.open({ type: 'error', content: '更新失败!', }); } }); }, }); }; const fetchUserInfo = async (userId: number) => { const res = await getUser(userId); setPostIds(res.postIds); setPostList( res.posts.map((item: any) => { return { value: item.postId, label: item.postName, }; }), ); setRoleIds(res.roleIds); setRoleList( res.roles.map((item: any) => { return { value: item.roleId, label: item.roleName, }; }), ); }; const columns: ProColumns[] = [ { title: , dataIndex: 'deptId', valueType: 'text', }, { title: , dataIndex: 'userName', valueType: 'text', }, { title: , dataIndex: 'nickName', valueType: 'text', }, { title: , dataIndex: ['dept', 'deptName'], valueType: 'text', hideInSearch: true }, { title: , dataIndex: 'phonenumber', valueType: 'text', }, { title: , dataIndex: 'status', valueType: 'select', valueEnum: statusOptions, render: (_, record) => { return ( showChangeStatusConfirm(record)} />) }, }, { title: , dataIndex: 'option', width: '220px', valueType: 'option', render: (_, record) => [ , , , key: 'reset', disabled: !access.hasPerms('system:user:edit.tsx'), }, { label: '分配角色', key: 'authRole', disabled: !access.hasPerms('system:user:edit.tsx'), }, ], onClick: ({ key }) => { if (key === 'reset') { setResetPwdModalVisible(true); setCurrentRow(record); } else if (key === 'authRole') { fetchUserInfo(record.userId); setAuthRoleModalVisible(true); setCurrentRow(record); } } }} > e.preventDefault()}> 更多 , ], }, ]; return ( {contextHolder} { setSelectDept(value); if (actionRef.current) { formTableRef?.current?.submit(); } }} /> headerTitle={intl.formatMessage({ id: 'pages.searchTable.title', defaultMessage: '信息', })} actionRef={actionRef} formRef={formTableRef} rowKey="userId" key="userList" search={{ labelWidth: 120, }} toolBarRender={() => [ , , , ]} request={(params) => getUserList({ ...params, deptId: selectDept.id } as API.System.UserListParams).then((res) => { const result = { data: res.rows, total: res.total, success: true, }; return result; }) } columns={columns} rowSelection={{ onChange: (_, selectedRows) => { setSelectedRows(selectedRows); }, }} /> {selectedRows?.length > 0 && ( {selectedRows.length} } > )} { let success = false; if (values.userId) { success = await handleUpdate({ ...values } as API.System.User); } else { success = await handleAdd({ ...values } as API.System.User); } if (success) { setModalVisible(false); setCurrentRow(undefined); if (actionRef.current) { actionRef.current.reload(); } } }} onCancel={() => { setModalVisible(false); setCurrentRow(undefined); }} open={modalVisible} values={currentRow || {}} sexOptions={sexOptions} statusOptions={statusOptions} posts={postList || []} postIds={postIds || []} roles={roleList || []} roleIds={roleIds || []} depts={deptTree || []} /> { const success = await resetUserPwd(values.userId, values.password); if (success) { setResetPwdModalVisible(false); setSelectedRows([]); setCurrentRow(undefined); message.success('密码重置成功。'); } }} onCancel={() => { setResetPwdModalVisible(false); setSelectedRows([]); setCurrentRow(undefined); }} open={resetPwdModalVisible} values={currentRow || {}} /> { const success = await updateAuthRole(values); if (success) { setAuthRoleModalVisible(false); setSelectedRows([]); setCurrentRow(undefined); message.success('配置成功。'); } }} onCancel={() => { setAuthRoleModalVisible(false); setSelectedRows([]); setCurrentRow(undefined); }} open={authRoleModalVisible} roles={roleList || []} roleIds={roleIds || []} /> ); }; export default UserTableList;