Forráskód Böngészése

完成宝箱配置页面消耗组/奖励组/条件组内容展示和关联访问功能

主要功能:
1. 增加消耗组/奖励组/条件组的详细内容展示列
2. 实现组名称可点击跳转到对应详情页面
3. 修复消耗组控制器中标签显示的对比色计算问题
4. 修复CONSUME_TYPE枚举常量错误(FUND改为FUND_CONFIG)
5. 优化预加载,包含子项目数据(consumeItems、rewardItems、conditionItems)

技术改进:
- 使用Grid的link()方法实现可点击跳转
- 使用模型的格式化方法显示详细内容
- 创建公共静态方法calculateContrastColor处理颜色对比度
- 正确处理关联关系的命名(camelCase vs snake_case)
- 增强用户体验,提供完整的配置信息展示
notfff 7 hónapja
szülő
commit
018f278c82

+ 5 - 3
app/Module/Game/AdminControllers/GameConsumeGroupController.php

@@ -111,10 +111,12 @@ class GameConsumeGroupController extends AdminController
 
                 $tagHtml = [];
                 foreach ($tags as $tag) {
+                    // 使用静态方法计算对比色
+                    $contrastColor = \App\Module\Game\AdminControllers\GameConsumeGroupController::calculateContrastColor($tag['color']);
                     $tagHtml[] = sprintf(
                         '<span class="badge" style="background-color: %s; color: %s;">%s</span>',
                         $tag['color'],
-                        $this->getContrastColor($tag['color']),
+                        $contrastColor,
                         $tag['name']
                     );
                 }
@@ -149,7 +151,7 @@ class GameConsumeGroupController extends AdminController
                     } elseif ($consumeItem->consume_type == CONSUME_TYPE::CURRENCY->value) {
                         $currency = \App\Module\Fund\Models\FundCurrencyModel::find($targetId);
                         return $currency ? "{$currency->name} (ID: {$targetId})" : "货币 (ID: {$targetId})";
-                    } elseif ($consumeItem->consume_type == CONSUME_TYPE::FUND->value) {
+                    } elseif ($consumeItem->consume_type == CONSUME_TYPE::FUND_CONFIG->value) {
                         $fund = \App\Module\Fund\Models\FundConfigModel::find($targetId);
                         return $fund ? "{$fund->name} (ID: {$targetId})" : "代币账户 (ID: {$targetId})";
                     }
@@ -239,7 +241,7 @@ class GameConsumeGroupController extends AdminController
      * @param string $hexColor
      * @return string
      */
-    private function getContrastColor(string $hexColor): string
+    public static function calculateContrastColor(string $hexColor): string
     {
         $hexColor = ltrim($hexColor, '#');
         $r = hexdec(substr($hexColor, 0, 2));

+ 56 - 5
app/Module/GameItems/AdminControllers/ItemChestConfigController.php

@@ -53,8 +53,8 @@ class ItemChestConfigController extends AdminController
     protected function grid(): Grid
     {
         return Grid::make(new ItemChestConfig(), function (Grid $grid) {
-            // 首先设置关联查询,确保数据正确预加载
-            $grid->model()->with(['item', 'consumeGroup', 'rewardGroup', 'conditionGroup']);
+            // 首先设置关联查询,确保数据正确预加载,包括子项目
+            $grid->model()->with(['item', 'consumeGroup.consumeItems', 'rewardGroup.rewardItems', 'conditionGroup.conditionItems']);
 
             $helper = new GridHelper($grid, $this);
             $helper->columnId();
@@ -65,18 +65,69 @@ class ItemChestConfigController extends AdminController
 
             $grid->column('item_id', '宝箱ID')->sortable();
 
+            // 消耗组列 - 可点击跳转
             $grid->column('consumeGroup.name', '消耗组')->display(function ($name) {
-                return $name ?: '<span class="text-muted">无消耗</span>';
+                if (!$name || !$this->consume_group_id) {
+                    return '<span class="text-muted">无消耗</span>';
+                }
+                return $name;
+            })->link(function () {
+                if (!$this->consume_group_id) {
+                    return '';
+                }
+                return admin_url('game-consume-groups/' . $this->consume_group_id);
             });
 
+            // 奖励组列 - 可点击跳转
             $grid->column('rewardGroup.name', '奖励组')->display(function ($name) {
-                return $name ?: '<span class="text-danger">未配置</span>';
+                if (!$name || !$this->reward_group_id) {
+                    return '<span class="text-danger">未配置</span>';
+                }
+                return $name;
+            })->link(function () {
+                if (!$this->reward_group_id) {
+                    return '';
+                }
+                return admin_url('game-reward-groups/' . $this->reward_group_id);
             });
 
+            // 条件组列 - 可点击跳转
             $grid->column('conditionGroup.name', '条件组')->display(function ($name) {
-                return $name ?: '<span class="text-muted">无条件</span>';
+                if (!$name || !$this->condition_group_id) {
+                    return '<span class="text-muted">无条件</span>';
+                }
+                return $name;
+            })->link(function () {
+                if (!$this->condition_group_id) {
+                    return '';
+                }
+                return admin_url('game-condition-groups/' . $this->condition_group_id);
             });
 
+            // 消耗组详情列
+            $grid->column('consume_group_details', '消耗组详情')->display(function () {
+                if (!$this->consumeGroup) {
+                    return '<span class="text-muted">无消耗组</span>';
+                }
+                return $this->consumeGroup->formatConsumeDetails();
+            })->width('200px');
+
+            // 奖励组详情列
+            $grid->column('reward_group_details', '奖励组详情')->display(function () {
+                if (!$this->rewardGroup) {
+                    return '<span class="text-muted">无奖励组</span>';
+                }
+                return $this->rewardGroup->formatRewardDetails();
+            })->width('200px');
+
+            // 条件组详情列
+            $grid->column('condition_group_details', '条件组详情')->display(function () {
+                if (!$this->conditionGroup) {
+                    return '<span class="text-muted">无条件组</span>';
+                }
+                return $this->conditionGroup->formatConditionDetails();
+            })->width('200px');
+
             $grid->column('is_active', '状态')->switch();
 
             $grid->column('status_text', '配置状态')->display(function () {