import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'; import { Head, Link, router } from '@inertiajs/react'; import { Button } from '@/Components/ui/button'; import { Plus, Search, FileText, RotateCcw, Calendar } from 'lucide-react'; import { Input } from '@/Components/ui/input'; import { Label } from '@/Components/ui/label'; import { SearchableSelect } from '@/Components/ui/searchable-select'; import Pagination from '@/Components/shared/Pagination'; import { useState, useEffect } from 'react'; import { Can } from '@/Components/Permission/Can'; import { getDateRange } from '@/utils/format'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/Components/ui/select'; import GoodsReceiptTable from '@/Components/Inventory/GoodsReceiptTable'; interface Warehouse { id: number; name: string; type: string; } interface Filters { search?: string; status?: string; warehouse_id?: string; date_start?: string; date_end?: string; per_page?: string; } interface Props { receipts: any; filters: Filters; warehouses: Warehouse[]; } export default function GoodsReceiptIndex({ receipts, filters, warehouses }: Props) { const [search, setSearch] = useState(filters.search || ''); const [status, setStatus] = useState(filters.status || 'all'); const [warehouseId, setWarehouseId] = useState(filters.warehouse_id || 'all'); const [dateStart, setDateStart] = useState(filters.date_start || ''); const [dateEnd, setDateEnd] = useState(filters.date_end || ''); const [perPage, setPerPage] = useState(filters.per_page || '10'); const [dateRangeType, setDateRangeType] = useState('custom'); // Advanced Filter Toggle // Sync filters from props useEffect(() => { setSearch(filters.search || ''); setStatus(filters.status || 'all'); setWarehouseId(filters.warehouse_id || 'all'); setDateStart(filters.date_start || ''); setDateEnd(filters.date_end || ''); setPerPage(filters.per_page || '10'); }, [filters]); const handleFilter = () => { router.get(route('goods-receipts.index'), { search, status: status !== 'all' ? status : undefined, warehouse_id: warehouseId !== 'all' ? warehouseId : undefined, date_start: dateStart || undefined, date_end: dateEnd || undefined, per_page: perPage, }, { preserveState: true, replace: true }); }; const handleReset = () => { setSearch(''); setStatus('all'); setWarehouseId('all'); setDateStart(''); setDateEnd(''); setDateRangeType('custom'); setPerPage('10'); router.get(route('goods-receipts.index'), {}, { preserveState: false }); }; const handleDateRangeChange = (type: string) => { setDateRangeType(type); if (type === 'custom') return; const { start, end } = getDateRange(type); setDateStart(start); setDateEnd(end); }; const handlePerPageChange = (value: string) => { setPerPage(value); router.get(route('goods-receipts.index'), { search, status: status !== 'all' ? status : undefined, warehouse_id: warehouseId !== 'all' ? warehouseId : undefined, date_start: dateStart || undefined, date_end: dateEnd || undefined, per_page: value, }, { preserveState: true, preserveScroll: true, replace: true }); }; const statusOptions = [ { label: '全部狀態', value: 'all' }, { label: '已完成', value: 'completed' }, { label: '處理中', value: 'processing' }, ]; const warehouseOptions = [ { label: '全部倉庫', value: 'all' }, ...warehouses.map(w => ({ label: w.name, value: w.id.toString() })) ]; return (
{/* Header Section */}

進貨單管理

管理所有的進貨單據,包含新增、查詢與查看詳細內容。

{/* Filter Bar */}
{/* Row 1: Date Range & Quick Buttons */}
{[ { label: "今日", value: "today" }, { label: "昨日", value: "yesterday" }, { label: "本週", value: "this_week" }, { label: "本月", value: "this_month" }, { label: "上月", value: "last_month" }, ].map((opt) => ( ))}
{/* Date Inputs */}
{ setDateStart(e.target.value); setDateRangeType('custom'); }} className="pl-9 block w-full h-9 bg-white" />
{ setDateEnd(e.target.value); setDateRangeType('custom'); }} className="pl-9 block w-full h-9 bg-white text-left" />
{/* Row 2: Filters & Actions */}
{/* Search */}
setSearch(e.target.value)} className="pl-10 h-9 block" onKeyDown={(e) => e.key === 'Enter' && handleFilter()} />
{/* Status */}
{/* Warehouse */}
10} />
{/* Actions */}
{/* Table Section */} {/* Pagination */}
每頁顯示
); }