import { fetchRoleList } from '@/services/role'; import { fetchBindRoles, fetchUserDetail } from '@/services/user'; import { Button, Checkbox, Drawer, Spin, message } from 'antd'; import { useEffect, useState } from 'react'; interface BindRolesDrawerProps { userId: number; productCode: string; open: boolean; onClose: () => void; } export const BindRolesDrawer = ({ userId, productCode, open, onClose }: BindRolesDrawerProps) => { const [loading, setLoading] = useState(false); const [saving, setSaving] = useState(false); const [roles, setRoles] = useState([]); const [checkedIds, setCheckedIds] = useState([]); useEffect(() => { if (!open) return; setLoading(true); Promise.all([fetchUserDetail({ id: userId }), fetchRoleList({ productCode, pageSize: 999 })]) .then(([userRes, roleRes]) => { setRoles(roleRes.data ?? []); setCheckedIds(userRes.data?.roleIds ?? []); }) .finally(() => setLoading(false)); }, [open, userId, productCode]); const handleSave = async () => { setSaving(true); try { await fetchBindRoles({ userId, roleIds: checkedIds }); message.success('保存成功'); onClose(); } finally { setSaving(false); } }; const toggle = (id: number) => setCheckedIds((prev) => (prev.includes(id) ? prev.filter((i) => i !== id) : [...prev, id])); return ( 保存 } >
{roles.map((r) => ( toggle(r.id)}> {r.name} 级别 {r.permsLevel} ))} {roles.length === 0 && !loading && ( 该产品暂无角色 )}
); };