| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- <?php
- namespace App\Module\Farm\AdminControllers\Helper;
- use App\Module\Farm\Enums\BUFF_TYPE;
- use App\Module\Farm\Enums\DISASTER_TYPE;
- use App\Module\Farm\Enums\GROWTH_STAGE;
- use App\Module\Farm\Enums\LAND_STATUS;
- use App\Module\Farm\Enums\LAND_TYPE;
- use App\Module\Farm\Enums\SEED_TYPE;
- use App\Module\Farm\Enums\UPGRADE_TYPE;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Grid\Column;
- /**
- * 列表页辅助特性
- *
- * 提供农场模块后台控制器的列表页构建功能的具体实现
- */
- trait GridHelperTrait
- {
- /**
- * 添加神灵加持类型列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnBuffType(string $field = 'buff_type', string $label = '加持类型'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return BUFF_TYPE::getName($value);
- });
- }
- /**
- * 添加灾害类型列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnDisasterType(string $field = 'disaster_type', string $label = '灾害类型'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return DISASTER_TYPE::getName($value);
- });
- }
- /**
- * 添加生长阶段列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnGrowthStage(string $field = 'growth_stage', string $label = '生长阶段'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return GROWTH_STAGE::getName($value);
- })->label([
- GROWTH_STAGE::SEED->value => 'default',
- GROWTH_STAGE::SPROUT->value => 'info',
- GROWTH_STAGE::GROWTH->value => 'primary',
- GROWTH_STAGE::MATURE->value => 'success',
- GROWTH_STAGE::WITHERED->value => 'danger',
- ]);
- }
- /**
- * 添加土地状态列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnLandStatus(string $field = 'status', string $label = '土地状态'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return LAND_STATUS::getName($value);
- })->label([
- LAND_STATUS::IDLE->value => 'default',
- LAND_STATUS::PLANTING->value => 'primary',
- LAND_STATUS::DISASTER->value => 'warning',
- LAND_STATUS::HARVESTABLE->value => 'success',
- LAND_STATUS::WITHERED->value => 'danger',
- ]);
- }
- /**
- * 添加土地类型列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnLandType(string $field = 'land_type', string $label = '土地类型'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return LAND_TYPE::getName($value);
- })->label([
- LAND_TYPE::NORMAL->value => 'default',
- LAND_TYPE::RED->value => 'danger',
- LAND_TYPE::BLACK->value => 'dark',
- LAND_TYPE::GOLD->value => 'warning',
- LAND_TYPE::BLUE->value => 'info',
- LAND_TYPE::PURPLE->value => 'primary',
- ]);
- }
- /**
- * 添加种子类型列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnSeedType(string $field = 'type', string $label = '种子类型'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return SEED_TYPE::getName($value);
- })->label([
- SEED_TYPE::NORMAL->value => 'default',
- SEED_TYPE::MYSTERIOUS->value => 'primary',
- SEED_TYPE::GIANT->value => 'success',
- ]);
- }
- /**
- * 添加升级类型列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnUpgradeType(string $field = 'upgrade_type', string $label = '升级类型'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return UPGRADE_TYPE::getName($value);
- })->label([
- UPGRADE_TYPE::LAND->value => 'primary',
- UPGRADE_TYPE::HOUSE->value => 'success',
- ]);
- }
- /**
- * 添加灾害情况列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnDisasters(string $field = 'disasters', string $label = '灾害情况'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- if (empty($value)) {
- return '无灾害';
- }
- $disasters = json_decode($value, true);
- if (empty($disasters)) {
- return '无灾害';
- }
- $result = [];
- foreach ($disasters as $type => $time) {
- $disasterName = DISASTER_TYPE::getName((int)$type);
- $result[] = $disasterName;
- }
- return implode('<br>', $result);
- });
- }
- /**
- * 添加是否施肥列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnFertilized(string $field = 'fertilized', string $label = '已施肥'): Column
- {
- return $this->grid->column($field, $label)->bool();
- }
- /**
- * 添加产量加成列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnOutputBonus(string $field = 'output_bonus', string $label = '产量加成'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return ($value * 100) . '%';
- });
- }
- /**
- * 添加灾害抵抗列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnDisasterResistance(string $field = 'disaster_resistance', string $label = '灾害抵抗'): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) {
- return ($value * 100) . '%';
- });
- }
- /**
- * 添加是否特殊土地列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @return Column
- */
- public function columnIsSpecial(string $field = 'is_special', string $label = '特殊土地'): Column
- {
- return $this->grid->column($field, $label)->bool();
- }
- /**
- * 添加种子列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @param bool $showType 是否显示种子类型
- * @return Column
- */
- public function columnSeed(string $field = 'seed_id', string $label = '种子', bool $showType = true): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) use ($showType) {
- if (empty($value)) {
- return '-';
- }
- // 尝试获取种子名称
- $seed = \App\Module\Farm\Models\FarmSeed::find($value);
- if ($seed) {
- $html = "<span class='badge badge-primary'>{$seed->name}</span>";
- if ($showType) {
- $typeName = \App\Module\Farm\Enums\SEED_TYPE::getName($seed->type);
- $html .= " <span class='badge badge-info'>{$typeName}</span>";
- }
- // 如果有关联的物品ID,尝试获取物品名称
- if ($seed->item_id) {
- try {
- $item = \App\Module\GameItems\Models\Item::find($seed->item_id);
- if ($item) {
- $html .= "<br><small>物品: {$item->name} (ID: {$item->id})</small>";
- }
- } catch (\Exception $e) {
- // 忽略异常,只是不显示物品信息
- }
- }
- return $html;
- }
- return $value;
- });
- }
- /**
- * 添加物品列
- *
- * @param string $field 字段名
- * @param string $label 标签名
- * @param bool $showType 是否显示物品类型
- * @return Column
- */
- public function columnItem(string $field = 'item_id', string $label = '物品', bool $showType = true): Column
- {
- return $this->grid->column($field, $label)->display(function ($value) use ($showType) {
- if (empty($value)) {
- return '-';
- }
- // 尝试获取物品名称
- try {
- $item = \App\Module\GameItems\Models\Item::find($value);
- if ($item) {
- $html = "<span class='badge badge-success'>{$item->name}</span>";
- if ($showType && isset($item->type)) {
- try {
- $typeName = \App\Module\GameItems\Enums\ITEM_TYPE::getName($item->type);
- $html .= " <span class='badge badge-info'>{$typeName}</span>";
- } catch (\Exception $e) {
- // 忽略异常,只是不显示类型信息
- }
- }
- return $html;
- }
- } catch (\Exception $e) {
- // 忽略异常,只是不显示物品信息
- }
- return $value;
- });
- }
- }
|