diff --git a/app/Modules/Sales/Controllers/SalesImportController.php b/app/Modules/Sales/Controllers/SalesImportController.php
index 7c61aab..181a050 100644
--- a/app/Modules/Sales/Controllers/SalesImportController.php
+++ b/app/Modules/Sales/Controllers/SalesImportController.php
@@ -30,9 +30,9 @@ class SalesImportController extends Controller
]);
}
- public function create()
+ public function template()
{
- return Inertia::render('Sales/Import/Create');
+ return Excel::download(new \App\Modules\Sales\Exports\SalesImportTemplateExport, 'sales_import_template.xlsx');
}
public function store(Request $request)
diff --git a/app/Modules/Sales/Exports/SalesImportTemplateExport.php b/app/Modules/Sales/Exports/SalesImportTemplateExport.php
new file mode 100644
index 0000000..b5f3606
--- /dev/null
+++ b/app/Modules/Sales/Exports/SalesImportTemplateExport.php
@@ -0,0 +1,37 @@
+ ['font' => ['bold' => true]],
+ ];
+ }
+}
diff --git a/app/Modules/Sales/Routes/web.php b/app/Modules/Sales/Routes/web.php
index 02e08c1..17f4ce4 100644
--- a/app/Modules/Sales/Routes/web.php
+++ b/app/Modules/Sales/Routes/web.php
@@ -10,7 +10,7 @@ Route::middleware(['auth', 'verified'])->prefix('sales')->name('sales-imports.')
});
Route::post('/imports', [SalesImportController::class, 'store'])->middleware('permission:sales_imports.create')->name('store');
- Route::get('/imports/create', [SalesImportController::class, 'create'])->middleware('permission:sales_imports.create')->name('create');
+ Route::get('/imports/template', [SalesImportController::class, 'template'])->middleware('permission:sales_imports.create')->name('template');
Route::post('/imports/{import}/confirm', [SalesImportController::class, 'confirm'])->middleware('permission:sales_imports.confirm')->name('confirm');
Route::delete('/imports/{import}', [SalesImportController::class, 'destroy'])->middleware('permission:sales_imports.delete')->name('destroy');
diff --git a/resources/js/Components/Sales/SalesImportDialog.tsx b/resources/js/Components/Sales/SalesImportDialog.tsx
new file mode 100644
index 0000000..8def14d
--- /dev/null
+++ b/resources/js/Components/Sales/SalesImportDialog.tsx
@@ -0,0 +1,139 @@
+import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, DialogDescription } from "@/Components/ui/dialog";
+import { Button } from "@/Components/ui/button";
+import { Input } from "@/Components/ui/input";
+import { Label } from "@/Components/ui/label";
+import { Upload, AlertCircle, Info, FileSpreadsheet } from "lucide-react";
+import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@/Components/ui/accordion";
+import { useForm } from "@inertiajs/react";
+import { Alert, AlertDescription } from "@/Components/ui/alert";
+import React from "react";
+
+interface SalesImportDialogProps {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+}
+
+export default function SalesImportDialog({ open, onOpenChange }: SalesImportDialogProps) {
+ const { data, setData, post, processing, errors, reset, clearErrors } = useForm<{
+ file: File | null;
+ }>({
+ file: null,
+ });
+
+
+ const handleFileChange = (e: React.ChangeEvent
-
- 匯入說明
-
-
-