Просмотр исходного кода

简化条件项管理表单,移除复杂验证,添加服务器端处理

notfff 7 месяцев назад
Родитель
Сommit
0bf0ed373a

+ 26 - 47
app/Module/Game/AdminControllers/GameConditionItemController.php

@@ -115,42 +115,30 @@ class GameConditionItemController extends AdminController
                 ->options(GameConditionGroup::pluck('name', 'id'))
                 ->required();
 
-            // 使用when方法根据条件类型显示不同的target_id字段
+            // 简化表单,不使用when方法
             $form->select('condition_type', '条件类型')
                 ->options(CONDITION_TYPE::getAll())
-                ->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('选择要检查的物品');
+                ->required();
+
+            // 根据条件类型显示不同的提示信息
+            $form->select('target_id', '目标ID')
+                ->options(function () {
+                    $conditionType = request()->input('condition_type');
+
+                    // 根据条件类型返回不同的选项
+                    if ($conditionType == CONDITION_TYPE::LAND_LEVEL->value) {
+                        return FarmLandType::pluck('name', 'id')->toArray();
+                    } elseif ($conditionType == CONDITION_TYPE::PET_LEVEL->value) {
+                        return PetConfig::pluck('name', 'id')->toArray();
+                    } elseif ($conditionType == CONDITION_TYPE::ITEM_COUNT->value) {
+                        return Item::pluck('name', 'id')->toArray();
+                    } elseif ($conditionType == CONDITION_TYPE::CURRENCY_COUNT->value) {
+                        return FundCurrencyModel::pluck('name', 'id')->toArray();
+                    }
+
+                    return [];
                 })
-                ->when(CONDITION_TYPE::CURRENCY_COUNT->value, function (Form $form) {
-                    // 代币持有数条件
-                    $form->select('target_id', '代币')
-                        ->options(FundCurrencyModel::pluck('name', 'id'))
-                        ->required()
-                        ->help('选择要检查的代币');
-                });
+                ->help('根据条件类型不同,表示土地类型ID、宠物ID、物品ID、代币ID等。房屋等级条件可填0。');
 
             $form->select('operator', '比较运算符')
                 ->options(CONDITION_OPERATOR::getAll())
@@ -177,25 +165,16 @@ class GameConditionItemController extends AdminController
             $form->display('created_at', '创建时间');
             $form->display('updated_at', '更新时间');
 
-            // 添加JavaScript代码,处理房屋等级条件的target_id
+            // 添加简单的JavaScript代码,处理条件类型变化
             $form->html(<<<HTML
 <script>
 $(function() {
     // 监听条件类型变化
     $('select[name="condition_type"]').on('change', function() {
-        // 如果选择的是房屋等级条件,确保target_id为0
-        if ($(this).val() == '2') { // HOUSE_LEVEL
-            $('input[name="target_id"]').val(0);
-        }
-    });
-
-    // 表单提交前的处理
-    $('form').on('submit', function() {
-        // 如果选择的是房屋等级条件,确保target_id为0
-        if ($('select[name="condition_type"]').val() == '2') { // HOUSE_LEVEL
-            $('input[name="target_id"]').val(0);
-        }
-        return true;
+        // 刷新页面,传递条件类型参数
+        var url = new URL(window.location.href);
+        url.searchParams.set('condition_type', $(this).val());
+        window.location.href = url.toString();
     });
 });
 </script>

+ 33 - 0
app/Module/Game/Repositorys/GameConditionItemRepository.php

@@ -2,6 +2,7 @@
 
 namespace App\Module\Game\Repositorys;
 
+use App\Module\Game\Enums\CONDITION_TYPE;
 use App\Module\Game\Models\GameConditionItem;
 use Dcat\Admin\Repositories\EloquentRepository;
 
@@ -16,4 +17,36 @@ class GameConditionItemRepository extends EloquentRepository
      * @var string
      */
     protected $eloquentClass = GameConditionItem::class;
+
+    /**
+     * 保存数据前的处理
+     *
+     * @param array $data
+     * @return array
+     */
+    public function beforeStore(array $data): array
+    {
+        // 处理房屋等级条件的特殊情况
+        if (isset($data['condition_type']) && $data['condition_type'] == CONDITION_TYPE::HOUSE_LEVEL->value) {
+            $data['target_id'] = 0; // 房屋等级条件的target_id固定为0
+        }
+
+        return $data;
+    }
+
+    /**
+     * 更新数据前的处理
+     *
+     * @param array $data
+     * @return array
+     */
+    public function beforeUpdate(array $data): array
+    {
+        // 处理房屋等级条件的特殊情况
+        if (isset($data['condition_type']) && $data['condition_type'] == CONDITION_TYPE::HOUSE_LEVEL->value) {
+            $data['target_id'] = 0; // 房屋等级条件的target_id固定为0
+        }
+
+        return $data;
+    }
 }