設定マスタ画面の修正

This commit is contained in:
kin.rinzen 2025-10-07 19:24:06 +09:00
parent 870b944009
commit ee1ce1eb3e
8 changed files with 245 additions and 183 deletions

View File

@ -19,7 +19,7 @@ class SettingController extends Controller
// リクエストから取得 // リクエストから取得
$sort = $request->input('sort', 'setting_id'); $sort = $request->input('sort', 'setting_id');
$sort_type = $request->input('sort_type', 'desc'); $sort_type = $request->input('sort_type', 'asc');
// 許可されたカラムのみソート(安全対策) // 許可されたカラムのみソート(安全対策)
$allowedSorts = ['setting_id', 'setting_key', 'setting_value']; // ← 必要に応じて増やす $allowedSorts = ['setting_id', 'setting_key', 'setting_value']; // ← 必要に応じて増やす
@ -42,15 +42,17 @@ class SettingController extends Controller
/** /**
* 追加GET: 画面 / POST: 登録: /settings/add * 新規追加GET/POST: /settings/add
*/ */
public function add(Request $request) public function add(Request $request)
{ {
if ($request->isMethod('post')) { if ($request->isMethod('post')) {
$v = Validator::make($request->all(), $this->rules()); $v = Validator::make($request->all(), $this->rules());
if ($v->fails()) return back()->withErrors($v)->withInput(); if ($v->fails()) {
return back()->withErrors($v)->withInput();
}
// チェックボックス(未送信時は 0 // チェックボックス(未送信時は false
$data = $this->onlyFillable($request); $data = $this->onlyFillable($request);
$data['printable_alert_flag'] = $request->boolean('printable_alert_flag'); $data['printable_alert_flag'] = $request->boolean('printable_alert_flag');
@ -61,15 +63,15 @@ class SettingController extends Controller
return redirect()->route('settings')->with('success', '設定を登録しました。'); return redirect()->route('settings')->with('success', '設定を登録しました。');
} }
// GET時空フォーム表示
return view('admin.settings.add', [ return view('admin.settings.add', [
'setting' => new Setting(), // フォーム初期化用 'setting' => new Setting(), // フォーム初期化用
'isInfo' => false,
'isEdit' => false, 'isEdit' => false,
]); ]);
} }
/** /**
* 編集GET: 画面 / POST: 更新: /settings/edit/{id} * 編集GET/POST: /settings/edit/{id}
*/ */
public function edit(Request $request, int $id) public function edit(Request $request, int $id)
{ {
@ -77,7 +79,9 @@ class SettingController extends Controller
if ($request->isMethod('post')) { if ($request->isMethod('post')) {
$v = Validator::make($request->all(), $this->rules($id)); $v = Validator::make($request->all(), $this->rules($id));
if ($v->fails()) return back()->withErrors($v)->withInput(); if ($v->fails()) {
return back()->withErrors($v)->withInput();
}
$data = $this->onlyFillable($request); $data = $this->onlyFillable($request);
$data['printable_alert_flag'] = $request->boolean('printable_alert_flag'); $data['printable_alert_flag'] = $request->boolean('printable_alert_flag');
@ -89,13 +93,14 @@ class SettingController extends Controller
return redirect()->route('settings')->with('success', '設定を更新しました。'); return redirect()->route('settings')->with('success', '設定を更新しました。');
} }
// GET時編集フォーム表示
return view('admin.settings.edit', [ return view('admin.settings.edit', [
'setting' => $setting, 'setting' => $setting,
'isInfo' => false,
'isEdit' => true, 'isEdit' => true,
]); ]);
} }
/** /**
* 詳細表示: /settings/info/{id} * 詳細表示: /settings/info/{id}
*/ */
@ -111,25 +116,30 @@ class SettingController extends Controller
} }
/** /**
* 削除(単体/複数対応): /settings/delete * 削除(一覧/編集 共通対応): /settings/delete または /settings/delete/{id}
*/ */
public function delete(Request $request) public function delete(Request $request, $id = null)
{ {
// 一覧画面checkbox で複数削除)
$ids = $request->input('ids'); $ids = $request->input('ids');
$id = $request->input('id');
if ($id) $ids = [$id];
if (!is_array($ids) || empty($ids)) { // 編集画面(単体削除)
return back()->with('error', '削除対象が指定されていません。'); if ($id) {
$ids = [$id];
} }
DB::transaction(function () use ($ids) { // 削除対象が空
Setting::whereIn('setting_id', $ids)->delete(); if (empty($ids)) {
}); return redirect()->route('settings')->with('error', '削除対象が選択されていません。');
}
// 削除処理
Setting::destroy($ids);
return redirect()->route('settings')->with('success', '設定を削除しました。'); return redirect()->route('settings')->with('success', '設定を削除しました。');
} }
// ===== バリデーション・ユーティリティ ===== // ===== バリデーション・ユーティリティ =====
/** /**
@ -142,7 +152,7 @@ class SettingController extends Controller
'web_master' => ['nullable','string','max:255'], 'web_master' => ['nullable','string','max:255'],
'auto_change_date' => ['nullable','date'], 'auto_change_date' => ['nullable','date'],
'auto_chage_master' => ['nullable','string','max:255'], // ※カラム名は仕様通り 'auto_chage_master' => ['nullable','string','max:255'], // ※カラム名は仕様通り
're_issue_alert_number' => ['nullable','integer','min:0'], 're-issue_alert_number' => ['nullable','integer','min:0'],
'image_base_url1' => ['nullable','string','max:255'], 'image_base_url1' => ['nullable','string','max:255'],
'image_base_url2' => ['nullable','string','max:255'], 'image_base_url2' => ['nullable','string','max:255'],
'printable_alert_flag' => ['nullable','boolean'], 'printable_alert_flag' => ['nullable','boolean'],
@ -163,7 +173,7 @@ class SettingController extends Controller
'web_master', 'web_master',
'auto_change_date', 'auto_change_date',
'auto_chage_master', 'auto_chage_master',
're_issue_alert_number', 're-issue_alert_number',
'image_base_url1', 'image_base_url1',
'image_base_url2', 'image_base_url2',
'printable_number', 'printable_number',

View File

@ -24,7 +24,7 @@ class Setting extends Model
'web_master', // ウェブ参照マスタ 'web_master', // ウェブ参照マスタ
'auto_change_date', // ウェブ参照マスタ自動切り替え日時 'auto_change_date', // ウェブ参照マスタ自動切り替え日時
'auto_chage_master', // 自動切換えウェブ参照マスタ※DB定義のままchage 'auto_chage_master', // 自動切換えウェブ参照マスタ※DB定義のままchage
're_issue_alert_number', // 再発行アラート回数 're-issue_alert_number', // 再発行アラート回数
'image_base_url1', // ニュースイメージURLベース名 'image_base_url1', // ニュースイメージURLベース名
'image_base_url2', // 本人確認写真URLベース名 'image_base_url2', // 本人確認写真URLベース名
'printable_alert_flag', // プリンタ印字残警告フラグ 'printable_alert_flag', // プリンタ印字残警告フラグ
@ -37,7 +37,7 @@ class Setting extends Model
// キャスト(型変換) // キャスト(型変換)
protected $casts = [ protected $casts = [
'auto_change_date' => 'datetime', // 日時 'auto_change_date' => 'datetime', // 日時
're_issue_alert_number' => 'integer', // 整数 're-issue_alert_number' => 'integer', // 整数
'printable_alert_flag' => 'boolean', // 真偽値 'printable_alert_flag' => 'boolean', // 真偽値
'printable_number' => 'integer', // 整数 'printable_number' => 'integer', // 整数
'printable_alert_number' => 'integer', // 整数 'printable_alert_number' => 'integer', // 整数
@ -46,4 +46,17 @@ class Setting extends Model
'created_at' => 'datetime', // 作成日時 'created_at' => 'datetime', // 作成日時
'updated_at' => 'datetime', // 更新日時 'updated_at' => 'datetime', // 更新日時
]; ];
// アクセサgetter
public function getReissueAlertNumberAttribute()
{
return $this->attributes['re-issue_alert_number'] ?? null;
}
// ミューテタsetter
public function setReissueAlertNumberAttribute($value)
{
$this->attributes['re-issue_alert_number'] = $value;
}
} }

View File

@ -1,4 +1,4 @@
{{-- フラッシュメッセージ --}} <!-- {{-- フラッシュメッセージ --}}
@if(session('success')) @if(session('success'))
<div class="alert alert-success alert-dismissible"> <div class="alert alert-success alert-dismissible">
<button type="button" class="close" data-dismiss="alert">×</button> <button type="button" class="close" data-dismiss="alert">×</button>
@ -9,13 +9,34 @@
<button type="button" class="close" data-dismiss="alert">×</button> <button type="button" class="close" data-dismiss="alert">×</button>
{!! session('error') !!} {!! session('error') !!}
</div> </div>
@endif @endif -->
<div class="card-body">
<div class="row">
{{-- 設定ID情報/編集時のみ表示) --}} {{-- アラート --}}
@if(!empty($isInfo) || !empty($isEdit)) @if(Session::has('success'))
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
{{ Session::get('success') }}
</div>
@endif
@if($errors->any())
<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-ban"></i> {{ __('入力内容に不備があります') }}</h4>
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="card-body">
<div class="row mb-3">
{{-- 設定ID編集時のみ表示 --}}
@if(!empty($isEdit))
<div class="form-group col-3"> <div class="form-group col-3">
<label>設定ID</label> <label>設定ID</label>
</div> </div>
@ -28,55 +49,108 @@
<div class="form-group col-3"> <div class="form-group col-3">
<label>編集マスタ</label> <label>編集マスタ</label>
</div> </div>
<div class="form-group col-9"> <div class="form-group col-9 d-flex align-items-center">
<input type="text" name="edit_master" @php
value="{{ old('edit_master', $setting->edit_master ?? '') }}" $editMaster = old('edit_master', $setting->edit_master ?? '_a');
class="form-control form-control-lg" @endphp
@if(!empty($isInfo)) readonly @endif>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="edit_master" id="edit_master_a" value="_a"
@if($editMaster === '_a') checked @endif>
<label class="form-check-label" for="edit_master_a">_a</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="edit_master" id="edit_master_b" value="_b"
@if($editMaster === '_b') checked @endif>
<label class="form-check-label" for="edit_master_b">_b</label>
</div>
<small class="form-text text-muted ml-2">
社員ウェブで使用するマスタのサフィックスを選択してください。
price price_a / price_b
</small>
</div> </div>
{{-- ウェブ参照マスタ --}} {{-- ウェブ参照マスタ --}}
<div class="form-group col-3"> <div class="form-group col-3">
<label>ウェブ参照マスタ</label> <label>ウェブ参照マスタ</label>
</div> </div>
<div class="form-group col-9"> <div class="form-group col-9 d-flex align-items-center">
<input type="text" name="web_master" @php
value="{{ old('web_master', $setting->web_master ?? '') }}" $webMaster = old('web_master', $setting->web_master ?? '_a');
class="form-control form-control-lg" @endphp
@if(!empty($isInfo)) readonly @endif>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="web_master" id="web_master_a" value="_a"
@if($webMaster === '_a') checked @endif>
<label class="form-check-label" for="web_master_a">_a</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="web_master" id="web_master_b" value="_b"
@if($webMaster === '_b') checked @endif>
<label class="form-check-label" for="web_master_b">_b</label>
</div>
<small class="form-text text-muted ml-2">
ユーザーウェブ、バックグラウンド処理、プリンタ制御プログラムで参照されるマスタのサフィックスを選択してください。
</small>
</div> </div>
{{-- ウェブ参照マスタ自動切り替え日時datetime-local --}}
{{-- ウェブ参照マスタ自動切り替え日時 --}}
<div class="form-group col-3"> <div class="form-group col-3">
<label>ウェブ参照マスタ自動切り替え日時</label> <label>ウェブ参照マスタ自動切り替え日時</label>
</div> </div>
<div class="form-group col-9"> <div class="form-group col-9">
<input type="datetime-local" name="auto_change_date" <input type="datetime-local" name="auto_change_date"
value="{{ old('auto_change_date', optional($setting->auto_change_date ?? null)->format('Y-m-d\TH:i')) }}" value="{{ old('auto_change_date', optional($setting->auto_change_date ?? null)->format('Y-m-d\TH:i')) }}"
class="form-control form-control-lg" class="form-control form-control-lg">
@if(!empty($isInfo)) readonly @endif>
</div> </div>
{{-- 自動切換えウェブ参照マスタ(※カラム名 chage --}} {{-- 自動切換えウェブ参照マスタ --}}
<div class="form-group col-3"> <div class="form-group col-3">
<label>自動切換えウェブ参照マスタ</label> <label>自動切換えウェブ参照マスタ</label>
</div> </div>
<div class="form-group col-9"> <div class="form-group col-9 d-flex align-items-center">
<input type="text" name="auto_chage_master" @php
value="{{ old('auto_chage_master', $setting->auto_chage_master ?? '') }}" $autoChangeMaster = old('auto_change_master', $setting->auto_change_master ?? '_a');
class="form-control form-control-lg" @endphp
@if(!empty($isInfo)) readonly @endif>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="auto_change_master" id="auto_change_master_a" value="_a"
@if($autoChangeMaster === '_a') checked @endif>
<label class="form-check-label" for="auto_change_master_a">_a</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="auto_change_master" id="auto_change_master_b" value="_b"
@if($autoChangeMaster === '_b') checked @endif>
<label class="form-check-label" for="auto_change_master_b">_b</label>
</div>
<small class="form-text text-muted ml-2">
「ウェブ参照マスタ自動切り替え日時」に切換え後に使用するマスタのサフィックス_a または _bを選択してください。
</small>
</div> </div>
{{-- 再発行アラート回数 --}} {{-- 再発行アラート回数 --}}
<div class="form-group col-3"> <div class="form-group col-3">
<label>再発行アラート回数</label> <label>再発行アラート回数</label>
</div> </div>
<div class="form-group col-9"> <div class="form-group col-9">
<input type="number" name="re_issue_alert_number" min="0" <input type="number" name="re-issue_alert_number" min="0"
value="{{ old('re_issue_alert_number', $setting->re_issue_alert_number ?? '') }}" value="{{ old('re-issue_alert_number', $setting->reissue_alert_number ?? '') }}"
class="form-control form-control-lg" class="form-control form-control-lg"
@if(!empty($isInfo)) readonly @endif> placeholder="3">
<small class="form-text text-muted">
この回数以上シールが再発行された場合、キューに追加されます。
</small>
</div> </div>
{{-- ニュースイメージURLベース名 --}} {{-- ニュースイメージURLベース名 --}}
@ -86,8 +160,7 @@
<div class="form-group col-9"> <div class="form-group col-9">
<input type="text" name="image_base_url1" <input type="text" name="image_base_url1"
value="{{ old('image_base_url1', $setting->image_base_url1 ?? '') }}" value="{{ old('image_base_url1', $setting->image_base_url1 ?? '') }}"
class="form-control form-control-lg" class="form-control form-control-lg">
@if(!empty($isInfo)) readonly @endif>
</div> </div>
{{-- 本人確認写真URLベース名 --}} {{-- 本人確認写真URLベース名 --}}
@ -97,11 +170,10 @@
<div class="form-group col-9"> <div class="form-group col-9">
<input type="text" name="image_base_url2" <input type="text" name="image_base_url2"
value="{{ old('image_base_url2', $setting->image_base_url2 ?? '') }}" value="{{ old('image_base_url2', $setting->image_base_url2 ?? '') }}"
class="form-control form-control-lg" class="form-control form-control-lg">
@if(!empty($isInfo)) readonly @endif>
</div> </div>
{{-- プリンタ印字残警告フラグ(チェックボックス) --}} {{-- プリンタ印字残警告フラグ --}}
<div class="form-group col-3"> <div class="form-group col-3">
<label>プリンタ印字残警告フラグ</label> <label>プリンタ印字残警告フラグ</label>
</div> </div>
@ -109,13 +181,22 @@
@php @php
$flag = old('printable_alert_flag', isset($setting) ? (int)$setting->printable_alert_flag : 0); $flag = old('printable_alert_flag', isset($setting) ? (int)$setting->printable_alert_flag : 0);
@endphp @endphp
<input type="hidden" name="printable_alert_flag" value="0">
<input type="checkbox" name="printable_alert_flag" value="1" <div class="form-check form-check-inline">
@if($flag) checked @endif <input class="form-check-input" type="radio" name="printable_alert_flag" id="flag_1" value="1"
@if(!empty($isInfo)) disabled @endif> @if($flag == 1) checked @endif>
<span class="ml-2">{{ $flag ? '有効' : '無効' }}</span> <label class="form-check-label" for="flag_1">有効</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="printable_alert_flag" id="flag_0" value="0"
@if($flag == 0) checked @endif>
<label class="form-check-label" for="flag_0">無効</label>
</div>
</div> </div>
{{-- プリンタロール紙印字可能数 --}} {{-- プリンタロール紙印字可能数 --}}
<div class="form-group col-3"> <div class="form-group col-3">
<label>プリンタロール紙印字可能数</label> <label>プリンタロール紙印字可能数</label>
@ -123,8 +204,7 @@
<div class="form-group col-9"> <div class="form-group col-9">
<input type="number" name="printable_number" min="0" <input type="number" name="printable_number" min="0"
value="{{ old('printable_number', $setting->printable_number ?? '') }}" value="{{ old('printable_number', $setting->printable_number ?? '') }}"
class="form-control form-control-lg" class="form-control form-control-lg">
@if(!empty($isInfo)) readonly @endif>
</div> </div>
{{-- プリンタロール紙印字残警告数 --}} {{-- プリンタロール紙印字残警告数 --}}
@ -134,8 +214,7 @@
<div class="form-group col-9"> <div class="form-group col-9">
<input type="number" name="printable_alert_number" min="0" <input type="number" name="printable_alert_number" min="0"
value="{{ old('printable_alert_number', $setting->printable_alert_number ?? '') }}" value="{{ old('printable_alert_number', $setting->printable_alert_number ?? '') }}"
class="form-control form-control-lg" class="form-control form-control-lg">
@if(!empty($isInfo)) readonly @endif>
</div> </div>
{{-- プリンタ制御プログラムキープアライブ間隔(分) --}} {{-- プリンタ制御プログラムキープアライブ間隔(分) --}}
@ -145,8 +224,7 @@
<div class="form-group col-9"> <div class="form-group col-9">
<input type="number" name="printer_keep_alive" min="0" <input type="number" name="printer_keep_alive" min="0"
value="{{ old('printer_keep_alive', $setting->printer_keep_alive ?? '') }}" value="{{ old('printer_keep_alive', $setting->printer_keep_alive ?? '') }}"
class="form-control form-control-lg" class="form-control form-control-lg">
@if(!empty($isInfo)) readonly @endif>
</div> </div>
{{-- 更新オペレータID --}} {{-- 更新オペレータID --}}
@ -157,37 +235,36 @@
<input type="number" name="operator_id" min="0" <input type="number" name="operator_id" min="0"
value="{{ old('operator_id', $setting->operator_id ?? '') }}" value="{{ old('operator_id', $setting->operator_id ?? '') }}"
class="form-control form-control-lg" class="form-control form-control-lg"
@if(!empty($isInfo)) readonly @endif> readonly>
</div> </div>
{{-- 登録/更新日時(情報表示のみ) --}}
@if(!empty($isInfo))
<div class="form-group col-3">
<label>登録日時</label>
</div>
<div class="form-group col-9">
<input type="text" value="{{ optional($setting->created_at)->format('Y-m-d H:i:s') }}" class="form-control form-control-lg" readonly>
</div>
<div class="form-group col-3">
<label>更新日時</label>
</div>
<div class="form-group col-9">
<input type="text" value="{{ optional($setting->updated_at)->format('Y-m-d H:i:s') }}" class="form-control form-control-lg" readonly>
</div>
@endif
{{-- 下部ボタン --}}
<div class="row mt-4">
<div class="col-3 d-flex align-items-center gap-2">
{{-- 登録ボタン --}}
@if($isEdit)
<button type="button" id="register_edit" class="btn btn-lg btn-success mr-2">
{{ __('登録') }}
</button>
@else
<button type="button" id="register" class="btn btn-lg btn-success mr-2 register">
{{ __('登録') }}
</button>
@endif
{{-- 削除ボタン(編集時のみ表示) --}}
@if($isEdit)
<button type="button" id="delete_edit" class="btn btn-lg btn-danger">
{{ __('削除') }}
</button>
@endif
</div>
</div> </div>
</div> </div>
{{-- ===== 下部ボタン領域 ===== --}}
<div class="card-header">
{{-- 下部ボタン --}}
@if($isEdit)
<button type="submit" class="btn btn-lg btn-success register">{{ __('保存') }}</button>
<button type="submit" class="btn btn-lg btn-secondary register">{{ __('戻る') }}</button>
@else
<button type="submit" class="btn btn-lg btn-success register">{{ __('登録') }}</button>
<button type="submit" class="btn btn-lg btn-danger register">{{ __('削除') }}</button>
@endif
</div>

View File

@ -1,16 +1,18 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', '[東京都|〇〇駐輪場] 設定マスタ') @section('title', '新規')
@section('content') @section('content')
<div class="content-header"> <div class="content-header">
<div class="container-fluid"> <div class="container-fluid">
<div class="row mb-2"> <div class="row mb-2">
<div class="col-lg-6"><h1 class="m-0 text-dark">新規登録</h1></div> <div class="col-sm-6">
<div class="col-lg-6"> <h1 class="m-0 text-dark">新規</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right text-sm"> <ol class="breadcrumb float-sm-right text-sm">
<li class="breadcrumb-item"><a href="#">ホーム</a></li> <li class="breadcrumb-item"><a href="{{ route('home') }}">ホーム</a></li>
<li class="breadcrumb-item"><a href="{{ route('settings') }}">設定マスタ</a></li> <li class="breadcrumb-item"><a href="{{ route('settings') }}">設定マスタ</a></li>
<li class="breadcrumb-item active">新規登録</li> <li class="breadcrumb-item active">新規</li>
</ol> </ol>
</div> </div>
</div> </div>
@ -19,12 +21,18 @@
<section class="content"> <section class="content">
<div class="container-fluid"> <div class="container-fluid">
{{-- 白色カード枠 --}}
<div class="card"> <div class="card">
<form method="post" action="{{ route('settings_add') }}"> <div class="card-body">
@csrf <form id="form_register" action="{{ route('settings_add') }}" method="POST">
@include('admin.settings._form', ['isInfo' => 0, 'isEdit' => 0, 'setting' => $setting ?? new \App\Models\Setting()]) @csrf
</form> @include('admin.settings._form', ['isEdit' => false])
</form>
</div>
</div> </div>
</div> </div>
</section> </section>
@endsection @endsection

View File

@ -1,14 +1,16 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', '[東京都|〇〇駐輪場] 設定マスタ') @section('title', '編集')
@section('content') @section('content')
<div class="content-header"> <div class="content-header">
<div class="container-fluid"> <div class="container-fluid">
<div class="row mb-2"> <div class="row mb-2">
<div class="col-lg-6"><h1 class="m-0 text-dark">編集</h1></div> <div class="col-sm-6">
<div class="col-lg-6"> <h1 class="m-0 text-dark">編集</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right text-sm"> <ol class="breadcrumb float-sm-right text-sm">
<li class="breadcrumb-item"><a href="#">ホーム</a></li> <li class="breadcrumb-item"><a href="{{ route('home') }}">ホーム</a></li>
<li class="breadcrumb-item"><a href="{{ route('settings') }}">設定マスタ</a></li> <li class="breadcrumb-item"><a href="{{ route('settings') }}">設定マスタ</a></li>
<li class="breadcrumb-item active">編集</li> <li class="breadcrumb-item active">編集</li>
</ol> </ol>
@ -20,11 +22,25 @@
<section class="content"> <section class="content">
<div class="container-fluid"> <div class="container-fluid">
<div class="card"> <div class="card">
<form method="post" action="{{ route('settings_edit', ['id' => $setting->setting_id]) }}"> <div class="card-body">
@csrf
@include('admin.settings._form', ['isInfo' => 0, 'isEdit' => 1, 'setting' => $setting]) {{-- 編集フォーム --}}
</form> <form id="form_edit" action="{{ route('settings_edit', ['id' => $setting->setting_id]) }}" method="POST">
@csrf
@include('admin.settings._form', ['isEdit' => true])
</form>
{{-- 削除フォーム --}}
<form id="form_delete"
action="{{ route('settings_delete_id', ['id' => $setting->setting_id]) }}"
method="POST"
style="display:none;">
@csrf
</form>
</div>
</div> </div>
</div> </div>
</section> </section>
@endsection @endsection

View File

@ -1,28 +0,0 @@
@extends('layouts.app')
@section('title', '[東京都|〇〇駐輪場] 設定マスタ')
@section('content')
<div class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-lg-6"><h1 class="m-0 text-dark">設定マスタ 詳細</h1></div>
<div class="col-lg-6">
<ol class="breadcrumb float-sm-right text-sm">
<li class="breadcrumb-item"><a href="#">ホーム</a></li>
<li class="breadcrumb-item"><a href="{{ route('settings') }}">設定マスタ</a></li>
<li class="breadcrumb-item active">詳細</li>
</ol>
</div>
</div>
</div>
</div>
<section class="content">
<div class="container-fluid">
<div class="card">
{{-- 詳細はフォームでなく共通パーツを読み込み(ボタンは「新規/編集」表示) --}}
@include('admin.settings._form', ['isInfo' => 1, 'isEdit' => 0, 'setting' => $setting])
</div>
</div>
</section>
@endsection

View File

@ -1,5 +1,5 @@
@extends('layouts.app') @extends('layouts.app')
@section('title', '[東京都|〇〇駐輪場] 設定マスタ') @section('title', '設定マスタ')
@section('content') @section('content')
<div class="content-header"> <div class="content-header">
@ -51,13 +51,13 @@
@elseif(Session::has('error')) @elseif(Session::has('error'))
<div class="alert alert-danger alert-dismissible"> <div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-ban"></i> {{ __('誤差') }}:</h4> <h4><i class="icon fa fa-ban"></i> {{__('入力内容に不備があります')}}:</h4>
{!! Session::get('error') !!} {!! Session::get('error') !!}
</div> </div>
@elseif(isset($errorMsg)) @elseif(isset($errorMsg))
<div class="alert alert-danger alert-dismissible"> <div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
<h4><i class="icon fa fa-ban"></i> {{ __('誤差') }}:</h4> <h4><i class="icon fa fa-ban"></i> {{__('入力内容に不備があります')}}:</h4>
{!! $errorMsg !!} {!! $errorMsg !!}
</div> </div>
@endif @endif
@ -69,10 +69,10 @@
<form action="{{ route('settings_delete') }}" method="POST" id="form_delete"> <form action="{{ route('settings_delete') }}" method="POST" id="form_delete">
@csrf @csrf
<table class="table table-bordered dataTable text-nowrap"> <table class="table table-bordered dataTable text-nowrap">
<thead> <thead class="thead-light">
<tr> <tr>
<th style="width:120px;" class="text-left"> <th style="width:120px;" class="text-left">
<input type="checkbox" onclick="$('input[name*=\'pk\']').prop('checked', this.checked);"> <input type="checkbox" onclick="$('input[name*=\'ids\']').prop('checked', this.checked);">
</th> </th>
<th sort="setting_id" class="sorting {{ ($sort=='setting_id') ? ($sort_type=='asc'?'sorting_asc':'sorting_desc') : '' }}"><span>{{ __('設定ID') }}</span></th> <th sort="setting_id" class="sorting {{ ($sort=='setting_id') ? ($sort_type=='asc'?'sorting_asc':'sorting_desc') : '' }}"><span>{{ __('設定ID') }}</span></th>
<th sort="edit_master" class="sorting {{ ($sort=='edit_master') ? ($sort_type=='asc'?'sorting_asc':'sorting_desc') : '' }}"><span>{{ __('編集マスタ') }}</span></th> <th sort="edit_master" class="sorting {{ ($sort=='edit_master') ? ($sort_type=='asc'?'sorting_asc':'sorting_desc') : '' }}"><span>{{ __('編集マスタ') }}</span></th>
@ -91,7 +91,7 @@
<tr> <tr>
<td class="align-middle" style="background-color:#faebd7;"> <td class="align-middle" style="background-color:#faebd7;">
<div class="d-flex align-items-center"> <div class="d-flex align-items-center">
<input type="checkbox" class="m-0 checkbox" name="pk[]" value="{{ $row->setting_id }}"> <input type="checkbox" class="m-0 checkbox" name="ids[]" value="{{ $row->setting_id }}">
<a href="{{ route('settings_edit', ['id' => $row->setting_id]) }}" class="btn btn-sm btn-default ml10">{{ __('編集') }}</a> <a href="{{ route('settings_edit', ['id' => $row->setting_id]) }}" class="btn btn-sm btn-default ml10">{{ __('編集') }}</a>
</div> </div>
</td> </td>
@ -122,43 +122,5 @@
<!-- 単一テーブル構成ここまで ----------------------------------------- --> <!-- 単一テーブル構成ここまで ----------------------------------------- -->
</div> </div>
</section> </section>
{{-- 一括削除 & ソート --}}
@push('scripts')
<script>
// 全選択
document.getElementById('checkbox_all')?.addEventListener('change', function(e){
document.querySelectorAll('.checkbox').forEach(cb => cb.checked = e.target.checked);
});
// 削除確認
document.getElementById('delete')?.addEventListener('click', function(){
const anyChecked = Array.from(document.querySelectorAll('.checkbox')).some(cb => cb.checked);
if (!anyChecked) {
alert('削除対象が選択されていません。');
return;
}
if (confirm('削除してよろしいですか?')) {
document.getElementById('form_delete').submit();
}
});
// ソート
document.querySelectorAll('th.sorting').forEach(th => {
th.addEventListener('click', function(){
const form = document.getElementById('list-form');
const current = "{{ $sort ?? '' }}";
const currentType = "{{ $sort_type ?? '' }}";
const nextCol = this.getAttribute('sort');
let nextType = 'asc';
if (current === nextCol) {
nextType = (currentType === 'asc') ? 'desc' : 'asc';
}
form.querySelector('[name=sort]').value = nextCol;
form.querySelector('[name=sort_type]').value = nextType;
form.submit();
});
});
</script>
@endpush
@endsection @endsection

View File

@ -461,6 +461,10 @@ Route::middleware('auth')->group(function () {
->where(['id' => '[0-9]+']) ->where(['id' => '[0-9]+'])
->name('settings_info'); ->name('settings_info');
Route::match(['get', 'post'], '/settings/delete', [SettingController::class, 'delete'])->name('settings_delete'); Route::match(['get', 'post'], '/settings/delete', [SettingController::class, 'delete'])->name('settings_delete');
Route::post('/settings/delete/{id}', [SettingController::class, 'delete'])
->where(['id' => '[0-9]+'])
->name('settings_delete_id');
// [東京都|〇〇駐輪場] メール送信テンプレートマスタ // [東京都|〇〇駐輪場] メール送信テンプレートマスタ
Route::match(['get', 'post'], '/mail_templates', [MailTemplateController::class, 'list'])->name('mail_templates'); Route::match(['get', 'post'], '/mail_templates', [MailTemplateController::class, 'list'])->name('mail_templates');