168 lines
7.0 KiB
PHP
168 lines
7.0 KiB
PHP
<?php
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
use App\Admin\Actions\Grid\DealerManageSubsidyBatchPay;
|
|
use App\Admin\Actions\Grid\DealerManageSubsidyPay;
|
|
use App\Admin\Repositories\DealerManageSubsidy;
|
|
use App\Admin\Widgets\InfoBox;
|
|
use App\Enums\DealerManageSubsidyStatus;
|
|
use App\Models\DealerManageSubsidy as DealerManageSubsidyModel;
|
|
use Dcat\Admin\Admin;
|
|
use Dcat\Admin\Grid;
|
|
use Dcat\Admin\Http\Controllers\AdminController;
|
|
use Dcat\Admin\Layout\Row;
|
|
|
|
class DealerManageSubsidyController 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 = DealerManageSubsidy::with(['dealer', 'user', 'userinfo', 'earning']);
|
|
|
|
return Grid::make($builder, function (Grid $grid) {
|
|
$grid->model()->settled()->orderBy('id', 'desc');
|
|
|
|
$grid->column('settle_period', '结算周期')->display(function () {
|
|
return $this->start_at->rawFormat('Y/m/d') . '-' . $this->end_at->rawFormat('Y/m/d');
|
|
})->link(function () {
|
|
return admin_route('dealer_manage_subsidy_logs.index', [
|
|
'user[phone]' => $this->user?->phone,
|
|
'order_completed_at[start]' => $this->start_at->toDateTimeString(),
|
|
'order_completed_at[end]' => $this->end_at->toDateTimeString(),
|
|
]);
|
|
});
|
|
$grid->column('user.phone', '手机号');
|
|
$grid->column('userinfo.nickname', '昵称');
|
|
$grid->column('lvl', '经销商等级')->display(function () {
|
|
return $this->lvl->text();
|
|
});
|
|
$grid->column('total_amount', '津贴总额')->prepend('¥');
|
|
$grid->column('fee', '手续费')->prepend('¥')->help('手续费=津贴总额*手续费率');
|
|
$grid->column('real_amount', '总收入')->prepend('¥')->help('总收入=津贴总额-手续费');
|
|
$grid->column('fee_rate', '手续费率')->append('%');
|
|
$grid->column('remark', '备注')->display('查看')->modal(function ($modal) {
|
|
$modal->title('备注');
|
|
|
|
return "<div style='padding:10px'>".nl2br($this->remark).'</div>';
|
|
});
|
|
$grid->column('status', '状态')->display(function ($v) {
|
|
return '<i class="fa fa-circle" style="font-size: 13px; color: '.$v->color().';"></i> '.$v->text();
|
|
});
|
|
$grid->column('earning.pay_at', '付款时间');
|
|
|
|
$grid->showRowSelector();
|
|
|
|
$grid->tools(function ($tools) {
|
|
$tools->batch(function ($batch) {
|
|
$batch->disableDelete();
|
|
|
|
if (Admin::user()->can('dcat.admin.dealer_manage_subsidies.batch_pay')) {
|
|
$batch->add(new DealerManageSubsidyBatchPay());
|
|
}
|
|
});
|
|
});
|
|
|
|
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
|
if ($actions->row->isPending() && Admin::user()->can('dcat.admin.dealer_manage_subsidies.pay')) {
|
|
$actions->append(new DealerManageSubsidyPay());
|
|
}
|
|
});
|
|
|
|
$grid->filter(function (Grid\Filter $filter) {
|
|
$filter->panel();
|
|
|
|
$filter->equal('user.phone', '手机号')->width(3);
|
|
$filter->equal('status', '状态')->select(DealerManageSubsidyStatus::texts())->width(3);
|
|
$filter->whereBetween('settle_period', function ($query) {
|
|
$start = $this->input['start'] ?? null;
|
|
$end = $this->input['end'] ?? null;
|
|
|
|
$query->when($start, function ($query, $start) {
|
|
$query->where('start_at', '>=', "{$start} 00:00:00");
|
|
});
|
|
|
|
$query->when($end, function ($query, $end) {
|
|
$query->where('end_at', '<=', "{$end} 23:59:59");
|
|
});
|
|
}, '结算周期')->date()->width(6);
|
|
});
|
|
|
|
$grid->header(function ($collection) use ($grid) {
|
|
return tap(new Row(), function ($row) use ($grid) {
|
|
$query = DealerManageSubsidyModel::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'));
|
|
});
|
|
});
|
|
});
|
|
|
|
return Grid::make($builder, function (Grid $grid) {
|
|
$grid->model()->orderBy('id', 'desc');//默认ID倒叙
|
|
$grid->column('id')->sortable();
|
|
$grid->column('user.phone', '手机号')->copyable();
|
|
$grid->column('lvl', '等级')->display(function () {
|
|
return $this->lvl->text();
|
|
});
|
|
$grid->column('order.sn', '订单编号');
|
|
$grid->column('product.name', '商品名称');
|
|
$grid->column('sales_volume', '销量');
|
|
$grid->column('total_amount', '金额');
|
|
$grid->column('order_completed_at', '结算时间')->sortable();
|
|
$grid->column('created_at')->sortable();
|
|
|
|
$grid->disableCreateButton();
|
|
$grid->disableActions();
|
|
$grid->header(function ($collection) use ($grid) {
|
|
$query = DealerManageSubsidyLogModel::query();
|
|
|
|
// 拿到表格筛选 where 条件数组进行遍历
|
|
$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');
|
|
// 自定义组件
|
|
return "<div style='padding: 10px;'>金额:".$totalAmount.' 元</div>';
|
|
});
|
|
$grid->filter(function (Grid\Filter $filter) {
|
|
$filter->panel(false);
|
|
$filter->equal('user.phone', '手机号')->width(3);
|
|
$filter->between('order_completed_at', '结算时间')->dateTime()->width(7);
|
|
});
|
|
});
|
|
}
|
|
}
|