"use client" import { useState, useEffect } from "react" import { ProtectedRoute } from "@/components/protected-route" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Badge } from "@/components/ui/badge" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Alert, AlertDescription } from "@/components/ui/alert" import { Plus, Edit, Trash2, ArrowLeft } from "lucide-react" import Link from "next/link" import { useAuth, type User } from "@/lib/hooks/use-auth" export default function UsersManagementPage() { return ( ) } function UsersManagementContent() { const { user: currentUser } = useAuth() const [users, setUsers] = useState<(User & { password?: string })[]>([]) const [isAddDialogOpen, setIsAddDialogOpen] = useState(false) const [editingUser, setEditingUser] = useState(null) const [deletingUser, setDeletingUser] = useState(null) const [newUser, setNewUser] = useState({ name: "", email: "", password: "", department: "", role: "user" as "user" | "admin", }) const [error, setError] = useState("") const departments = ["人力資源部", "資訊技術部", "財務部", "行銷部", "業務部", "研發部", "客服部", "其他"] useEffect(() => { loadUsers() }, []) const loadUsers = async () => { try { const response = await fetch('/api/admin/users') const data = await response.json() if (data.success) { setUsers(data.data) } else { setError(data.error || '載入用戶列表失敗') } } catch (err) { console.error('載入用戶列表錯誤:', err) setError('載入用戶列表時發生錯誤') } } const handleAddUser = async () => { setError("") if (!newUser.name || !newUser.email || !newUser.password || !newUser.department) { setError("請填寫所有必填欄位") return } try { const response = await fetch('/api/admin/users', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(newUser), }) const data = await response.json() if (data.success) { // 重新載入用戶列表 await loadUsers() setNewUser({ name: "", email: "", password: "", department: "", role: "user", }) setIsAddDialogOpen(false) } else { setError(data.error || '創建用戶失敗') } } catch (err) { console.error('創建用戶錯誤:', err) setError('創建用戶時發生錯誤') } } const handleEditUser = (user: User) => { setEditingUser(user) setNewUser({ name: user.name, email: user.email, password: "", department: user.department, role: user.role, }) } const handleUpdateUser = async () => { if (!editingUser) return setError("") if (!newUser.name || !newUser.email || !newUser.department) { setError("請填寫所有必填欄位") return } try { const updateData: any = { id: editingUser.id, name: newUser.name, email: newUser.email, department: newUser.department, role: newUser.role, } const response = await fetch('/api/admin/users', { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(updateData), }) const data = await response.json() if (data.success) { // 重新載入用戶列表 await loadUsers() setEditingUser(null) setNewUser({ name: "", email: "", password: "", department: "", role: "user", }) } else { setError(data.error || '更新用戶失敗') } } catch (err) { console.error('更新用戶錯誤:', err) setError('更新用戶時發生錯誤') } } const handleDeleteUser = (user: User) => { if (user.id === currentUser?.id) { setError("無法刪除自己的帳戶") return } setDeletingUser(user) } const confirmDeleteUser = async () => { if (!deletingUser) return try { const response = await fetch(`/api/admin/users?id=${deletingUser.id}`, { method: 'DELETE', }) const data = await response.json() if (data.success) { // 重新載入用戶列表 await loadUsers() setDeletingUser(null) } else { setError(data.error || '刪除用戶失敗') } } catch (err) { console.error('刪除用戶錯誤:', err) setError('刪除用戶時發生錯誤') } } return (
{/* Header */}

用戶管理

管理系統用戶和權限

{/* Stats */}
總用戶數
{users.length}
管理員
{users.filter((u) => u.role === "admin").length}
一般用戶
{users.filter((u) => u.role === "user").length}
{/* Users Table */}
用戶列表 管理系統中的所有用戶
新增用戶 建立新的系統用戶帳戶
setNewUser({ ...newUser, name: e.target.value })} placeholder="請輸入姓名" />
setNewUser({ ...newUser, email: e.target.value })} placeholder="請輸入電子郵件" />
setNewUser({ ...newUser, password: e.target.value })} placeholder="請輸入密碼" />
{error && ( {error} )}
姓名 電子郵件 部門 角色 建立時間 操作 {users.map((user) => ( {user.name} {user.email} {user.department} {user.role === "admin" ? "管理員" : "一般用戶"} {new Date(user.created_at).toLocaleDateString("zh-TW")}
{user.id !== currentUser?.id && ( )}
))}
{/* Edit User Dialog */} setEditingUser(null)}> 編輯用戶 修改用戶資訊和權限
setNewUser({ ...newUser, name: e.target.value })} placeholder="請輸入姓名" />
setNewUser({ ...newUser, email: e.target.value })} placeholder="請輸入電子郵件" />
{error && ( {error} )}
{/* Delete Confirmation Dialog */} setDeletingUser(null)}>
確認刪除用戶
此操作無法復原。您確定要刪除以下用戶嗎?
{deletingUser && (
姓名: {deletingUser.name}
電子郵件: {deletingUser.email}
部門: {deletingUser.department}
角色: {deletingUser.role === "admin" ? "管理員" : "一般用戶"}

警告

刪除用戶後,該用戶的所有測試記錄和相關資料也將被永久刪除。

)}
) }