model()->orderBy('id', 'desc'); $grid->column('id')->sortable(); $grid->column('user.phone')->copyable(); $grid->column('action')->display(fn ($action) => $action->label())->label();; $grid->column('change_points')->display(function ($value) { return bcdiv($value, 100, 2); }); $grid->column('before_points')->display(function ($value) { return bcdiv($value, 100, 2); }); $grid->column('after_points')->display(function ($value) { return bcdiv($value, 100, 2); }); $grid->column('remark'); $grid->column('created_at'); $grid->disableActions(); $grid->header(function ($collection) use ($grid) { return tap(new Row(), function ($row) use ($grid) { $query = PointLog::query(); $grid->model()->getQueries()->unique()->each(function ($value) use (&$query) { if (in_array($value['method'], ['paginate', 'get', 'orderBy', 'orderByDesc'], true)) { return; } $query = call_user_func_array([$query, $value['method']], $value['arguments'] ?? []); }); $totalPoints = (clone $query)->sum('change_points'); $row->column(2, new InfoBox('积分总数', bcdiv($totalPoints, 100, 2), 'fa fa-ticket')); }); }); $grid->filter(function (Grid\Filter $filter) { $filter->panel(false); $filter->equal('user.phone')->width(3); $filter->in('action')->multipleSelect(PointLogAction::options())->width(3); $filter->between('created_at')->dateTime()->width(3); }); return $grid; }); } }