// File: app/(dashboard)/projects/page.tsx 'use client'; import { useState } from 'react'; import { Plus, Search, MoreHorizontal, Folder, Calendar, BarChart3 } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Badge } from '@/components/ui/badge'; import { Progress } from '@/components/ui/progress'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { Card, CardContent, CardHeader, CardTitle, CardDescription, CardFooter } from '@/components/ui/card'; // Type สำหรับข้อมูล Project (Mockup ตาม Data Dictionary) interface Project { id: number; projectCode: string; projectName: string; status: 'Active' | 'Completed' | 'On Hold'; progress: number; startDate: string; endDate: string; contractorName: string; } // Mock Data const mockProjects: Project[] = [ { id: 1, projectCode: 'LCBP3', projectName: 'โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1-4)', status: 'Active', progress: 45, startDate: '2021-01-01', endDate: '2025-12-31', contractorName: 'Multiple Contractors', }, { id: 2, projectCode: 'LCBP3-C1', projectName: 'งานก่อสร้างงานทางทะเล (ส่วนที่ 1)', status: 'Active', progress: 70, startDate: '2021-06-01', endDate: '2024-06-01', contractorName: 'CNNC', }, { id: 3, projectCode: 'LCBP3-C2', projectName: 'งานก่อสร้างอาคาร ท่าเทียบเรือ (ส่วนที่ 2)', status: 'Active', progress: 15, startDate: '2023-01-01', endDate: '2026-01-01', contractorName: 'ITD-NWR Joint Venture', }, ]; export default function ProjectsPage() { const router = useRouter(); const [searchTerm, setSearchTerm] = useState(''); const filteredProjects = mockProjects.filter( (project) => project.projectName.toLowerCase().includes(searchTerm.toLowerCase()) || project.projectCode.toLowerCase().includes(searchTerm.toLowerCase()) ); const getStatusVariant = (status: string) => { switch (status) { case 'Active': return 'success'; // ใช้ variant ที่เรา custom ไว้ใน badge.tsx case 'Completed': return 'default'; case 'On Hold': return 'warning'; default: return 'secondary'; } }; const handleCreateProject = () => { router.push('/projects/new'); // อัปเดตเป็นลิงก์จริง }; const handleViewDetails = (id: number) => { router.push(`/projects/${id}`); }; return (
จัดการโครงการ สัญญา และความคืบหน้า