From b74d8fd4a85fddb42e175729a9f10416196a47fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=A0=E7=9A=84=E5=90=8D=E5=AD=97?= <你的邮箱> Date: Thu, 9 Oct 2025 18:04:27 +0900 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E9=A7=90=E8=BC=AA=E5=A0=B4=E3=83=9E?= =?UTF-8?q?=E3=82=B9=E3=82=BF=E3=80=91=E7=94=BB=E9=9D=A2=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/Admin/ParkController.php | 196 +++++++++--------- resources/views/admin/parks/_form.blade.php | 24 +-- resources/views/admin/parks/add.blade.php | 85 +++++--- resources/views/admin/parks/edit.blade.php | 134 ++++++------ resources/views/admin/parks/list.blade.php | 64 ++++-- 5 files changed, 273 insertions(+), 230 deletions(-) diff --git a/app/Http/Controllers/Admin/ParkController.php b/app/Http/Controllers/Admin/ParkController.php index f1a4fca..a21405e 100644 --- a/app/Http/Controllers/Admin/ParkController.php +++ b/app/Http/Controllers/Admin/ParkController.php @@ -11,39 +11,30 @@ use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Validator; use Response; +use Symfony\Component\HttpFoundation\StreamedResponse; class ParkController extends Controller { - public function list(Request $request) - { - $query = \DB::table('park as p') - ->leftJoin('city as c', 'p.city_id', '=', 'c.city_id') - ->select([ - 'p.park_id', - 'c.city_name', - 'p.park_name', - 'p.park_ruby', - 'p.park_syllabary', - 'p.park_adrs', - 'p.park_close_flag', - 'p.park_day', - 'p.alert_flag', - 'p.print_number', - 'p.keep_alive', - 'p.operator_id', - ]); +public function list(Request $request) +{ + $query = \DB::table('park as p') + ->leftJoin('city as c', 'p.city_id', '=', 'c.city_id') + ->select([ + 'p.*', + 'c.city_name', + ]); - if ($request->filled('park_name')) { - $query->where('p.park_name', 'like', '%' . $request->input('park_name') . '%'); - } - if ($request->filled('city_id')) { - $query->where('p.city_id', $request->input('city_id')); - } - if ($request->filled('sort')) { - $query->orderBy($request->input('sort'), $request->input('sort_type', 'asc')); - } else { - $query->orderBy('p.park_id', 'asc'); - } + if ($request->filled('park_name')) { + $query->where('p.park_name', 'like', '%' . $request->input('park_name') . '%'); + } + if ($request->filled('city_id')) { + $query->where('p.city_id', $request->input('city_id')); + } + if ($request->filled('sort')) { + $query->orderBy($request->input('sort'), $request->input('sort_type', 'asc')); + } else { + $query->orderBy('p.park_id', 'asc'); + } $parks = $query->paginate(20); $cities = \DB::table('city')->orderBy('city_id')->get(); @@ -51,7 +42,7 @@ class ParkController extends Controller $sort = $request->input('sort', 'p.park_id'); $sort_type = $request->input('sort_type', 'asc'); return view('admin.parks.list', compact('parks', 'cities', 'sort', 'sort_type')); - } +} public function add(Request $request) { @@ -68,6 +59,7 @@ class ParkController extends Controller // 保存処理 $park = new \App\Models\Park(); $park->fill($validated); + $park->operator_id = auth()->user()->ope_id ?? 1; $park->save(); return redirect()->route('parks')->with('success', '新規登録に完了しました。'); @@ -137,83 +129,81 @@ class ParkController extends Controller return $data; } - public function export(Request $request) - { - $headers = array( - "Content-type" => "text/csv;charset=UTF-8", - 'Content-Encoding: UTF-8', - "Content-Disposition" => "attachment; filename=file.csv", - "Pragma" => "no-cache", - "Cache-Control" => "must-revalidate, post-check=0, pre-check=0", - "Expires" => "0" - ); - $inputs = [ - 'isMethodPost' => 0, - 'isExport' => 1, - 'sort' => $request->input('sort', ''), - 'sort_type' => $request->input('sort_type', ''), - ]; +public function export(Request $request) +{ + $columns = [ + '駐輪場ID', '市区', '駐輪場名', '駐輪場ふりがな', '駐輪場五十音', '住所', + '閉設フラグ', '閉設日', '残警告チェックフラグ', '印字数', '最新キープアライブ', + '更新オペレータID', '更新期間開始日', '更新期間開始時', '更新期間終了日', '更新期間終了時', + '駐輪開始期間', 'リマインダー種別', 'リマインダー時間', '契約後即利用許可', + '項目表示設定:性別', '項目表示設定:生年月日', '項目表示設定:防犯登録番号', + '二点間距離', '駐車場座標(緯度)', '駐車場座標(経度)', '電話番号', + '駐輪場契約形態(定期)', '駐輪場契約形態(一時利用)', '車種制限', '手続方法', '支払方法', + '利用可能時間制限フラグ', '利用可能時間(開始)', '利用可能時間(終了)', + '常駐管理人フラグ', '常駐時間(開始)', '常駐時間(終了)', + '屋根フラグ', 'シール発行機フラグ', '駐輪場利用方法', '定期更新期間', + '空き待ち予約', '特記事項', '学生証確認種別', + '減免案内表示フラグ', '減免対象年齢', '減免案内表示開始月数', '年跨ぎ' + ]; - $dataExport = \DB::table('park as p') - ->leftJoin('city as c', 'p.city_id', '=', 'c.city_id') - ->select([ - 'p.park_id', - 'c.city_name', - 'p.park_name', - 'p.park_ruby', - 'p.park_syllabary', - 'p.park_adrs', - 'p.park_close_flag', - 'p.park_day', - 'p.alert_flag', - 'p.print_number', - 'p.keep_alive', - ]) - ->orderBy('p.park_id', 'asc') - ->get(); - $columns = array( - __('駐輪場ID '),// 0 - __('市区ID'),// 1 - __('市区'),// 2 - __('駐輪場名'),// 3 - __('駐輪場ふりがな'),// 4 - __('駐輪場五十音'),// 5 - __('住所'),// 6 - __('閉設フラグ'),// 7 - __('閉設フラグ'),// 8 - __('閉設日'),// 9 - __('残警告チェックフラグ'),// 10 - __('印字数'),// 11 - __('最新キープアライブ')// 12 - ); - $filename = "駐輪場マスタ.csv"; - $file = fopen($filename, 'w+'); - fputcsv($file, $columns); - foreach ($dataExport as $items) { - fputcsv( - $file, - array( - $items->park_id,// 0 - null, // city_id(selectで取得していないので空欄) - $items->city_name ?? '',// 2 - $items->park_name, // 3 - $items->park_ruby, // 4 - $items->park_syllabary, // 5 - $items->park_adrs, // 6 - $items->park_close_flag,// 7 - ($items->park_close_flag == 1 ? '閉設' : '開設'),// 8 - $items->park_day,// 9 - $items->alert_flag,// 10 - $items->print_number,// 11 - $items->keep_alive// 12 - ) - ); + $dataExport = DB::table('park as p') + ->select([ + 'p.park_id', 'p.city_id', 'p.park_name', 'p.park_ruby', 'p.park_syllabary', 'p.park_adrs', + 'p.park_close_flag', 'p.park_day', 'p.alert_flag', 'p.print_number', 'p.keep_alive', + 'p.operator_id', 'p.update_grace_period_start_date', 'p.update_grace_period_start_time', + 'p.update_grace_period_end_date', 'p.update_grace_period_end_time', + 'p.parking_start_grace_period', 'p.reminder_type', 'p.reminder_time', 'p.immediate_use_permit', + 'p.gender_display_flag', 'p.bd_display_flag', 'p.securityreg_display_flag', + 'p.distance_twopoints', 'p.park_latitude', 'p.park_longitude', 'p.park_tel', + 'p.park_fixed_contract', 'p.park_temporary_contract', 'p.park_restriction', + 'p.park_procedure', 'p.park_payment', + 'p.park_available_time_flag', 'p.park_available_time_from', 'p.park_available_time_to', + 'p.park_manager_flag', 'p.park_manager_resident_from', 'p.park_manager_resident_to', + 'p.park_roof_flag', 'p.park_issuing_machine_flag', 'p.park_using_method', + 'p.park_contract_renewal_term', 'p.park_reservation', 'p.park_reference', + 'p.student_id_confirm_type', 'p.reduction_guide_display_flag', 'p.reduction_age', + 'p.reduction_guide_display_start_month', 'p.overyear_flag' + ]) + ->orderBy('p.park_id', 'asc') + ->get(); + + $response = new StreamedResponse(function () use ($dataExport, $columns) { + $stream = fopen('php://output', 'w'); + // Excel兼容 BOM + fwrite($stream, chr(0xEF) . chr(0xBB) . chr(0xBF)); + fputcsv($stream, $columns); + + foreach ($dataExport as $item) { + fputcsv($stream, [ + $item->park_id, $item->city_id, $item->park_name, $item->park_ruby, $item->park_syllabary, $item->park_adrs, + $item->park_close_flag, $item->park_day, $item->alert_flag, $item->print_number, $item->keep_alive, + $item->operator_id, $item->update_grace_period_start_date, $item->update_grace_period_start_time, + $item->update_grace_period_end_date, $item->update_grace_period_end_time, + $item->parking_start_grace_period, $item->reminder_type, $item->reminder_time, $item->immediate_use_permit, + $item->gender_display_flag, $item->bd_display_flag, $item->securityreg_display_flag, + $item->distance_twopoints, $item->park_latitude, $item->park_longitude, $item->park_tel, + $item->park_fixed_contract, $item->park_temporary_contract, $item->park_restriction, + $item->park_procedure, $item->park_payment, + $item->park_available_time_flag, $item->park_available_time_from, $item->park_available_time_to, + $item->park_manager_flag, $item->park_manager_resident_from, $item->park_manager_resident_to, + $item->park_roof_flag, $item->park_issuing_machine_flag, $item->park_using_method, + $item->park_contract_renewal_term, $item->park_reservation, $item->park_reference, + $item->student_id_confirm_type, $item->reduction_guide_display_flag, $item->reduction_age, + $item->reduction_guide_display_start_month, $item->overyear_flag + ]); } - fclose($file); - return Response::download($filename, $filename, $headers); - } + + fclose($stream); + }); + + $response->headers->set('Content-Type', 'text/csv; charset=UTF-8'); + $response->headers->set('Content-Disposition', 'attachment; filename="駐輪場マスタ.csv"'); + $response->headers->set('Cache-Control', 'no-store, no-cache'); + + return $response; +} public function import(Request $request) { diff --git a/resources/views/admin/parks/_form.blade.php b/resources/views/admin/parks/_form.blade.php index 1a6c3db..cd4d236 100644 --- a/resources/views/admin/parks/_form.blade.php +++ b/resources/views/admin/parks/_form.blade.php @@ -5,14 +5,6 @@ $p = $park ?? null; @endphp - -
{{-- 駐輪場ID(編集のみ) --}} @@ -220,11 +212,11 @@ {{-- 駐輪開始期間 --}}
-
- - -
+
+ + +
{{-- リマインダー 種別/時間 --}} @@ -309,9 +301,9 @@ {{-- 二点間距離 / 座標 / 電話番号 --}}
-
- +
+ m
diff --git a/resources/views/admin/parks/add.blade.php b/resources/views/admin/parks/add.blade.php index 224ea4a..977f147 100644 --- a/resources/views/admin/parks/add.blade.php +++ b/resources/views/admin/parks/add.blade.php @@ -28,13 +28,6 @@
- {{-- 画面上部のツールバー(登録ボタン) -
-
- -
-
-
--}} {{-- 本体フォーム(白背景のカード) --}} + + + + + @push('scripts') @endpush diff --git a/resources/views/admin/parks/edit.blade.php b/resources/views/admin/parks/edit.blade.php index f4c2147..eb0718b 100644 --- a/resources/views/admin/parks/edit.blade.php +++ b/resources/views/admin/parks/edit.blade.php @@ -2,80 +2,76 @@ @section('title', '駐輪場マスタ 編集') @section('content') - {{-- ▼ パンくず --}} -
-
-
-
-

編集

-
-
- -
-
-
-
-
- - {{-- 画面上部のツールバー(左:登録/その他、右:削除) --}} -
- -
-
- @csrf - -
-
+{{-- ▼ パンくず --}} +
+
+
+
+

編集

+
+
+ +
- - {{-- 本体フォーム(白背景のカード) --}} -
- @csrf - @method('PUT') - @include('admin.parks._form') - - -
+
- -@endsection + +@endsection \ No newline at end of file diff --git a/resources/views/admin/parks/list.blade.php b/resources/views/admin/parks/list.blade.php index 7f65af4..3dcdfb4 100644 --- a/resources/views/admin/parks/list.blade.php +++ b/resources/views/admin/parks/list.blade.php @@ -52,16 +52,12 @@
-
- + CSV出力 +
-
+ @csrf @@ -146,6 +142,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @endforeach @@ -174,11 +218,5 @@ }); } - // 削除ボタンの確認ダイアログ - document.getElementById('delete-btn').addEventListener('click', function () { - if (confirm('削除してよろしいですか?')) { - document.getElementById('parks-delete-form').submit(); - } - }); @endpush \ No newline at end of file
{{ $park->print_number }} {{ $park->keep_alive }} {{ $park->operator_id ?? '' }}{{ $park->update_grace_period_start_date }}{{ $park->update_grace_period_start_time }}{{ $park->update_grace_period_end_date }}{{ $park->update_grace_period_end_time }}{{ $park->parking_start_grace_period }} + @if($park->reminder_type === 0) + 毎日 + @elseif($park->reminder_type === 1) + 1日おき + @elseif($park->reminder_type === 2) + 2日おき + @else + 未設定 + @endif + {{ $park->reminder_time }}{{ $park->immediate_use_permit == 1 ? '許可する' : '許可しない' }}{{ $park->gender_display_flag == 1 ? '表示する' : '表示しない' }}{{ $park->bd_display_flag == 1 ? '表示する' : '表示しない' }}{{ $park->securityreg_display_flag == 1 ? '表示する' : '表示しない' }}{{ $park->distance_twopoints }}{{ $park->park_latitude }}{{ $park->park_longitude }}{{ $park->park_tel }}{{ $park->park_fixed_contract == 1 ? '定期利用可' : '定期利用不可' }}{{ $park->park_temporary_contract == 1 ? '一時利用可' : '一時利用不可' }}{{ $park->park_restriction }}{{ $park->park_procedure }}{{ $park->park_payment }}{{ $park->park_available_time_flag }}{{ $park->park_available_time_from }}{{ $park->park_available_time_to }}{{ $park->park_manager_flag }}{{ $park->park_manager_resident_from }}{{ $park->park_manager_resident_to }}{{ $park->park_roof_flag }}{{ $park->park_issuing_machine_flag }}{{ $park->park_using_method }}{{ $park->park_contract_renewal_term }}{{ $park->park_reservation }}{{ $park->park_reference }}{{ $park->student_id_confirm_type }}{{ $park->reduction_guide_display_flag }}{{ $park->reduction_age }}{{ $park->reduction_guide_display_start_month }}{{ $park->overyear_flag }}