import { useFormReset } from "@/hooks/useFormReset"; import TemplateContainer from "@/pages/TemplateContainer"; import { QueryRoleOption } from "@/services/services/role"; import { UserInfo } from "@/services/services/user"; import { FormatDate } from "@/util/time"; import { useAccess, useModel } from "@umijs/max"; import { Button, Dropdown, Form, Input, InputNumber, message, Modal, Select, SelectProps, Table, Tag, Tooltip } from "antd"; import { ColumnsType, TablePaginationConfig } from "antd/es/table"; import { FilterValue, SorterResult, TableCurrentDataSource } from "antd/es/table/interface"; import { useEffect, useState } from "react"; import ModifyUser from "../ModifyUser"; import Icon, { DeleteOutlined, EditOutlined, KeyOutlined, MenuOutlined, SyncOutlined } from "@ant-design/icons"; import { SoftwareControl } from "@/services/services/software"; import { CustomIconComponentProps } from "@ant-design/icons/lib/components/Icon"; import DiceIcon from "@/components/Icon/DiceIcon"; import { generateRandomPassword } from "@/util/password"; import ResetUserPassword from "./ResetUserPassword"; const UserManagement: React.FC = () => { type TagRender = SelectProps['tagRender']; const { initialState } = useModel('@@initialState'); const [data, setData] = useState(); // 数据 const [messageApi, messageHolder] = message.useMessage(); const [form] = Form.useForm(); const access = useAccess(); const { setFormRef, resetForm } = useFormReset(); const [tableParams, setTableParams] = useState({ pagination: { current: 1, pageSize: 10, showQuickJumper: true, totalBoundaryShowSizeChanger: true, }, }); const [loading, setLoading] = useState(true); const [userId, setUserId] = useState(0); const [openModal, setOpenModal] = useState(false); const [roleNames, setRoleNames] = useState([]); const [modal, modaltHolder] = Modal.useModal(); useEffect(() => { QueryRoleOption().then((res: string[]) => { let temRoleNames = res.filter(item => item !== "Super Admin").map((item) => { return { value: item } }); setRoleNames(temRoleNames); }).catch((error: any) => { messageApi.error(error.message); }) UserInfo.QueryUserList(tableParams, form.getFieldsValue()) .then((res) => { setData(res.collection); setTableParams({ pagination: { ...tableParams.pagination, total: res.total } }) setLoading(false); }) .catch((error: any) => { messageApi.error(error.message); }) .finally(() => { setLoading(false); }) }, []); async function QueryUserBasic(params: UserModel.QueryUserParams | null, pagination: TablePaginationConfig | null): Promise { setLoading(true); try { let tableParamsParams = pagination ? { pagination } : tableParams; let res = await UserInfo.QueryUserList(tableParamsParams, params ?? form.getFieldsValue()); setData(res.collection); setTableParams({ pagination: { ...tableParams.pagination, total: res.total } }) } catch (error: any) { message.error(error.message); } finally { setLoading(false); } } async function handleTableChange(pagination: TablePaginationConfig, filters: Record, sorter: SorterResult | SorterResult[], extra: TableCurrentDataSource): Promise { setLoading(true); try { let queryUser = await UserInfo.QueryUserList({ pagination }, form.getFieldsValue()); setData(queryUser.collection); setTableParams({ pagination: { ...pagination, total: queryUser.total } }) } catch (error: any) { message.error(error.message); } finally { setLoading(false); } } async function modalCancel(): Promise { setOpenModal(false); setUserId(0); resetForm(); // 这边调用加载数据的方法 await QueryUserBasic(null, null); } async function QueryUserListByCondition(values: any): Promise { await QueryUserBasic(values, null); } const tagRender: TagRender = (props) => { const { label, value, closable, onClose } = props; const onPreventMouseDown = (event: React.MouseEvent) => { event.preventDefault(); event.stopPropagation(); }; return ( {label} ); }; async function ResetUserPasswordFunc(userId: number) { modal.info({ title: '重置密码', width: 500, closable: true, content: , footer: null }); } /** * 给指定用户申请软件控制权限 * @param userId 用户ID * @returns */ async function ApplySoftwareControlHandle(userId: number) { if (!access.isAdminOrSuperAdmin) { messageApi.error("您没有权限执行此操作"); return; } try { setLoading(true); let userCanApplyCount = await SoftwareControl.GetUserSoftwareControlCount(userId); if (userCanApplyCount <= 0) { messageApi.warning("用户已经没有可申请的软件控制权限了"); return; } // 开始申请 await SoftwareControl.ApplyUserSoftwareControl(userId); messageApi.success("用户软件控制权限申请成功"); } catch (error: any) { messageApi.error(error.message); } finally { setLoading(false); } } const columns: ColumnsType = [ { title: 'ID', dataIndex: 'id', sorter: true, width: '60px', }, { title: '用户名', dataIndex: 'userName', width: '140px', }, { title: '用户昵称', dataIndex: 'nickName', width: '140px', }, { title: '邀请人', dataIndex: 'parentId', width: '140px', hidden: !access.isAdminOrSuperAdmin, }, { title: '角色', dataIndex: 'roleNames', render: (text, record) => { let res = record.roleNames.map((item) => { return {item} }); return res; }, width: '260px', }, { title: '创建时间', dataIndex: 'createdDate', render: (text, record) => FormatDate(record.createdDate), width: '160px', }, { title: '上次登录时间', dataIndex: 'lastLoginDate', render: (text, record) => FormatDate(record.lastLoginDate), width: '160px', }, { title: '上次登录IP', dataIndex: 'lastLoginIp', width: '120px', }, { title: '备注', dataIndex: 'remark', hidden: !access.isAdminOrSuperAdmin, ellipsis: { showTitle: false, }, render: (remark) => ( {remark} ), }, { title: '操作', width: '80px', hidden: !access.isAdminOrSuperAdmin, render: (text, record) => ( , hidden: !access.canEditUser, primary: true, onClick: () => { setUserId(record.id); setOpenModal(true); } }, { key: 'resetPassword', label: '重置密码', icon: , hidden: !access.isSuperAdmin, onClick: async () => { await ResetUserPasswordFunc(record.id); } }, { key: 'apply', label: '初始化权限', icon: , hidden: !access.canApplySoftwareControl, primary: true, onClick: async () => { await ApplySoftwareControlHandle(record.id); } }, { key: 'delete', label: '删除', icon: , hidden: !access.canDeleteUser, danger: true, onClick: () => { messageApi.error("暂不支持删除用户"); } } ].filter(item => !item.hidden) }} > columns={columns} rowKey={(record) => record.id} dataSource={data} pagination={tableParams.pagination} loading={loading} onChange={handleTableChange} /> {messageHolder} {modaltHolder} ); }; export default UserManagement;