diff --git a/app/Enums/ConditionalOperator.php b/app/Enums/ConditionalOperator.php
new file mode 100644
index 000000000..b54a6bd09
--- /dev/null
+++ b/app/Enums/ConditionalOperator.php
@@ -0,0 +1,23 @@
+ '次の値と一致する',
+ self::not_equals => '次の値と一致しない',
+ self::is_empty => '未入力である',
+ self::is_not_empty => '未入力でない',
+ ];
+}
diff --git a/app/Http/Controllers/Auth/RegistersUsers.php b/app/Http/Controllers/Auth/RegistersUsers.php
index 5e8e2baf2..0578a6ee8 100644
--- a/app/Http/Controllers/Auth/RegistersUsers.php
+++ b/app/Http/Controllers/Auth/RegistersUsers.php
@@ -42,7 +42,7 @@ trait RegistersUsers
/**
* Show the application registration form.
- * ユーザー登録画面表示(自動登録)
+ * ユーザー登録画面表示(自動登録)
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
@@ -99,6 +99,9 @@ public function showRegistrationForm(Request $request)
// カラムの登録データ
$input_cols = null;
+ // 条件付き表示の設定を取得
+ $conditional_display_settings = UsersTool::getConditionalDisplaySettings($columns_set_id);
+
// サイトテーマ詰込
$tmp_configs = Configs::getSharedConfigs();
$base_theme = Configs::getConfigsValue($tmp_configs, 'base_theme', null);
@@ -119,6 +122,7 @@ public function showRegistrationForm(Request $request)
'users_columns' => $users_columns,
'users_columns_id_select' => $users_columns_id_select,
'input_cols' => $input_cols,
+ 'conditional_display_settings' => $conditional_display_settings,
'themes' => $themes,
'sections' => Section::orderBy('display_sequence')->get(),
'user_section' => new UserSection(),
diff --git a/app/Models/Core/UsersColumns.php b/app/Models/Core/UsersColumns.php
index d2bc28ca6..b3c5870dd 100644
--- a/app/Models/Core/UsersColumns.php
+++ b/app/Models/Core/UsersColumns.php
@@ -36,6 +36,10 @@ class UsersColumns extends Model
'rule_regex',
'rule_word_count',
'display_sequence',
+ 'conditional_display_flag',
+ 'conditional_trigger_column_id',
+ 'conditional_operator',
+ 'conditional_value',
];
/**
diff --git a/app/Plugins/Manage/UserManage/UserManage.php b/app/Plugins/Manage/UserManage/UserManage.php
index 5cce63ad7..dd995e0e4 100644
--- a/app/Plugins/Manage/UserManage/UserManage.php
+++ b/app/Plugins/Manage/UserManage/UserManage.php
@@ -2,6 +2,7 @@
namespace App\Plugins\Manage\UserManage;
+use App\Enums\ConditionalOperator;
use App\Enums\CsvCharacterCode;
use App\Enums\EditType;
use App\Enums\Required;
@@ -2635,6 +2636,14 @@ public function editColumns($request, $id)
// ユーザーのカラム
$columns = UsersTool::getUsersColumns($id);
+ // トリガー項目として使用されている項目IDを取得
+ $trigger_column_ids = UsersColumns::where('columns_set_id', $id)
+ ->where('conditional_display_flag', ShowType::show)
+ ->whereNotNull('conditional_trigger_column_id')
+ ->distinct()
+ ->pluck('conditional_trigger_column_id')
+ ->toArray();
+
foreach ($columns as &$column) {
if (UsersColumns::isSelectColumnType($column->column_type)) {
// 選択肢
@@ -2646,6 +2655,9 @@ public function editColumns($request, $id)
} else {
$column->selects = collect();
}
+
+ // トリガー項目として使用されているかのフラグを追加
+ $column->is_used_as_trigger = in_array($column->id, $trigger_column_ids);
}
return view('plugins.manage.user.edit_columns', [
@@ -2741,12 +2753,23 @@ public function updateColumn($request, $id)
$column->column_type = $request->$str_column_type;
$message = '項目【 '. $column->column_name .' 】を更新しました。';
+ $messages = [];
+
if (UsersColumns::isShowOnlyColumnType($column->column_type)) {
$column->required = Required::off;
- $message = '項目【 '.$column->column_name.' 】を更新し、表示のみの型のため、必須入力を【 off 】に設定しました。';
+ $messages[] = '表示のみの型のため、必須入力を【 off 】に設定しました';
} else {
// 通常
$column->required = $request->$str_required ? Required::on : Required::off;
+
+ // 必須ONに変更した場合、条件付き表示をOFFにする
+ if ($column->required == Required::on && $column->conditional_display_flag == ShowType::show) {
+ $column->conditional_display_flag = ShowType::not_show;
+ $column->conditional_trigger_column_id = null;
+ $column->conditional_operator = null;
+ $column->conditional_value = null;
+ $messages[] = '必須入力ONのため、条件付き表示を【 OFF 】に設定しました';
+ }
}
// 固定項目以外
@@ -2754,10 +2777,15 @@ public function updateColumn($request, $id)
// 必須入力
if ($column->required == Required::on) {
$column->is_show_auto_regist = ShowType::show;
- $message = '項目【 '.$column->column_name.' 】を更新し、必須入力のため、自動登録時の表示指定【 '.ShowType::getDescription($column->is_show_auto_regist).' 】を設定しました。';
+ $messages[] = '必須入力のため、自動登録時の表示指定【 '.ShowType::getDescription($column->is_show_auto_regist).' 】を設定しました';
}
}
+ // メッセージの生成
+ if (!empty($messages)) {
+ $message = '項目【 '.$column->column_name.' 】を更新し、' . implode('。また、', $messages) . '。';
+ }
+
$column->save();
// 編集画面を呼び出す
@@ -2835,8 +2863,30 @@ public function deleteColumn($request, $id)
// 明細行から削除対象の項目名を抽出
$str_column_name = "column_name_"."$request->column_id";
- // 所属型の関連テーブルを削除
$users_column = UsersColumns::findOrFail($request->column_id);
+
+ // この項目をトリガーにしている項目がないかチェック
+ $dependent_columns = UsersColumns::where('columns_set_id', $request->columns_set_id)
+ ->where('conditional_display_flag', ShowType::show)
+ ->where('conditional_trigger_column_id', $request->column_id)
+ ->get();
+
+ if ($dependent_columns->count() > 0) {
+ // トリガーとして使用されている場合は削除不可(HTMLエスケープ)
+ $dependent_names_escaped = $dependent_columns->pluck('column_name')
+ ->map(function ($name) {
+ return e($name);
+ })
+ ->toArray();
+
+ $error_message = '項目【 '. e($request->$str_column_name) .' 】は以下の項目のトリガーとして使用されているため削除できません。
';
+ $error_message .= '先に以下の項目の条件付き表示をOFFにしてから削除してください。
';
+ $error_message .= '・' . implode('
・', $dependent_names_escaped);
+
+ return redirect()->back()->with('errors_flash_message', $error_message);
+ }
+
+ // 所属型の関連テーブルを削除
if ($users_column->column_type === UserColumnType::affiliation) {
UserSection::query()->delete();
Section::query()->delete();
@@ -2879,14 +2929,24 @@ public function editColumnDetail($request, $id)
$selects = UsersColumnsSelects::where('users_columns_id', $column->id)->orderby('display_sequence')->get();
$select_agree = $selects->first() ?? new UsersColumnsSelects();
+ // トリガー候補の項目を取得
+ // 条件:自分自身を除く(システム固定項目・カスタム必須項目も含める)
+ // ただし、登録フォームに表示されない項目(登録日時、更新日時)は除外
+ $trigger_columns = UsersColumns::where('columns_set_id', $column->columns_set_id)
+ ->where('id', '!=', $id) // 自分自身を除外
+ ->whereNotIn('column_type', UserColumnType::showOnlyColumnTypes())
+ ->orderBy('display_sequence')
+ ->get();
+
return view('plugins.manage.user.edit_column_detail', [
- "function" => __FUNCTION__,
- "plugin_name" => "user",
- 'columns_set' => $columns_set,
- 'column' => $column,
- 'selects' => $selects,
- 'select_agree' => $select_agree,
- 'sections' => Section::orderBy('display_sequence')->get(),
+ "function" => __FUNCTION__,
+ "plugin_name" => "user",
+ 'columns_set' => $columns_set,
+ 'column' => $column,
+ 'selects' => $selects,
+ 'select_agree' => $select_agree,
+ 'sections' => Section::orderBy('display_sequence')->get(),
+ 'trigger_columns' => $trigger_columns,
]);
}
@@ -2932,6 +2992,55 @@ public function updateColumnDetail($request, $id)
$validator_attributes['variable_name'] = '変数名';
}
+ // カラム取得
+ $column = UsersColumns::where('id', $request->column_id)->where('columns_set_id', $request->columns_set_id)->first();
+ if (!$column) {
+ abort(404, 'カラムデータがありません。');
+ }
+
+ // システム固定項目または必須項目は条件付き表示を設定できない
+ if (UsersColumns::isFixedColumnType($column->column_type) || $column->required == Required::on) {
+ // 強制的に条件付き表示をOFFにする
+ $request->merge(['conditional_display_flag' => ShowType::not_show]);
+ }
+
+ // 条件付き表示のバリデーション
+ if ($request->conditional_display_flag == ShowType::show) {
+ $validator_values['conditional_trigger_column_id'] = ['required'];
+ $validator_values['conditional_operator'] = ['required'];
+
+ // 空白チェック(is_empty, is_not_empty)以外の場合のみ条件の値を必須にする
+ if ($request->conditional_operator !== ConditionalOperator::is_empty &&
+ $request->conditional_operator !== ConditionalOperator::is_not_empty) {
+ $validator_values['conditional_value'] = ['required', 'string', 'max:255'];
+ }
+
+ $validator_attributes['conditional_trigger_column_id'] = 'トリガーとなる項目';
+ $validator_attributes['conditional_operator'] = '表示する条件';
+ $validator_attributes['conditional_value'] = '条件の値';
+
+ // トリガー項目の追加バリデーション
+ $validator_values['conditional_trigger_column_id'][] = function ($attribute, $value, $fail) use ($column) {
+ if ($value) {
+ $trigger_column = UsersColumns::find($value);
+ if ($trigger_column) {
+ // 自分自身をトリガーにできない
+ if ($trigger_column->id == $column->id) {
+ $fail('トリガーとなる項目に自分自身は設定できません。');
+ }
+ // 同じ項目セットに属していることを確認
+ if ($trigger_column->columns_set_id != $column->columns_set_id) {
+ $fail('トリガーとなる項目は同じ項目セットに属している必要があります。');
+ }
+ // 循環依存チェック(A→B→C→Aのような循環参照を防止)
+ if (UsersTool::hasCyclicDependency($column->id, $value, $column->columns_set_id)) {
+ $fail('この設定により循環依存が発生します。トリガーとなる項目の依存関係を確認してください。');
+ }
+ }
+ }
+ };
+ }
+
// エラーチェック
if ($validator_values) {
$validator = Validator::make($request->all(), $validator_values);
@@ -2942,9 +3051,6 @@ public function updateColumnDetail($request, $id)
}
}
-
- $column = UsersColumns::where('id', $request->column_id)->where('columns_set_id', $request->columns_set_id)->first();
-
// 項目の更新処理
$column->caption = $request->caption;
if ($request->caption_color) {
@@ -2973,6 +3079,20 @@ public function updateColumnDetail($request, $id)
// 正規表現
$column->rule_regex = $request->rule_regex;
+ // 条件付き表示設定の更新
+ $column->conditional_display_flag = $request->conditional_display_flag ?? ShowType::not_show;
+
+ if ($column->conditional_display_flag == ShowType::show) {
+ $column->conditional_trigger_column_id = $request->conditional_trigger_column_id;
+ $column->conditional_operator = $request->conditional_operator;
+ $column->conditional_value = $request->conditional_value;
+ } else {
+ // OFFの場合はクリア
+ $column->conditional_trigger_column_id = null;
+ $column->conditional_operator = null;
+ $column->conditional_value = null;
+ }
+
// 保存
$column->save();
diff --git a/app/Plugins/Manage/UserManage/UsersTool.php b/app/Plugins/Manage/UserManage/UsersTool.php
index 5a64d8c56..260bc627a 100644
--- a/app/Plugins/Manage/UserManage/UsersTool.php
+++ b/app/Plugins/Manage/UserManage/UsersTool.php
@@ -429,4 +429,97 @@ private static function getOptionClass(): ?string
}
return null;
}
+
+ /**
+ * 条件付き表示の設定情報を取得
+ *
+ * @param int $columns_set_id カラムセットID
+ * @return array 条件付き表示の設定情報の配列
+ */
+ public static function getConditionalDisplaySettings($columns_set_id)
+ {
+ $conditional_columns = UsersColumns::where('columns_set_id', $columns_set_id)
+ ->where('conditional_display_flag', ShowType::show)
+ ->whereNotNull('conditional_trigger_column_id')
+ ->whereNotNull('conditional_operator')
+ ->get();
+
+ // トリガー項目を一括取得(N+1クエリ対策)
+ $trigger_ids = $conditional_columns->pluck('conditional_trigger_column_id')->unique();
+ $trigger_columns = UsersColumns::whereIn('id', $trigger_ids)->get()->keyBy('id');
+
+ $settings = [];
+ foreach ($conditional_columns as $column) {
+ $trigger_column = $trigger_columns->get($column->conditional_trigger_column_id);
+
+ $settings[] = [
+ 'target_column_id' => $column->id,
+ 'trigger_column_id' => $column->conditional_trigger_column_id,
+ 'trigger_column_type' => $trigger_column ? $trigger_column->column_type : null,
+ 'operator' => $column->conditional_operator,
+ 'value' => $column->conditional_value,
+ ];
+ }
+
+ return $settings;
+ }
+
+ /**
+ * 循環依存をチェックする
+ *
+ * 指定された項目をトリガーに設定した場合、循環依存が発生しないかをチェックします。
+ * 例: A→B→C→A のような循環参照を検出
+ *
+ * @param int $column_id 条件付き表示を設定する項目のID
+ * @param int $trigger_column_id トリガーとして設定しようとしている項目のID
+ * @param int $columns_set_id 項目セットID
+ * @return bool 循環依存がある場合true、ない場合false
+ */
+ public static function hasCyclicDependency($column_id, $trigger_column_id, $columns_set_id)
+ {
+ // トリガー項目が設定されていない場合は循環しない
+ if (empty($trigger_column_id)) {
+ return false;
+ }
+
+ // 訪問済みノードを記録(無限ループ防止)
+ $visited = [];
+
+ // 探索スタック(深さ優先探索)
+ $stack = [$trigger_column_id];
+
+ // 同一項目セット内の条件付き表示設定を一度に取得(パフォーマンス最適化)
+ $conditional_columns = UsersColumns::where('columns_set_id', $columns_set_id)
+ ->where('conditional_display_flag', ShowType::show)
+ ->whereNotNull('conditional_trigger_column_id')
+ ->get()
+ ->keyBy('id');
+
+ while (!empty($stack)) {
+ $current_id = array_pop($stack);
+
+ // 自分自身に到達したら循環依存を検出
+ if ($current_id == $column_id) {
+ return true;
+ }
+
+ // 既に訪問済みの場合はスキップ
+ if (in_array($current_id, $visited)) {
+ continue;
+ }
+
+ // 訪問済みとしてマーク
+ $visited[] = $current_id;
+
+ // 現在のノードがトリガーとして設定されているか確認
+ $current_column = $conditional_columns->get($current_id);
+ if ($current_column && $current_column->conditional_trigger_column_id) {
+ // 次のトリガーをスタックに追加
+ $stack[] = $current_column->conditional_trigger_column_id;
+ }
+ }
+
+ // 循環依存なし
+ return false;
+ }
}
diff --git a/database/migrations/2025_10_30_123850_add_conditional_display_to_users_columns.php b/database/migrations/2025_10_30_123850_add_conditional_display_to_users_columns.php
new file mode 100644
index 000000000..d6551c5b8
--- /dev/null
+++ b/database/migrations/2025_10_30_123850_add_conditional_display_to_users_columns.php
@@ -0,0 +1,49 @@
+integer('conditional_display_flag')->default(0)
+ ->comment('条件付き表示フラグ 0:無効 1:有効')
+ ->after('display_sequence');
+
+ $table->integer('conditional_trigger_column_id')->nullable()
+ ->comment('トリガー項目のID (users_columns.id)')
+ ->after('conditional_display_flag');
+
+ $table->string('conditional_operator')->nullable()
+ ->comment('条件演算子 (トリガー項目の値を評価する演算子)')
+ ->after('conditional_trigger_column_id');
+
+ $table->string('conditional_value')->nullable()
+ ->comment('条件の値')
+ ->after('conditional_operator');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('users_columns', function (Blueprint $table) {
+ $table->dropColumn('conditional_display_flag');
+ $table->dropColumn('conditional_trigger_column_id');
+ $table->dropColumn('conditional_operator');
+ $table->dropColumn('conditional_value');
+ });
+ }
+}
diff --git a/resources/views/auth/registe_form.blade.php b/resources/views/auth/registe_form.blade.php
index ecca2a35c..dd7af0dba 100644
--- a/resources/views/auth/registe_form.blade.php
+++ b/resources/views/auth/registe_form.blade.php
@@ -22,6 +22,9 @@
$(function () {
/** ツールチップ有効化 */
$('[data-toggle="tooltip"]').tooltip();
+
+ // 条件付き表示の初期化
+ initConditionalDisplay();
});
/** 項目セット変更submit */
@@ -40,6 +43,250 @@ function changeColumnsSetIdAction(columns_set_id) {
@endif
document.forms['form_register'].submit();
}
+
+ /**
+ * 条件付き表示の初期化
+ */
+ function initConditionalDisplay() {
+ @if (isset($conditional_display_settings) && !empty($conditional_display_settings))
+ var settings = {!! json_encode($conditional_display_settings) !!};
+
+ // 各トリガー項目に対してchangeイベントを設定
+ settings.forEach(function(setting) {
+ // 初回表示時の判定
+ evaluateCondition(setting);
+
+ // 値変更時のイベントリスナーを設定
+ attachEventListeners(setting);
+ });
+ @endif
+ }
+
+ /**
+ * イベントリスナーを設定
+ */
+ function attachEventListeners(setting) {
+ var columnId = setting.trigger_column_id;
+ var columnType = setting.trigger_column_type;
+
+ // システム固定項目の場合
+ if (columnType) {
+ var fixedElement = null;
+ switch(columnType) {
+ case 'user_name':
+ fixedElement = document.getElementById('name');
+ break;
+ case 'login_id':
+ fixedElement = document.getElementById('userid');
+ break;
+ case 'user_email':
+ fixedElement = document.getElementById('email');
+ break;
+ case 'user_password':
+ fixedElement = document.getElementById('password');
+ break;
+ }
+ if (fixedElement) {
+ $(fixedElement).on('change input', function() {
+ evaluateCondition(setting);
+ });
+ return;
+ }
+ }
+
+ // 各入力タイプに応じてイベントリスナーを設定
+ // 1. id="user-column-{id}" の要素(テキスト入力、所属型セレクトボックス)
+ var idElement = document.getElementById('user-column-' + columnId);
+ if (idElement) {
+ $(idElement).on('change input', function() {
+ evaluateCondition(setting);
+ });
+ return; // 見つかったので他の検索は不要
+ }
+
+ // 2. ラジオボタン(users_columns_value[{id}])
+ var radioElements = document.querySelectorAll('input[name="users_columns_value[' + columnId + ']"]');
+ if (radioElements.length > 0) {
+ $(radioElements).on('change', function() {
+ evaluateCondition(setting);
+ });
+ return;
+ }
+
+ // 3. チェックボックス・同意型(users_columns_value[{id}][])
+ var checkboxElements = document.querySelectorAll('input[name="users_columns_value[' + columnId + '][]"]');
+ if (checkboxElements.length > 0) {
+ $(checkboxElements).on('change', function() {
+ evaluateCondition(setting);
+ });
+ return;
+ }
+ }
+
+ /**
+ * 入力要素を検索
+ */
+ function findInputElement(columnId, columnType) {
+ // システム固定項目の場合、固定のname/idを使用
+ if (columnType) {
+ var fixedElement = null;
+ switch(columnType) {
+ case 'user_name':
+ fixedElement = document.getElementById('name');
+ break;
+ case 'login_id':
+ fixedElement = document.getElementById('userid');
+ break;
+ case 'user_email':
+ fixedElement = document.getElementById('email');
+ break;
+ case 'user_password':
+ fixedElement = document.getElementById('password');
+ break;
+ }
+ if (fixedElement) {
+ return fixedElement;
+ }
+ }
+
+ // 1. user-column-{id} のIDを持つ要素を探す(テキスト入力)
+ var element = document.getElementById('user-column-' + columnId);
+ if (element) {
+ return element;
+ }
+
+ // 2. name="users_columns_value[{id}]" のラジオボタンを探す
+ var elements = document.querySelectorAll('input[name="users_columns_value[' + columnId + ']"]');
+ if (elements.length > 0) {
+ return elements[0];
+ }
+
+ // 3. name="users_columns_value[{id}][]" のチェックボックス・同意型を探す
+ elements = document.querySelectorAll('input[name="users_columns_value[' + columnId + '][]"]');
+ if (elements.length > 0) {
+ return elements[0];
+ }
+
+ // 4. name="users_columns_value[{id}]" の所属型セレクトボックスを探す
+ element = document.querySelector('select[name="users_columns_value[' + columnId + ']"]');
+ if (element) {
+ return element;
+ }
+
+ return null;
+ }
+
+ /**
+ * 条件を評価して対象項目の表示/非表示を切り替え
+ */
+ function evaluateCondition(setting) {
+ var triggerElement = findInputElement(setting.trigger_column_id, setting.trigger_column_type);
+ var triggerValue = getInputValue(triggerElement);
+ var conditionMet = false;
+
+ // 条件評価
+ if (setting.operator === 'equals') {
+ conditionMet = (triggerValue == setting.value);
+ } else if (setting.operator === 'not_equals') {
+ conditionMet = (triggerValue != setting.value);
+ } else if (setting.operator === 'is_empty') {
+ // 空白である(空文字または未選択)
+ conditionMet = (triggerValue === '' || triggerValue === null || triggerValue === undefined);
+ } else if (setting.operator === 'is_not_empty') {
+ // 空白でない
+ conditionMet = (triggerValue !== '' && triggerValue !== null && triggerValue !== undefined);
+ }
+
+ // 対象項目のform-group rowを表示/非表示
+ var targetElement = findInputElement(setting.target_column_id);
+ if (targetElement) {
+ var formGroup = $(targetElement).closest('.form-group.row');
+ if (conditionMet) {
+ if (formGroup.is(':hidden')) {
+ formGroup.slideDown(300);
+ }
+ } else {
+ if (formGroup.is(':visible')) {
+ formGroup.slideUp(300);
+ // 非表示完了後に入力値をクリア
+ formGroup.promise().done(function() {
+ clearInputValue(targetElement);
+ });
+ }
+ }
+ }
+ }
+
+ /**
+ * 入力要素の値を取得
+ */
+ function getInputValue(element) {
+ if (!element) {
+ return '';
+ }
+
+ var elementName = element.name;
+
+ // 複数選択チェックボックス(name="columns[X][]")の場合
+ if (elementName && elementName.endsWith('[]')) {
+ var checkedElements = document.querySelectorAll('input[name="' + elementName + '"]:checked');
+ var values = [];
+ checkedElements.forEach(function(el) {
+ values.push(el.value);
+ });
+ // カンマ区切りで返す(複数選択の場合)
+ return values.join(',');
+ }
+
+ // ラジオボタン・単一チェックボックスの場合
+ if (element.type === 'radio' || element.type === 'checkbox') {
+ var checkedElement = document.querySelector('input[name="' + elementName + '"]:checked');
+ return checkedElement ? checkedElement.value : '';
+ }
+
+ // セレクトボックスの場合
+ if (element.tagName === 'SELECT') {
+ // 所属型セレクトボックス(users_columns_value[X])の場合、テキストを返す
+ if (elementName && elementName.match(/^users_columns_value\[\d+\]$/)) {
+ var selectedOption = element.options[element.selectedIndex];
+ return selectedOption ? selectedOption.text : '';
+ }
+ // その他のセレクトボックスはvalueを返す
+ return element.options[element.selectedIndex]?.value || '';
+ }
+
+ // その他の入力要素(テキスト等)
+ return element.value || '';
+ }
+
+ /**
+ * 入力要素の値をクリア
+ */
+ function clearInputValue(element) {
+ if (!element) {
+ return;
+ }
+
+ var elementName = element.name;
+
+ // ラジオボタン・チェックボックスの場合、すべてのチェックを外す
+ if (element.type === 'radio' || element.type === 'checkbox') {
+ var elements = document.querySelectorAll('input[name="' + elementName + '"]');
+ elements.forEach(function(el) {
+ el.checked = false;
+ });
+ return;
+ }
+
+ // セレクトボックスの場合、最初のオプションを選択
+ if (element.tagName === 'SELECT') {
+ element.selectedIndex = 0;
+ return;
+ }
+
+ // その他の入力要素(テキスト等)
+ element.value = '';
+ }
@if ($is_function_edit)
diff --git a/resources/views/plugins/manage/user/edit_column_detail.blade.php b/resources/views/plugins/manage/user/edit_column_detail.blade.php
index fc7d45baa..8d54a4373 100644
--- a/resources/views/plugins/manage/user/edit_column_detail.blade.php
+++ b/resources/views/plugins/manage/user/edit_column_detail.blade.php
@@ -6,6 +6,9 @@
* @category ユーザ管理
--}}
@php
+use App\Enums\ConditionalOperator;
+use App\Enums\Required;
+use App\Enums\ShowType;
use App\Models\Core\UsersColumns;
@endphp
{{-- 管理画面ベース画面 --}}
@@ -757,6 +760,145 @@ class="btn btn-danger btn-sm text-nowrap"
+ {{-- 条件付き表示設定 --}}
+