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

Merge branch 'master' of e.coding.net:g-ueau9359/kku/kku_laravel

dongasai 8 месяцев назад
Родитель
Сommit
f4752062f5
40 измененных файлов с 881 добавлено и 222 удалено
  1. 54 31
      UCore/DcatAdmin/FilterHelper.php
  2. 2 0
      UCore/DcatAdmin/Grid/LazyRenderable.php
  3. 26 0
      UCore/DcatAdmin/Grid/SelectTable.php
  4. 38 0
      UCore/DcatAdmin/RowActionHandler.php
  5. 1 0
      app/Admin/bootstrap.php
  6. 36 0
      app/Module/GameItems/AdminControllers/Actions/ChestManageAction.php
  7. 11 6
      app/Module/GameItems/AdminControllers/CategoryController.php
  8. 30 30
      app/Module/GameItems/AdminControllers/ChestContentController.php
  9. 10 5
      app/Module/GameItems/AdminControllers/ChestOpenLogController.php
  10. 14 12
      app/Module/GameItems/AdminControllers/CraftLogController.php
  11. 10 5
      app/Module/GameItems/AdminControllers/DismantleLogController.php
  12. 10 5
      app/Module/GameItems/AdminControllers/DismantleRuleController.php
  13. 13 8
      app/Module/GameItems/AdminControllers/GroupController.php
  14. 18 11
      app/Module/GameItems/AdminControllers/GroupItemController.php
  15. 14 0
      app/Module/GameItems/AdminControllers/Helper/FilterHelper.php
  16. 82 0
      app/Module/GameItems/AdminControllers/Helper/FilterHelperTrait.php
  17. 8 0
      app/Module/GameItems/AdminControllers/Helper/FormHelper.php
  18. 63 0
      app/Module/GameItems/AdminControllers/Helper/FormHelperTrait.php
  19. 8 0
      app/Module/GameItems/AdminControllers/Helper/GridHelper.php
  20. 8 0
      app/Module/GameItems/AdminControllers/Helper/ShowHelper.php
  21. 11 6
      app/Module/GameItems/AdminControllers/InstanceController.php
  22. 18 7
      app/Module/GameItems/AdminControllers/ItemController.php
  23. 44 0
      app/Module/GameItems/AdminControllers/LazyRenderable/ChestLazyRenderable.php
  24. 62 0
      app/Module/GameItems/AdminControllers/LazyRenderable/ItemGroupLazyRenderable.php
  25. 62 0
      app/Module/GameItems/AdminControllers/LazyRenderable/ItemLazyRenderable.php
  26. 68 0
      app/Module/GameItems/AdminControllers/LazyRenderable/RecipeLazyRenderable.php
  27. 9 4
      app/Module/GameItems/AdminControllers/OutputLimitController.php
  28. 14 8
      app/Module/GameItems/AdminControllers/PityTimeController.php
  29. 11 6
      app/Module/GameItems/AdminControllers/RecipeController.php
  30. 18 12
      app/Module/GameItems/AdminControllers/TransactionLogController.php
  31. 11 6
      app/Module/GameItems/AdminControllers/UserItemController.php
  32. 11 6
      app/Module/GameItems/AdminControllers/UserOutputCounterController.php
  33. 11 6
      app/Module/GameItems/AdminControllers/UserRecipeController.php
  34. 49 0
      app/Module/GameItems/Logics/Group.php
  35. 4 4
      app/Module/GameItems/Models/ItemChestContent.php
  36. 5 39
      app/Module/GameItems/Models/ItemGroup.php
  37. 4 4
      app/Module/GameItems/Models/ItemGroupItem.php
  38. 4 0
      noai.md
  39. 8 0
      public/dcat-admin/css/admin.css
  40. 1 1
      public/json/items.json

+ 54 - 31
UCore/DcatAdmin/FilterHelper.php

@@ -2,6 +2,9 @@
 
 namespace UCore\DcatAdmin;
 
+use App\Module\GameItems\AdminControllers\LazyRenderable\ChestLazyRenderable;
+use App\Module\GameItems\Models\Item;
+use UCore\DcatAdmin\Grid\SelectTable;
 use UCore\DcatAdmin\Traits\Options;
 use Dcat\Admin\Grid\Filter;
 use Illuminate\Support\Arr;
@@ -11,6 +14,7 @@ class FilterHelper
 
     use Options;
 
+
     /**
      * @var Filter
      */
@@ -24,18 +28,20 @@ class FilterHelper
     {
         $this->filter     = $filter;
         $this->controller = $controller;
-        // $this->filter->expand();
-        // $this->filter->panel();
+        $this->filter->expand();
+        $this->filter->panel();
+
     }
 
 
-    public function equal($field,$label= '')
+    public function equal($field, $label = '')
     {
         $this->filter->equal($field, $label);
     }
 
     /**
      * in条件映射
+     *
      * @param $field
      * @param $field_origin
      * @param $label
@@ -45,7 +51,7 @@ class FilterHelper
     {
         return $this->filter->where($field, function (\Illuminate\Database\Eloquent\Builder $query) use ($field, $field_origin) {
 
-            $query->whereIn($field_origin, explode(',',$this->input));
+            $query->whereIn($field_origin, explode(',', $this->input));
 
         },                          $label);
     }
@@ -63,26 +69,27 @@ class FilterHelper
     {
         return $this->filter->where($field, function (\Illuminate\Database\Eloquent\Builder $query) use ($field, $field_origin) {
 
-            $query->where($field_origin,'>', $this->input);
+            $query->where($field_origin, '>', $this->input);
 
         },                          $label);
     }
 
-    public function equaljson($field,$field1,$field2,$label= '')
+    public function equaljson($field, $field1, $field2, $label = '')
     {
-        $this->filter->where($field, function ($query) use ($field1,$field2){
+        $this->filter->where($field, function ($query) use ($field1, $field2) {
 
             $query->whereRaw(" $field1->\"$.$field2\" = '{$this->input}' ");
 
-        },$label);
+        },                   $label);
     }
-    public function equaljsonInt($field,$field1,$field2,$label= '')
+
+    public function equaljsonInt($field, $field1, $field2, $label = '')
     {
-        $this->filter->where($field, function ($query) use ($field1,$field2){
+        $this->filter->where($field, function ($query) use ($field1, $field2) {
 
             $query->whereRaw(" $field1->\"$.$field2\" = {$this->input} ");
 
-        },$label);
+        },                   $label);
     }
 
 
@@ -93,13 +100,13 @@ class FilterHelper
      * @param $label
      * @return void
      */
-    public function columnNotSEmpey($field,$field2,$label= '')
+    public function columnNotSEmpey($field, $field2, $label = '')
     {
-        $this->filter->where($field, function ($query) use ($field2){
+        $this->filter->where($field, function ($query) use ($field2) {
 
             $query->whereRaw(" `$field2`  != '' ");
 
-        },$label);
+        },                   $label);
     }
 
 
