column('id', 'ID')->sortable();
$grid->column('team.name', '所属队伍');
$grid->column('user_id', '用户ID')->sortable();
$grid->column('pet.name', '宠物名称');
$grid->column('power', '战力贡献')->sortable();
$grid->column('join_time', '加入时间')->sortable();
// 添加是否队长标识
$grid->column('is_leader', '是否队长')->display(function () {
return $this->team && $this->team->leader_id == $this->user_id
? '是'
: '否';
})->label();
// 筛选
$grid->filter(function ($filter) {
$helper = new FilterHelper($filter, $this);
$helper->equal('id', 'ID');
$filter->equal('team_id', '所属队伍')->select(function () {
return \App\Module\Pet\Models\PetBattleTeam::pluck('name', 'id');
});
$filter->equal('user_id', '用户ID');
$helper->equalSelectModelPet('pet_id', '宠物');
$filter->between('power', '战力贡献');
$filter->between('join_time', '加入时间')->datetime();
});
// 默认按战力贡献倒序排序
$grid->model()->orderBy('power', 'desc');
return $grid;
});
}
/**
* 详情页
*
* @param mixed $id
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new PetBattleTeamMemberRepository(['team', 'pet', 'user']), function (Show $show) {
$helper = new ShowHelper($show, $this);
$helper->field('id', 'ID');
$show->field('team.name', '所属队伍');
$show->field('team.season.name', '所属赛季');
$show->field('user_id', '用户ID');
$show->field('pet.name', '宠物名称');
$show->field('pet.grade', '宠物品阶')->as(function ($grade) {
$labels = [
'FIRST' => '一品',
'SECOND' => '二品',
'THIRD' => '三品',
'FOURTH' => '四品',
];
return $labels[$grade] ?? $grade;
});
$show->field('pet.level', '宠物等级');
$show->field('power', '战力贡献');
$show->field('join_time', '加入时间');
// 显示是否队长
$show->field('is_leader', '是否队长')->as(function () {
return $this->team && $this->team->leader_id == $this->user_id ? '是' : '否';
});
return $show;
});
}
/**
* 表单
*
* @return Form
*/
protected function form()
{
return Form::make(new PetBattleTeamMemberRepository(), function (Form $form) {
$helper = new FormHelper($form, $this);
$form->display('id', 'ID');
$form->select('team_id', '所属队伍')
->options(function () {
return \App\Module\Pet\Models\PetBattleTeam::pluck('name', 'id');
})
->required();
$form->number('user_id', '用户ID')
->required()
->help('用户的ID');
$helper->selectModelPet('pet_id', '宠物')
->required()
->help('用户参赛的宠物');
$form->number('power', '战力贡献')
->min(0)
->default(0)
->required()
->help('宠物的战力贡献值');
$form->datetime('join_time', '加入时间')
->default(now())
->required();
// 保存前回调
$form->saving(function (Form $form) {
// 验证用户和宠物的关联性
if ($form->pet_id && $form->user_id) {
$pet = \App\Module\Pet\Models\PetUser::find($form->pet_id);
if ($pet && $pet->user_id != $form->user_id) {
return $form->error('所选宠物不属于该用户');
}
}
// 验证用户在同一赛季中是否已经加入了其他队伍
if ($form->team_id && $form->user_id) {
$team = \App\Module\Pet\Models\PetBattleTeam::find($form->team_id);
if ($team) {
$seasonId = $team->season_id;
$existingMember = PetBattleTeamMember::whereHas('team', function ($query) use ($seasonId) {
$query->where('season_id', $seasonId);
})->where('user_id', $form->user_id)
->where('id', '!=', $form->model()->id)
->first();
if ($existingMember) {
return $form->error('该用户已经加入了本赛季的其他队伍');
}
}
}
});
// 保存后回调
$form->saved(function (Form $form) {
// 更新队伍的总战力和成员数量
if ($form->team_id) {
$team = \App\Module\Pet\Models\PetBattleTeam::find($form->team_id);
if ($team) {
$totalPower = PetBattleTeamMember::where('team_id', $team->id)->sum('power');
$memberCount = PetBattleTeamMember::where('team_id', $team->id)->count();
$team->total_power = $totalPower;
$team->member_count = $memberCount;
$team->save();
}
}
});
return $form;
});
}
}