Kaynağa Gözat

简化条件项管理表单,修复提交按钮无法点击的问题

notfff 7 ay önce
ebeveyn
işleme
2a99491dff

+ 51 - 61
app/Module/Game/AdminControllers/GameConditionItemController.php

@@ -115,60 +115,42 @@ class GameConditionItemController extends AdminController
                 ->options(GameConditionGroup::pluck('name', 'id'))
                 ->required();
 
+            // 使用when方法根据条件类型显示不同的target_id字段
             $form->select('condition_type', '条件类型')
                 ->options(CONDITION_TYPE::getAll())
-                ->required();
-
-            // 根据条件类型显示不同的target_id字段
-            $conditionType = request()->input('condition_type') ?? ($form->model()->condition_type ?? null);
-
-            if ($conditionType == CONDITION_TYPE::HOUSE_LEVEL->value) {
-                // 房屋等级条件不需要target_id
-                $form->hidden('target_id')->default(0);
-            } else {
-                // 其他条件类型需要选择target_id
-                switch ($conditionType) {
-                    case CONDITION_TYPE::LAND_LEVEL->value:
-                        // 土地等级条件
-                        $form->select('target_id', '土地类型')
-                            ->options(FarmLandType::pluck('name', 'id'))
-                            ->required()
-                            ->help('选择要检查的土地类型');
-                        break;
-
-                    case CONDITION_TYPE::PET_LEVEL->value:
-                        // 宠物等级条件
-                        $form->select('target_id', '宠物')
-                            ->options(PetConfig::pluck('name', 'id'))
-                            ->required()
-                            ->help('选择要检查的宠物');
-                        break;
-
-                    case CONDITION_TYPE::ITEM_COUNT->value:
-                        // 物品持有数条件
-                        $form->select('target_id', '物品')
-                            ->options(Item::pluck('name', 'id'))
-                            ->required()
-                            ->help('选择要检查的物品');
-                        break;
-
-                    case CONDITION_TYPE::CURRENCY_COUNT->value:
-                        // 代币持有数条件
-                        $form->select('target_id', '代币')
-                            ->options(FundCurrencyModel::pluck('name', 'id'))
-                            ->required()
-                            ->help('选择要检查的代币');
-                        break;
-
-                    default:
-                        // 默认显示一个数字输入框
-                        $form->number('target_id', '目标ID')
-                            ->default(0)
-                            ->required()
-                            ->help('根据条件类型不同,表示土地类型ID、宠物ID、物品ID、代币ID等');
-                        break;
-                }
-            }
+                ->required()
+                ->when(CONDITION_TYPE::LAND_LEVEL->value, function (Form $form) {
+                    // 土地等级条件
+                    $form->select('target_id', '土地类型')
+                        ->options(FarmLandType::pluck('name', 'id'))
+                        ->required()
+                        ->help('选择要检查的土地类型');
+                })
+                ->when(CONDITION_TYPE::HOUSE_LEVEL->value, function (Form $form) {
+                    // 房屋等级条件
+                    $form->hidden('target_id')->default(0);
+                })
+                ->when(CONDITION_TYPE::PET_LEVEL->value, function (Form $form) {
+                    // 宠物等级条件
+                    $form->select('target_id', '宠物')
+                        ->options(PetConfig::pluck('name', 'id'))
+                        ->required()
+                        ->help('选择要检查的宠物');
+                })
+                ->when(CONDITION_TYPE::ITEM_COUNT->value, function (Form $form) {
+                    // 物品持有数条件
+                    $form->select('target_id', '物品')
+                        ->options(Item::pluck('name', 'id'))
+                        ->required()
+                        ->help('选择要检查的物品');
+                })
+                ->when(CONDITION_TYPE::CURRENCY_COUNT->value, function (Form $form) {
+                    // 代币持有数条件
+                    $form->select('target_id', '代币')
+                        ->options(FundCurrencyModel::pluck('name', 'id'))
+                        ->required()
+                        ->help('选择要检查的代币');
+                });
 
             $form->select('operator', '比较运算符')
                 ->options(CONDITION_OPERATOR::getAll())
@@ -195,21 +177,29 @@ class GameConditionItemController extends AdminController
             $form->display('created_at', '创建时间');
             $form->display('updated_at', '更新时间');
 
-            // 添加JavaScript代码,处理条件类型变化时的字段显示/隐藏逻辑
-            $form->script(<<<JS
+            // 添加JavaScript代码,处理房屋等级条件的target_id
+            $form->html(<<<HTML
+<script>
 $(function() {
     // 监听条件类型变化
     $('select[name="condition_type"]').on('change', function() {
-        // 获取当前选中的条件类型
-        var type = $(this).val();
+        // 如果选择的是房屋等级条件,确保target_id为0
+        if ($(this).val() == '2') { // HOUSE_LEVEL
+            $('input[name="target_id"]').val(0);
+        }
+    });
 
-        // 刷新页面,传递条件类型参数
-        var url = new URL(window.location.href);
-        url.searchParams.set('condition_type', type);
-        window.location.href = url.toString();
+    // 表单提交前的处理
+    $('form').on('submit', function() {
+        // 如果选择的是房屋等级条件,确保target_id为0
+        if ($('select[name="condition_type"]').val() == '2') { // HOUSE_LEVEL
+            $('input[name="target_id"]').val(0);
+        }
+        return true;
     });
 });
-JS);
+</script>
+HTML);
         });
     }
 }