import React, { useState, useEffect } from 'react'; import { Modal, Form, Input, Tree, message } from 'antd'; import { request } from '@umijs/max'; import type { PermissionItem } from '../types'; interface AddRoleModalProps { visible: boolean; onClose: () => void; onSuccess: () => void; } const AddRoleModal: React.FC = ({ visible, onClose, onSuccess }) => { const [form] = Form.useForm(); const [loading, setLoading] = useState(false); const [permissions, setPermissions] = useState([]); const [checkedKeys, setCheckedKeys] = useState([]); // 获取权限树 useEffect(() => { if (visible) { fetchPermissions(); } }, [visible]); const fetchPermissions = async () => { try { const res = await request('/api/admin/role/permissions'); if (res.code === 0) { setPermissions(res.data); } } catch { message.error('获取权限列表失败'); } }; const handleSubmit = async () => { try { const values = await form.validateFields(); setLoading(true); const res = await request('/api/admin/role/create', { method: 'POST', data: { ...values, permissions: checkedKeys, }, }); if (res.code === 0) { message.success('创建成功'); onSuccess(); handleClose(); } else { message.error(res.message); } } catch { // 表单验证失败 } finally { setLoading(false); } }; const handleClose = () => { form.resetFields(); setCheckedKeys([]); onClose(); }; // 转换权限数据为树形结构 const convertToTreeData = (items: PermissionItem[]) => { return items.map(item => ({ title: item.name, key: item.id, children: item.children ? convertToTreeData(item.children) : undefined, })); }; return (
setCheckedKeys(keys as string[])} treeData={convertToTreeData(permissions)} height={300} />
); }; export default AddRoleModal;