krgm.so-manager-dev.com/app/Http/Controllers/Admin/ZoneController.php
kin.rinzen 7913f58d19
All checks were successful
Deploy main / deploy (push) Successful in 22s
画面表示とレイアウト修正
2025-09-05 17:49:01 +09:00

139 lines
4.0 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Zone;
use Illuminate\Support\Facades\DB;
class ZoneController extends Controller
{
/**
* 一覧表示(絞り込み対応)
*/
public function list(Request $request)
{
if ($request->input('action') === 'reset') {
return redirect()->route('zones');
}
// ソート設定
$sort = $request->input('sort', 'zone_id');
$sort_type = $request->input('sort_type', 'desc');
// ベースクエリ
$query = Zone::query();
// === 絞り込み条件 ===
if ($request->filled('zone_id')) {
$query->where('zone_id', $request->zone_id);
}
if ($request->filled('zone_name')) {
$query->where('zone_name', 'LIKE', "%{$request->zone_name}%");
}
if ($request->filled('park_id')) {
$query->where('park_id', $request->park_id);
}
if ($request->filled('ptype_id')) {
$query->where('ptype_id', $request->ptype_id);
}
if ($request->filled('psection_id')) {
$query->where('psection_id', $request->psection_id);
}
if ($request->has('use_flag') && $request->use_flag !== '') {
$query->where('use_flag', $request->use_flag);
}
// ページネーション
$zones = $query->orderBy($sort, $sort_type)->paginate(20);
// === 下拉选单用の一覧データ ===
$parkList = DB::table('park')->pluck('park_name', 'park_id');
$ptypeList = DB::table('ptype')->pluck('ptype_id', 'ptype_id'); // 暂时显示 ID
$psectionList = DB::table('psection')->pluck('psection_id', 'psection_id'); // 暂时显示 ID
return view('admin.zones.list', compact(
'zones', 'sort', 'sort_type',
'parkList', 'ptypeList', 'psectionList'
));
}
/**
* 新規登録
*/
public function add(Request $request)
{
if ($request->isMethod('post')) {
$data = $this->validateZone($request);
Zone::create($data);
return redirect()->route('zones')
->with('success', 'ゾーンを登録しました');
}
$zone = new Zone();
return view('admin.zones.add', compact('zone'));
}
/**
* 編集
*/
public function edit($id, Request $request)
{
$zone = Zone::findOrFail($id);
if ($request->isMethod('post')) {
$data = $this->validateZone($request);
$zone->update($data);
return redirect()->route('zones')
->with('success', 'ゾーンを更新しました');
}
return view('admin.zones.edit', compact('zone'));
}
/**
* 詳細表示
*/
public function info($id)
{
$zone = Zone::findOrFail($id);
return view('admin.zones.info', compact('zone'));
}
/**
* 削除
*/
public function delete(Request $request)
{
$id = $request->input('id');
if ($id) {
Zone::destroy($id);
return redirect()->route('zones')->with('success', 'ゾーンを削除しました');
}
return redirect()->route('zones')->with('error', '削除対象が指定されていません');
}
/**
* バリデーション共通化
*/
private function validateZone(Request $request)
{
return $request->validate([
'zone_name' => 'required|string|max:50',
'park_id' => 'required|integer',
'ptype_id' => 'nullable|integer',
'psection_id' => 'nullable|integer',
'zone_number' => 'nullable|integer|min:0',
'zone_standard' => 'nullable|integer|min:0',
'zone_tolerance' => 'nullable|integer|min:0',
'use_flag' => 'nullable|boolean',
'memo' => 'nullable|string|max:255',
]);
}
}