import { useState, useEffect } from 'react'; import { Search, RefreshCw, Users, Check, X, User, Save } from 'lucide-react'; import { clsx } from 'clsx'; import { comms } from '@/communication'; import { GroupUser, UserLevelInfo, UserFullData } from '@/types'; // 사용자 상세 다이얼로그 Props interface UserDetailDialogProps { user: GroupUser; levelInfo: UserLevelInfo | null; onClose: () => void; onSave: () => void; } // 사용자 상세 다이얼로그 컴포넌트 function UserDetailDialog({ user, levelInfo, onClose, onSave }: UserDetailDialogProps) { const [formData, setFormData] = useState({ id: user.id, name: user.name || '', nameE: user.nameE || '', grade: user.grade || '', email: user.email || '', tel: user.tel || '', hp: user.hp || '', indate: user.indate || '', outdate: user.outdate || '', memo: user.memo || '', processs: user.processs || '', state: user.state || '', level: user.level || 1, useUserState: user.useUserState || false, useJobReport: user.useJobReport || false, exceptHoly: user.exceptHoly || false, }); const [saving, setSaving] = useState(false); // 편집 가능 여부: 관리자(level >= 5) 또는 본인 const isSelf = levelInfo?.CurrentUserId === user.id; const canEdit = levelInfo?.CanEdit || isSelf; const canEditAdmin = levelInfo?.CanEdit || false; // 관리자 전용 필드 const handleChange = (field: keyof UserFullData, value: string | number | boolean) => { setFormData(prev => ({ ...prev, [field]: value })); }; const handleSave = async () => { if (!canEdit) return; setSaving(true); try { const result = await comms.saveUserFull(formData); if (result.Success) { onSave(); onClose(); } else { alert(result.Message || '저장에 실패했습니다.'); } } catch (error) { console.error('저장 실패:', error); alert('저장 중 오류가 발생했습니다.'); } finally { setSaving(false); } }; return (
e.stopPropagation()} > {/* 헤더 */}

사용자 정보 {canEdit ? '' : '(읽기 전용)'}

{/* 내용 */}
{/* 사번 (읽기 전용) */}
{/* 성명 */}
handleChange('name', e.target.value)} disabled={!canEdit} className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 영문명 */}
handleChange('nameE', e.target.value)} disabled={!canEdit} className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 직책 */}
handleChange('grade', e.target.value)} disabled={!canEdit} className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 공정 */}
handleChange('processs', e.target.value)} disabled={!canEdit} className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 상태 */}
handleChange('state', e.target.value)} disabled={!canEdit} className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 이메일 */}
handleChange('email', e.target.value)} disabled={!canEdit} className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 전화 */}
handleChange('tel', e.target.value)} disabled={!canEdit} className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 입사일 */}
handleChange('indate', e.target.value)} disabled={!canEdit} placeholder="YYYY-MM-DD" className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 퇴사일 */}
handleChange('outdate', e.target.value)} disabled={!canEdit} placeholder="YYYY-MM-DD" className={clsx( "w-full px-3 py-2 border border-white/20 rounded-lg text-white", canEdit ? "bg-white/10" : "bg-white/5 text-white/50" )} />
{/* 레벨 */}
{/* 메모 */}