| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- namespace App\Module\Game\AdminControllers;
- use App\Module\Farm\Models\FarmLandType;
- use App\Module\Fund\Models\FundConfigModel;
- use App\Module\Fund\Models\FundCurrencyModel;
- use App\Module\Game\Enums\CONDITION_OPERATOR;
- use App\Module\Game\Enums\CONDITION_TYPE;
- use App\Module\Game\Models\GameConditionGroup;
- use App\Module\Game\Repositorys\GameConditionItemRepository;
- use App\Module\GameItems\Models\Item;
- use App\Module\Pet\Models\PetConfig;
- use Dcat\Admin\Admin;
- use Dcat\Admin\Form;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Show;
- use Dcat\Admin\Http\Controllers\AdminController;
- use Spatie\RouteAttributes\Attributes\Resource;
- /**
- * 条件项管理控制器
- */
- #[Resource('game-condition-items', names: 'dcat.admin.game-condition-items')]
- class GameConditionItemController extends AdminController
- {
- /**
- * 标题
- *
- * @return string
- */
- protected function title()
- {
- return '条件项管理';
- }
- /**
- * 创建表格
- *
- * @return Grid
- */
- protected function grid()
- {
- return Grid::make(new GameConditionItemRepository(), function (Grid $grid) {
- $grid->column('id', 'ID')->sortable();
- $grid->column('group_id', '条件组')->display(function ($groupId) {
- $group = GameConditionGroup::find($groupId);
- return $group ? "{$group->name} ({$group->code})" : "未知 ({$groupId})";
- });
- $grid->column('condition_type', '条件类型')->display(function ($type) {
- return CONDITION_TYPE::getName($type);
- });
- $grid->column('target_id', '目标ID')->display(function () {
- return $this->getTargetName();
- });
- $grid->column('operator', '比较运算符')->display(function ($operator) {
- return CONDITION_OPERATOR::getSymbol($operator);
- });
- $grid->column('value', '比较值');
- $grid->column('created_at', '创建时间');
- $grid->column('updated_at', '更新时间');
- $grid->filter(function (Grid\Filter $filter) {
- $filter->equal('id', 'ID');
- $filter->equal('group_id', '条件组')->select(
- GameConditionGroup::pluck('name', 'id')
- );
- $filter->equal('condition_type', '条件类型')->select(CONDITION_TYPE::getAll());
- $filter->equal('target_id', '目标ID');
- });
- });
- }
- /**
- * 创建详情页
- *
- * @param mixed $id
- * @return Show
- */
- protected function detail($id)
- {
- return Show::make($id, new GameConditionItemRepository(), function (Show $show) {
- $show->field('id', 'ID');
- $show->field('group_id', '条件组')->as(function ($groupId) {
- $group = GameConditionGroup::find($groupId);
- return $group ? "{$group->name} ({$group->code})" : "未知 ({$groupId})";
- });
- $show->field('condition_type', '条件类型')->as(function ($type) {
- return CONDITION_TYPE::getName($type);
- });
- $show->field('target_id', '目标ID')->as(function () {
- return $this->getTargetName();
- });
- $show->field('operator', '比较运算符')->as(function ($operator) {
- return CONDITION_OPERATOR::getName($operator) . ' (' . CONDITION_OPERATOR::getSymbol($operator) . ')';
- });
- $show->field('value', '比较值');
- $show->field('param1', '参数1');
- $show->field('param2', '参数2');
- $show->field('extra_data', '额外数据')->json();
- $show->field('created_at', '创建时间');
- $show->field('updated_at', '更新时间');
- });
- }
- /**
- * 创建表单
- *
- * @return Form
- */
- protected function form()
- {
- return Form::make(new GameConditionItemRepository(), function (Form $form) {
- $form->display('id', 'ID');
- $form->select('group_id', '条件组')
- ->options(GameConditionGroup::pluck('name', 'id'))
- ->required();
- // 简化表单,不使用when方法
- $form->select('condition_type', '条件类型')
- ->options(CONDITION_TYPE::getAll())
- ->required()->default(request()->input('condition_type'));
- // 根据条件类型显示不同的提示信息
- $form->select('target_id', '目标ID')
- ->options(function () {
- $conditionType = request()->input('condition_type',$this->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();
- } elseif ($conditionType == CONDITION_TYPE::FUND_COUNT->value) {
- return FundConfigModel::pluck('name', 'id')->toArray();
- }
- return [];
- })
- ->help('根据条件类型不同,表示土地类型ID、宠物ID、物品ID、代币ID等。房屋等级条件可填0。');
- $form->select('operator', '比较运算符')
- ->options(CONDITION_OPERATOR::getAll())
- ->default(CONDITION_OPERATOR::GREATER_THAN_OR_EQUAL->value)
- ->required()
- ->help('选择比较运算符,如等于、大于等于等');
- $form->number('value', '比较值')
- ->default(0)
- ->required()
- ->help('设置比较的目标值');
- $form->number('param1', '参数1')
- ->default(0)
- ->help('根据条件类型不同含义,可选');
- $form->number('param2', '参数2')
- ->default(0)
- ->help('根据条件类型不同含义,可选');
- $form->textarea('extra_data', '额外数据')
- ->help('JSON格式,可存储特定条件类型的额外参数,可选');
- $form->display('created_at', '创建时间');
- $form->display('updated_at', '更新时间');
- // 添加简单的JavaScript代码,处理条件类型变化
- Admin::script(<<<JS
- $(function() {
- // 监听条件类型变化
- $('select[name="condition_type"]').on('change', function() {
- // 刷新页面,传递条件类型参数
- var url = new URL(window.location.href);
- url.searchParams.set('condition_type', $(this).val());
- window.location.href = url.toString();
- });
- });
- JS);
- });
- }
- }
|