'use client' import { useEffect, useState } from 'react' import { useSession } from 'next-auth/react' import { useRouter, useParams } from 'next/navigation' interface Employee { id: number employee_id: string username_base: string legal_name: string english_name: string | null phone: string | null mobile: string | null hire_date: string status: string } interface EmployeeUpdateData { legal_name?: string english_name?: string phone?: string mobile?: string hire_date?: string status?: string } export default function EditEmployeePage() { const { data: session, status } = useSession() const router = useRouter() const params = useParams() const employeeId = params.id as string const [employee, setEmployee] = useState(null) const [loading, setLoading] = useState(true) const [saving, setSaving] = useState(false) const [error, setError] = useState(null) const [formData, setFormData] = useState({}) useEffect(() => { if (status === 'unauthenticated') { router.push('/auth/signin') } }, [status, router]) useEffect(() => { if (status === 'authenticated' && employeeId) { fetchEmployee() } }, [status, employeeId]) const fetchEmployee = async () => { try { setLoading(true) setError(null) const response = await fetch( `${process.env.NEXT_PUBLIC_API_BASE_URL}/employees/${employeeId}` ) if (!response.ok) { throw new Error('無法載入員工資料') } const data: Employee = await response.json() setEmployee(data) setFormData({ legal_name: data.legal_name, english_name: data.english_name || '', phone: data.phone || '', mobile: data.mobile || '', hire_date: data.hire_date.split('T')[0], status: data.status, }) } catch (err) { setError(err instanceof Error ? err.message : '載入失敗') } finally { setLoading(false) } } const handleChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target setFormData((prev) => ({ ...prev, [name]: value || undefined, })) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setSaving(true) setError(null) try { const response = await fetch( `${process.env.NEXT_PUBLIC_API_BASE_URL}/employees/${employeeId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), } ) if (!response.ok) { const errorData = await response.json() throw new Error(errorData.detail || '更新員工失敗') } // 成功後導向員工詳情頁 router.push(`/employees/${employeeId}`) } catch (err) { setError(err instanceof Error ? err.message : '更新失敗') setSaving(false) } } if (status === 'loading' || loading) { return (
載入中...
) } if (!session || !employee) { return null } return (

編輯員工資料

{employee.employee_id} - {employee.legal_name}

{error && (
{error}
)}
{/* 員工編號 (唯讀) */}
{/* 帳號基底 (唯讀) */}

帳號基底建立後無法修改

{/* 中文姓名 */}
{/* 英文姓名 */}
{/* 電話 */}
{/* 手機 */}
{/* 到職日 */}
{/* 狀態 */}
{/* 按鈕區 */}
) }