[FEAT] 優化廣告與機台管理介面及效能
1. [廣告管理] 修復編輯素材時刪除按鈕顯示邏輯並優化預覽功能。 2. [廣告管理] 修正請求回傳格式為 JSON,解決 AJAX 解析錯誤。 3. [機台管理] 實作 Alpine.js 無感頁籤切換(機台列表與效期管理)。 4. [機台管理] 移除冗餘返回按鈕,改為動態標題與頁籤重設邏輯。 5. [機台管理] 統一後端查詢,減少切換分頁時的延遲感。 6. [商品管理] 支援商品圖片 WebP 自動轉換,並調整上傳大小限制 (10MB)。 7. [UI] 修正多個管理模組的 JS 時序競爭與 Preline HSSelect 重置問題。
This commit is contained in:
@@ -94,7 +94,7 @@ class MachineSettingController extends AdminController
|
||||
'machine_model_id' => 'required|exists:machine_models,id',
|
||||
'payment_config_id' => 'nullable|exists:payment_configs,id',
|
||||
'location' => 'nullable|string|max:255',
|
||||
'images.*' => 'image|mimes:jpeg,png,jpg,gif|max:2048',
|
||||
'images.*' => 'image|mimes:jpeg,png,jpg,gif,webp|max:10240', // Increase to 10MB
|
||||
]);
|
||||
|
||||
$imagePaths = [];
|
||||
@@ -163,6 +163,12 @@ class MachineSettingController extends AdminController
|
||||
'machine_model_id' => 'required|exists:machine_models,id',
|
||||
'payment_config_id' => 'nullable|exists:payment_configs,id',
|
||||
'location' => 'nullable|string|max:255',
|
||||
'image_0' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:10240',
|
||||
'image_1' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:10240',
|
||||
'image_2' => 'nullable|image|mimes:jpeg,png,jpg,gif,webp|max:10240',
|
||||
'remove_image_0' => 'nullable|boolean',
|
||||
'remove_image_1' => 'nullable|boolean',
|
||||
'remove_image_2' => 'nullable|boolean',
|
||||
]);
|
||||
|
||||
// 僅限系統管理員可修改公司
|
||||
@@ -178,34 +184,47 @@ class MachineSettingController extends AdminController
|
||||
throw $e;
|
||||
}
|
||||
|
||||
$machine->update(array_merge($validated, [
|
||||
// 排除虛擬欄位 (圖片上傳、移除標記),這些欄位不在資料表內
|
||||
$dataToUpdate = \Illuminate\Support\Arr::except($validated, [
|
||||
'image_0', 'image_1', 'image_2',
|
||||
'remove_image_0', 'remove_image_1', 'remove_image_2'
|
||||
]);
|
||||
|
||||
$machine->update(array_merge($dataToUpdate, [
|
||||
'updater_id' => auth()->id(),
|
||||
]));
|
||||
|
||||
// 處理圖片更新 (支援 3 個獨立槽位)
|
||||
if ($request->hasFile('images')) {
|
||||
$currentImages = $machine->images ?? [];
|
||||
$newImages = $request->file('images');
|
||||
$updated = false;
|
||||
// 處理圖片更新 (支援 3 個獨立槽位: image_0, image_1, image_2)
|
||||
$currentImages = $machine->images ?? [];
|
||||
$updated = false;
|
||||
|
||||
foreach ($newImages as $index => $file) {
|
||||
// 限制 3 個槽位 (0, 1, 2)
|
||||
if ($index < 0 || $index > 2) continue;
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
$inputName = "image_$i";
|
||||
$removeName = "remove_image_$i";
|
||||
|
||||
// 刪除該槽位的舊圖
|
||||
if (isset($currentImages[$index]) && !empty($currentImages[$index])) {
|
||||
\Illuminate\Support\Facades\Storage::disk('public')->delete($currentImages[$index]);
|
||||
// 如果有新圖片上傳
|
||||
if ($request->hasFile($inputName)) {
|
||||
// 刪除舊圖
|
||||
if (isset($currentImages[$i]) && !empty($currentImages[$i])) {
|
||||
\Illuminate\Support\Facades\Storage::disk('public')->delete($currentImages[$i]);
|
||||
}
|
||||
|
||||
// 處理並儲存新圖
|
||||
$currentImages[$index] = $this->storeAsWebp($file, 'machines');
|
||||
// 儲存新圖
|
||||
$currentImages[$i] = $this->storeAsWebp($request->file($inputName), 'machines');
|
||||
$updated = true;
|
||||
}
|
||||
// 否則,如果有刪除標記
|
||||
elseif ($request->input($removeName) === '1') {
|
||||
if (isset($currentImages[$i]) && !empty($currentImages[$i])) {
|
||||
\Illuminate\Support\Facades\Storage::disk('public')->delete($currentImages[$i]);
|
||||
unset($currentImages[$i]);
|
||||
$updated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($updated) {
|
||||
ksort($currentImages);
|
||||
$machine->update(['images' => array_values($currentImages)]);
|
||||
}
|
||||
if ($updated) {
|
||||
ksort($currentImages);
|
||||
$machine->update(['images' => array_values($currentImages)]);
|
||||
}
|
||||
|
||||
return redirect()->route('admin.basic-settings.machines.index')
|
||||
|
||||
Reference in New Issue
Block a user