[FEAT] 補全機台與金流設定多語系,並調整帳號管理表格佈局
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 44s
All checks were successful
star-cloud-deploy-demo / deploy-demo (push) Successful in 44s
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin\BasicSettings;
|
||||
|
||||
use App\Http\Controllers\Admin\AdminController;
|
||||
use App\Models\Machine\MachineModel;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
class MachineModelController extends AdminController
|
||||
{
|
||||
/**
|
||||
* 顯示機台型號列表 (重新導向至機台設定的標籤頁)
|
||||
*/
|
||||
public function index(Request $request): RedirectResponse
|
||||
{
|
||||
return redirect()->route('admin.basic-settings.machines.index', ['tab' => 'models']);
|
||||
}
|
||||
|
||||
public function store(Request $request): RedirectResponse
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'name' => 'required|string|max:255',
|
||||
]);
|
||||
|
||||
MachineModel::create(array_merge($validated, [
|
||||
'company_id' => auth()->user()->company_id,
|
||||
'creator_id' => auth()->id(),
|
||||
'updater_id' => auth()->id(),
|
||||
]));
|
||||
|
||||
return redirect()->route('admin.basic-settings.machines.index', ['tab' => 'models'])
|
||||
->with('success', __('Machine model created successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 顯示編輯頁面 (與 index 共用 Modal 則不需此方法,但 resource 路由建議保留或調整)
|
||||
*/
|
||||
public function edit(MachineModel $machine_model): View
|
||||
{
|
||||
// 若採用 index Modal 編輯,此處可回傳 JSON 或維持 Blade
|
||||
return view('admin.basic-settings.machine-models.edit', compact('machine_model'));
|
||||
}
|
||||
|
||||
public function update(Request $request, MachineModel $machine_model): RedirectResponse
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'name' => 'required|string|max:255',
|
||||
]);
|
||||
|
||||
$machine_model->update(array_merge($validated, [
|
||||
'updater_id' => auth()->id(),
|
||||
]));
|
||||
|
||||
return redirect()->route('admin.basic-settings.machines.index', ['tab' => 'models'])
|
||||
->with('success', __('Machine model updated successfully.'));
|
||||
}
|
||||
|
||||
public function destroy(MachineModel $machine_model): RedirectResponse
|
||||
{
|
||||
if ($machine_model->machines()->count() > 0) {
|
||||
return redirect()->back()->with('error', __('Cannot delete model that is currently in use by machines.'));
|
||||
}
|
||||
|
||||
$machine_model->delete();
|
||||
|
||||
return redirect()->route('admin.basic-settings.machines.index', ['tab' => 'models'])
|
||||
->with('success', __('Machine model deleted successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -17,31 +17,44 @@ use Illuminate\Support\Facades\Log;
|
||||
class MachineSettingController extends AdminController
|
||||
{
|
||||
/**
|
||||
* 顯示機台設定列表
|
||||
* 顯示機台與型號設定列表 (採用標籤頁整合)
|
||||
*/
|
||||
public function index(Request $request): View
|
||||
{
|
||||
$tab = $request->input('tab', 'machines');
|
||||
$per_page = $request->input('per_page', 20);
|
||||
$query = Machine::query()->with(['machineModel', 'paymentConfig', 'company']);
|
||||
$search = $request->input('search');
|
||||
|
||||
// 搜尋:名稱或序號
|
||||
if ($search = $request->input('search')) {
|
||||
$query->where(function ($q) use ($search) {
|
||||
// 1. 處理機台清單 (Machines Tab)
|
||||
$machineQuery = Machine::query()->with(['machineModel', 'paymentConfig', 'company']);
|
||||
if ($tab === 'machines' && $search) {
|
||||
$machineQuery->where(function ($q) use ($search) {
|
||||
$q->where('name', 'like', "%{$search}%")
|
||||
->orWhere('serial_no', 'like', "%{$search}%");
|
||||
});
|
||||
}
|
||||
$machines = $machineQuery->latest()->paginate($per_page, ['*'], 'machines_page')->withQueryString();
|
||||
|
||||
$machines = $query->latest()
|
||||
->paginate($per_page)
|
||||
->withQueryString();
|
||||
// 2. 處理型號清單 (Models Tab)
|
||||
$modelQuery = MachineModel::query()->withCount('machines');
|
||||
if ($tab === 'models' && $search) {
|
||||
$modelQuery->where('name', 'like', "%{$search}%");
|
||||
}
|
||||
$models_list = $modelQuery->latest()->paginate($per_page, ['*'], 'models_page')->withQueryString();
|
||||
|
||||
// 3. 基礎下拉資料 (用於新增/編輯機台的彈窗)
|
||||
$models = MachineModel::select('id', 'name')->get();
|
||||
$paymentConfigs = PaymentConfig::select('id', 'name')->get();
|
||||
// 這裡應根據租戶 (Company) 決定可用的選項,暫採簡單模擬或從 Auth 取得
|
||||
$companies = \App\Models\System\Company::select('id', 'name')->get();
|
||||
|
||||
return view('admin.basic-settings.machines.index', compact('machines', 'models', 'paymentConfigs', 'companies'));
|
||||
return view('admin.basic-settings.machines.index', compact(
|
||||
'machines',
|
||||
'models_list',
|
||||
'models',
|
||||
'paymentConfigs',
|
||||
'companies',
|
||||
'tab'
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -49,6 +49,8 @@ class Machine extends Model
|
||||
'updater_id',
|
||||
];
|
||||
|
||||
protected $appends = ['image_urls'];
|
||||
|
||||
protected $casts = [
|
||||
'last_heartbeat_at' => 'datetime',
|
||||
'welcome_gift_enabled' => 'boolean',
|
||||
|
||||
@@ -3,9 +3,11 @@
|
||||
namespace App\Models\Machine;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use App\Traits\TenantScoped;
|
||||
|
||||
class MachineModel extends Model
|
||||
{
|
||||
use TenantScoped;
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'company_id',
|
||||
|
||||
Reference in New Issue
Block a user