@@ -110,12 +117,28 @@ class FilterHelper
      * @param $enmu
      * @return void
      */
-    public function equalSelect($field, array $enmu,$label= '')
+    public function equalSelect($field, array $enmu, $label = '')
     {
         $this->filter->equal($field, $label)->select($enmu);
     }
 
-    public function equalSelectVk($field, array $enmu,$label= '')
+    /**
+     * 使用select 关联模型
+     *
+     * @param $field
+     * @param $table
+     * @return void
+     */
+    public function equalSelectModel($field, SelectTable $table, $label = '')
+    {
+        return $this->filter->equal($field)
+            ->selectTable($table) // 设置渲染类实例,并传递自定义参数
+            ->title($label)
+            ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName()); // 设置编辑数据显示
+    }
+
+
+    public function equalSelectVk($field, array $enmu, $label = '')
     {
         $this->filter->equal($field, $label)->select(array_flip($enmu));
     }
@@ -127,16 +150,16 @@ class FilterHelper
      * @param array $enmu
      * @return Filter\Presenter\Presenter|Filter\Presenter\Radio
      */
-    public function equalRadio($field, array $enmu,$label= '')
+    public function equalRadio($field, array $enmu, $label = '')
     {
         return $this->filter->equal($field, $label)->radio($enmu);
     }
 
