From 9bc6450fac04e8b78123cec575d77181d1b43e36 Mon Sep 17 00:00:00 2001 From: sky121113 Date: Fri, 24 Apr 2026 08:30:25 +0800 Subject: [PATCH] =?UTF-8?q?[FEAT]=20=E9=81=B7=E7=A7=BB=E6=A9=9F=E5=8F=B0?= =?UTF-8?q?=E7=B3=BB=E7=B5=B1=E8=A8=AD=E5=AE=9A=E8=87=B3=E6=A9=9F=E5=8F=B0?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=A8=A1=E7=B5=84=E4=B8=A6=E5=84=AA=E5=8C=96?= =?UTF-8?q?=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 修正客戶管理頁面 H1 標題與麵包屑導覽路徑。 2. 在機台編輯頁面實作分頁功能(基本、營運、機台系統設定)。 3. 實作極簡奢華風的機台系統設定 UI,按功能模組(電子發票、刷卡、支付、購物車等)進行卡片式分組。 4. 將系統設定資料從 Company JSON 遷移至 Machine 資料表獨立欄位,並更新關聯控制器與模型邏輯。 5. 清理 CompanyController 與視圖中的冗餘設定邏輯。 6. 完成現有資料遷移,確保機台正確繼承客戶層級之設定。 7. 優化倉儲管理「現有庫存」矩陣視圖與導覽功能。 --- .../MachineSettingController.php | 6 + .../Controllers/Admin/CompanyController.php | 21 -- .../Controllers/Admin/WarehouseController.php | 2 +- app/Models/Machine/Machine.php | 12 + ..._add_system_settings_to_machines_table.php | 40 +++ .../basic-settings/machines/edit.blade.php | 307 +++++++++++++----- .../views/admin/companies/index.blade.php | 112 +------ .../admin/warehouses/inventory.blade.php | 2 +- .../warehouses/partials/tab-stock.blade.php | 14 +- .../views/components/breadcrumbs.blade.php | 6 + 10 files changed, 300 insertions(+), 222 deletions(-) create mode 100644 database/migrations/2026_04_24_082553_add_system_settings_to_machines_table.php diff --git a/app/Http/Controllers/Admin/BasicSettings/MachineSettingController.php b/app/Http/Controllers/Admin/BasicSettings/MachineSettingController.php index c10316c..f40d784 100644 --- a/app/Http/Controllers/Admin/BasicSettings/MachineSettingController.php +++ b/app/Http/Controllers/Admin/BasicSettings/MachineSettingController.php @@ -194,6 +194,12 @@ class MachineSettingController extends AdminController 'is_spring_slot_41_50' => 'boolean', 'is_spring_slot_51_60' => 'boolean', 'member_system_enabled' => 'boolean', + 'tax_invoice_enabled' => 'boolean', + 'card_terminal_enabled' => 'boolean', + 'scan_pay_esun_enabled' => 'boolean', + 'scan_pay_linepay_enabled' => 'boolean', + 'shopping_cart_enabled' => 'boolean', + 'cash_module_enabled' => 'boolean', 'machine_model_id' => 'required|exists:machine_models,id', 'payment_config_id' => 'nullable|exists:payment_configs,id', 'location' => 'nullable|string|max:255', diff --git a/app/Http/Controllers/Admin/CompanyController.php b/app/Http/Controllers/Admin/CompanyController.php index 466b558..ab7c24a 100644 --- a/app/Http/Controllers/Admin/CompanyController.php +++ b/app/Http/Controllers/Admin/CompanyController.php @@ -74,13 +74,6 @@ class CompanyController extends Controller if (isset($validated['settings'])) { $validated['settings']['enable_material_code'] = filter_var($validated['settings']['enable_material_code'] ?? false, FILTER_VALIDATE_BOOLEAN); $validated['settings']['enable_points'] = filter_var($validated['settings']['enable_points'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['tax_invoice'] = filter_var($validated['settings']['tax_invoice'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['card_terminal'] = filter_var($validated['settings']['card_terminal'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['scan_pay_esun'] = filter_var($validated['settings']['scan_pay_esun'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['scan_pay_linepay'] = filter_var($validated['settings']['scan_pay_linepay'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['shopping_cart'] = filter_var($validated['settings']['shopping_cart'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['welcome_gift'] = filter_var($validated['settings']['welcome_gift'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['cash_module'] = filter_var($validated['settings']['cash_module'] ?? false, FILTER_VALIDATE_BOOLEAN); } DB::transaction(function () use ($validated) { @@ -185,13 +178,6 @@ class CompanyController extends Controller if (isset($validated['settings'])) { $validated['settings']['enable_material_code'] = filter_var($validated['settings']['enable_material_code'] ?? false, FILTER_VALIDATE_BOOLEAN); $validated['settings']['enable_points'] = filter_var($validated['settings']['enable_points'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['tax_invoice'] = filter_var($validated['settings']['tax_invoice'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['card_terminal'] = filter_var($validated['settings']['card_terminal'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['scan_pay_esun'] = filter_var($validated['settings']['scan_pay_esun'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['scan_pay_linepay'] = filter_var($validated['settings']['scan_pay_linepay'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['shopping_cart'] = filter_var($validated['settings']['shopping_cart'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['welcome_gift'] = filter_var($validated['settings']['welcome_gift'] ?? false, FILTER_VALIDATE_BOOLEAN); - $validated['settings']['cash_module'] = filter_var($validated['settings']['cash_module'] ?? false, FILTER_VALIDATE_BOOLEAN); } DB::transaction(function () use ($validated, $company) { @@ -230,13 +216,6 @@ class CompanyController extends Controller $formattedSettings = [ 'enable_material_code' => filter_var($settings['enable_material_code'] ?? false, FILTER_VALIDATE_BOOLEAN), 'enable_points' => filter_var($settings['enable_points'] ?? false, FILTER_VALIDATE_BOOLEAN), - 'tax_invoice' => filter_var($settings['tax_invoice'] ?? false, FILTER_VALIDATE_BOOLEAN), - 'card_terminal' => filter_var($settings['card_terminal'] ?? false, FILTER_VALIDATE_BOOLEAN), - 'scan_pay_esun' => filter_var($settings['scan_pay_esun'] ?? false, FILTER_VALIDATE_BOOLEAN), - 'scan_pay_linepay' => filter_var($settings['scan_pay_linepay'] ?? false, FILTER_VALIDATE_BOOLEAN), - 'shopping_cart' => filter_var($settings['shopping_cart'] ?? false, FILTER_VALIDATE_BOOLEAN), - 'welcome_gift' => filter_var($settings['welcome_gift'] ?? false, FILTER_VALIDATE_BOOLEAN), - 'cash_module' => filter_var($settings['cash_module'] ?? false, FILTER_VALIDATE_BOOLEAN), ]; // Ensure we force save the JSON cast properly diff --git a/app/Http/Controllers/Admin/WarehouseController.php b/app/Http/Controllers/Admin/WarehouseController.php index 34058ed..e5e3408 100644 --- a/app/Http/Controllers/Admin/WarehouseController.php +++ b/app/Http/Controllers/Admin/WarehouseController.php @@ -147,7 +147,7 @@ class WarehouseController extends Controller public function inventory(Request $request) { - $tab = $request->input('tab', 'stock-in'); + $tab = $request->input('tab', 'stock'); $warehouses = Warehouse::active()->orderBy('name')->get(); $data = compact('warehouses', 'tab'); diff --git a/app/Models/Machine/Machine.php b/app/Models/Machine/Machine.php index 8b50ed7..bea51a1 100644 --- a/app/Models/Machine/Machine.php +++ b/app/Models/Machine/Machine.php @@ -85,6 +85,12 @@ class Machine extends Model 'images', 'creator_id', 'updater_id', + 'tax_invoice_enabled', + 'card_terminal_enabled', + 'scan_pay_esun_enabled', + 'scan_pay_linepay_enabled', + 'shopping_cart_enabled', + 'cash_module_enabled', ]; protected $appends = ['image_urls', 'calculated_status']; @@ -177,6 +183,12 @@ class Machine extends Model 'is_spring_slot_41_50' => 'boolean', 'is_spring_slot_51_60' => 'boolean', 'member_system_enabled' => 'boolean', + 'tax_invoice_enabled' => 'boolean', + 'card_terminal_enabled' => 'boolean', + 'scan_pay_esun_enabled' => 'boolean', + 'scan_pay_linepay_enabled' => 'boolean', + 'shopping_cart_enabled' => 'boolean', + 'cash_module_enabled' => 'boolean', 'images' => 'array', ]; diff --git a/database/migrations/2026_04_24_082553_add_system_settings_to_machines_table.php b/database/migrations/2026_04_24_082553_add_system_settings_to_machines_table.php new file mode 100644 index 0000000..91e23e3 --- /dev/null +++ b/database/migrations/2026_04_24_082553_add_system_settings_to_machines_table.php @@ -0,0 +1,40 @@ +boolean('tax_invoice_enabled')->default(0)->after('invoice_status')->comment('電子發票開關'); + $table->boolean('card_terminal_enabled')->default(0)->after('card_reader_no')->comment('刷卡機系統開關'); + $table->boolean('scan_pay_esun_enabled')->default(0)->after('card_terminal_enabled')->comment('玉山掃碼支付開關'); + $table->boolean('scan_pay_linepay_enabled')->default(0)->after('scan_pay_esun_enabled')->comment('LinePay支付開關'); + $table->boolean('shopping_cart_enabled')->default(0)->after('scan_pay_linepay_enabled')->comment('購物車功能開關'); + $table->boolean('cash_module_enabled')->default(0)->after('shopping_cart_enabled')->comment('現金模組開關'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('machines', function (Blueprint $table) { + $table->dropColumn([ + 'tax_invoice_enabled', + 'card_terminal_enabled', + 'scan_pay_esun_enabled', + 'scan_pay_linepay_enabled', + 'shopping_cart_enabled', + 'cash_module_enabled', + ]); + }); + } +}; diff --git a/resources/views/admin/basic-settings/machines/edit.blade.php b/resources/views/admin/basic-settings/machines/edit.blade.php index b995832..7fa8700 100644 --- a/resources/views/admin/basic-settings/machines/edit.blade.php +++ b/resources/views/admin/basic-settings/machines/edit.blade.php @@ -77,7 +77,8 @@ } this.$el.submit(); } - }" @submit.prevent="submitForm" action="{{ route('admin.basic-settings.machines.update', $machine) }}" method="POST" enctype="multipart/form-data" class="space-y-6"> + }" @submit.prevent="submitForm" action="{{ route('admin.basic-settings.machines.update', $machine) }}" method="POST" enctype="multipart/form-data" + x-data="{ activeTab: 'basic' }" class="space-y-6"> @csrf @method('PUT') @@ -101,9 +102,34 @@ @endif + +
+ + + +
+
+ + +
@@ -194,8 +220,14 @@
+
+
+ + + +
-
+
@@ -230,11 +262,24 @@
+
+ + + @foreach($paymentConfigs as $config) + + @endforeach + +
-
+
@@ -271,9 +316,184 @@
+ + +
+
+
+
+ + + +
+

{{ __('Machine System Settings') }}

+
+ +
+ +
+
+
+
+ +
+
+ {{ __('Electronic Invoice') }} + {{ __('System-wide Invoice Support') }} +
+
+
+ + tax_invoice_enabled ? 'checked' : '' }} class="sr-only peer"> +
+
+
+ +
+ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+
- +
@@ -321,7 +541,7 @@
@@ -338,83 +558,6 @@
-
-
-
- - - -
-

{{ __('Payment & Invoice') }}

-
- -
-
- - - @foreach($paymentConfigs as $config) - - @endforeach - -
- -
- - - - - - -
-
-
- -
-
-
- - - -
-

{{ __('Member & External') }}

-
- -
- - - -
-
- diff --git a/resources/views/admin/companies/index.blade.php b/resources/views/admin/companies/index.blade.php index 4d6d015..5393f13 100644 --- a/resources/views/admin/companies/index.blade.php +++ b/resources/views/admin/companies/index.blade.php @@ -225,7 +225,7 @@

- {{ __('Customer List') }} + {{ __('Customer Management') }}

{{ __('Manage all tenant accounts and validity') }} @@ -1012,116 +1012,6 @@

- - -
-
-

{{ __('Taxation System') }}

-
-
- -
-
- - -
-
-

{{ __('Card Terminal System') }}

-
-
- -
-
- - -
-
-

{{ __('QR Scan Payment') }}

-
-
- - -
-
- - -
-
-

{{ __('Shopping Cart Feature') }}

-
-
- -
-
- - -
-
-

{{ __('Welcome Gift Feature') }}

-
-
- -
-
- - -
-
-

{{ __('Cash Module Feature') }}

-
-
- -
-
diff --git a/resources/views/admin/warehouses/inventory.blade.php b/resources/views/admin/warehouses/inventory.blade.php index b9d1e77..6fc3572 100644 --- a/resources/views/admin/warehouses/inventory.blade.php +++ b/resources/views/admin/warehouses/inventory.blade.php @@ -242,7 +242,7 @@

-