// 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 (
{/* Header */}

Projects

จัดการโครงการ สัญญา และความคืบหน้า

{/* Filters */}
setSearchTerm(e.target.value)} />
{/* Desktop View: Table */}
Code Project Name Contractor Status Progress Actions {filteredProjects.map((project) => ( handleViewDetails(project.id)} > {project.projectCode}
{project.projectName} {project.startDate} - {project.endDate}
{project.contractorName} {project.status}
{project.progress}%
Actions { e.stopPropagation(); handleViewDetails(project.id); }} > View Details { e.stopPropagation(); alert(`Manage Contracts for ${project.projectCode}`); }} > Manage Contracts { e.stopPropagation(); alert(`Edit ${project.projectCode}`); }} > Edit Project
))}
{/* Mobile View: Cards */}
{filteredProjects.map((project) => ( handleViewDetails(project.id)} className="cursor-pointer active:bg-muted/50" >
{project.projectCode} {project.projectName}
{project.status}
{project.contractorName}
{project.startDate} - {project.endDate}
Progress {project.progress}%
))}
); }