85 lines
2.8 KiB
PHP
85 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
use App\Admin\Repositories\PointLog as PointLogRepository;
|
|
use App\Admin\Widgets\InfoBox;
|
|
use App\Enums\PointLogAction;
|
|
use App\Models\PointLog;
|
|
use Dcat\Admin\Admin;
|
|
use Dcat\Admin\Grid;
|
|
use Dcat\Admin\Http\Controllers\AdminController;
|
|
use Dcat\Admin\Layout\Row;
|
|
|
|
class PointLogController extends AdminController
|
|
{
|
|
/**
|
|
* Make a grid builder.
|
|
*
|
|
* @return Grid
|
|
*/
|
|
protected function grid()
|
|
{
|
|
Admin::style(
|
|
<<<CSS
|
|
.card-header {
|
|
margin-top: 1.5rem !important;
|
|
margin-bottom: -1rem !important;
|
|
}
|
|
CSS
|
|
);
|
|
|
|
$builder = PointLogRepository::with(['user', 'administrator']);
|
|
|
|
return Grid::make($builder, function (Grid $grid) {
|
|
$grid->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('administrator.name', '操作人');
|
|
$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->like('administrator.name', '操作人')->width(3);
|
|
$filter->in('action')->multipleSelect(PointLogAction::options())->width(3);
|
|
$filter->between('created_at')->dateTime()->width(3);
|
|
});
|
|
|
|
return $grid;
|
|
});
|
|
}
|
|
}
|