-    public function equalRadioModelCats($field,$label = '')
+    public function equalRadioModelCats($field, $label = '')
     {
         $cates = $this->filter->grid()->model()->repository()->model()->getCasts();
-        $enmu = $cates[$field]??"";
-        if($enmu === ''){
+        $enmu  = $cates[$field] ?? "";
+        if ($enmu === '') {
             throw new \Exception("$field is not a model casts");
         }
 //        dump($cates,$enmu::getValueDescription());
@@ -146,7 +169,7 @@ class FilterHelper
         return $this->filter->equal($field, $label)->radio($values);
     }
 
-    public function equalRadioVk($field, array $enmu,$label= '')
+    public function equalRadioVk($field, array $enmu, $label = '')
     {
         return $this->filter->equal($field, $label)->radio(array_flip($enmu));
     }
@@ -159,7 +182,7 @@ class FilterHelper
      * @param array $enmu
      * @return Filter\Presenter\Presenter|Filter\Presenter\Radio
      */
-    public function equalRadioKv($field, array $kv,$label= '')
+    public function equalRadioKv($field, array $kv, $label = '')
     {
         return $this->filter->equal($field, $label)->radio($kv);
     }
@@ -174,25 +197,25 @@ class FilterHelper
      * @param $label
      * @return Filter\Presenter\Checkbox|Filter\Presenter\Presenter
      */
-    public function checkboxDefault($field,$option,$default,$label= '')
+    public function checkboxDefault($field, $option, $default, $label = '')
     {
         $req = request($field);
-        if(!$req){
+        if (!$req) {
             /**
              * @var \Illuminate\Routing\Route $router
              */
-            $router= request()->route();
-            $p = request()->query();
+            $router    = request()->route();
+            $p         = request()->query();
             $p[$field] = $default;
 
-            $to = route($router->getName(),$p);
+            $to = route($router->getName(), $p);
             admin_exit(admin_redirect($to));;
 
         }
 
-        return $this->filter->where($field, function ($query)use($field){
+        return $this->filter->where($field, function ($query) use ($field) {
 
-        },$label)->checkbox($option)->default($default);
+        },                          $label)->checkbox($option)->default($default);
 
     }
 
@@ -205,7 +228,7 @@ class FilterHelper
      * @param $th
      * @return Filter\Presenter\Presenter|Filter\Presenter\Radio
      */
-    public function notequalRadio($field, array $enmu, $th = 'notEqual',$label= '')
+    public function notequalRadio($field, array $enmu, $th = 'notEqual', $label = '')
     {
         $t = $field . '-' . $th;
 
@@ -220,7 +243,7 @@ class FilterHelper
      */
     public function columnOrderId()
     {
-        $this->filter->column('order_id','订单ID' )->link(function ($value) {
+        $this->filter->column('order_id', '订单ID')->link(function ($value) {
             return admin_url('order/' . $value);
         });
     }

+ 2 - 0
UCore/DcatAdmin/Grid/LazyRenderable.php

@@ -9,4 +9,6 @@ abstract class LazyRenderable extends BaseLazyRenderable
 
 
 
+
+
 }

+ 26 - 0
UCore/DcatAdmin/Grid/SelectTable.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace UCore\DcatAdmin\Grid;
+
+interface SelectTable
+{
+
+    /**
+     * 显示模型
+     * @return string
+     */
+    public function getModel(): string;
+
+    /**
+     * 选择模型的ID(关联)
+     * @return string
+     */
+    public function getModelSelectId(): string;
+
+    /**
+     * 展示的字段名字
+     * @return string
+     */
+    public function getModelViewName(): string;
+
+}

+ 38 - 0
UCore/DcatAdmin/RowActionHandler.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace UCore\DcatAdmin;
+
+use Dcat\Admin\Grid\RowAction as BaseRowAction;
+
+/**
+ * 行操作,列表页面,覆盖渲染
+ *
+ */
+class RowActionHandler extends BaseRowAction
+{
+
+
+    /**
+     * @var AdminController
+     */
+    public $controller;
+
+
+    final public function render()
+    {
+
+        if (!$this->allowed()) {
+            return '';
+        }
+
+        return parent::render();
+    }
+
+    public function setController($c)
+    {
+        $this->controller = $c;
+
+        return $this;
+    }
+
+}

+ 1 - 0
app/Admin/bootstrap.php

@@ -24,3 +24,4 @@ use Dcat\Admin\Show;
  * Admin::js('/packages/prettydocs/js/main.js');
  *
  */
+Admin::css('/dcat-admin/css/admin.css');

+ 36 - 0
app/Module/GameItems/AdminControllers/Actions/ChestManageAction.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\Actions;
+
+use App\Module\GameItems\Enums\ITEM_TYPE;
+use App\Module\GameItems\Models\Item;
+use Illuminate\Http\Request;
+use UCore\DcatAdmin\RowAction;
+use UCore\DcatAdmin\RowActionHandler;
+
+
+/**
+ * @property-read Item $row
+ */
+class ChestManageAction extends RowActionHandler
+{
+
+    public $title = '宝箱管理';
+
+
+    public function allowed()
+    {
+        return $this->row->type === ITEM_TYPE::CHEST;
+
+    }
+
+    public function handle(Request $request)
+    {
+        $id = $this->getKey();
+
+        return $this->response()->redirect(admin_url("game-items-chest-contents?chest_id={$id}"));
+    }
+
+
+
+}

+ 11 - 6
app/Module/GameItems/AdminControllers/CategoryController.php

@@ -12,11 +12,16 @@ use Dcat\Admin\Tree;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
 use UCore\DcatAdmin\AdminController;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+
+/**
+ * 物品分类管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-categories', names: 'dcat.admin.game-items-categories')]
 class CategoryController extends AdminController
 {
@@ -133,7 +138,7 @@ class CategoryController extends AdminController
     protected function form()
     {
         return Form::make(new ItemCategoryRepository(), function (Form $form) {
-            $helper = new FormHelper($form, $this);
+            $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this);
             $helper->text('name')->required();
             $helper->text('code')->required()->help('用于系统识别的唯一编码');
             $form->image('icon', '图标')

+ 30 - 30
app/Module/GameItems/AdminControllers/ChestContentController.php

@@ -2,7 +2,10 @@
 
 namespace App\Module\GameItems\AdminControllers;
 
+use App\Module\GameItems\AdminControllers\LazyRenderable\ItemLazyRenderable;
 use App\Module\GameItems\Enums\ITEM_TYPE;
+use App\Module\GameItems\Models\Item;
+use App\Module\GameItems\Models\ItemGroup;
 use App\Module\GameItems\Repositorys\ItemChestContentRepository;
 use App\Module\GameItems\Repositorys\ItemGroupRepository;
 use App\Module\GameItems\Repositorys\ItemRepository;
@@ -12,14 +15,19 @@ use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
 
+/**
+ * 宝箱内容管理
+ *
+ */
 #[Resource('game-items-chest-contents', names: 'dcat.admin.game-items-chest-contents')]
 class ChestContentController extends AdminController
 {
+
     /**
      * 标题
      *
@@ -53,15 +61,9 @@ class ChestContentController extends AdminController
             $grid->filter(function ($filter) {
                 $helper = new FilterHelper($filter, $this);
                 $helper->equal('id', 'ID');
-                $filter->equal('chest_id', '宝箱')->select(
-                    (new ItemRepository())->where('type', ITEM_TYPE::OPENABLE)->pluck('name', 'id')
-                );
-                $filter->equal('item_id', '物品')->select(
-                    (new ItemRepository())->pluck('name', 'id')
-                );
-                $filter->equal('group_id', '物品组')->select(
-                    (new ItemGroupRepository())->pluck('name', 'id')
-                );
+                $helper->equalSelectModelChestItem('item_id');
+
+
             });
         });
     }
@@ -102,50 +104,46 @@ class ChestContentController extends AdminController
     {
         return Form::make(new ItemChestContentRepository(), function (Form $form) {
             $helper = new FormHelper($form, $this);
-            $form->select('chest_id', '宝箱')
-                ->options((new ItemRepository())->where('type', ITEM_TYPE::OPENABLE)->pluck('name', 'id'))
-                ->required();
+            $helper->selectModelChestItem('item_id');
+
+
 
             // 物品和物品组二选一
             $form->radio('content_type', '内容类型')
-                ->options(['item' => '物品', 'group' => '物品组'])
+                ->options([ 'item' => '物品', 'group' => '物品组' ])
                 ->default('item')
                 ->when('item', function (Form $form) {
-                    $form->select('item_id', '物品')
-                        ->options((new ItemRepository())->pluck('name', 'id'))
-                        ->required();
+                    $helper = new FormHelper($form, $this);
+                    $helper->selectModelItem('item_id', '物品');
                 })
                 ->when('group', function (Form $form) {
-                    $form->select('group_id', '物品组')
-                        ->options((new ItemGroupRepository())->pluck('name', 'id'))
-                        ->required();
+                    $helper = new FormHelper($form, $this);
+                    $helper->selectModelChestItemGroup('group_id', '物品组');
                 });
 
-            $helper->number('min_quantity')
+            $helper->number('min_quantity','最少数量')
                 ->default(1)
                 ->min(1)
                 ->required();
-            $helper->number('max_quantity')
+            $helper->number('max_quantity','最多数量')
                 ->default(1)
                 ->min(1)
                 ->required();
-            $helper->number('weight')
+            $helper->number('weight','权重')
                 ->default(1.0)
                 ->min(0.001)
-                ->step(0.001)
                 ->required()
                 ->help('权重越高,掉落概率越大,所有内容权重总和为100');
             $form->switch('allow_duplicate', '允许重复')
                 ->default(false)
                 ->help('是否允许在一次开箱中重复获得该内容');
-            $helper->number('pity_count')
+            $helper->number('pity_count','保底次数')
                 ->default(0)
                 ->min(0)
                 ->help('连续未获得该内容的次数达到此值时,必定获得该内容,0表示不启用保底机制');
-            $helper->number('pity_weight_factor')
+            $helper->number('pity_weight_factor','保底递增权重')
                 ->default(1.0)
                 ->min(0)
-                ->step(0.1)
                 ->help('每次未获得该内容时,权重增加的倍数,默认为1.0');
 
             // 保存前回调
@@ -156,7 +154,9 @@ class ChestContentController extends AdminController
                 } else {
                     $form->item_id = null;
                 }
+                $form->content_type = null;
             });
         });
     }
+
 }

+ 10 - 5
app/Module/GameItems/AdminControllers/ChestOpenLogController.php

@@ -9,11 +9,16 @@ use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+
+/**
+ * 宝箱开启记录管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-chest-open-logs', names: 'dcat.admin.game-items-chest-open-logs')]
 class ChestOpenLogController extends AdminController
 {

+ 14 - 12
app/Module/GameItems/AdminControllers/CraftLogController.php

@@ -7,14 +7,19 @@ use App\Module\GameItems\Repositorys\ItemRecipeRepository;
 use App\Module\GameItems\Repositorys\ItemRepository;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
-use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
+use \App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use \App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use \App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+use \App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use UCore\DcatAdmin\AdminController;
 
+/**
+ * 物品合成记录管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-craft-logs', names: 'dcat.admin.game-items-craft-logs')]
 class CraftLogController extends AdminController
 {
@@ -69,19 +74,16 @@ class CraftLogController extends AdminController
 
             // 筛选
             $grid->filter(function ($filter) {
-                $helper = new FilterHelper($filter, $this);
+                $helper = new \App\Module\GameItems\AdminControllers\Helper\FilterHelper($filter, $this);
                 $helper->equal('id', 'ID');
                 $helper->equal('user_id', '用户ID');
-                $filter->equal('recipe_id', '配方')->select(
-                    (new ItemRecipeRepository())->pluck('name', 'id')
-                );
+                $helper->equalSelectModelRecipe('recipe_id', '配方');
+
                 $filter->equal('is_success', '是否成功')->radio([
                     1 => '是',
                     0 => '否',
                 ]);
-                $filter->equal('result_item_id', '产出物品')->select(
-                    (new ItemRepository())->pluck('name', 'id')
-                );
+                $helper->equalSelectModelItem('result_item_id', '产出物品');
                 $filter->between('craft_time', '合成时间')->datetime();
             });
         });

+ 10 - 5
app/Module/GameItems/AdminControllers/DismantleLogController.php

@@ -10,11 +10,16 @@ use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+
+/**
+ * 物品分解记录管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-dismantle-logs', names: 'dcat.admin.game-items-dismantle-logs')]
 class DismantleLogController extends AdminController
 {

+ 10 - 5
app/Module/GameItems/AdminControllers/DismantleRuleController.php

@@ -11,11 +11,16 @@ use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
 
+/**
+ * 物品分解规则管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-dismantle-rules', names: 'dcat.admin.game-items-dismantle-rules')]
 class DismantleRuleController extends AdminController
 {
@@ -204,7 +209,7 @@ class DismantleRuleController extends AdminController
     protected function form()
     {
         return Form::make(new ItemDismantleRuleRepository(), function (Form $form) {
-            $helper = new FormHelper($form, $this);
+            $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this);
 
             // 规则类型
             $form->radio('rule_type', '规则类型')

+ 13 - 8
app/Module/GameItems/AdminControllers/GroupController.php

@@ -2,6 +2,7 @@
 
 namespace App\Module\GameItems\AdminControllers;
 
+use App\Module\GameItems\Models\Item;
 use App\Module\GameItems\Repositorys\ItemGroupRepository;
 use App\Module\GameItems\Repositorys\ItemRepository;
 use Dcat\Admin\Form;
@@ -9,11 +10,16 @@ use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
 
+/**
+ * 物品组管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-groups', names: 'dcat.admin.game-items-groups')]
 class GroupController extends AdminController
 {
@@ -84,8 +90,8 @@ class GroupController extends AdminController
      */
     protected function form()
     {
-        return Form::make(new ItemGroupRepository(), function (Form $form) {
-            $helper = new FormHelper($form, $this);
+        return Form::make(new ItemGroupRepository(['groupItems']), function (Form $form) {
+            $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this);
             $helper->text('name')->required();
             $helper->text('code')->required()->help('用于系统识别的唯一编码');
             $helper->textarea('description');
@@ -93,12 +99,11 @@ class GroupController extends AdminController
             // 物品组内容
             $form->hasMany('groupItems', '物品组内容', function (Form\NestedForm $form) {
                 $form->select('item_id', '物品')
-                    ->options((new ItemRepository())->pluck('name', 'id'))
+                    ->options((new Item())->pluck('name', 'id'))
                     ->required();
                 $form->number('weight', '权重')
                     ->default(1.0)
                     ->min(0.001)
-                    ->step(0.001)
                     ->required()
                     ->help('权重越高,随机选择时概率越大');
             });

+ 18 - 11
app/Module/GameItems/AdminControllers/GroupItemController.php

@@ -2,6 +2,8 @@
 
 namespace App\Module\GameItems\AdminControllers;
 
+use App\Module\GameItems\Models\Item;
+use App\Module\GameItems\Models\ItemGroup;
 use App\Module\GameItems\Repositorys\ItemGroupItemRepository;
 use App\Module\GameItems\Repositorys\ItemGroupRepository;
 use App\Module\GameItems\Repositorys\ItemRepository;
@@ -10,11 +12,16 @@ use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
 
+/**
+ * 物品组内容管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-group-items', names: 'dcat.admin.game-items-group-items')]
 class GroupItemController extends AdminController
 {
@@ -32,7 +39,7 @@ class GroupItemController extends AdminController
      */
     protected function grid()
     {
-        return Grid::make(new ItemGroupItemRepository(), function (Grid $grid) {
+        return Grid::make(new ItemGroupItemRepository(['group','item']), function (Grid $grid) {
             $helper = new GridHelper($grid, $this);
             $helper->columnId();
             $grid->column('group.name', '物品组');
@@ -46,10 +53,10 @@ class GroupItemController extends AdminController
                 $helper = new FilterHelper($filter, $this);
                 $helper->equal('id', 'ID');
                 $filter->equal('group_id', '物品组')->select(
-                    (new ItemGroupRepository())->pluck('name', 'id')
+                    (new ItemGroup())->pluck('name', 'id')
                 );
                 $filter->equal('item_id', '物品')->select(
-                    (new ItemRepository())->pluck('name', 'id')
+                    (new Item())->pluck('name', 'id')
                 );
             });
         });
@@ -82,12 +89,12 @@ class GroupItemController extends AdminController
     protected function form()
     {
         return Form::make(new ItemGroupItemRepository(), function (Form $form) {
-            $helper = new FormHelper($form, $this);
-            $form->select('group_id', '物品组')
-                ->options((new ItemGroupRepository())->pluck('name', 'id'))
+            $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this);
+            $helper->selectTable('group_id', '物品组')
+                ->options((new ItemGroup())->pluck('name', 'id'))
                 ->required();
             $form->select('item_id', '物品')
-                ->options((new ItemRepository())->pluck('name', 'id'))
+                ->options((new Item())->pluck('name', 'id'))
                 ->required();
             $helper->number('weight')
                 ->default(1.0)

+ 14 - 0
app/Module/GameItems/AdminControllers/Helper/FilterHelper.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\Helper;
+
+use App\Module\GameItems\AdminControllers\LazyRenderable\ItemLazyRenderable;
+use App\Module\GameItems\Enums\ITEM_TYPE;
+use UCore\DcatAdmin\Grid\SelectTable;
+
+
+class FilterHelper extends \UCore\DcatAdmin\FilterHelper
+{
+
+    use FilterHelperTrait;
+}

+ 82 - 0
app/Module/GameItems/AdminControllers/Helper/FilterHelperTrait.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\Helper;
+
+use App\Module\GameItems\AdminControllers\LazyRenderable\ItemLazyRenderable;
+use App\Module\GameItems\AdminControllers\LazyRenderable\RecipeLazyRenderable;
+use App\Module\GameItems\Enums\ITEM_TYPE;
+
+trait FilterHelperTrait
+{
+
+
+    /**
+     * 合成配方 关联
+     * @param $field
+     * @param $label
+     * @return \Dcat\Admin\Grid\Filter\Presenter\Presenter|\Dcat\Admin\Grid\Filter\Presenter\SelectTable
+     */
+    public function equalSelectModelRecipe($field, $label = '配方')
+    {
+        $table = RecipeLazyRenderable::make();
+
+        return $this->filter->equal($field,$label)
+            ->selectTable($table) // 设置渲染类实例,并传递自定义参数
+            ->title($label)
+            ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName()); // 设置编辑数据显示
+    }
+
+
+    /**
+     * 使用select 关联模型 ,物品
+     *
+     * @param $field
+     * @param $table
+     * @return void
+     */
+    public function equalSelectModelItem($field, $label = '宝箱')
+    {
+        $table = ItemLazyRenderable::make();
+
+        return $this->filter->equal($field,$label)
+            ->selectTable($table) // 设置渲染类实例,并传递自定义参数
+            ->title($label)
+            ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName()); // 设置编辑数据显示
+    }
+
+
+    /**
+     * 使用select 关联模型 ,宝箱物品
+     *
+     * @param $field
+     * @param $table
+     * @return void
+     */
+    public function equalSelectModelChestItem($field, $label = '宝箱')
+    {
+        $table = ItemLazyRenderable::make([ 'type' => ITEM_TYPE::CHEST ]);
+
+        return $this->filter->equal($field,$label)
+            ->selectTable($table) // 设置渲染类实例,并传递自定义参数
+            ->title($label)
+            ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName()); // 设置编辑数据显示
+    }
+
+    /**
+     * 使用select 关联模型
+     *
+     * @param $field
+     * @param $table
+     * @return void
+     */
+    public function equalSelectModelChest($field, $label = '宝箱')
+    {
+        $table = ItemLazyRenderable::make([ 'type' => ITEM_TYPE::CHEST ]);
+
+        return $this->filter->equal($field)
+            ->selectTable($table) // 设置渲染类实例,并传递自定义参数
+            ->title($label)
+            ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName()); // 设置编辑数据显示
+    }
+
+}

+ 8 - 0
app/Module/GameItems/AdminControllers/Helper/FormHelper.php

@@ -0,0 +1,8 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\Helper;
+
+class FormHelper extends \UCore\DcatAdmin\FormHelper
+{
+    use FormHelperTrait;
+}

+ 63 - 0
app/Module/GameItems/AdminControllers/Helper/FormHelperTrait.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\Helper;
+
+use App\Module\GameItems\AdminControllers\LazyRenderable\ItemGroupLazyRenderable;
+use App\Module\GameItems\AdminControllers\LazyRenderable\ItemLazyRenderable;
+use App\Module\GameItems\Enums\ITEM_TYPE;
+use App\Module\GameItems\Models\ItemGroup;
+
+trait FormHelperTrait
+{
+
+
+    /**
+     *
+     * @param $field
+     * @param $label
+     * @return \Dcat\Admin\Form\Field\SelectTable
+     */
+    public function selectModelItem($field, $label = '物品')
+    {
+        $table = ItemLazyRenderable::make();
+
+        return $this->form->selectTable($field, $label)->from($table)
+            ->title($label)
+            ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName()); // 设置编辑数据显示
+    }
+
+    /**
+     * 使用select 关联模型 ,宝箱物品
+     *
+     * @param $field
+     * @param $table
+     * @return void
+     */
+    public function selectModelChestItem($field, $label = '宝箱')
+    {
+        $table = ItemLazyRenderable::make([ 'type' => ITEM_TYPE::CHEST ]);
+
+        return $this->form->selectTable($field, $label)->from($table)
+            ->title($label)
+            ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName()); // 设置编辑数据显示
+    }
+
+
+    /**
+     * 使用select 关联模型 ,物品组
+     *
+     * @param $field
+     * @param $label
+     * @return \Dcat\Admin\Form\Field\SelectTable
+     */
+    public function selectModelChestItemGroup($field, $label = '物品组')
+    {
+        $table = ItemGroupLazyRenderable::make();
+
+        return $this->form->selectTable($field, $label)->from($table)
+            ->title($label)
+            ->model($table->getModel(), $table->getModelSelectId(), $table->getModelViewName()); // 设置编辑数据显示
+    }
+
+
+}

+ 8 - 0
app/Module/GameItems/AdminControllers/Helper/GridHelper.php

@@ -0,0 +1,8 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\Helper;
+
+class GridHelper extends \UCore\DcatAdmin\GridHelper
+{
+
+}

+ 8 - 0
app/Module/GameItems/AdminControllers/Helper/ShowHelper.php

@@ -0,0 +1,8 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\Helper;
+
+class ShowHelper extends \UCore\DcatAdmin\ShowHelper
+{
+
+}

+ 11 - 6
app/Module/GameItems/AdminControllers/InstanceController.php

@@ -10,11 +10,16 @@ use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
 
+/**
+ * 单独属性物品管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-instances', names: 'dcat.admin.game-items-instances')]
 class InstanceController extends AdminController
 {
@@ -218,7 +223,7 @@ class InstanceController extends AdminController
     protected function form()
     {
         return Form::make(new ItemInstanceRepository(), function (Form $form) {
-            $helper = new FormHelper($form, $this);
+            $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this);
             $form->select('item_id', '基础物品')
                 ->options((new ItemRepository())->where('is_unique', 1)->pluck('name', 'id'))
                 ->required();
@@ -238,7 +243,7 @@ class InstanceController extends AdminController
             $form->switch('is_bound', '已绑定')
                 ->default(false)
                 ->when(true, function (Form $form) {
-                    $helper = new FormHelper($form, $this);
+                    $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this);
                     $helper->text('bound_to')
                         ->required()
                         ->help('物品绑定的用户ID');

+ 18 - 7
app/Module/GameItems/AdminControllers/ItemController.php

@@ -13,11 +13,18 @@ use UCore\DcatAdmin\AdminController;
 use Spatie\RouteAttributes\Attributes\Resource;
 use Spatie\RouteAttributes\Attributes\Get;
 use Illuminate\Support\Facades\Artisan;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+use App\Module\GameItems\AdminControllers\Actions\ChestManageAction;
+use App\Module\GameItems\AdminControllers\Actions\DuplicateRowAction;
+
+/**
+ * 物品管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items', names: 'dcat.admin.game-items')]
 class ItemController extends AdminController
 {
@@ -78,10 +85,14 @@ class ItemController extends AdminController
             $grid->column('created_at', '创建时间');
             $grid->column('updated_at', '更新时间');
 
-            // 添加复制行操作
+            // 添加行操作
             $grid->actions(function (Grid\Displayers\Actions $actions) {
                 $actions->disableDelete();
                 $actions->append(new \App\Module\GameItems\AdminControllers\Actions\DuplicateRowAction());
+
+                // 如果是宝箱类型,添加宝箱管理按钮
+                $actions->append(new \App\Module\GameItems\AdminControllers\Actions\ChestManageAction());
+
             });
 
             // 筛选
@@ -177,7 +188,7 @@ class ItemController extends AdminController
     protected function form()
     {
         return Form::make(new ItemRepository(), function (Form $form) {
-            $helper = new FormHelper($form,$this);
+            $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form,$this);
             $helper->text('name')->required();
 
             $form->textarea('description', '描述');

+ 44 - 0
app/Module/GameItems/AdminControllers/LazyRenderable/ChestLazyRenderable.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\LazyRenderable;
+
+use App\Module\GameItems\Enums\ITEM_TYPE;
+use App\Module\GameItems\Models\Item;
+use App\Module\GameItems\Repositorys\ItemRepository;
+use Dcat\Admin\Grid;
+use UCore\DcatAdmin\Support\LazyRenderable;
+
+class ChestLazyRenderable extends \UCore\DcatAdmin\Grid\LazyRenderable
+{
+
+    static $model      = Item::class;
+    static $repository = ItemRepository::class;
+
+
+    public function grid(): Grid
+    {
+
+        // 获取外部传递的参数
+        $id = $this->id;
+
+        return Grid::make(new self::$repository, function (Grid $grid) {
+            $grid->model()->where('type', ITEM_TYPE::CHEST);
+            $grid->column('id');
+            $grid->column('name');
+            $grid->column('created_at');
+            $grid->column('updated_at');
+
+            $grid->quickSearch([ 'id', 'name' ]);
+
+            $grid->paginate(10);
+            $grid->disableActions();
+
+            $grid->filter(function (Grid\Filter $filter) {
+                $filter->like('id')->width(4);
+                $filter->like('name')->width(4);
+            });
+        });
+    }
+
+
+}

+ 62 - 0
app/Module/GameItems/AdminControllers/LazyRenderable/ItemGroupLazyRenderable.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\LazyRenderable;
+
+
+use App\Module\GameItems\Models\Item;
+use App\Module\GameItems\Models\ItemGroup;
+use App\Module\GameItems\Repositorys\ItemGroupRepository;
+use Dcat\Admin\Grid;
+use UCore\DcatAdmin\Grid\SelectTable;
+
+class ItemGroupLazyRenderable extends \UCore\DcatAdmin\Grid\LazyRenderable implements SelectTable
+{
+
+
+    static $repository = ItemGroupRepository::class;
+
+
+    public function grid(): Grid
+    {
+
+        // 获取外部传递的参数
+        $type = $this->type;
+
+        return Grid::make(new self::$repository, function (Grid $grid) use ($type) {
+            if ($type) {
+                $grid->model()->where('type', $type);
+            }
+
+            $grid->column('id');
+            $grid->column('name');
+            $grid->column('created_at');
+            $grid->column('updated_at');
+
+            $grid->quickSearch([ 'id', 'name' ]);
+
+            $grid->paginate(10);
+            $grid->disableActions();
+
+            $grid->filter(function (Grid\Filter $filter) {
+                $filter->like('id')->width(4);
+                $filter->like('name')->width(4);
+            });
+        });
+    }
+
+    public function getModel(): string
+    {
+        return ItemGroup::class;
+    }
+
+    public function getModelSelectId(): string
+    {
+        return 'id';
+    }
+
+    public function getModelViewName(): string
+    {
+        return 'name';
+    }
+
+}

+ 62 - 0
app/Module/GameItems/AdminControllers/LazyRenderable/ItemLazyRenderable.php

@@ -0,0 +1,62 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\LazyRenderable;
+
+use App\Module\GameItems\Enums\ITEM_TYPE;
+use App\Module\GameItems\Models\Item;
+use App\Module\GameItems\Repositorys\ItemRepository;
+use Dcat\Admin\Grid;
+use UCore\DcatAdmin\Grid\SelectTable;
+use UCore\DcatAdmin\Support\LazyRenderable;
+
+class ItemLazyRenderable extends \UCore\DcatAdmin\Grid\LazyRenderable implements SelectTable
+{
+
+
+    static $repository = ItemRepository::class;
+
+
+    public function grid(): Grid
+    {
+
+        // 获取外部传递的参数
+        $type = $this->type;
+
+        return Grid::make(new self::$repository, function (Grid $grid) use ($type) {
+            if($type){
+                $grid->model()->where('type', $type);
+            }
+
+            $grid->column('id');
+            $grid->column('name');
+            $grid->column('created_at');
+            $grid->column('updated_at');
+
+            $grid->quickSearch([ 'id', 'name' ]);
+
+            $grid->paginate(10);
+            $grid->disableActions();
+
+            $grid->filter(function (Grid\Filter $filter) {
+                $filter->like('id')->width(4);
+                $filter->like('name')->width(4);
+            });
+        });
+    }
+
+    public function getModel(): string
+    {
+        return Item::class;
+    }
+
+    public function getModelSelectId(): string
+    {
+        return 'id';
+    }
+
+    public function getModelViewName(): string
+    {
+        return 'name';
+    }
+
+}

+ 68 - 0
app/Module/GameItems/AdminControllers/LazyRenderable/RecipeLazyRenderable.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace App\Module\GameItems\AdminControllers\LazyRenderable;
+
+use App\Module\GameItems\Enums\ITEM_TYPE;
+use App\Module\GameItems\Models\Item;
+use App\Module\GameItems\Models\ItemRecipe;
+use App\Module\GameItems\Repositorys\ItemRecipeRepository;
+use App\Module\GameItems\Repositorys\ItemRepository;
+use Dcat\Admin\Grid;
+use UCore\DcatAdmin\Grid\SelectTable;
+use UCore\DcatAdmin\Support\LazyRenderable;
+
+/**
+ * 合成配方
+ *
+ */
+class RecipeLazyRenderable extends \UCore\DcatAdmin\Grid\LazyRenderable implements SelectTable
+{
+
+
+    static $repository = ItemRecipeRepository::class;
+
+
+    public function grid(): Grid
+    {
+
+        // 获取外部传递的参数
+        $type = $this->type;
+
+        return Grid::make(new self::$repository, function (Grid $grid) use ($type) {
+            if($type){
+                $grid->model()->where('type', $type);
+            }
+
+            $grid->column('id');
+            $grid->column('name');
+            $grid->column('created_at');
+            $grid->column('updated_at');
+
+            $grid->quickSearch([ 'id', 'name' ]);
+
+            $grid->paginate(10);
+            $grid->disableActions();
+
+            $grid->filter(function (Grid\Filter $filter) {
+                $filter->like('id')->width(4);
+                $filter->like('name')->width(4);
+            });
+        });
+    }
+
+    public function getModel(): string
+    {
+        return ItemRecipe::class;
+    }
+
+    public function getModelSelectId(): string
+    {
+        return 'id';
+    }
+
+    public function getModelViewName(): string
+    {
+        return 'name';
+    }
+
+}

+ 9 - 4
app/Module/GameItems/AdminControllers/OutputLimitController.php

@@ -10,11 +10,16 @@ use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
 
+/**
+ * 物品产出限制管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-output-limits', names: 'dcat.admin.game-items-output-limits')]
 class OutputLimitController extends AdminController
 {

+ 14 - 8
app/Module/GameItems/AdminControllers/PityTimeController.php

@@ -9,10 +9,15 @@ use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+
+/**
+ * 用户宝箱保底计数管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-pity-times', names: 'dcat.admin.game-items-pity-times')]
 class PityTimeController extends AdminController
 {
@@ -66,11 +71,12 @@ class PityTimeController extends AdminController
                 $helper = new FilterHelper($filter, $this);
                 $helper->equal('id', 'ID');
                 $helper->equal('user_id', '用户ID');
-                $filter->equal('chest_id', '宝箱')->select(
-                    (new ItemRepository())->where('type', 5)->pluck('name', 'id')
-                );
+
+
+                $helper->equalSelectModelChestItem('chest_id');
+
                 $helper->equal('chest_content_id', '宝箱内容ID');
-                $helper->between('current_count', '当前计数');
+
             });
         });
     }

+ 11 - 6
app/Module/GameItems/AdminControllers/RecipeController.php

@@ -10,11 +10,16 @@ use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+
+/**
+ * 合成配方管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-recipes', names: 'dcat.admin.game-items-recipes')]
 class RecipeController extends AdminController
 {
@@ -227,7 +232,7 @@ class RecipeController extends AdminController
     protected function form()
     {
         return Form::make(new ItemRecipeRepository(), function (Form $form) {
-            $helper = new FormHelper($form, $this);
+            $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this);
             $helper->text('name', '配方名称')->required();
             $form->select('result_item_id', '产出物品')
                 ->options((new ItemRepository())->pluck('name', 'id'))

+ 18 - 12
app/Module/GameItems/AdminControllers/TransactionLogController.php

@@ -10,10 +10,15 @@ use Dcat\Admin\Show;
 use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+
+/**
+ * 物品交易记录管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-transaction-logs', names: 'dcat.admin.game-items-transaction-logs')]
 class TransactionLogController extends AdminController
 {
@@ -40,7 +45,7 @@ class TransactionLogController extends AdminController
     {
         return Grid::make(new ItemTransactionLogRepository(), function (Grid $grid) {
             $helper = new GridHelper($grid, $this);
-            
+
             // 禁用创建、编辑和删除按钮
             $grid->disableCreateButton();
             $grid->disableActions();
@@ -71,17 +76,18 @@ class TransactionLogController extends AdminController
 
             // 筛选
             $grid->filter(function ($filter) {
-                $helper = new FilterHelper($filter, $this);
+                $helper = new \App\Module\GameItems\AdminControllers\Helper\FilterHelper($filter, $this);
                 $helper->equal('id', 'ID');
                 $helper->equal('user_id', '用户ID');
-                $filter->equal('item_id', '物品')->select(
-                    (new ItemRepository())->pluck('name', 'id')
-                );
+
+
+                $helper->equalSelectModelChestItem('item_id');
+
                 $helper->equal('instance_id', '实例ID');
                 $filter->equal('transaction_type', '交易类型')->select(TRANSACTION_TYPE::all());
-                $helper->like('source_type', '来源类型');
+
                 $helper->equal('source_id', '来源ID');
-                $helper->between('created_at', '创建时间')->datetime();
+
             });
         });
     }
@@ -111,7 +117,7 @@ class TransactionLogController extends AdminController
     {
         return Show::make($id, new ItemTransactionLogRepository(), function (Show $show) {
             $helper = new ShowHelper($show, $this);
-            
+
             // 禁用编辑和删除按钮
             $show->panel()->tools(function ($tools) {
                 $tools->disableEdit();

+ 11 - 6
app/Module/GameItems/AdminControllers/UserItemController.php

@@ -8,14 +8,19 @@ use App\Module\GameItems\Repositorys\ItemInstanceRepository;
 use Dcat\Admin\Form;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Show;
-use UCore\DcatAdmin\AdminController;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\FormHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
+use \App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use \App\Module\GameItems\AdminControllers\Helper\FormHelper;
+use \App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use \App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+use UCore\DcatAdmin\AdminController;
 
+/**
+ * 用户物品管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-user-items', names: 'dcat.admin.game-items-user-items')]
 class UserItemController extends AdminController
 {
@@ -227,7 +232,7 @@ class UserItemController extends AdminController
     protected function form()
     {
         return Form::make(new ItemUserRepository(), function (Form $form) {
-            $helper = new FormHelper($form, $this);
+            $helper = new \App\Module\GameItems\AdminControllers\Helper\FormHelper($form, $this);
             $helper->text('user_id', '用户ID')
                 ->required()
                 ->help('物品所属的用户ID');

+ 11 - 6
app/Module/GameItems/AdminControllers/UserOutputCounterController.php

@@ -9,10 +9,15 @@ use Dcat\Admin\Show;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
 use UCore\DcatAdmin\AdminController;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+
+/**
+ * 用户产出限制计数管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-user-output-counters', names: 'dcat.admin.game-items-user-output-counters')]
 class UserOutputCounterController extends AdminController
 {
@@ -39,7 +44,7 @@ class UserOutputCounterController extends AdminController
     {
         return Grid::make(new ItemUserOutputCounterRepository(), function (Grid $grid) {
             $helper = new GridHelper($grid, $this);
-            
+
             // 禁用创建、编辑和删除按钮
             $grid->disableCreateButton();
             $grid->disableActions();
@@ -101,7 +106,7 @@ class UserOutputCounterController extends AdminController
     {
         return Show::make($id, new ItemUserOutputCounterRepository(), function (Show $show) {
             $helper = new ShowHelper($show, $this);
-            
+
             // 禁用编辑和删除按钮
             $show->panel()->tools(function ($tools) {
                 $tools->disableEdit();

+ 11 - 6
app/Module/GameItems/AdminControllers/UserRecipeController.php

@@ -9,10 +9,15 @@ use Dcat\Admin\Show;
 use Dcat\Admin\Layout\Content;
 use Spatie\RouteAttributes\Attributes\Resource;
 use UCore\DcatAdmin\AdminController;
-use UCore\DcatAdmin\FilterHelper;
-use UCore\DcatAdmin\GridHelper;
-use UCore\DcatAdmin\ShowHelper;
-
+use App\Module\GameItems\AdminControllers\Helper\FilterHelper;
+use App\Module\GameItems\AdminControllers\Helper\GridHelper;
+use App\Module\GameItems\AdminControllers\Helper\ShowHelper;
+
+/**
+ * 用户配方解锁状态管理控制器
+ *
+ * @package App\Module\GameItems\AdminControllers
+ */
 #[Resource('game-items-user-recipes', names: 'dcat.admin.game-items-user-recipes')]
 class UserRecipeController extends AdminController
 {
@@ -39,7 +44,7 @@ class UserRecipeController extends AdminController
     {
         return Grid::make(new ItemUserRecipeRepository(), function (Grid $grid) {
             $helper = new GridHelper($grid, $this);
-            
+
             // 禁用创建、编辑和删除按钮
             $grid->disableCreateButton();
             $grid->disableActions();
@@ -108,7 +113,7 @@ class UserRecipeController extends AdminController
     {
         return Show::make($id, new ItemUserRecipeRepository(), function (Show $show) {
             $helper = new ShowHelper($show, $this);
-            
+
             // 禁用编辑和删除按钮
             $show->panel()->tools(function ($tools) {
                 $tools->disableEdit();

+ 49 - 0
app/Module/GameItems/Logics/Group.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace App\Module\GameItems\Logics;
+
+use App\Module\GameItems\Models\Item;
+use App\Module\GameItems\Models\ItemGroup;
+
+class Group
+{
+
+    /**
+     * 根据权重随机获取物品组中的一个物品
+     *
+     * @return Item|null
+     */
+    public function getRandomItem(ItemGroup $group): ?Item
+    {
+        $groupItems = $group->groupItems()->with('item')->get();
+
+        if ($groupItems->isEmpty()) {
+            return null;
+        }
+
+        // 计算总权重
+        $totalWeight = $groupItems->sum('weight');
+
+        if ($totalWeight <= 0) {
+            return $groupItems->first()->item;
+        }
+
+        // 随机选择
+        $randomValue = mt_rand(1, (int)($totalWeight * 1000)) / 1000;
+        $currentWeight = 0;
+
+        foreach ($groupItems as $groupItem) {
+            $currentWeight += $groupItem->weight;
+            if ($randomValue <= $currentWeight) {
+                return $groupItem->item;
+            }
+        }
+
+        // 如果由于浮点数精度问题没有选中,则返回最后一个
+        return $groupItems->last()->item;
+    }
+
+
+
+
+}

+ 4 - 4
app/Module/GameItems/Models/ItemChestContent.php

@@ -9,7 +9,7 @@ use UCore\ModelCore;
 /**
  * 宝箱内容配置
  *
- * field start 
+ * field start
  * @property   int  $id  记录ID,主键
  * @property   int  $chest_id  宝箱物品ID,外键关联kku_item_items表
  * @property   int  $item_id  可能获得的物品ID,外键关联kku_item_items表(与group_id二选一)
@@ -33,7 +33,7 @@ class ItemChestContent extends ModelCore
      */
     protected $table = 'item_chest_contents';
 
-    // attrlist start 
+    // attrlist start
     protected $fillable = [
         'id',
         'chest_id',
@@ -70,7 +70,7 @@ class ItemChestContent extends ModelCore
      */
     public function chest(): BelongsTo
     {
-        return $this->belongsTo(ItemItem::class, 'chest_id');
+        return $this->belongsTo(Item::class, 'chest_id');
     }
 
     /**
@@ -80,7 +80,7 @@ class ItemChestContent extends ModelCore
      */
     public function item(): BelongsTo
     {
-        return $this->belongsTo(ItemItem::class, 'item_id');
+        return $this->belongsTo(Item::class, 'item_id');
     }
 
     /**

+ 5 - 39
app/Module/GameItems/Models/ItemGroup.php

@@ -8,7 +8,7 @@ use UCore\ModelCore;
 /**
  * 物品组
  *
- * field start 
+ * field start
  * @property   int  $id  物品组ID,主键
  * @property   string  $name  物品组名称
  * @property   string  $code  物品组编码(唯一)
@@ -26,7 +26,7 @@ class ItemGroup extends ModelCore
      */
     protected $table = 'item_groups';
 
-    // attrlist start 
+    // attrlist start
     protected $fillable = [
         'id',
         'name',
@@ -35,7 +35,7 @@ class ItemGroup extends ModelCore
     ];
     // attrlist end
 
-    
+
 
     /**
      * 获取物品组中的所有物品
@@ -44,7 +44,7 @@ class ItemGroup extends ModelCore
      */
     public function groupItems(): HasMany
     {
-        return $this->hasMany(ItemGroupItem::class, 'group_id');
+        return $this->hasMany(ItemGroupItem::class, 'group_id','id');
     }
 
     /**
@@ -54,41 +54,7 @@ class ItemGroup extends ModelCore
      */
     public function chestContents(): HasMany
     {
-        return $this->hasMany(ItemChestContent::class, 'group_id');
+        return $this->hasMany(ItemChestContent::class, 'group_id','id');
     }
 
-    /**
-     * 根据权重随机获取物品组中的一个物品
-     *
-     * @return ItemItem|null
-     */
-    public function getRandomItem(): ?ItemItem
-    {
-        $groupItems = $this->groupItems()->with('item')->get();
-
-        if ($groupItems->isEmpty()) {
-            return null;
-        }
-
-        // 计算总权重
-        $totalWeight = $groupItems->sum('weight');
-
-        if ($totalWeight <= 0) {
-            return $groupItems->first()->item;
-        }
-
-        // 随机选择
-        $randomValue = mt_rand(1, (int)($totalWeight * 1000)) / 1000;
-        $currentWeight = 0;
-
-        foreach ($groupItems as $groupItem) {
-            $currentWeight += $groupItem->weight;
-            if ($randomValue <= $currentWeight) {
-                return $groupItem->item;
-            }
-        }
-
-        // 如果由于浮点数精度问题没有选中,则返回最后一个
-        return $groupItems->last()->item;
-    }
 }

+ 4 - 4
app/Module/GameItems/Models/ItemGroupItem.php

@@ -8,7 +8,7 @@ use UCore\ModelCore;
 /**
  * 物品组内容
  *
- * field start 
+ * field start
  * @property   int  $id  记录ID,主键
  * @property   int  $group_id  物品组ID,外键关联kku_item_groups表
  * @property   int  $item_id  物品ID,外键关联kku_item_items表
@@ -26,7 +26,7 @@ class ItemGroupItem extends ModelCore
      */
     protected $table = 'item_group_items';
 
-    // attrlist start 
+    // attrlist start
     protected $fillable = [
         'id',
         'group_id',
@@ -35,7 +35,7 @@ class ItemGroupItem extends ModelCore
     ];
     // attrlist end
 
-    
+
 
     /**
      * 应该被转换为原生类型的属性
@@ -63,6 +63,6 @@ class ItemGroupItem extends ModelCore
      */
     public function item(): BelongsTo
     {
-        return $this->belongsTo(ItemItem::class, 'item_id');
+        return $this->belongsTo(Item::class, 'item_id');
     }
 }

+ 4 - 0
noai.md

@@ -45,3 +45,7 @@ netresearch/jsonmapper
 Show::make 正确的使用方式`Show::make($id, new FundRepository(), function (Show $show) {`
 
 创建一个命令,根据Item表生成配置表json格式到  public/json/items.json,包含id/name/description/sell_price/display_attributes字段
+
+检查物品模块所有控制器
+
+修复物品模块后台控制器的 FormHelper,改用\App\Module\GameItems\AdminControllers\Helper\FormHelper; FilterHelper,改用\App\Module\GameItems\AdminControllers\Helper\FilterHelper;ShowHelper,改用\App\Module\GameItems\AdminControllers\Helper\ShowHelper; GridHelper,改用\App\Module\GameItems\AdminControllers\Helper\GridHelper

+ 8 - 0
public/dcat-admin/css/admin.css

@@ -0,0 +1,8 @@
+.grid__actions__ a{
+    margin-left: 10px;
+}
+
+.grid__actions__{
+    min-width: 100px;
+    max-width: 300px;
+}

+ 1 - 1
public/json/items.json

@@ -1,5 +1,5 @@
 {
-    "generated_at": "2025-04-25 14:06:08",
+    "generated_at": "2025-04-25 11:50:51",
     "items": [
         {
             "id": 1,