"use client" import { useState } from "react" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Avatar, AvatarFallback } from "@/components/ui/avatar" import { Calendar, Clock, User, Star, Plus, Edit, CheckCircle, AlertTriangle } from "lucide-react" // Mock reviews data const reviewsData = [ { id: 1, reviewee: "陳雅雯", reviewer: "執行長", type: "quarterly", scheduledDate: "2024-02-15", status: "scheduled", priority: "high", department: "業務部", position: "業務副總", lastReview: "2023-11-15", overallRating: null, color: "red", }, { id: 2, reviewee: "王志明", reviewer: "執行長", type: "one_on_one", scheduledDate: "2024-02-18", status: "in_progress", priority: "medium", department: "技術部", position: "技術長", lastReview: "2024-01-18", overallRating: null, color: "yellow", }, { id: 3, reviewee: "李美玲", reviewer: "執行長", type: "annual", scheduledDate: "2024-02-20", status: "completed", priority: "high", department: "行銷部", position: "行銷長", lastReview: "2023-02-20", overallRating: 4, color: "green", }, { id: 4, reviewee: "張建國", reviewer: "執行長", type: "goal_setting", scheduledDate: "2024-02-25", status: "scheduled", priority: "medium", department: "研發部", position: "研發總監", lastReview: "2023-12-25", overallRating: null, color: "blue", }, ] const reviewQuestions = [ { id: 1, question: "您如何評價本季度的整體表現?", type: "rating", category: "績效", required: true }, { id: 2, question: "本期間您的主要成就是什麼?", type: "text", category: "績效", required: true }, { id: 3, question: "您面臨了哪些挑戰,如何克服?", type: "text", category: "挑戰", required: false }, { id: 4, question: "您如何有效領導團隊?", type: "rating", category: "領導力", required: true }, { id: 5, question: "下一季度的目標是什麼?", type: "text", category: "目標", required: true }, ] const statusColors = { scheduled: { bg: "bg-blue-100", text: "text-blue-800", border: "border-blue-300" }, in_progress: { bg: "bg-yellow-100", text: "text-yellow-800", border: "border-yellow-300" }, completed: { bg: "bg-green-100", text: "text-green-800", border: "border-green-300" }, cancelled: { bg: "bg-red-100", text: "text-red-800", border: "border-red-300" }, } const typeColors = { quarterly: { bg: "bg-purple-100", text: "text-purple-800" }, annual: { bg: "bg-indigo-100", text: "text-indigo-800" }, one_on_one: { bg: "bg-emerald-100", text: "text-emerald-800" }, goal_setting: { bg: "bg-orange-100", text: "text-orange-800" }, } export default function ReviewsPage() { const [activeTab, setActiveTab] = useState("overview") const [isScheduleDialogOpen, setIsScheduleDialogOpen] = useState(false) const [isReviewDialogOpen, setIsReviewDialogOpen] = useState(false) const [selectedReview, setSelectedReview] = useState(null) const handleStartReview = (review: any) => { setSelectedReview(review) setIsReviewDialogOpen(true) } const reviewStats = { total: reviewsData.length, scheduled: reviewsData.filter((r) => r.status === "scheduled").length, inProgress: reviewsData.filter((r) => r.status === "in_progress").length, completed: reviewsData.filter((r) => r.status === "completed").length, overdue: reviewsData.filter((r) => new Date(r.scheduledDate) < new Date() && r.status === "scheduled").length, } return (
{/* Header */}
公司 Logo

審查管理中心

績效審查與一對一面談管理

{/* Stats Cards */}
總審查
{reviewStats.total}
待審查
{reviewStats.scheduled}
進行中
{reviewStats.inProgress}
已完成
{reviewStats.completed}
逾期
{reviewStats.overdue}
{/* Main Content */} 審查管理 管理績效審查和一對一面談 總覽 排程 歷史記錄 {/* Overview Tab */}
{reviewsData.map((review) => (
{review.reviewee.charAt(0)}

{review.reviewee}

{review.position}

{review.department}

{review.type === "quarterly" ? "季度審查" : review.type === "annual" ? "年度審查" : review.type === "one_on_one" ? "一對一" : "目標設定"} {review.status === "scheduled" ? "待審查" : review.status === "in_progress" ? "進行中" : review.status === "completed" ? "已完成" : "已取消"}
預定: {review.scheduledDate} 審查者: {review.reviewer}
{review.overallRating && (
{[...Array(5)].map((_, i) => ( ))} {review.overallRating}/5
)}
{review.status === "scheduled" && ( )} {review.status === "in_progress" && ( )} {review.status === "completed" && ( )}
))}
{/* Schedule Tab */} 受審者 審查類型 預定日期 狀態 優先級 操作 {reviewsData.map((review) => (
{review.reviewee.charAt(0)}
{review.reviewee}
{review.position}
{review.type === "quarterly" ? "季度審查" : review.type === "annual" ? "年度審查" : review.type === "one_on_one" ? "一對一" : "目標設定"} {review.scheduledDate} {review.status === "scheduled" ? "待審查" : review.status === "in_progress" ? "進行中" : review.status === "completed" ? "已完成" : "已取消"} {review.priority === "high" ? "高" : review.priority === "medium" ? "中" : "低"}
))}
{/* History Tab */}
{reviewsData .filter((r) => r.status === "completed") .map((review) => (
{review.reviewee.charAt(0)}

{review.reviewee}

{review.position}

{review.overallRating && (
{[...Array(5)].map((_, i) => ( ))}
)} 已完成 {review.scheduledDate}
))}
{/* Schedule Review Dialog */} 安排新審查 為高階主管安排績效審查或一對一面談