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 '
'.nl2br($this->remark).'
'; }); $grid->column('settle_at', '结算时间')->display(function () { return $this->settle_at?->toDateTimeString(); })->sortable(); $grid->column('status', '状态')->display(function ($v) { if (! $this->isSettled()) { return "  待结算"; } return "  {$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')); }); }); }); } }