488 lines
23 KiB
TypeScript
488 lines
23 KiB
TypeScript
import AuthenticatedLayout from "@/layouts/authenticated-layout";
|
|
import { Head } from "@inertiajs/react";
|
|
import React from "react";
|
|
import { useState } from "react";
|
|
import {
|
|
Table,
|
|
TableBody,
|
|
TableCell,
|
|
TableHead,
|
|
TableHeader,
|
|
TableRow,
|
|
} from "@/components/ui/table";
|
|
|
|
import { Button } from "@/components/ui/button";
|
|
import { Input } from "@/components/ui/input";
|
|
import {
|
|
BadgeCheck,
|
|
ChevronLeft,
|
|
ChevronRight,
|
|
ChevronUp,
|
|
Download,
|
|
FileText,
|
|
Search,
|
|
Upload,
|
|
} from "lucide-react";
|
|
|
|
import Select from "react-select";
|
|
|
|
interface SKLData {
|
|
no: number;
|
|
namaPerusahaan: string;
|
|
tahun: number;
|
|
periodePelaporan: string;
|
|
skl: number;
|
|
spbm: number;
|
|
hasil: {
|
|
il: string;
|
|
al: string;
|
|
lb3: string;
|
|
sb: string;
|
|
bs: string;
|
|
stb: string;
|
|
lp: string;
|
|
kdm: string;
|
|
};
|
|
stt: string;
|
|
se: string;
|
|
}
|
|
|
|
export default function PelaporanIndex() {
|
|
const [year, setYear] = useState<string>("2025");
|
|
const [quarter, setQuarter] = useState<string>("Triwulan 1");
|
|
// const [company, setCompany] = useState<string>("PT Ajinomoto Indonesia");
|
|
|
|
const companyOptions = [
|
|
{ value: "PT Ajinomoto Indonesia", label: "PT Ajinomoto Indonesia" },
|
|
{ value: "PT Unilever Indonesia", label: "PT Unilever Indonesia" },
|
|
{
|
|
value: "PT Indofood Sukses Makmur",
|
|
label: "PT Indofood Sukses Makmur",
|
|
},
|
|
{ value: "PT Mayora Indah", label: "PT Mayora Indah" },
|
|
];
|
|
|
|
const [company, setCompany] = useState<{
|
|
value: string;
|
|
label: string;
|
|
} | null>(companyOptions[0]);
|
|
// Color coding helper
|
|
const getStatusColor = (status: string) => {
|
|
switch (status) {
|
|
case "belum":
|
|
return "bg-red-100 text-red-800";
|
|
case "pending":
|
|
return "bg-gray-100 text-gray-800";
|
|
case "siap":
|
|
return "bg-orange-100 text-orange-800";
|
|
case "selesai":
|
|
return "bg-green-100 text-green-800";
|
|
default:
|
|
return "";
|
|
}
|
|
};
|
|
return (
|
|
<AuthenticatedLayout header={"Pelaporan SKL"}>
|
|
<Head title="Pelaporan SKL" />
|
|
|
|
<div className="p-8">
|
|
{/* Filter Section */}
|
|
<div className="mb-6 space-y-4">
|
|
<div className="flex justify-between items-center">
|
|
<div className="flex gap-4 items-center">
|
|
<Select
|
|
options={companyOptions}
|
|
value={company}
|
|
onChange={setCompany}
|
|
placeholder="Pilih Perusahaan"
|
|
isSearchable
|
|
className="w-[300px]"
|
|
/>
|
|
|
|
<Input
|
|
type="number"
|
|
value={year}
|
|
onChange={(e) => setYear(e.target.value)}
|
|
className="w-24"
|
|
/>
|
|
|
|
<Select
|
|
options={[
|
|
{
|
|
value: "Triwulan 1",
|
|
label: "Triwulan 1",
|
|
},
|
|
{
|
|
value: "Triwulan 2",
|
|
label: "Triwulan 2",
|
|
},
|
|
{
|
|
value: "Triwulan 3",
|
|
label: "Triwulan 3",
|
|
},
|
|
{
|
|
value: "Triwulan 4",
|
|
label: "Triwulan 4",
|
|
},
|
|
]}
|
|
value={{ value: quarter, label: quarter }}
|
|
onChange={(newValue) =>
|
|
setQuarter(newValue?.value || "Triwulan 1")
|
|
}
|
|
placeholder="Pilih Periode"
|
|
className="w-[150px]"
|
|
/>
|
|
|
|
<Button>
|
|
<Search className="w-4 h-4 mr-2" />
|
|
Cari
|
|
</Button>
|
|
</div>
|
|
|
|
{/* <div className="flex gap-2">
|
|
<Button variant="outline">
|
|
<Upload className="w-4 h-4 mr-2" />
|
|
Import
|
|
</Button>
|
|
<Button variant="outline">
|
|
<Download className="w-4 h-4 mr-2" />
|
|
Export
|
|
</Button>
|
|
<Button variant="outline">
|
|
<FileText className="w-4 h-4 mr-2" />
|
|
Template
|
|
</Button>
|
|
</div> */}
|
|
</div>
|
|
</div>
|
|
|
|
{/* Table Section */}
|
|
<div className="w-full overflow-x-auto">
|
|
<Table className="min-w-[1000px] border-collapse">
|
|
<TableHeader>
|
|
<TableRow className="border-b border-t bg-green-800">
|
|
<TableHead
|
|
rowSpan={2}
|
|
className="w-[50px] border-r border-l text-white"
|
|
>
|
|
No.
|
|
</TableHead>
|
|
<TableHead
|
|
rowSpan={2}
|
|
className="border-r text-center text-white"
|
|
>
|
|
Nama Perusahaan
|
|
</TableHead>
|
|
<TableHead
|
|
rowSpan={2}
|
|
className="border-r text-center text-white"
|
|
>
|
|
Tahun
|
|
</TableHead>
|
|
<TableHead
|
|
rowSpan={2}
|
|
className="border-r text-center text-white"
|
|
>
|
|
Periode Pelaporan
|
|
</TableHead>
|
|
<TableHead
|
|
rowSpan={2}
|
|
className="border-r text-center text-white"
|
|
>
|
|
SKL (%)
|
|
</TableHead>
|
|
<TableHead
|
|
rowSpan={2}
|
|
className="border-r text-center text-white"
|
|
>
|
|
SPBM (%)
|
|
</TableHead>
|
|
<TableHead
|
|
className="border-r text-center text-white"
|
|
colSpan={8}
|
|
>
|
|
Hasil (Nilai SKL)
|
|
</TableHead>
|
|
<TableHead
|
|
rowSpan={2}
|
|
className="border-r text-center text-white"
|
|
>
|
|
STT
|
|
</TableHead>
|
|
<TableHead
|
|
rowSpan={2}
|
|
className="border-r text-center text-white"
|
|
>
|
|
SE
|
|
</TableHead>
|
|
</TableRow>
|
|
<TableRow className="border-b bg-green-600">
|
|
<TableHead className="text-center border-r text-white">
|
|
IL
|
|
</TableHead>
|
|
<TableHead className="text-center border-r text-white">
|
|
AL
|
|
</TableHead>
|
|
<TableHead className="text-center border-r text-white">
|
|
LB3
|
|
</TableHead>
|
|
<TableHead className="text-center border-r text-white">
|
|
SB
|
|
</TableHead>
|
|
<TableHead className="text-center border-r text-white">
|
|
BS
|
|
</TableHead>
|
|
<TableHead className="text-center border-r text-white">
|
|
STB
|
|
</TableHead>
|
|
<TableHead className="text-center border-r text-white">
|
|
LP
|
|
</TableHead>
|
|
<TableHead className="text-center border-r text-white">
|
|
KDM
|
|
</TableHead>
|
|
</TableRow>
|
|
</TableHeader>
|
|
<TableBody className="border-b">
|
|
<TableRow className="border-b">
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l"
|
|
>
|
|
1
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l"
|
|
>
|
|
PT Ajinomoto Indonesia
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l"
|
|
>
|
|
2023
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l"
|
|
>
|
|
Triwulan 2 / Semester 1
|
|
</TableCell>
|
|
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l "
|
|
>
|
|
76.70
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l"
|
|
>
|
|
76.70
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l bg-red-100 text-red-700"
|
|
>
|
|
00.00
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l bg-red-100 text-red-700"
|
|
>
|
|
00.00
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l bg-red-100 text-red-700"
|
|
>
|
|
00.00
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l bg-gray-100 text-gray-700"
|
|
>
|
|
76.70
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l bg-gray-100 text-gray-700"
|
|
>
|
|
76.70
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l bg-orange-100 text-orange-700"
|
|
>
|
|
76.70
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l bg-green-100 text-green-700"
|
|
>
|
|
76.70
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l bg-green-100 text-green-700"
|
|
>
|
|
76.70
|
|
</TableCell>
|
|
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l"
|
|
>
|
|
<FileText className="w-4 h-4" />
|
|
</TableCell>
|
|
<TableCell
|
|
colSpan={1}
|
|
className="text-center text-muted-foreground border-r border-l"
|
|
>
|
|
<FileText className="w-4 h-4" />
|
|
</TableCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>
|
|
</div>
|
|
{/* Pagination */}
|
|
{/* <div className="mt-4 flex items-center gap-2 justify-end">
|
|
<Button variant="outline" size="icon">
|
|
<ChevronLeft className="h-4 w-4" />
|
|
</Button>
|
|
<Button variant="outline" size="icon">
|
|
<ChevronRight className="h-4 w-4" />
|
|
</Button>
|
|
</div> */}
|
|
|
|
{/* Legend Section */}
|
|
<div className="mt-6 grid grid-cols-2 gap-6">
|
|
{/* Keterangan Section */}
|
|
<div className="bg-white rounded-lg shadow-sm border p-6">
|
|
<div className="flex items-center gap-2 mb-4">
|
|
<FileText className="w-5 h-5 text-green-600" />
|
|
<h3 className="font-semibold text-lg">
|
|
Keterangan
|
|
</h3>
|
|
</div>
|
|
<div className="grid grid-cols-2 gap-4">
|
|
<div className="space-y-2">
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
SKL : Status Ketaatan Lingkungan
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
SPBM : Status Pemenuhan Baku Mutu
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
IL : Ijin Lingkungan
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">AL : Air Limbah</p>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">LB3 : Limbah B3</p>
|
|
</div>
|
|
</div>
|
|
<div className="space-y-2">
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
SB : Sumber Bergerak
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
BS : Kebisingan & Udara Ambien
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
STB : Sumber Tidak Bergerak
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">LP : Limbah Padat</p>
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
KDM : Kawasan Dilarang Merokok
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div className="space-y-2 pt-3">
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
STT : Surat Tanda Terima
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<div className="space-y-2 pt-3">
|
|
<div className="flex items-center gap-2">
|
|
<div className="w-2 h-2 rounded-full bg-green-500"></div>
|
|
<p className="text-sm">
|
|
SE : Surat Evaluasi
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Status Data Section */}
|
|
<div className="bg-white rounded-lg shadow-sm border p-6">
|
|
<div className="flex items-center gap-2 mb-4">
|
|
<BadgeCheck className="w-5 h-5 text-green-600" />
|
|
<h3 className="font-semibold text-lg">
|
|
Status Data
|
|
</h3>
|
|
</div>
|
|
<div className="space-y-4">
|
|
<div className="flex items-center gap-3 p-2 rounded-md bg-red-100">
|
|
<div className="w-3 h-3 rounded-full bg-red-500"></div>
|
|
<p className="text-sm text-red-700">
|
|
Data belum diisi
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-3 p-2 rounded-md bg-gray-100">
|
|
<div className="w-3 h-3 rounded-full bg-gray-500"></div>
|
|
<p className="text-sm text-gray-700">
|
|
Data telah diisi dan belum diverifikasi
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-3 p-2 rounded-md bg-orange-100">
|
|
<div className="w-3 h-3 rounded-full bg-orange-500"></div>
|
|
<p className="text-sm text-orange-700">
|
|
Data telah siap untuk diverifikasi
|
|
</p>
|
|
</div>
|
|
<div className="flex items-center gap-3 p-2 rounded-md bg-green-100">
|
|
<div className="w-3 h-3 rounded-full bg-green-500"></div>
|
|
<p className="text-sm text-green-700">
|
|
Data telah diisi dan diverifikasi
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</AuthenticatedLayout>
|
|
);
|
|
}
|