6
0
Fork 0
jiqu-library-server/app/Admin/Controllers/DealerChannelSubsidyControl...

142 lines
5.6 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\DealerChannelSubsidyBatchPay;
use App\Admin\Actions\Grid\DealerChannelSubsidyPay;
use App\Admin\Repositories\DealerEarning;
use App\Admin\Widgets\InfoBox;
use App\Enums\DealerEarningStatus;
use App\Models\DealerEarning as DealerEarningModel;
use Dcat\Admin\Admin;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Row;
class DealerChannelSubsidyController extends AdminController
{
protected $title = '签约渠道补贴';
/**
* 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 = DealerEarning::with(['user.userInfo']);
return Grid::make($builder, function (Grid $grid) {
$grid->model()->channelSubsidy()->withoutPayer()->orderBy('id', 'desc');
$grid->column('id')->sortable();
$grid->column('user.phone', '手机号');
$grid->column('user.userInfo.nickname', '昵称');
$grid->column('lvl', '经销商等级')->display(function () {
return $this->lvl->text();
});
$grid->column('total_amount', '补贴金额')->prepend('¥');
$grid->column('fee', '手续费')->prepend('¥')->help('手续费=补贴金额*手续费率');
$grid->column('fee_rate', '手续费率')->append('%');
$grid->column('total_earnings', '总收入')->prepend('¥')->help('总收入=补贴金额-手续费');
$grid->column('remark', '备注')->display('查看')->modal(function ($modal) {
$modal->title('备注');
return '<div>'.nl2br($this->remark).'</div>';
});
$grid->column('settle_at', '结算时间')->display(function () {
return $this->settle_at?->toDateTimeString();
})->sortable();
$grid->column('status', '状态')->display(function ($v) {
if (! $this->isSettled()) {
return "<i class='fa fa-circle' style='font-size: 13px;color: #b9c3cd'></i>&nbsp;&nbsp;待结算";
}
return "<i class='fa fa-circle' style='font-size: 13px;color: {$v->color()}'></i>&nbsp;&nbsp;{$v->text()}";
});
$grid->column('pay_at', '付款时间')->display(function () {
return $this->pay_at?->toDateTimeString();
})->sortable();
$grid->column('created_at', '创建时间')->display(function () {
return $this->created_at?->toDateTimeString();
});
$grid->showRowSelector();
$grid->tools(function ($tools) {
$tools->batch(function ($batch) {
$batch->disableDelete();
if (Admin::user()->can('dcat.admin.dealer_channel_subsidies.batch_pay')) {
$batch->add(new DealerChannelSubsidyBatchPay());
}
});
});
$grid->actions(function (Grid\Displayers\Actions $actions) {
if (
$actions->row->isSettled() &&
$actions->row->isPending() &&
Admin::user()->can('dcat.admin.dealer_channel_subsidies.pay')
) {
$actions->append(new DealerChannelSubsidyPay());
}
});
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->equal('user.phone', '手机号')->width(3);
$filter->where('status', function ($query) {
switch ($this->input) {
case 'pending':
$query->whereNull('settle_at')->where('status', DealerEarningStatus::Pending);
break;
case 'paying':
$query->whereNotNull('settle_at')->where('status', DealerEarningStatus::Pending);
break;
case 'completed':
$query->where('status', DealerEarningStatus::Completed);
break;
}
}, '状态')->select([
'pending' => '待结算',
'paying' => '待付款',
'completed' => '已完成',
])->width(3);
$filter->between('settle_at', '结算时间')->datetime()->width(6);
});
$grid->header(function ($collection) use ($grid) {
return tap(new Row(), function ($row) use ($grid) {
$query = DealerEarningModel::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'] ?? []);
});
$totalAmount = (clone $query)->sum('total_amount');
$totalFee = (clone $query)->sum('fee');
$row->column(3, new InfoBox('补贴金额', $totalAmount, 'fa fa-cny'));
$row->column(3, new InfoBox('手续费', $totalFee, 'fa fa-cny'));
});
});
});
}
}