4
0
Fork 0
dcat-admin-order/src/Http/Admin/RefundController.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();
});
}
}