diff --git a/app/Http/Controllers/Admin/UsersController.php b/app/Http/Controllers/Admin/UsersController.php index 07afcd3..29acaad 100644 --- a/app/Http/Controllers/Admin/UsersController.php +++ b/app/Http/Controllers/Admin/UsersController.php @@ -301,6 +301,7 @@ class UsersController $rules = [ 'user_id' => ['required', 'regex:/^\d+$/', 'digits_between:1,10'], // 半角数字(最大10桁) 'user_name' => ['required', 'string', 'max:255'], + 'user_pass' => ['required', 'string', 'min:8', 'confirmed'], // 任意 'user_primemail' => ['nullable', 'email', 'max:255'], 'user_gender' => ['nullable', 'in:男性,女性'], @@ -317,6 +318,9 @@ class UsersController 'user_id.regex' => '利用者IDは半角数字のみで入力してください。', 'user_id.digits_between' => '利用者IDは最大10桁以内で入力してください。', 'user_name.required' => '氏名は必須です。', + 'user_pass.required' => 'パスワードは必須です。', + 'user_pass.min' => 'パスワードは8文字以上で入力してください。', + 'user_pass.confirmed' => 'パスワードと確認用パスワードが一致しません。', ]; // ▼ 属性名(日本語ラベル) @@ -358,6 +362,7 @@ class UsersController */ public function edit(Request $request, int $seq) { + $user = DB::table('user')->where('user_seq', $seq)->first(); if (!$user) { abort(404, '利用者情報が見つかりません。'); @@ -370,6 +375,21 @@ class UsersController $categoryOptions = $this->buildCategoryOptions(); +// ▼ 退会処理専用(hiddenフィールド quit_action があれば退会処理) +if ($request->has('quit_action')) { + DB::table('user')->where('user_seq', $seq)->update([ + 'user_quit_flag' => 1, + 'user_quitday' => now()->format('Y-m-d'), + 'ope_id' => $request->input('ope_id') ?? auth()->user()->ope_id ?? null, + 'updated_at' => now(), + ]); + + return redirect() + ->route('users_edit', ['seq' => $seq]) + ->with('status', '退会処理が完了しました。'); +} + + if ($request->isMethod('get')) { return view('admin.users.edit', [ 'user' => $user, @@ -381,6 +401,7 @@ class UsersController $rules = [ 'user_id' => ['required', 'regex:/^\d+$/', 'digits_between:1,10'], 'user_name' => ['required', 'string', 'max:255'], + 'user_pass' => ['nullable', 'string', 'min:8', 'confirmed'], 'user_primemail' => ['nullable', 'email', 'max:255'], 'user_gender' => ['nullable', 'in:男性,女性,未入力'], 'member_id' => ['nullable', 'string', 'max:255'], @@ -460,4 +481,34 @@ class UsersController ->route('users_edit', ['seq' => $seq]) ->with('status', '利用者情報を更新しました。'); } + + /** + * 利用者削除(POST: 削除実行) + * - user_seq をキーに削除処理を行う + * - 削除前に存在確認を行い、存在しない場合はエラーを返す + * - 削除完了後、一覧画面へリダイレクト + */ + public function delete(Request $request) + { + // ▼ パラメータ取得 + $userSeq = (int) $request->input('user_seq'); + + // ▼ 対象レコード存在確認 + $user = DB::table('user')->where('user_seq', $userSeq)->first(); + if (!$user) { + // 該当データなし + return redirect() + ->route('users') + ->with('error', '利用者情報が見つかりません。'); + } + + // ▼ 削除処理実行 + DB::table('user')->where('user_seq', $userSeq)->delete(); + + // ▼ 正常終了メッセージを一覧画面に表示 + return redirect() + ->route('users') + ->with('success', '利用者を削除しました。'); + } + } diff --git a/app/Models/Park.php b/app/Models/Park.php index 80060ef..2e2507e 100644 --- a/app/Models/Park.php +++ b/app/Models/Park.php @@ -64,15 +64,15 @@ class Park extends Model 'reduction_guide_display_flag', // 減免案内表示フラグ 'reduction_target_age', // 減免対象年齢 'reduction_guide_display_start_month', // 減免案内表示開始月数 - 'cross_year' // 年跨ぎ - // 如有 created_at/updated_at 可省略不填 + 'cross_year', // 年跨ぎ + 'reverse_use_general', // 逆利用一般 + 'reverse_use_student' // 逆利用学生 ]; public static function search($inputs) { $list = self::query(); if ($inputs['isMethodPost']) { - // 搜索条件可追加 } // Sort if ($inputs['sort']) { diff --git a/resources/views/admin/users/_form.blade.php b/resources/views/admin/users/_form.blade.php new file mode 100644 index 0000000..4f48471 --- /dev/null +++ b/resources/views/admin/users/_form.blade.php @@ -0,0 +1,516 @@ +{{-- 利用者マスタ 共通フォーム --}} +
+ @csrf + +
+
+

基本情報

+
+ +
+ + {{-- 利用者連番(表示のみ) --}} +
+ +
+ +
+
+ + {{-- 利用者ID --}} +
+ +
+ +
+
+ + {{-- 会員ID --}} +
+ +
+ +
+
+ + {{-- パスワード --}} +
+ +
+ +
+
+ + {{-- 手動登録フラグ --}} +
+ +
+
+ + +
+
+ + +
+
+ + @error('user_manual_regist_flag') +
+ {{ $message }} +
+ @enderror +
+ + {{-- 郵送必要フラグ --}} +
+ +
+
+ + +
+
+ + +
+
+ + @error('user_mailing_flag') +
+ {{ $message }} +
+ @enderror +
+ + {{-- 旧定期契約番号 --}} +
+ +
+ +
+
+ + {{-- タグシリアル --}} +
+ +
+ +
+
+ + {{-- タグシリアル(64) --}} +
+ +
+ +
+
+ + {{-- QRコード --}} +
+ +
+ +
+
+ + {{-- タグ/QRフラグ --}} +
+ +
+
+ + +
+
+ + +
+
+
+ + {{-- AID / 設置場所QR --}} +
+ +
+ +
+
+ +
+ +
+ +
+
+ + {{-- 利用者属性 --}} +
+ +
+ +
+
+ + {{-- 利用者名 --}} +
+ +
+ +
+
+ + {{-- フリガナ --}} +
+ +
+ +
+
+ + {{-- 自宅電話番号 --}} +
+ +
+ +
+
+ + {{-- 携帯電話番号 --}} +
+ +
+ +
+
+ + {{-- メールアドレス --}} +
+ +
+ +
+
+ + {{-- 予備メールアドレス --}} +
+ +
+ +
+
+ + {{-- 居住所 --}} +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + {{-- 関連住所 --}} +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + {{-- 区民 --}} +
+ +
+ +
+
+ + {{-- 勤務先 --}} +
+ +
+ +
+
+ + {{-- 学校 --}} +
+ +
+ +
+
+ + {{-- 卒業予定 --}} +
+ +
+ +
+
+ + {{-- 本人確認チェック済(5状態) --}} + @php + $options = [ + 0 => '未チェック', + 1 => '自動チェックOK', + 2 => '手動チェックOK', + 3 => '手動チェックNG', + 4 => '自動チェックNG', + ]; + $current = (string) old('user_idcard_chk_flag', $isEdit ? (string)($user->user_idcard_chk_flag ?? '0') : '0'); + @endphp +
+ +
+ @foreach ($options as $flag => $label) + @php $id = "user_idcard_chk_flag_{$flag}"; @endphp +
+ + +
+ @endforeach +
+
+ + {{-- 本人確認日時 --}} +
+ +
+ +
+
+ + {{-- 本人確認オペレータ --}} +
+ +
+ +
+
+ + {{-- タグ発行関連 --}} +
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+
+ + {{-- 退会 --}} +
+ +
+
+ + +
+
+ + +
+
+
+ +
+ +
+ +
+
+ + @php + use Illuminate\Support\Facades\Storage; + $currentPhoto1 = $isEdit ? ($user->photo_filename1 ?? '') : ''; + $currentPhoto2 = $isEdit ? ($user->photo_filename2 ?? '') : ''; + @endphp + + {{-- 本人確認写真(1) --}} +
+ +
+
+
+ + +
+ + @if ($currentPhoto1) +
+
+ {{ basename($currentPhoto1) }} +
現在登録済み
+
+ +
+ @else +
現在登録なし
+ @endif +
+
+
+ + {{-- 本人確認写真(2) --}} +
+ +
+
+
+ + +
+ + @if ($currentPhoto2) +
+
+ {{ basename($currentPhoto2) }} +
現在登録済み
+
+ +
+ @else +
現在登録なし
+ @endif +
+
+
+ + {{-- 備考 --}} +
+ +
+ +
+
+ +
+ + + {{-- 削除ボタン(別フォームを呼び出す) --}} + + + 戻る + + @if ($isEdit && $hasDeleteRoute) + + @endif +
+ + +
{{-- /.card-body --}} +
{{-- /.card --}} +
diff --git a/resources/views/admin/users/add.blade.php b/resources/views/admin/users/add.blade.php index 7ec7c66..6dda189 100644 --- a/resources/views/admin/users/add.blade.php +++ b/resources/views/admin/users/add.blade.php @@ -7,7 +7,9 @@
-

新規

+
+

新規

+
+
+ +
+
+ + +
+ +
+ + +
+
+
+ {{-- AID / 設置場所QR --}}
@@ -109,7 +200,7 @@
- +
@@ -124,9 +215,9 @@
- +
- +
@@ -139,10 +230,19 @@
-
- - - +
+
+ + +
+
+ + +
+
+ + +
@@ -151,7 +251,10 @@
- +
+ +
+
@@ -159,80 +262,84 @@ {{-- 連絡先 --}}
- +
- +
- +
- +
- +
- +
- +
- {{-- 現住所 --}} + {{-- 居住所 --}}
- +
- +
- +
- +
- {{-- 連絡先住所 --}} + {{-- 関連住所 --}}
- +
- +
- +
- +
@@ -252,13 +359,13 @@
- +
- +
@@ -268,16 +375,50 @@
- +
- +
- {{-- 0/1のみのDBの場合は 0=未チェック / 1=手動チェックOK で保存 --}} - - +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
@@ -303,19 +444,54 @@
+
- -
- - + + +
+ +
+ + + +
+ + +
+ + +
- + +
- -
- - + + +
+ +
+ + +
+ + +
+ + +
@@ -347,11 +523,8 @@
- -
- @@ -360,8 +533,46 @@ + + + {{-- 見た目の微調整(間隔を広げる) --}} -@endsection +@endsection \ No newline at end of file diff --git a/resources/views/admin/users/edit.blade.php b/resources/views/admin/users/edit.blade.php index 82a1cca..2a8018b 100644 --- a/resources/views/admin/users/edit.blade.php +++ b/resources/views/admin/users/edit.blade.php @@ -9,374 +9,146 @@ $value = static function (string $key, $default = '') use ($isEdit, $user) { return old($key, $isEdit ? ($user->{$key} ?? $default) : $default); }; - $hasDeleteRoute = Route::has('users_delete_confirm'); + $hasDeleteRoute = Route::has('users_delete'); $operators = $operators ?? collect(); $categoryOptions = $categoryOptions ?? []; @endphp
-
-
-
-

編集

-
-
- -
-
+
+
+
+

{{ $isEdit ? '編集' : '新規' }}

+
+
+ +
+
-
+
- @if (session('status')) -
{{ session('status') }}
- @endif - @if ($errors->any()) -
-
    - @foreach ($errors->all() as $e) -
  • {{ $e }}
  • - @endforeach -
-
- @endif + {{-- 成功/エラー表示 --}} + @if (session('status')) +
{{ session('status') }}
+ @endif + @if ($errors->any()) +
+
    + @foreach ($errors->all() as $e) +
  • {{ $e }}
  • + @endforeach +
+
+ @endif -
- @csrf + {{-- 共通フォーム部分 --}} + @include('admin.users._form', [ + 'isEdit' => $isEdit, + 'user' => $user ?? null, + 'value' => $value, + 'operators' => $operators, + 'categoryOptions' => $categoryOptions, + ]) -
-
-

基本情報

-
- - @if ($isEdit && $hasDeleteRoute) - - @endif -
-
+ {{-- ▼ 削除用フォーム(非表示) --}} + + @csrf + + -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
利用者連番
利用者ID*
会員ID
氏名*
フリガナ
パスワード - - 未入力の場合は変更されません。 -
メインメールアドレス
予備メールアドレス
携帯電話番号
固定電話番号
性別 - @foreach (['男性','女性','未入力'] as $gender) - @php $id = 'user_gender_'.$gender; @endphp -
- - -
- @endforeach -
生年月日
年齢
学校名
卒業予定
勤務先名
区民区分
本人確認書類
本人確認チェック - @foreach ([0 => '未チェック', 1 => '手動チェックOK'] as $flag => $label) - @php $id = 'user_idcard_chk_flag_'.$flag; @endphp -
- - -
- @endforeach -
本人確認日時
本人確認オペレータ - -
タグ/QRフラグ -
- - -
-
- - -
-
タグシリアル
タグシリアル(64進)
QRコード
AID
設置場所QRID
利用者分類 - -
タグ発行数
タグ発行許可 -
- - -
-
- - -
-
退会フラグ -
- - -
-
- - -
-
退会日
現住所 郵便番号
現住所 都道府県
現住所 市区町村
現住所 番地・建物名
連絡先 郵便番号
連絡先 都道府県
連絡先 市区町村
連絡先 番地・建物名
本人確認書類ファイル1
本人確認書類ファイル2
備考
-
+ @if ($isEdit && $hasDeleteRoute) +
+ @csrf + +
+ @endif - -
- - - @if ($isEdit && $hasDeleteRoute) -
- @csrf - -
- @endif -
+
+{{-- jQuery & jquery-confirm --}} + + + + @push('scripts') +{{-- ▼ 退会ボタン確認ダイアログ --}} @if ($isEdit && $hasDeleteRoute) @endif + + + +{{-- ▼ 本人確認写真削除処理 --}} + @endpush + + @endsection diff --git a/resources/views/admin/users/list.blade.php b/resources/views/admin/users/list.blade.php index 6d773c9..1d28125 100644 --- a/resources/views/admin/users/list.blade.php +++ b/resources/views/admin/users/list.blade.php @@ -97,7 +97,7 @@
+ value="{{ $user_id ?? '' }}" placeholder="利用者ID">
@@ -118,7 +118,7 @@
+ value="{{ $user_tag_serial ?? '' }}" placeholder="タグシリアル">
@@ -136,19 +136,19 @@
+ value="{{ $user_phonetic ?? '' }}" placeholder="フリガナ">
+ value="{{ $phone ?? '' }}" placeholder="電話番号">
+ value="{{ $email ?? '' }}" placeholder="メールアドレス">
@@ -180,8 +180,8 @@ {{-- ▼ 実行/解除 --}}
- - + +
@@ -244,9 +244,9 @@
- 新規 + 新規 {{-- ▼ クリックで隠しフォーム送信 --}} -
@@ -271,7 +271,7 @@ フリガナ - 生年月日 + 生年月日 年齢 携帯電話番号 @@ -304,7 +304,7 @@ @endphp {{-- 利用者ID(リンク) --}} - {{ $item->user_id }} + {{ $item->user_id }} △ {{ $item->user_name }} {{-- タグ/QR --}} {{ $item->tag_qr_flag ? 'QR' : 'タグ' }} {{-- 利用者分類ID/氏名/フリガナ --}} diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index ae6de51..7b9c196 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -340,11 +340,52 @@ - @php // 一般ウェブ管理:ルート名がここに含まれている場合、展開&ハイライト diff --git a/routes/web.php b/routes/web.php index 1c5ce08..a829c36 100644 --- a/routes/web.php +++ b/routes/web.php @@ -102,10 +102,6 @@ Route::middleware('auth')->group(function () { return view('admin.placeholder', ['title' => '利用者詳細', 'feature' => 'users', 'id' => $seq]); })->name('user_info')->where(['seq' => '[0-9]+']); - Route::match(['get', 'post'], '/users/delete', function () { - return redirect()->route('users')->with('info', '削除機能は現在実装中です。'); - })->name('users_delete'); - Route::match(['get', 'post'], '/users/import', function () { return redirect()->route('users')->with('info', 'インポート機能は現在実装中です。'); })->name('users_import'); @@ -222,7 +218,7 @@ Route::middleware('auth')->group(function () { Route::match(['get', 'post'], '/users/add', [UsersController::class, 'add'])->name('users_add'); Route::match(['get', 'post'], '/users/edit/{seq}', [UsersController::class, 'edit'])->where(['seq' => '[0-9]+'])->name('users_edit'); Route::match(['get', 'post'], '/users/export', [UsersController::class, 'export'])->name('users_export'); - Route::post('/users/delete-confirm', [UsersController::class, 'deleteConfirm'])->name('users_delete_confirm'); + Route::post('/users/delete', [UsersController::class, 'delete'])->name('users_delete'); // 定期契約マスタ Route::match(['get', 'post'], '/regularcontracts', [RegularContractController::class, 'list'])->name('regularcontracts');