251210:1709 Frontend: reeactor organization and run build
This commit is contained in:
@@ -35,48 +35,48 @@ import {
|
||||
} from "@/components/ui/card";
|
||||
|
||||
// Type สำหรับข้อมูล Project (Mockup ตาม Data Dictionary)
|
||||
type Project = {
|
||||
interface Project {
|
||||
id: number;
|
||||
project_code: string;
|
||||
project_name: string;
|
||||
projectCode: string;
|
||||
projectName: string;
|
||||
status: "Active" | "Completed" | "On Hold";
|
||||
progress: number;
|
||||
start_date: string;
|
||||
end_date: string;
|
||||
contractor_name: string;
|
||||
};
|
||||
startDate: string;
|
||||
endDate: string;
|
||||
contractorName: string;
|
||||
}
|
||||
|
||||
// Mock Data
|
||||
const mockProjects: Project[] = [
|
||||
{
|
||||
id: 1,
|
||||
project_code: "LCBP3",
|
||||
project_name: "โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1-4)",
|
||||
projectCode: "LCBP3",
|
||||
projectName: "โครงการพัฒนาท่าเรือแหลมฉบัง ระยะที่ 3 (ส่วนที่ 1-4)",
|
||||
status: "Active",
|
||||
progress: 45,
|
||||
start_date: "2021-01-01",
|
||||
end_date: "2025-12-31",
|
||||
contractor_name: "Multiple Contractors",
|
||||
startDate: "2021-01-01",
|
||||
endDate: "2025-12-31",
|
||||
contractorName: "Multiple Contractors",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
project_code: "LCBP3-C1",
|
||||
project_name: "งานก่อสร้างงานทางทะเล (ส่วนที่ 1)",
|
||||
projectCode: "LCBP3-C1",
|
||||
projectName: "งานก่อสร้างงานทางทะเล (ส่วนที่ 1)",
|
||||
status: "Active",
|
||||
progress: 70,
|
||||
start_date: "2021-06-01",
|
||||
end_date: "2024-06-01",
|
||||
contractor_name: "CNNC",
|
||||
startDate: "2021-06-01",
|
||||
endDate: "2024-06-01",
|
||||
contractorName: "CNNC",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
project_code: "LCBP3-C2",
|
||||
project_name: "งานก่อสร้างอาคาร ท่าเทียบเรือ (ส่วนที่ 2)",
|
||||
projectCode: "LCBP3-C2",
|
||||
projectName: "งานก่อสร้างอาคาร ท่าเทียบเรือ (ส่วนที่ 2)",
|
||||
status: "Active",
|
||||
progress: 15,
|
||||
start_date: "2023-01-01",
|
||||
end_date: "2026-01-01",
|
||||
contractor_name: "ITD-NWR Joint Venture",
|
||||
startDate: "2023-01-01",
|
||||
endDate: "2026-01-01",
|
||||
contractorName: "ITD-NWR Joint Venture",
|
||||
},
|
||||
];
|
||||
|
||||
@@ -85,8 +85,8 @@ export default function ProjectsPage() {
|
||||
const [searchTerm, setSearchTerm] = useState("");
|
||||
|
||||
const filteredProjects = mockProjects.filter((project) =>
|
||||
project.project_name.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||
project.project_code.toLowerCase().includes(searchTerm.toLowerCase())
|
||||
project.projectName.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||
project.projectCode.toLowerCase().includes(searchTerm.toLowerCase())
|
||||
);
|
||||
|
||||
const getStatusVariant = (status: string) => {
|
||||
@@ -150,16 +150,16 @@ export default function ProjectsPage() {
|
||||
<TableBody>
|
||||
{filteredProjects.map((project) => (
|
||||
<TableRow key={project.id} className="cursor-pointer hover:bg-muted/50" onClick={() => handleViewDetails(project.id)}>
|
||||
<TableCell className="font-medium">{project.project_code}</TableCell>
|
||||
<TableCell className="font-medium">{project.projectCode}</TableCell>
|
||||
<TableCell>
|
||||
<div className="flex flex-col">
|
||||
<span>{project.project_name}</span>
|
||||
<span>{project.projectName}</span>
|
||||
<span className="text-xs text-muted-foreground">
|
||||
{project.start_date} - {project.end_date}
|
||||
{project.startDate} - {project.endDate}
|
||||
</span>
|
||||
</div>
|
||||
</TableCell>
|
||||
<TableCell>{project.contractor_name}</TableCell>
|
||||
<TableCell>{project.contractorName}</TableCell>
|
||||
<TableCell>
|
||||
<Badge variant={getStatusVariant(project.status)}>
|
||||
{project.status}
|
||||
@@ -186,11 +186,11 @@ export default function ProjectsPage() {
|
||||
<DropdownMenuItem onClick={(e) => { e.stopPropagation(); handleViewDetails(project.id); }}>
|
||||
View Details
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem onClick={(e) => { e.stopPropagation(); alert(`Manage Contracts for ${project.project_code}`); }}>
|
||||
<DropdownMenuItem onClick={(e) => { e.stopPropagation(); alert(`Manage Contracts for ${project.projectCode}`); }}>
|
||||
Manage Contracts
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItem onClick={(e) => { e.stopPropagation(); alert(`Edit ${project.project_code}`); }}>
|
||||
<DropdownMenuItem onClick={(e) => { e.stopPropagation(); alert(`Edit ${project.projectCode}`); }}>
|
||||
Edit Project
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
@@ -209,9 +209,9 @@ export default function ProjectsPage() {
|
||||
<CardHeader className="pb-2">
|
||||
<div className="flex justify-between items-start">
|
||||
<div>
|
||||
<CardTitle className="text-base font-bold">{project.project_code}</CardTitle>
|
||||
<CardTitle className="text-base font-bold">{project.projectCode}</CardTitle>
|
||||
<CardDescription className="mt-1 line-clamp-2">
|
||||
{project.project_name}
|
||||
{project.projectName}
|
||||
</CardDescription>
|
||||
</div>
|
||||
<Badge variant={getStatusVariant(project.status)} className="shrink-0">
|
||||
@@ -222,11 +222,11 @@ export default function ProjectsPage() {
|
||||
<CardContent className="pb-2 space-y-4">
|
||||
<div className="flex items-center gap-2 text-sm text-muted-foreground">
|
||||
<Folder className="h-4 w-4" />
|
||||
<span>{project.contractor_name}</span>
|
||||
<span>{project.contractorName}</span>
|
||||
</div>
|
||||
<div className="flex items-center gap-2 text-sm text-muted-foreground">
|
||||
<Calendar className="h-4 w-4" />
|
||||
<span>{project.start_date} - {project.end_date}</span>
|
||||
<span>{project.startDate} - {project.endDate}</span>
|
||||
</div>
|
||||
<div className="space-y-1">
|
||||
<div className="flex justify-between text-xs">
|
||||
@@ -248,4 +248,4 @@ export default function ProjectsPage() {
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user