【利用者マスタ】共通取り込み
All checks were successful
Deploy main / deploy (push) Successful in 22s

This commit is contained in:
你的名字 2025-10-30 16:29:14 +09:00
parent ae331335f8
commit a17960f61c
8 changed files with 1020 additions and 433 deletions

View File

@ -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', '利用者を削除しました。');
}
}

View File

@ -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']) {

View File

@ -0,0 +1,516 @@
{{-- 利用者マスタ 共通フォーム --}}
<form method="post"
id="form_edit"
action="{{ $isEdit ? route('users_edit', ['seq' => $user->user_seq]) : route('users_add') }}"
enctype="multipart/form-data">
@csrf
<div class="card">
<div class="card-header">
<h3 class="card-title">基本情報</h3>
</div>
<div class="card-body">
{{-- 利用者連番(表示のみ) --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">利用者連番</label>
<div class="col-md-10">
<input type="text" class="form-control form-control-sm"
value="{{ $isEdit ? $user->user_seq : '新規' }}" readonly>
</div>
</div>
{{-- 利用者ID --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">利用者ID</label>
<div class="col-md-10">
<input type="text" name="user_id" class="form-control form-control-sm"
value="{{ $value('user_id') }}" readonly>
</div>
</div>
{{-- 会員ID --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">会員ID <span class="text-danger">*</span></label>
<div class="col-md-10">
<input type="text" name="member_id" class="form-control form-control-sm"
value="{{ $value('member_id') }}" placeholder="会員ID">
</div>
</div>
{{-- パスワード --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">パスワード</label>
<div class="col-md-10">
<input type="text" name="user_pass" class="form-control form-control-sm"
value="{{ $value('user_pass') }}" readonly>
</div>
</div>
{{-- 手動登録フラグ --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">
手動登録フラグ <span class="text-danger">*</span>
</label>
<div class="col-md-10 d-flex align-items-center">
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="user_manual_regist_flag"
id="user_manual_regist_flag_1" value="1"
{{ old('user_manual_regist_flag', '0') == '1' ? 'checked' : '' }}>
<label for="user_manual_regist_flag_1" class="form-check-label">はい</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="user_manual_regist_flag"
id="user_manual_regist_flag_0" value="0"
{{ old('user_manual_regist_flag', '0') == '0' ? 'checked' : '' }}>
<label for="user_manual_regist_flag_0" class="form-check-label">いいえ</label>
</div>
</div>
@error('user_manual_regist_flag')
<div class="col-md-10 offset-md-2">
<small class="text-danger">{{ $message }}</small>
</div>
@enderror
</div>
{{-- 郵送必要フラグ --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">
郵送必要フラグ <span class="text-danger">*</span>
</label>
<div class="col-md-10 d-flex align-items-center">
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="user_mailing_flag"
id="user_mailing_flag_1" value="1"
{{ old('user_mailing_flag', '0') == '1' ? 'checked' : '' }}>
<label for="user_mailing_flag_1" class="form-check-label">はい</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="user_mailing_flag"
id="user_mailing_flag_0" value="0"
{{ old('user_mailing_flag', '0') == '0' ? 'checked' : '' }}>
<label for="user_mailing_flag_0" class="form-check-label">いいえ</label>
</div>
</div>
@error('user_mailing_flag')
<div class="col-md-10 offset-md-2">
<small class="text-danger">{{ $message }}</small>
</div>
@enderror
</div>
{{-- 旧定期契約番号 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">旧定期契約番号</label>
<div class="col-md-10">
<input type="text" name="user_tag_serial" value="{{ old('user_tag_serial') }}"
class="form-control" placeholder="旧定期契約番号">
</div>
</div>
{{-- タグシリアル --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">タグシリアル</label>
<div class="col-md-10">
<input type="text" name="user_tag_serial" value="{{ old('user_tag_serial') }}"
class="form-control" placeholder="タグシリアル">
</div>
</div>
{{-- タグシリアル(64) --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">タグシリアル(64)</label>
<div class="col-md-10">
<input type="text" name="user_tag_serial_64" value="{{ old('user_tag_serial_64') }}"
class="form-control" placeholder="タグシリアル(64)">
</div>
</div>
{{-- QRコード --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">QRコード</label>
<div class="col-md-10">
<input type="text" name="qr_code" value="{{ old('qr_code') }}" class="form-control">
</div>
</div>
{{-- タグ/QRフラグ --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">タグ/QRフラグ<span class="text-danger">*</span></label>
<div class="col-md-10 d-flex align-items-center">
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="tag_qr_flag"
id="tag_qr_tag" value="0"
{{ old('tag_qr_flag', '0') == '0' ? 'checked' : '' }}>
<label for="tag_qr_tag" class="form-check-label">QR</label>
</div>
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="tag_qr_flag"
id="tag_qr_qr" value="1"
{{ old('tag_qr_flag', '0') == '1' ? 'checked' : '' }}>
<label for="tag_qr_qr" class="form-check-label">タグ</label>
</div>
</div>
</div>
{{-- AID / 設置場所QR --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">AID</label>
<div class="col-md-10">
<input type="text" name="user_aid" value="{{ old('user_aid') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">居場所通知用QRID</label>
<div class="col-md-10">
<input type="text" name="user_place_qrid" value="{{ old('user_place_qrid') }}" class="form-control">
</div>
</div>
{{-- 利用者属性 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">利用者分類ID</label>
<div class="col-md-10">
<input type="text" name="user_categoryid" value="{{ old('user_categoryid') }}" class="form-control">
</div>
</div>
{{-- 利用者名 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">利用者名 <span class="text-danger">*</span></label>
<div class="col-md-10">
<input type="text" name="user_name" class="form-control form-control-sm"
value="{{ $value('user_name') }}" required>
</div>
</div>
{{-- フリガナ --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">フリガナ</label>
<div class="col-md-10">
<input type="text" name="user_phonetic" class="form-control form-control-sm"
value="{{ $value('user_phonetic') }}">
</div>
</div>
{{-- 自宅電話番号 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">自宅電話番号</label>
<div class="col-md-10">
<input type="text" name="user_homephone" class="form-control form-control-sm"
value="{{ $value('user_homephone') }}" placeholder="000-0000-0000">
</div>
</div>
{{-- 携帯電話番号 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">携帯電話番号</label>
<div class="col-md-10">
<input type="text" name="user_mobile" class="form-control form-control-sm"
value="{{ $value('user_mobile') }}" placeholder="080-0000-0000">
</div>
</div>
{{-- メールアドレス --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">メールアドレス</label>
<div class="col-md-10">
<input type="email" name="user_primemail" class="form-control form-control-sm"
value="{{ $value('user_primemail') }}" placeholder="name@example.com">
</div>
</div>
{{-- 予備メールアドレス --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">予備メールアドレス</label>
<div class="col-md-10">
<input type="email" name="user_submail" class="form-control form-control-sm"
value="{{ $value('user_submail') }}" placeholder="name@example.com">
</div>
</div>
{{-- 居住所 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">居住所:郵便番号</label>
<div class="col-md-10">
<input type="text" name="user_regident_zip" class="form-control form-control-sm"
value="{{ $value('user_regident_zip') }}">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">居住所:都道府県</label>
<div class="col-md-10">
<input type="text" name="user_regident_pre" class="form-control form-control-sm"
value="{{ $value('user_regident_pre') }}">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">居住所:市区町村</label>
<div class="col-md-10">
<input type="text" name="user_regident_city" class="form-control form-control-sm"
value="{{ $value('user_regident_city') }}">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">居住所:住所</label>
<div class="col-md-10">
<input type="text" name="user_regident_add" class="form-control form-control-sm"
value="{{ $value('user_regident_add') }}">
</div>
</div>
{{-- 関連住所 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">関連住所:郵便番号</label>
<div class="col-md-10">
<input type="text" name="user_relate_zip" class="form-control form-control-sm"
value="{{ $value('user_relate_zip') }}">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">関連住所:都道府県</label>
<div class="col-md-10">
<input type="text" name="user_relate_pre" class="form-control form-control-sm"
value="{{ $value('user_relate_pre') }}">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">関連住所:市区町村</label>
<div class="col-md-10">
<input type="text" name="user_relate_city" class="form-control form-control-sm"
value="{{ $value('user_relate_city') }}">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">関連住所:住所</label>
<div class="col-md-10">
<input type="text" name="user_relate_add" class="form-control form-control-sm"
value="{{ $value('user_relate_add') }}">
</div>
</div>
{{-- 区民 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">区民</label>
<div class="col-md-10">
<input type="text" name="ward_residents" class="form-control form-control-sm"
value="{{ $value('ward_residents') }}">
</div>
</div>
{{-- 勤務先 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">勤務先</label>
<div class="col-md-10">
<input type="text" name="user_workplace" class="form-control form-control-sm"
value="{{ $value('user_workplace') }}">
</div>
</div>
{{-- 学校 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">学校</label>
<div class="col-md-10">
<input type="text" name="user_school" class="form-control form-control-sm"
value="{{ $value('user_school') }}">
</div>
</div>
{{-- 卒業予定 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">卒業予定</label>
<div class="col-md-10">
<input type="date" name="user_graduate" class="form-control form-control-sm"
value="{{ $value('user_graduate') }}">
</div>
</div>
{{-- 本人確認チェック済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
<div class="form-group row">
<label class="col-md-2 col-form-label">本人確認チェック済 <span class="text-danger">*</span></label>
<div class="col-md-10 d-flex flex-wrap">
@foreach ($options as $flag => $label)
@php $id = "user_idcard_chk_flag_{$flag}"; @endphp
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="user_idcard_chk_flag" id="{{ $id }}" value="{{ $flag }}"
{{ (string)$flag === $current ? 'checked' : '' }}>
<label class="form-check-label" for="{{ $id }}">{{ $label }}</label>
</div>
@endforeach
</div>
</div>
{{-- 本人確認日時 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">本人確認日時</label>
<div class="col-md-10">
<input type="date" name="user_chk_day" class="form-control form-control-sm"
value="{{ $value('user_chk_day') }}">
</div>
</div>
{{-- 本人確認オペレータ --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">本人確認オペレータ</label>
<div class="col-md-10">
<select name="ope_id" class="form-control form-control-sm">
<option value="">本人確認オペレータID</option>
@foreach ($operators as $operator)
<option value="{{ $operator->ope_id }}"
{{ (string) old('ope_id', $isEdit ? (string) ($user->ope_id ?? '') : '') === (string) $operator->ope_id ? 'selected' : '' }}>
{{ $operator->ope_name }}
</option>
@endforeach
</select>
</div>
</div>
{{-- タグ発行関連 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">タグ発行数</label>
<div class="col-md-10">
<input type="number" name="user_tag_issue" class="form-control form-control-sm"
value="{{ $value('user_tag_issue') }}">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">タグ発行許可<span class="text-danger">*</span></label>
<div class="col-md-10 d-flex flex-wrap">
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="issue_permission"
id="issue_permission_ok" value="1"
{{ $value('issue_permission','1') === '1' ? 'checked' : '' }}>
<label class="form-check-label" for="issue_permission_ok">発行許可</label>
</div>
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="issue_permission"
id="issue_permission_ng" value="0"
{{ $value('issue_permission','1') === '0' ? 'checked' : '' }}>
<label class="form-check-label" for="issue_permission_ng">発行済</label>
</div>
</div>
</div>
{{-- 退会 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">退会フラグ<span class="text-danger">*</span></label>
<div class="col-md-10 d-flex flex-wrap">
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="user_quit_flag"
id="quit_flag_yes" value="1"
{{ $value('user_quit_flag','0') === '1' ? 'checked' : '' }}>
<label class="form-check-label" for="quit_flag_yes">はい</label>
</div>
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="user_quit_flag"
id="quit_flag_no" value="0"
{{ $value('user_quit_flag','0') === '0' ? 'checked' : '' }}>
<label class="form-check-label" for="quit_flag_no">いいえ</label>
</div>
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">退会日</label>
<div class="col-md-10">
<input type="date" name="user_quitday" class="form-control form-control-sm"
value="{{ $value('user_quitday') }}">
</div>
</div>
@php
use Illuminate\Support\Facades\Storage;
$currentPhoto1 = $isEdit ? ($user->photo_filename1 ?? '') : '';
$currentPhoto2 = $isEdit ? ($user->photo_filename2 ?? '') : '';
@endphp
{{-- 本人確認写真1 --}}
<div class="form-group row align-items-start">
<label class="col-md-2 col-form-label">本人確認写真ファイル1</label>
<div class="col-md-10">
<div class="d-flex flex-wrap align-items-center">
<div class="mr-3 mb-2">
<input type="file" name="id_photo1" id="id_photo1" class="form-control-file">
<input type="hidden" name="delete_photo1" id="delete_photo1" value="0">
</div>
@if ($currentPhoto1)
<div class="d-flex align-items-center mb-2">
<div class="mr-3">
<a href="{{ Storage::url($currentPhoto1) }}" target="_blank">{{ basename($currentPhoto1) }}</a>
<div class="text-muted small">現在登録済み</div>
</div>
<button type="button" class="btn btn-default" id="btn-delete-photo1">削除</button>
</div>
@else
<div class="text-muted small mb-2">現在登録なし</div>
@endif
</div>
</div>
</div>
{{-- 本人確認写真2 --}}
<div class="form-group row align-items-start">
<label class="col-md-2 col-form-label">本人確認写真ファイル2</label>
<div class="col-md-10">
<div class="d-flex flex-wrap align-items-center">
<div class="mr-3 mb-2">
<input type="file" name="id_photo2" id="id_photo2" class="form-control-file">
<input type="hidden" name="delete_photo2" id="delete_photo2" value="0">
</div>
@if ($currentPhoto2)
<div class="d-flex align-items-center mb-2">
<div class="mr-3">
<a href="{{ Storage::url($currentPhoto2) }}" target="_blank">{{ basename($currentPhoto2) }}</a>
<div class="text-muted small">現在登録済み</div>
</div>
<button type="button" class="btn btn-default" id="btn-delete-photo2">削除</button>
</div>
@else
<div class="text-muted small mb-2">現在登録なし</div>
@endif
</div>
</div>
</div>
{{-- 備考 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">備考</label>
<div class="col-md-10">
<textarea name="user_remarks" rows="4" class="form-control">{{ old('user_remarks') }}</textarea>
</div>
</div>
<div class="mt-3">
<button type="button" class="btn btn-success" id="register_edit">登録</button>
{{-- 削除ボタン(別フォームを呼び出す) --}}
<button type="button" class="btn btn-danger ml-2" id="delete_edit">削除</button>
<a href="{{ route('users') }}" class="btn btn-secondary ml-2">戻る</a>
@if ($isEdit && $hasDeleteRoute)
<button type="button" class="btn btn-warning ml-2" id="quitForm">退会</button>
@endif
</div>
</div> {{-- /.card-body --}}
</div> {{-- /.card --}}
</form>

View File

@ -7,7 +7,9 @@
<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">
<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="{{ route('home') }}">ホーム</a></li>
@ -44,52 +46,126 @@
{{-- 1列レイアウト(ラベル左 / 入力右) --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">会員ID</label>
<label class="col-md-2 col-form-label">会員ID <span class="text-danger">*</span></label>
<div class="col-md-10">
<input type="text" name="member_id" value="{{ old('member_id') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">利用者ID <span class="text-danger">*</span></label>
<div class="col-md-10">
<input type="text" name="user_id" value="{{ old('user_id') }}" class="form-control" required>
<input type="text" name="user_id" value="{{ old('user_id') }}" class="form-control"
placeholder="会員ID">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">パスワード</label>
<div class="col-md-10">
<input type="password" name="user_pass" class="form-control" autocomplete="new-password">
<input type="password" name="user_pass" class="form-control"
placeholder="パスワード">
</div>
</div>
{{-- タグ/QR & シリアル --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">タグQR</label>
<label class="col-md-2 col-form-label">パスワード確認</label>
<div class="col-md-10">
<input type="password" name="user_pass_confirmation" class="form-control" autocomplete="new-password"
placeholder="パスワード確認">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">
手動登録フラグ <span class="text-danger">*</span>
</label>
<div class="col-md-10 d-flex align-items-center">
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="tag_qr_flag" id="tag_qr_qr" value="1" {{ old('tag_qr_flag','0')=='1'?'checked':'' }}>
<label for="tag_qr_qr" class="form-check-label">QR</label>
<input
class="form-check-input"
type="radio"
name="user_manual_regist_flag"
id="user_manual_regist_flag_1"
value="1"
{{ old('user_manual_regist_flag', '0') == '1' ? 'checked' : '' }}
>
<label for="user_manual_regist_flag_1" class="form-check-label">はい</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="tag_qr_flag" id="tag_qr_tag" value="0" {{ old('tag_qr_flag','0')=='0'?'checked':'' }}>
<label for="tag_qr_tag" class="form-check-label">タグ</label>
<input
class="form-check-input"
type="radio"
name="user_manual_regist_flag"
id="user_manual_regist_flag_0"
value="0"
{{ old('user_manual_regist_flag', '0') == '0' ? 'checked' : '' }}
>
<label for="user_manual_regist_flag_0" class="form-check-label">いいえ</label>
</div>
</div>
{{-- バリデーションエラー表示(任意) --}}
@error('user_manual_regist_flag')
<div class="col-md-10 offset-md-2">
<small class="text-danger">{{ $message }}</small>
</div>
@enderror
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">
郵送必要フラグ <span class="text-danger">*</span>
</label>
<div class="col-md-10 d-flex align-items-center">
<div class="form-check mr-3">
<input
class="form-check-input"
type="radio"
name="user_mailing_flag"
id="user_mailing_flag_1"
value="1"
{{ old('user_mailing_flag', '0') == '1' ? 'checked' : '' }}
>
<label for="user_mailing_flag_1" class="form-check-label">はい</label>
</div>
<div class="form-check">
<input
class="form-check-input"
type="radio"
name="user_mailing_flag"
id="user_mailing_flag_0"
value="0"
{{ old('user_mailing_flag', '0') == '0' ? 'checked' : '' }}
>
<label for="user_mailing_flag_0" class="form-check-label">いいえ</label>
</div>
</div>
{{-- バリデーションエラー表示(任意) --}}
@error('user_mailing_flag')
<div class="col-md-10 offset-md-2">
<small class="text-danger">{{ $message }}</small>
</div>
@enderror
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">旧定期契約番号</label>
<div class="col-md-10">
<input type="text" name="user_tag_serial" value="{{ old('user_tag_serial') }}" class="form-control"
placeholder="旧定期契約番号">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">タグシリアル</label>
<div class="col-md-10">
<input type="text" name="user_tag_serial" value="{{ old('user_tag_serial') }}" class="form-control">
<input type="text" name="user_tag_serial" value="{{ old('user_tag_serial') }}" class="form-control"
placeholder="タグシリアル">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">タグシリアル(64)</label>
<div class="col-md-10">
<input type="text" name="user_tag_serial_64" value="{{ old('user_tag_serial_64') }}" class="form-control">
<input type="text" name="user_tag_serial_64" value="{{ old('user_tag_serial_64') }}" class="form-control"
placeholder="タグシリアル(64)">
</div>
</div>
@ -100,6 +176,21 @@
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">タグ/QRフラグ<span class="text-danger">*</span></label>
<div class="col-md-10 d-flex align-items-center">
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="tag_qr_flag" id="tag_qr_tag" value="0" {{ old('tag_qr_flag', '0') == '0' ? 'checked' : '' }}>
<label for="tag_qr_tag" class="form-check-label">QR</label>
</div>
<div class="form-check mr-3">
<input class="form-check-input" type="radio" name="tag_qr_flag" id="tag_qr_qr" value="1" {{ old('tag_qr_flag', '0') == '1' ? 'checked' : '' }}>
<label for="tag_qr_qr" class="form-check-label">タグ</label>
</div>
</div>
</div>
{{-- AID / 設置場所QR --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">AID</label>
@ -109,7 +200,7 @@
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">設置場所QR</label>
<label class="col-md-2 col-form-label">居場所通知用QRID</label>
<div class="col-md-10">
<input type="text" name="user_place_qrid" value="{{ old('user_place_qrid') }}" class="form-control">
</div>
@ -124,9 +215,9 @@
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label"><span class="text-danger">*</span></label>
<label class="col-md-2 col-form-label">利用者<span class="text-danger">*</span></label>
<div class="col-md-10">
<input type="text" name="user_name" value="{{ old('user_name') }}" class="form-control" required>
<input type="text" name="user_name" value="{{ old('user_name') }}" class="form-control">
</div>
</div>
@ -139,10 +230,19 @@
<div class="form-group row">
<label class="col-md-2 col-form-label">性別</label>
<div class="col-md-10 d-flex align-items-center">
<label class="mr-3"><input type="radio" name="user_gender" value="男性" {{ old('user_gender')=='男性'?'checked':'' }}> 男性</label>
<label class="mr-3"><input type="radio" name="user_gender" value="女性" {{ old('user_gender')=='女性'?'checked':'' }}> 女性</label>
<label><input type="radio" name="user_gender" value="未入力" {{ old('user_gender')=='未入力'?'checked':'' }}> 未入力</label>
<div class="col-md-10">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="user_gender" id="gender_male" value="男性" {{ old('user_gender') == '男性' ? 'checked' : '' }}>
<label class="form-check-label" for="gender_male">男性</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="user_gender" id="gender_female" value="女性" {{ old('user_gender') == '女性' ? 'checked' : '' }}>
<label class="form-check-label" for="gender_female">女性</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="user_gender" id="gender_unknown" value="未入力" {{ old('user_gender') == '未入力' ? 'checked' : '' }}>
<label class="form-check-label" for="gender_unknown">未入力</label>
</div>
</div>
</div>
@ -151,7 +251,10 @@
<div class="col-md-4">
<input type="date" name="user_birthdate" value="{{ old('user_birthdate') }}" class="form-control">
</div>
<label class="col-md-2 col-form-label text-md-right">年齢</label>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">年齢</label>
<div class="col-md-4">
<input type="number" name="user_age" value="{{ old('user_age') }}" class="form-control">
</div>
@ -159,80 +262,84 @@
{{-- 連絡先 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">携帯電話番号</label>
<label class="col-md-2 col-form-label">自宅電話番号</label>
<div class="col-md-10">
<input type="text" name="user_mobile" value="{{ old('user_mobile') }}" class="form-control" placeholder="080-0000-0000">
<input type="text" name="user_homephone" value="{{ old('user_homephone') }}" class="form-control"
placeholder="000-0000-0000">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">自宅電話番号</label>
<label class="col-md-2 col-form-label">携帯電話番号</label>
<div class="col-md-10">
<input type="text" name="user_homephone" value="{{ old('user_homephone') }}" class="form-control" placeholder="000-0000-0000">
<input type="text" name="user_mobile" value="{{ old('user_mobile') }}" class="form-control"
placeholder="080-0000-0000">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">メールアドレス</label>
<div class="col-md-10">
<input type="email" name="user_primemail" value="{{ old('user_primemail') }}" class="form-control" placeholder="name@example.com">
<input type="email" name="user_primemail" value="{{ old('user_primemail') }}" class="form-control"
placeholder="name@example.com">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">予備メール</label>
<label class="col-md-2 col-form-label">予備メールアドレス</label>
<div class="col-md-10">
<input type="email" name="user_submail" value="{{ old('user_submail') }}" class="form-control" placeholder="name@example.com">
<input type="email" name="user_submail" value="{{ old('user_submail') }}" class="form-control"
placeholder="name@example.com">
</div>
</div>
{{-- 住所 --}}
{{-- 住所 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">現住所 郵便番号</label>
<label class="col-md-2 col-form-label">居住所:郵便番号</label>
<div class="col-md-10">
<input type="text" name="user_regident_zip" value="{{ old('user_regident_zip') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">現住所 都道府県</label>
<label class="col-md-2 col-form-label">居住所:都道府県</label>
<div class="col-md-10">
<input type="text" name="user_regident_pre" value="{{ old('user_regident_pre') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">現住所 市区町村</label>
<label class="col-md-2 col-form-label">居住所:市区町村</label>
<div class="col-md-10">
<input type="text" name="user_regident_city" value="{{ old('user_regident_city') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">現住所 住所</label>
<label class="col-md-2 col-form-label">居住所:住所</label>
<div class="col-md-10">
<input type="text" name="user_regident_add" value="{{ old('user_regident_add') }}" class="form-control">
</div>
</div>
{{-- 絡先住所 --}}
{{-- 連住所 --}}
<div class="form-group row">
<label class="col-md-2 col-form-label">連絡先 郵便番号</label>
<label class="col-md-2 col-form-label">関連住所:郵便番号</label>
<div class="col-md-10">
<input type="text" name="user_relate_zip" value="{{ old('user_relate_zip') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">連絡先 都道府県</label>
<label class="col-md-2 col-form-label">関連住所:都道府県</label>
<div class="col-md-10">
<input type="text" name="user_relate_pre" value="{{ old('user_relate_pre') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">連絡先 市区町村</label>
<label class="col-md-2 col-form-label">関連住所:市区町村</label>
<div class="col-md-10">
<input type="text" name="user_relate_city" value="{{ old('user_relate_city') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">連絡先 住所</label>
<label class="col-md-2 col-form-label">関連住所:住所</label>
<div class="col-md-10">
<input type="text" name="user_relate_add" value="{{ old('user_relate_add') }}" class="form-control">
</div>
@ -252,13 +359,13 @@
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">学校</label>
<label class="col-md-2 col-form-label">学校</label>
<div class="col-md-10">
<input type="text" name="user_school" value="{{ old('user_school') }}" class="form-control">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">卒業</label>
<label class="col-md-2 col-form-label">卒業予定</label>
<div class="col-md-10">
<input type="date" name="user_graduate" value="{{ old('user_graduate') }}" class="form-control">
</div>
@ -268,16 +375,50 @@
<div class="form-group row">
<label class="col-md-2 col-form-label">本人確認書類</label>
<div class="col-md-10">
<input type="text" name="user_idcard" value="{{ old('user_idcard') }}" class="form-control" placeholder="運転免許証 など">
<input type="text" name="user_idcard" value="{{ old('user_idcard') }}" class="form-control"
placeholder="運転免許証 など">
</div>
</div>
<div class="form-group row">
<label class="col-md-2 col-form-label">本人確認チェック</label>
<label class="col-md-2 col-form-label">
本人確認チェック済 <span class="text-danger">*</span>
</label>
<div class="col-md-10">
{{-- 0/1のみのDBの場合は 0=未チェック / 1=手動チェックOK で保存 --}}
<label class="mr-3"><input type="radio" name="user_idcard_chk_flag" value="0" {{ old('user_idcard_chk_flag','0')=='0'?'checked':'' }}> 未チェック</label>
<label><input type="radio" name="user_idcard_chk_flag" value="1" {{ old('user_idcard_chk_flag')=='1'?'checked':'' }}> 手動チェックOK</label>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio"
name="user_idcard_chk_flag" id="chk_none" value="0"
{{ old('user_idcard_chk_flag','0')=='0' ? 'checked' : '' }}>
<label class="form-check-label" for="chk_none">未チェック</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio"
name="user_idcard_chk_flag" id="chk_auto_ok" value="1"
{{ old('user_idcard_chk_flag')=='1' ? 'checked' : '' }}>
<label class="form-check-label" for="chk_auto_ok">自動チェックOK</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio"
name="user_idcard_chk_flag" id="chk_manual_ok" value="2"
{{ old('user_idcard_chk_flag')=='2' ? 'checked' : '' }}>
<label class="form-check-label" for="chk_manual_ok">手動チェックOK</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio"
name="user_idcard_chk_flag" id="chk_manual_ng" value="3"
{{ old('user_idcard_chk_flag')=='3' ? 'checked' : '' }}>
<label class="form-check-label" for="chk_manual_ng">手動チェックNG</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio"
name="user_idcard_chk_flag" id="chk_auto_ng" value="4"
{{ old('user_idcard_chk_flag')=='4' ? 'checked' : '' }}>
<label class="form-check-label" for="chk_auto_ng">自動チェックNG</label>
</div>
</div>
</div>
@ -303,19 +444,54 @@
</div>
</div>
<!-- タグ発行許可 -->
<div class="form-group row">
<label class="col-md-2 col-form-label">発行可否</label>
<div class="col-md-10">
<label class="mr-3"><input type="radio" name="issue_permission" value="1" {{ old('issue_permission')=='1'?'checked':'' }}> 発行可</label>
<label><input type="radio" name="issue_permission" value="0" {{ old('issue_permission','0')=='0'?'checked':'' }}> 発行不可</label>
<label class="col-md-2 col-form-label">
タグ発行許可 <span class="text-danger">*</span>
</label>
<div class="col-md-10 d-flex flex-wrap">
<!-- 発行可 -->
<div class="form-check mr-3">
<!-- old の既定値は '0'= 発行不可) -->
<input class="form-check-input" type="radio"
name="issue_permission" id="issue_perm_yes" value="1"
{{ old('issue_permission') == '1' ? 'checked' : '' }}>
<label class="form-check-label" for="issue_perm_yes">発行許可</label>
</div>
<!-- 発行不可 -->
<div class="form-check mr-3">
<input class="form-check-input" type="radio"
name="issue_permission" id="issue_perm_no" value="0"
{{ old('issue_permission','0') == '0' ? 'checked' : '' }}>
<label class="form-check-label" for="issue_perm_no">発行済</label>
</div>
</div>
</div>
<!-- 退会フラグ -->
<div class="form-group row">
<label class="col-md-2 col-form-label">退会フラグ</label>
<div class="col-md-10">
<label class="mr-3"><input type="radio" name="user_quit_flag" value="1" {{ old('user_quit_flag')=='1'?'checked':'' }}> はい</label>
<label><input type="radio" name="user_quit_flag" value="0" {{ old('user_quit_flag','0')=='0'?'checked':'' }}> いいえ</label>
<label class="col-md-2 col-form-label">
退会フラグ <span class="text-danger">*</span>
</label>
<div class="col-md-10 d-flex flex-wrap">
<!-- はい(= 退会済) -->
<div class="form-check mr-3">
<input class="form-check-input" type="radio"
name="user_quit_flag" id="quit_yes" value="1"
{{ old('user_quit_flag') == '1' ? 'checked' : '' }}>
<label class="form-check-label" for="quit_yes">はい</label>
</div>
<!-- いいえ(= 現在利用中) -->
<div class="form-check mr-3">
<input class="form-check-input" type="radio"
name="user_quit_flag" id="quit_no" value="0"
{{ old('user_quit_flag','0') == '0' ? 'checked' : '' }}>
<label class="form-check-label" for="quit_no">いいえ</label>
</div>
</div>
</div>
@ -347,11 +523,8 @@
<textarea name="user_remarks" rows="4" class="form-control">{{ old('user_remarks') }}</textarea>
</div>
</div>
</div>
<div class="card-footer">
<button type="submit" class="btn btn-primary">登録</button>
<a href="{{ route('users') }}" class="btn btn-default ml-2">戻る</a>
<button type="submit" class="btn btn-success register">登録</button>
<a href="{{ route('users') }}" class="btn btn-secondary ml-2">戻る</a>
</div>
</div>
@ -360,8 +533,46 @@
</div>
</section>
<script>
/**
* 登録ボタン押下時の確認ダイアログ表示処理
* 対象のフォーム送信を一時停止し、ユーザーに確認メッセージを表示する
*/
$(document).on('click', '.register', function (e) {
e.preventDefault(); // デフォルトの送信動作を一旦停止
const $form = $(this).closest('form'); // 押下されたボタンが属するフォームを取得
$.confirm({
title: '確認ダイアログ',
content: '登録してよろしいですか?',
buttons: {
ok: {
text: 'はい',
btnClass: 'btn-primary',
keys: ['enter'],
/**
* 「はい」ボタン押下時の処理
* 対象フォームを送信
*/
action: function () {
$form.trigger('submit'); // 対象フォームのみ送信
}
},
/**
* 「いいえ」ボタン押下時の処理
* 何も実行せずダイアログを閉じる
*/
いいえ: function () {}
}
});
});
</script>
{{-- 見た目の微調整(間隔を広げる) --}}
<style>
.card .form-group { margin-bottom: .85rem; }
.card .form-group {
margin-bottom: .85rem;
}
</style>
@endsection
@endsection

View File

@ -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
<div class="content-header">
<div class="container-fluid">
<div class="row mb-2 align-items-center">
<div class="col-sm-6">
<h1 class="m-0 text-dark">編集</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right text-sm">
<li class="breadcrumb-item"><a href="{{ route('home') }}">ホーム</a></li>
<li class="breadcrumb-item"><a href="{{ route('users') }}">利用者マスタ</a></li>
<li class="breadcrumb-item active">{{ $isEdit ? '編集' : '新規' }}</li>
</ol>
</div>
</div>
<div class="container-fluid">
<div class="row mb-2">
<div class="col-lg-6">
<h1 class="m-0 text-dark">{{ $isEdit ? '編集' : '新規' }}</h1>
</div>
<div class="col-lg-6">
<ol class="breadcrumb float-sm-right text-sm">
<li class="breadcrumb-item"><a href="{{ route('home') }}">ホーム</a></li>
<li class="breadcrumb-item"><a href="{{ route('users') }}">利用者マスタ</a></li>
<li class="breadcrumb-item active">{{ $isEdit ? '編集' : '新規' }}</li>
</ol>
</div>
</div>
</div>
</div>
<section class="content">
<div class="container-fluid">
<div class="container-fluid">
@if (session('status'))
<div class="alert alert-success">{{ session('status') }}</div>
@endif
@if ($errors->any())
<div class="alert alert-danger">
<ul class="mb-0">
@foreach ($errors->all() as $e)
<li>{{ $e }}</li>
@endforeach
</ul>
</div>
@endif
{{-- 成功/エラー表示 --}}
@if (session('status'))
<div class="alert alert-success">{{ session('status') }}</div>
@endif
@if ($errors->any())
<div class="alert alert-danger">
<ul class="mb-0">
@foreach ($errors->all() as $e)
<li>{{ $e }}</li>
@endforeach
</ul>
</div>
@endif
<form method="post"
id="user-edit-form"
action="{{ $isEdit ? route('users_edit', ['seq' => $user->user_seq]) : route('users_add') }}"
enctype="multipart/form-data">
@csrf
{{-- 共通フォーム部分 --}}
@include('admin.users._form', [
'isEdit' => $isEdit,
'user' => $user ?? null,
'value' => $value,
'operators' => $operators,
'categoryOptions' => $categoryOptions,
])
<div class="card shadow-sm">
<div class="card-header d-flex justify-content-between align-items-center">
<h3 class="card-title mb-0 font-weight-bold">基本情報</h3>
<div class="btn-group">
<button type="submit" class="btn btn-success btn-sm px-4">登録</button>
@if ($isEdit && $hasDeleteRoute)
<button type="button" id="btn-quit-top" class="btn btn-outline-danger btn-sm px-4">退会</button>
@endif
</div>
</div>
{{-- 削除用フォーム(非表示) --}}
<form id="form_delete" action="{{ route('users_delete') }}" method="post" class="d-none">
@csrf
<input type="hidden" name="user_seq" value="{{ $user->user_seq ?? '' }}">
</form>
<div class="card-body p-0">
<table class="table table-form mb-0">
<tbody>
<tr>
<th>利用者連番</th>
<td><input type="text" class="form-control form-control-sm bg-secondary-light" value="{{ $isEdit ? $user->user_seq : '新規' }}" readonly></td>
</tr>
<tr>
<th>利用者ID<span class="text-danger ml-1">*</span></th>
<td><input type="text" name="user_id" class="form-control form-control-sm" value="{{ $value('user_id') }}" required></td>
</tr>
<tr>
<th>会員ID</th>
<td><input type="text" name="member_id" class="form-control form-control-sm" value="{{ $value('member_id') }}"></td>
</tr>
<tr>
<th>氏名<span class="text-danger ml-1">*</span></th>
<td><input type="text" name="user_name" class="form-control form-control-sm" value="{{ $value('user_name') }}" required></td>
</tr>
<tr>
<th>フリガナ</th>
<td><input type="text" name="user_phonetic" class="form-control form-control-sm" value="{{ $value('user_phonetic') }}"></td>
</tr>
<tr>
<th>パスワード</th>
<td>
<input type="password" name="user_pass" class="form-control form-control-sm" autocomplete="new-password">
<small class="form-text text-muted">未入力の場合は変更されません。</small>
</td>
</tr>
<tr>
<th>メインメールアドレス</th>
<td><input type="email" name="user_primemail" class="form-control form-control-sm" value="{{ $value('user_primemail') }}" placeholder="name@example.com"></td>
</tr>
<tr>
<th>予備メールアドレス</th>
<td><input type="email" name="user_submail" class="form-control form-control-sm" value="{{ $value('user_submail') }}" placeholder="name@example.com"></td>
</tr>
<tr>
<th>携帯電話番号</th>
<td><input type="text" name="user_mobile" class="form-control form-control-sm" value="{{ $value('user_mobile') }}" placeholder="080-0000-0000"></td>
</tr>
<tr>
<th>固定電話番号</th>
<td><input type="text" name="user_homephone" class="form-control form-control-sm" value="{{ $value('user_homephone') }}" placeholder="03-0000-0000"></td>
</tr>
<tr>
<th>性別</th>
<td>
@foreach (['男性','女性','未入力'] as $gender)
@php $id = 'user_gender_'.$gender; @endphp
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="{{ $id }}" name="user_gender" value="{{ $gender }}" class="custom-control-input" {{ $value('user_gender') === $gender ? 'checked' : '' }}>
<label class="custom-control-label" for="{{ $id }}">{{ $gender }}</label>
</div>
@endforeach
</td>
</tr>
<tr>
<th>生年月日</th>
<td><input type="date" name="user_birthdate" class="form-control form-control-sm" value="{{ $value('user_birthdate') }}"></td>
</tr>
<tr>
<th>年齢</th>
<td><input type="number" name="user_age" class="form-control form-control-sm" value="{{ $value('user_age') }}"></td>
</tr>
<tr>
<th>学校名</th>
<td><input type="text" name="user_school" class="form-control form-control-sm" value="{{ $value('user_school') }}"></td>
</tr>
<tr>
<th>卒業予定</th>
<td><input type="date" name="user_graduate" class="form-control form-control-sm" value="{{ $value('user_graduate') }}"></td>
</tr>
<tr>
<th>勤務先名</th>
<td><input type="text" name="user_workplace" class="form-control form-control-sm" value="{{ $value('user_workplace') }}"></td>
</tr>
<tr>
<th>区民区分</th>
<td><input type="text" name="ward_residents" class="form-control form-control-sm" value="{{ $value('ward_residents') }}"></td>
</tr>
<tr>
<th>本人確認書類</th>
<td><input type="text" name="user_idcard" class="form-control form-control-sm" value="{{ $value('user_idcard') }}"></td>
</tr>
<tr>
<th>本人確認チェック</th>
<td>
@foreach ([0 => '未チェック', 1 => '手動チェックOK'] as $flag => $label)
@php $id = 'user_idcard_chk_flag_'.$flag; @endphp
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="{{ $id }}" name="user_idcard_chk_flag" value="{{ $flag }}" class="custom-control-input" {{ (string)$value('user_idcard_chk_flag','0') === (string)$flag ? 'checked' : '' }}>
<label class="custom-control-label" for="{{ $id }}">{{ $label }}</label>
</div>
@endforeach
</td>
</tr>
<tr>
<th>本人確認日時</th>
<td><input type="date" name="user_chk_day" class="form-control form-control-sm" value="{{ $value('user_chk_day') }}"></td>
</tr>
<tr>
<th>本人確認オペレータ</th>
<td>
<select name="ope_id" class="form-control form-control-sm">
<option value="">本人確認オペレータID</option>
@foreach ($operators as $operator)
<option value="{{ $operator->ope_id }}" {{ (string) old('ope_id', $isEdit ? (string) ($user->ope_id ?? '') : '') === (string) $operator->ope_id ? 'selected' : '' }}>
{{ $operator->ope_name }}
</option>
@endforeach
</select>
</td>
</tr>
<tr>
<th>タグQRフラグ</th>
<td>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="tag_flag_qr" name="tag_qr_flag" value="1" class="custom-control-input" {{ $value('tag_qr_flag','0') === '1' ? 'checked' : '' }}>
<label class="custom-control-label" for="tag_flag_qr">QR</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="tag_flag_tag" name="tag_qr_flag" value="0" class="custom-control-input" {{ $value('tag_qr_flag','0') === '0' ? 'checked' : '' }}>
<label class="custom-control-label" for="tag_flag_tag">タグ</label>
</div>
</td>
</tr>
<tr>
<th>タグシリアル</th>
<td><input type="text" name="user_tag_serial" class="form-control form-control-sm" value="{{ $value('user_tag_serial') }}"></td>
</tr>
<tr>
<th>タグシリアル64進</th>
<td><input type="text" name="user_tag_serial_64" class="form-control form-control-sm" value="{{ $value('user_tag_serial_64') }}"></td>
</tr>
<tr>
<th>QRコード</th>
<td><input type="text" name="qr_code" class="form-control form-control-sm" value="{{ $value('qr_code') }}"></td>
</tr>
<tr>
<th>AID</th>
<td><input type="text" name="user_aid" class="form-control form-control-sm" value="{{ $value('user_aid') }}"></td>
</tr>
<tr>
<th>設置場所QRID</th>
<td><input type="text" name="user_place_qrid" class="form-control form-control-sm" value="{{ $value('user_place_qrid') }}"></td>
</tr>
<tr>
<th>利用者分類</th>
<td>
<select name="user_categoryid" class="form-control form-control-sm">
<option value="">選択してください</option>
@foreach ($categoryOptions as $id => $label)
<option value="{{ $id }}"
{{ (string) old('user_categoryid', $value('user_categoryid')) === (string) $id ? 'selected' : '' }}>
{{ $label }}
</option>
@endforeach
</select>
</td>
</tr>
<tr>
<th>タグ発行数</th>
<td><input type="number" name="user_tag_issue" class="form-control form-control-sm" value="{{ $value('user_tag_issue') }}"></td>
</tr>
<tr>
<th>タグ発行許可</th>
<td>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="issue_permission_ok" name="issue_permission" value="1" class="custom-control-input" {{ $value('issue_permission','1') === '1' ? 'checked' : '' }}>
<label class="custom-control-label" for="issue_permission_ok">許可</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="issue_permission_ng" name="issue_permission" value="0" class="custom-control-input" {{ $value('issue_permission','1') === '0' ? 'checked' : '' }}>
<label class="custom-control-label" for="issue_permission_ng">発行不可</label>
</div>
</td>
</tr>
<tr>
<th>退会フラグ</th>
<td>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="quit_flag_yes" name="user_quit_flag" value="1" class="custom-control-input" {{ $value('user_quit_flag','0') === '1' ? 'checked' : '' }}>
<label class="custom-control-label" for="quit_flag_yes">退会済</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="quit_flag_no" name="user_quit_flag" value="0" class="custom-control-input" {{ $value('user_quit_flag','0') === '0' ? 'checked' : '' }}>
<label class="custom-control-label" for="quit_flag_no">在籍</label>
</div>
</td>
</tr>
<tr>
<th>退会日</th>
<td><input type="date" name="user_quitday" class="form-control form-control-sm" value="{{ $value('user_quitday') }}"></td>
</tr>
<tr>
<th>現住所 郵便番号</th>
<td><input type="text" name="user_regident_zip" class="form-control form-control-sm" value="{{ $value('user_regident_zip') }}"></td>
</tr>
<tr>
<th>現住所 都道府県</th>
<td><input type="text" name="user_regident_pre" class="form-control form-control-sm" value="{{ $value('user_regident_pre') }}"></td>
</tr>
<tr>
<th>現住所 市区町村</th>
<td><input type="text" name="user_regident_city" class="form-control form-control-sm" value="{{ $value('user_regident_city') }}"></td>
</tr>
<tr>
<th>現住所 番地・建物名</th>
<td><input type="text" name="user_regident_add" class="form-control form-control-sm" value="{{ $value('user_regident_add') }}"></td>
</tr>
<tr>
<th>連絡先 郵便番号</th>
<td><input type="text" name="user_relate_zip" class="form-control form-control-sm" value="{{ $value('user_relate_zip') }}"></td>
</tr>
<tr>
<th>連絡先 都道府県</th>
<td><input type="text" name="user_relate_pre" class="form-control form-control-sm" value="{{ $value('user_relate_pre') }}"></td>
</tr>
<tr>
<th>連絡先 市区町村</th>
<td><input type="text" name="user_relate_city" class="form-control form-control-sm" value="{{ $value('user_relate_city') }}"></td>
</tr>
<tr>
<th>連絡先 番地・建物名</th>
<td><input type="text" name="user_relate_add" class="form-control form-control-sm" value="{{ $value('user_relate_add') }}"></td>
</tr>
<tr>
<th>本人確認書類ファイル1</th>
<td><input type="file" name="id_photo1" class="form-control-file"></td>
</tr>
<tr>
<th>本人確認書類ファイル2</th>
<td><input type="file" name="id_photo2" class="form-control-file"></td>
</tr>
<tr>
<th>備考</th>
<td><textarea name="user_remarks" rows="4" class="form-control form-control-sm">{{ $value('user_remarks') }}</textarea></td>
</tr>
</tbody>
</table>
</div>
@if ($isEdit && $hasDeleteRoute)
<form method="post" action="{{ route('users_delete') }}" id="quitForm" class="d-none">
@csrf
<input type="hidden" name="user_seq" value="{{ $user->user_seq ?? '' }}">
</form>
@endif
<div class="card-footer d-flex justify-content-between align-items-center flex-wrap">
<a href="{{ route('users') }}" class="btn btn-outline-secondary">戻る</a>
<div class="btn-group">
@if ($isEdit && $hasDeleteRoute)
<button type="button" class="btn btn-outline-danger" id="btn-quit-bottom">退会</button>
@endif
<button type="submit" class="btn btn-success">登録</button>
</div>
</div>
</div>
</form>
@if ($isEdit && $hasDeleteRoute)
<form method="post" action="{{ route('users_delete_confirm') }}" id="quitForm" class="d-none">
@csrf
<input type="hidden" name="user_seq" value="{{ $user->user_seq }}">
</form>
@endif
</div>
</div>
</section>
{{-- jQuery & jquery-confirm --}}
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-confirm@3.3.4/css/jquery-confirm.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery-confirm@3.3.4/js/jquery-confirm.min.js"></script>
@push('scripts')
{{-- 退会ボタン確認ダイアログ --}}
@if ($isEdit && $hasDeleteRoute)
<script>
(function () {
const confirmQuit = function () {
if (window.confirm('この利用者を退会処理します。よろしいですか?')) {
document.getElementById('quitForm').submit();
$(function () {
$('#quitForm').on('click', function (e) {
e.preventDefault();
$.confirm({
title: '退会確認',
content: 'この利用者を退会処理します。<br>よろしいですか?',
type: 'red', // 可选: 'blue', 'green', 'orange', 'red'
buttons: {
はい: {
text: 'はい',
btnClass: 'btn-danger',
keys: ['enter'],
action: function () {
// ✅ 退会専用 hidden フィールド追加
$('<input>').attr({
type: 'hidden',
name: 'quit_action',
value: '1'
}).appendTo('#form_edit');
$('#form_edit').submit();
}
},
いいえ: {
text: 'いいえ',
btnClass: 'btn-default',
action: function () {}
}
}
};
const btnTop = document.getElementById('btn-quit-top');
const btnBottom = document.getElementById('btn-quit-bottom');
if (btnTop) { btnTop.addEventListener('click', confirmQuit); }
if (btnBottom) { btnBottom.addEventListener('click', confirmQuit); }
})();
});
});
});
</script>
@endif
{{-- 本人確認写真削除処理 --}}
<script>
(function () {
const hookDelete = function(btnId, hiddenId, fileId, label) {
const btn = document.getElementById(btnId);
if (!btn) return;
btn.addEventListener('click', function () {
if (window.confirm(label + ' を削除します。よろしいですか?')) {
const h = document.getElementById(hiddenId);
if (h) h.value = '1';
const f = document.getElementById(fileId);
if (f) f.value = '';
btn.classList.add('disabled');
btn.textContent = '削除予定';
}
});
};
hookDelete('btn-delete-photo1', 'delete_photo1', 'id_photo1', '本人確認写真ファイル1');
hookDelete('btn-delete-photo2', 'delete_photo2', 'id_photo2', '本人確認写真ファイル2');
})();
</script>
@endpush
<style>
.table-form {
width: 100%;
border-collapse: separate;
border-spacing: 0;
}
.table-form th,
.table-form td {
border-bottom: 1px solid #e2e8f0;
padding: 14px 18px;
vertical-align: middle;
}
.table-form th {
width: 22%;
background: #f1f5f9;
font-weight: 600;
color: #334155;
}
.table-form td {
background: #ffffff;
}
.table-form .form-control-sm,
.table-form textarea.form-control-sm {
background: #ffffff;
}
.bg-secondary-light {
background: #f8fafc !important;
}
.card-footer .btn-group .btn + .btn {
margin-left: .5rem;
}
.bg-secondary-light { background: #f8fafc !important; }
.form-check { display: inline-flex; align-items: center; }
.form-check + .form-check { margin-left: 1rem; }
</style>
@endsection

View File

@ -97,7 +97,7 @@
<div class="form-group d-flex align-items-center mb-2">
<label class="filter-label">利用者ID</label>
<input type="text" class="form-control filter-input" name="user_id"
value="{{ $user_id ?? '' }}" placeholder="123456">
value="{{ $user_id ?? '' }}" placeholder="利用者ID">
</div>
<div class="form-group d-flex align-items-center mb-2">
@ -118,7 +118,7 @@
<div class="form-group d-flex align-items-center mb-2">
<label class="filter-label">タグシリアル</label>
<input type="text" class="form-control filter-input" name="user_tag_serial"
value="{{ $user_tag_serial ?? '' }}" placeholder="キーワード…">
value="{{ $user_tag_serial ?? '' }}" placeholder="タグシリアル">
</div>
<div class="form-group d-flex align-items-center mb-2">
@ -136,19 +136,19 @@
<div class="form-group d-flex align-items-center mb-2">
<label class="filter-label">フリガナ</label>
<input type="text" class="form-control filter-input" name="user_phonetic"
value="{{ $user_phonetic ?? '' }}" placeholder="キーワード…">
value="{{ $user_phonetic ?? '' }}" placeholder="フリガナ">
</div>
<div class="form-group d-flex align-items-center mb-2">
<label class="filter-label">電話番号</label>
<input type="text" class="form-control filter-input" name="phone"
value="{{ $phone ?? '' }}" placeholder="012-3456-7890">
value="{{ $phone ?? '' }}" placeholder="電話番号">
</div>
<div class="form-group d-flex align-items-center mb-2">
<label class="filter-label">メールアドレス</label>
<input type="text" class="form-control filter-input" name="email"
value="{{ $email ?? '' }}" placeholder="example@example.com">
value="{{ $email ?? '' }}" placeholder="メールアドレス">
</div>
<div class="form-group d-flex align-items-center mb-2">
@ -180,8 +180,8 @@
{{-- 実行/解除 --}}
<div class="mt-2">
<button type="submit" class="btn btn btn-default">絞り込み</button>
<button type="button" class="btn btn btn-default" id="btn-reset">解除</button>
<button type="submit" class="btn btn btn-success">絞り込み</button>
<button type="button" class="btn btn btn-outline-secondary" id="btn-reset">解除</button>
</div>
</form>
</div>
@ -244,9 +244,9 @@
<div class="d-flex align-items-center mb-2">
<div>
<a href="{{ route('users_add') }}" class="btn btn btn-default">新規</a>
<a href="{{ route('users_add') }}" class="btn btn-primary">新規</a>
{{-- クリックで隠しフォーム送信 --}}
<button type="button" class="btn btn btn-default"
<button type="button" class="btn btn-outline-success"
onclick="document.getElementById('csvForm').submit();">CSV出力</button>
</div>
<div class="ml-auto">
@ -271,7 +271,7 @@
<th style="width:160px;" class="{{ $thClass('user_phonetic') }}">
<a href="{{ $urlFor('user_phonetic') }}" class="header-link">フリガナ</a>
</th>
<th style="width:120px;">生年月日</th>
<th style="width:160px;">生年月日</th>
<th style="width:80px;">年齢</th>
<th style="width:140px;" class="{{ $thClass('user_mobile') }}">
<a href="{{ $urlFor('user_mobile') }}" class="header-link">携帯電話番号</a>
@ -304,7 +304,7 @@
@endphp
<tr>
{{-- 利用者IDリンク --}}
<td class="text-nowrap"><a href="{{ $userEditUrl }}">{{ $item->user_id }}</a></td>
<td class="text-nowrap"><a href="{{ $userEditUrl }}">{{ $item->user_id }} {{ $item->user_name }}</a></td>
{{-- タグQR --}}
<td>{{ $item->tag_qr_flag ? '' : 'タグ' }}</td>
{{-- 利用者分類ID氏名フリガナ --}}

View File

@ -340,11 +340,52 @@
</li>
<!-- 集計業務 -->
<li class="nav-item">
<a href="#" class="nav-link">
@php
// 集計業務:ルート名がここに含まれている場合、展開&ハイライト
$webRoutes = [
'news', // 最新ニュース登録
];
@endphp
<li
class="nav-item has-treeview @if(in_array(app('router')->currentRouteName(), $webRoutes)) menu-open @endif">
<a href="#"
class="nav-link @if(in_array(app('router')->currentRouteName(), $webRoutes)) active @endif">
<i class="nav-icon fa fa-calculator"></i>
<p>集計業務</p>
<p>
集計業務
<i class="right fa fa-angle-down"></i>
</p>
</a>
<ul class="nav nav-treeview">
<li class="nav-item">
<a href="{{ route('news') }}"
class="nav-link @if(app('router')->currentRouteName() === 'news`') active @endif">
<span style="margin-left:20px;">一時売り上げ入力</span>
</a>
</li>
<li class="nav-item">
<a href="{{ route('news') }}"
class="nav-link @if(app('router')->currentRouteName() === 'news`') active @endif">
<span style="margin-left:20px;">売上年報/月報/日報</span>
</a>
</li>
<li class="nav-item">
<a href="{{ route('news') }}"
class="nav-link @if(app('router')->currentRouteName() === 'news`') active @endif">
<span style="margin-left:20px;">売上詳細</span>
</a>
</li>
<li class="nav-item">
<a href="{{ route('news') }}"
class="nav-link @if(app('router')->currentRouteName() === 'news`') active @endif">
<span style="margin-left:20px;">駐輪規定読み込み記録</span>
</a>
</li>
</ul>
</li>
@php
// 一般ウェブ管理:ルート名がここに含まれている場合、展開&ハイライト

View File

@ -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');