102 lines
3.7 KiB
PHP
102 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace Peidikeji\Order\Http\Admin;
|
|
|
|
use Carbon\Carbon;
|
|
use Dcat\Admin\Admin;
|
|
use Dcat\Admin\Grid;
|
|
use Dcat\Admin\Grid\Filter;
|
|
use Dcat\Admin\Http\Controllers\AdminController;
|
|
use Dcat\Admin\Show;
|
|
use Dcat\Admin\Form;
|
|
use Dcat\Admin\Grid\Displayers\Actions;
|
|
use Peidikeji\Order\Enums\RefundStatus;
|
|
use Peidikeji\Order\Enums\RefundWay;
|
|
use Peidikeji\Order\Models\OrderRefund;
|
|
|
|
class RefundController extends AdminController
|
|
{
|
|
protected $translation = 'dcat-admin-order::refund';
|
|
|
|
protected function grid()
|
|
{
|
|
return Grid::make(OrderRefund::with(['order']), function (Grid $grid) {
|
|
$grid->model()->sort();
|
|
|
|
$grid->column('order.sn');
|
|
$grid->column('sn');
|
|
$grid->column('refund_reason');
|
|
$grid->column('refund_money');
|
|
$grid->column('refund_status')->display(fn() => $this->refund_status->label());
|
|
$grid->column('created_at');
|
|
|
|
$grid->filter(function (Filter $filter) {
|
|
$filter->panel();
|
|
$filter->like('order.sn')->width(3);
|
|
$filter->like('sn')->width(3);
|
|
$filter->equal('refund_status')->select(RefundStatus::options())->width(3);
|
|
$filter->whereBetween('created_at', function ($q) {
|
|
$start = data_get($this->input, 'start');
|
|
$start = $start ? Carbon::createFromFormat('Y-m-d', $start) : null;
|
|
$end = data_get($this->input, 'end');
|
|
$end = $end ? Carbon::createFromFormat('Y-m-d', $end) : null;
|
|
if ($start) {
|
|
if ($end) {
|
|
$q->whereBetween('created_at', [$start, $end]);
|
|
}
|
|
$q->where('created_at', '>=', $start);
|
|
} else if ($end) {
|
|
$q->where('created_at', '<=', $end);
|
|
}
|
|
})->date()->width(6);
|
|
});
|
|
|
|
$grid->disableRowSelector();
|
|
$grid->disableCreateButton();
|
|
$grid->disableDeleteButton();
|
|
|
|
$user = Admin::user();
|
|
$grid->actions(function (Actions $actions) use ($user) {
|
|
$row = $actions->row;
|
|
$actions->edit($row->refund_status === RefundStatus::Apply && $user->can('dcat.admin.order_refunds.edit'));
|
|
});
|
|
});
|
|
}
|
|
|
|
protected function detail($id)
|
|
{
|
|
return Show::make($id, OrderRefund::with(['order']), function (Show $show) {
|
|
$show->field('order.sn');
|
|
$show->field('sn');
|
|
$show->field('refund_reason');
|
|
$show->field('refund_money');
|
|
$show->field('refund_way')->as(fn() => $this->refund_way->label())->unescape();
|
|
$show->field('refund_status')->as(fn() => $this->refund_status->label())->unescape();
|
|
$show->field('finish_at');
|
|
$show->field('created_at');
|
|
$show->field('refund_data')->json();
|
|
|
|
$show->disableDeleteButton();
|
|
$show->disableEditButton();
|
|
});
|
|
}
|
|
|
|
protected function form()
|
|
{
|
|
return Form::make(OrderRefund::with(['order']), function (Form $form) {
|
|
$form->display('order.sn');
|
|
$form->text('sn')->required();
|
|
$form->select('refund_way')->options(RefundWay::options())->required();
|
|
$form->currency('refund_money')->symbol('¥')->required();
|
|
$form->text('refund_reason')->required();
|
|
|
|
$form->disableEditingCheck();
|
|
$form->disableCreatingCheck();
|
|
$form->disableViewCheck();
|
|
|
|
$form->disableViewButton();
|
|
$form->disableDeleteButton();
|
|
});
|
|
}
|
|
}
|