PermList.tsx 855 B

1234567891011121314151617181920212223242526
  1. import { Checkbox } from 'antd';
  2. import { memo } from 'react';
  3. interface PermListProps {
  4. perms: API.PermItem[];
  5. checkedIds: Set<number>;
  6. onToggle?: (p: API.PermItem) => void;
  7. mode: 'view' | 'edit';
  8. }
  9. export const PermList = memo(({ perms, checkedIds, onToggle, mode }: PermListProps) => {
  10. if (perms.length === 0) return null;
  11. return (
  12. <div className="flex flex-col gap-1">
  13. {perms.map((p) => (
  14. <label key={p.id} className="flex items-center gap-2 cursor-pointer py-0.5">
  15. {mode === 'edit' && (
  16. <Checkbox checked={checkedIds.has(p.id)} onChange={() => onToggle?.(p)} />
  17. )}
  18. <span className="text-xs font-mono text-(--ant-color-primary)">{p.code}</span>
  19. <span className="text-xs text-(--ant-color-text-tertiary)">{p.name}</span>
  20. </label>
  21. ))}
  22. </div>
  23. );
  24. });