From 30871b22aea32a4a6552594c8ca87e4d0481182d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=A0=E7=9A=84=E5=90=8D=E5=AD=97?= <你的邮箱> Date: Tue, 7 Oct 2025 18:15:32 +0900 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=88=A9=E7=94=A8=E8=80=85=E5=88=86?= =?UTF-8?q?=E9=A1=9E=E3=83=9E=E3=82=B9=E3=82=BF=E3=80=91=E4=B8=A6=E3=81=B3?= =?UTF-8?q?=E6=9B=BF=E3=81=88=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/Admin/UsertypeController.php | 22 ++- app/Models/Usertype.php | 32 +++-- .../views/admin/usertypes/_form.blade.php | 48 +++++-- .../views/admin/usertypes/edit.blade.php | 78 +++++++++-- .../views/admin/usertypes/list.blade.php | 132 +++++++++--------- 5 files changed, 212 insertions(+), 100 deletions(-) diff --git a/app/Http/Controllers/Admin/UsertypeController.php b/app/Http/Controllers/Admin/UsertypeController.php index 0b53e66..1ce9a6e 100644 --- a/app/Http/Controllers/Admin/UsertypeController.php +++ b/app/Http/Controllers/Admin/UsertypeController.php @@ -15,9 +15,16 @@ class UsertypeController extends Controller { public function list(Request $request) { - $sortable = ['user_categoryid', 'sort_order', 'usertype_subject1', 'usertype_subject2', 'usertype_subject3', 'print_name', 'usertype_remarks']; $sort = $request->input('sort', 'user_categoryid'); - if (!in_array($sort, $sortable, true)) { + $allowSort = [ + 'user_categoryid', + 'sort_order', + 'usertype_subject1', + 'usertype_subject2', + 'usertype_subject3', + 'print_name', + ]; + if (!in_array($sort, $allowSort, true)) { $sort = 'user_categoryid'; } $sortType = strtolower($request->input('sort_type', 'asc')); @@ -33,9 +40,9 @@ class UsertypeController extends Controller ]; $filters = [ 'filter_sort_order' => $request->input('filter_sort_order', ''), - 'filter_category_name1' => $request->input('filter_category_name1', ''), - 'filter_category_name2' => $request->input('filter_category_name2', ''), - 'filter_category_name3' => $request->input('filter_category_name3', ''), + 'filter_usertype_subject1' => $request->input('filter_usertype_subject1', ''), + 'filter_usertype_subject2' => $request->input('filter_usertype_subject2', ''), + 'filter_usertype_subject3' => $request->input('filter_usertype_subject3', ''), ]; $searchParams = array_merge($inputs, $filters); $viewData = $searchParams; @@ -227,7 +234,10 @@ class UsertypeController extends Controller 'isExport' => 1, 'sort' => $request->input('sort', ''), 'sort_type' => $request->input('sort_type', ''), - + 'filter_sort_order' => $request->input('filter_sort_order', ''), + 'filter_usertype_subject1' => $request->input('filter_usertype_subject1', ''), + 'filter_usertype_subject2' => $request->input('filter_usertype_subject2', ''), + 'filter_usertype_subject3' => $request->input('filter_usertype_subject3', ''), ]; $dataExport = Usertype::search($inputs); diff --git a/app/Models/Usertype.php b/app/Models/Usertype.php index b2b28ae..0501705 100644 --- a/app/Models/Usertype.php +++ b/app/Models/Usertype.php @@ -34,28 +34,36 @@ class Usertype extends Model }); } - public static function search($inputs) + public static function search(array $inputs) { $query = self::query(); + $table = (new self())->getTable(); if (!empty($inputs['filter_sort_order'])) { $query->where('sort_order', $inputs['filter_sort_order']); } - if (!empty($inputs['filter_category_name1'])) { - $query->where('usertype_subject1', 'like', '%' . $inputs['filter_category_name1'] . '%'); + if (!empty($inputs['filter_usertype_subject1'])) { + $query->where('usertype_subject1', 'like', '%' . $inputs['filter_usertype_subject1'] . '%'); } - if (!empty($inputs['filter_category_name2'])) { - $query->where('usertype_subject2', 'like', '%' . $inputs['filter_category_name2'] . '%'); + if (!empty($inputs['filter_usertype_subject2'])) { + $query->where('usertype_subject2', 'like', '%' . $inputs['filter_usertype_subject2'] . '%'); } - if (!empty($inputs['filter_category_name3'])) { - $query->where('usertype_subject3', 'like', '%' . $inputs['filter_category_name3'] . '%'); + if (!empty($inputs['filter_usertype_subject3'])) { + $query->where('usertype_subject3', 'like', '%' . $inputs['filter_usertype_subject3'] . '%'); } - $sortable = ['user_categoryid', 'sort_order', 'usertype_subject1', 'usertype_subject2', 'usertype_subject3', 'print_name', 'usertype_remarks']; - $sortColumn = $inputs['sort'] ?? 'user_categoryid'; - if (!in_array($sortColumn, $sortable, true)) { - $sortColumn = 'user_categoryid'; - } + $sortable = [ + 'user_categoryid' => "{$table}.user_categoryid", + 'sort_order' => "{$table}.sort_order", + 'usertype_subject1' => "{$table}.usertype_subject1", + 'usertype_subject2' => "{$table}.usertype_subject2", + 'usertype_subject3' => "{$table}.usertype_subject3", + 'print_name' => "{$table}.print_name", + 'usertype_remarks' => "{$table}.usertype_remarks", + ]; + + $sortKey = $inputs['sort'] ?? 'user_categoryid'; + $sortColumn = $sortable[$sortKey] ?? "{$table}.user_categoryid"; $direction = strtolower($inputs['sort_type'] ?? 'asc'); if (!in_array($direction, ['asc', 'desc'], true)) { diff --git a/resources/views/admin/usertypes/_form.blade.php b/resources/views/admin/usertypes/_form.blade.php index 0a03880..104464f 100644 --- a/resources/views/admin/usertypes/_form.blade.php +++ b/resources/views/admin/usertypes/_form.blade.php @@ -28,9 +28,10 @@
@if($isInfo) {{ __('登録') }} - {{ __('編集') }} + {{ __('編集') }} @else - + + @if($isEdit)@endif @endif
@endif @@ -106,14 +107,14 @@
@if($isInfo) {{ __('登録') }} - {{ __('編集') }} + {{ __('編集') }} @else - @if($isEdit) - - @endif + @if($isEdit) + + @endif @endif
@@ -151,9 +152,10 @@ if (!$form.length) { return; } + $('.register').off('click.usertypeConfirm').on('click.usertypeConfirm', function (e) { e.preventDefault(); - var submit = function () { $form.trigger('submit'); }; + var submitForm = function () { $form.trigger('submit'); }; if (typeof $.confirm === 'function') { $.confirm({ title: '確認ダイアログ。', @@ -163,15 +165,41 @@ text: 'はい', btnClass: 'btn-primary', keys: ['enter'], - action: submit + action: submitForm }, いいえ: function () {} } }); } else if (window.confirm('登録してよろしいですか?')) { - submit(); + submitForm(); } }); + + var $deleteBtn = $('#btnDeleteInline'); + var $deleteForm = $('#usertype-delete-form'); + if ($deleteBtn.length && $deleteForm.length) { + $deleteBtn.off('click.usertypeDelete').on('click.usertypeDelete', function (e) { + e.preventDefault(); + var submitDelete = function () { $deleteForm.trigger('submit'); }; + if (typeof $.confirm === 'function') { + $.confirm({ + title: '確認ダイアログ。', + content: '削除してよろしいですか?はい/いいえ', + buttons: { + ok: { + text: 'はい', + btnClass: 'btn-primary', + keys: ['enter'], + action: submitDelete + }, + いいえ: function () {} + } + }); + } else if (window.confirm('削除してよろしいですか?')) { + submitDelete(); + } + }); + } }); })(window.jQuery); diff --git a/resources/views/admin/usertypes/edit.blade.php b/resources/views/admin/usertypes/edit.blade.php index 5c45f02..11ea0d2 100644 --- a/resources/views/admin/usertypes/edit.blade.php +++ b/resources/views/admin/usertypes/edit.blade.php @@ -24,17 +24,79 @@
- {{-- 上部の操作ボタン(登録/削除) --}} - - - {{-- カード本体 --}} + {{-- カード本体 --}}
- {{-- 既存の共通フォームをそのまま利用 --}} - @include('admin.usertypes._form', ['isEdit' => 1, 'isInfo' => 0]) - +
+ @csrf + @include('admin.usertypes._form', ['isEdit' => 1, 'isInfo' => 0]) +
+
+ @csrf + +
-@endsection \ No newline at end of file +@endsection + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/admin/usertypes/list.blade.php b/resources/views/admin/usertypes/list.blade.php index ea7ef23..73c41fa 100644 --- a/resources/views/admin/usertypes/list.blade.php +++ b/resources/views/admin/usertypes/list.blade.php @@ -39,7 +39,7 @@ align-items:center; margin-left:4px; gap:0; - letter-spacing:-5px; /* ↑↓を詰める */ + letter-spacing:-3px; /* ↑↓を詰める */ font-size:16px; } .rv-sort-arrows .rv-arrow{ @@ -49,6 +49,7 @@ display:inline-block; } .rv-sort-arrows .rv-arrow.is-active{color:#000;} + .rv-table thead th a{color:#000 !important;} @media (max-width: 767.98px){ .rv-toolbar{flex-direction:column;align-items:flex-start;gap:.5rem;} } @@ -73,20 +74,20 @@
- +
- +
- +
@@ -101,9 +102,9 @@ - - - + + +
@@ -116,9 +117,9 @@ 'sort' => $sort, 'sort_type' => $sort_type, 'filter_sort_order' => $filter_sort_order ?? '', - 'filter_category_name1' => $filter_category_name1 ?? '', - 'filter_category_name2' => $filter_category_name2 ?? '', - 'filter_category_name3' => $filter_category_name3 ?? '', + 'filter_usertype_subject1' => $filter_usertype_subject1 ?? '', + 'filter_usertype_subject2' => $filter_usertype_subject2 ?? '', + 'filter_usertype_subject3' => $filter_usertype_subject3 ?? '', ])->links('pagination') }}
@@ -176,6 +177,23 @@ $down = $state['down'] ?? ''; return ''; }; + $queryParams = [ + 'filter_sort_order' => $filter_sort_order ?? null, + 'filter_usertype_subject1' => $filter_usertype_subject1 ?? null, + 'filter_usertype_subject2' => $filter_usertype_subject2 ?? null, + 'filter_usertype_subject3' => $filter_usertype_subject3 ?? null, + ]; + $queryParams = array_filter($queryParams, static function ($value) { + return !is_null($value) && $value !== ''; + }); + $buildSortUrl = static function (string $column, string $currentSort, string $currentDir, array $baseParams): string { + $nextDir = ($currentSort === $column && $currentDir === 'asc') ? 'desc' : 'asc'; + return route('usertypes', array_merge($baseParams, [ + 'sort' => $column, + 'sort_type' => $nextDir, + 'page' => 1, + ])); + }; @endphp @@ -185,35 +203,47 @@ @php $state = $arrowState('user_categoryid'); @endphp - + @php $state = $arrowState('sort_order'); @endphp - + @php $state = $arrowState('usertype_subject1'); @endphp - + @php $state = $arrowState('usertype_subject2'); @endphp - + @php $state = $arrowState('usertype_subject3'); @endphp - + @php $state = $arrowState('print_name'); @endphp - + @@ -276,32 +306,6 @@ }); } - var sortHeaders = document.querySelectorAll('th[data-sort]'); - if (sortHeaders.length) { - var sortInput = document.getElementById('sort'); - var sortTypeInput = document.getElementById('sort_type'); - var listForm = document.getElementById('list-form'); - if (sortInput && sortTypeInput && listForm) { - Array.prototype.forEach.call(sortHeaders, function (th) { - th.addEventListener('click', function () { - var key = th.getAttribute('data-sort'); - if (!key) { return; } - var nextDirection = 'asc'; - if (sortInput.value === key) { - nextDirection = sortTypeInput.value === 'asc' ? 'desc' : 'asc'; - } - sortInput.value = key; - sortTypeInput.value = nextDirection; - if (typeof listForm.requestSubmit === 'function') { - listForm.requestSubmit(); - } else { - listForm.submit(); - } - }); - }); - } - } - var deleteBtn = document.getElementById('btnDeleteSelected'); if (deleteBtn) { deleteBtn.addEventListener('click', function () { @@ -339,7 +343,7 @@ var exportForm = document.getElementById('form_export'); var filterForm = document.getElementById('list-form'); if (!exportForm || !filterForm) { return; } - ['filter_sort_order', 'filter_category_name1', 'filter_category_name2', 'filter_category_name3', 'sort', 'sort_type'].forEach(function (name) { + ['filter_sort_order', 'filter_usertype_subject1', 'filter_usertype_subject2', 'filter_usertype_subject3', 'sort', 'sort_type'].forEach(function (name) { var source = filterForm.querySelector('[name="' + name + '"]'); var target = exportForm.querySelector('[name="' + name + '"]'); if (source && target) {
- {{__('利用者分類ID')}} - {!! $renderSortIcon($state) !!} - + + {{ __('利用者分類ID') }} + {!! $renderSortIcon($state) !!} + + - {{__('ソートオーダー')}} - {!! $renderSortIcon($state) !!} - + + {{ __('ソートオーダー') }} + {!! $renderSortIcon($state) !!} + + - {{__('分類名1')}} - {!! $renderSortIcon($state) !!} - + + {{ __('分類名1') }} + {!! $renderSortIcon($state) !!} + + - {{__('分類名2')}} - {!! $renderSortIcon($state) !!} - + + {{ __('分類名2') }} + {!! $renderSortIcon($state) !!} + + - {{__('分類名3')}} - {!! $renderSortIcon($state) !!} - + + {{ __('分類名3') }} + {!! $renderSortIcon($state) !!} + + - {{__('印字名')}} - {!! $renderSortIcon($state) !!} - + + {{ __('印字名') }} + {!! $renderSortIcon($state) !!} + + {{__('適用料率')}}