"use client"; import React from "react"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Shield, ShieldCheck, User as UserIcon, Users, Building2 } from "lucide-react"; interface UserAuthTableProps { users: any[]; isLoading: boolean; paginationInfo: { currentPage: number; pageSize: number; totalItems: number; totalPages: number; }; onEditAuth: (user: any) => void; onPageChange: (page: number) => void; } /** * 사용자 권한 테이블 컴포넌트 * * 사용자 목록과 권한 정보를 표시하고 권한 변경 기능 제공 */ export function UserAuthTable({ users, isLoading, paginationInfo, onEditAuth, onPageChange }: UserAuthTableProps) { // 권한 레벨 표시 const getUserTypeInfo = (userType: string) => { switch (userType) { case "SUPER_ADMIN": return { label: "최고 관리자", icon: , className: "bg-purple-100 text-purple-800 border-purple-300", }; case "COMPANY_ADMIN": return { label: "회사 관리자", icon: , className: "bg-blue-100 text-blue-800 border-blue-300", }; case "USER": return { label: "일반 사용자", icon: , className: "bg-gray-100 text-gray-800 border-gray-300", }; case "GUEST": return { label: "게스트", icon: , className: "bg-green-100 text-green-800 border-green-300", }; case "PARTNER": return { label: "협력업체", icon: , className: "bg-orange-100 text-orange-800 border-orange-300", }; default: return { label: userType || "미지정", icon: , className: "bg-gray-100 text-gray-800 border-gray-300", }; } }; // 행 번호 계산 const getRowNumber = (index: number) => { return (paginationInfo.currentPage - 1) * paginationInfo.pageSize + index + 1; }; // 로딩 스켈레톤 if (isLoading) { return (
No 사용자 ID 사용자명 회사 부서 현재 권한 액션 {Array.from({ length: 10 }).map((_, index) => (
))}
); } // 빈 상태 if (users.length === 0) { return (

등록된 사용자가 없습니다.

); } // 실제 데이터 렌더링 return (
{/* 데스크톱 테이블 */}
No 사용자 ID 사용자명 회사 부서 현재 권한 액션 {users.map((user, index) => { const typeInfo = getUserTypeInfo(user.userType); return ( {getRowNumber(index)} {user.userId} {user.userName} {user.companyName || user.companyCode} {user.deptName || "-"} {typeInfo.icon} {typeInfo.label} ); })}
{/* 모바일 카드 뷰 */}
{users.map((user, index) => { const typeInfo = getUserTypeInfo(user.userType); return (
{/* 헤더 */}

{user.userName}

{user.userId}

{typeInfo.icon} {typeInfo.label}
{/* 정보 */}
회사 {user.companyName || user.companyCode}
부서 {user.deptName || "-"}
{/* 액션 */}
); })}
{/* 페이지네이션 */} {paginationInfo.totalPages > 1 && (
{paginationInfo.currentPage} / {paginationInfo.totalPages}
)}
); }