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

310 lines
14 KiB
PHP

<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\DealerOrderAllocate;
use App\Admin\Actions\Grid\DealerOrderCancel;
use App\Admin\Actions\Grid\DealerOrderPaid;
use App\Admin\Actions\Grid\DealerOrderRefuse;
use App\Admin\Actions\Grid\DealerOrderShipping;
use App\Admin\Actions\Show\DealerOrderRemark;
use App\Admin\Renderable\Grid\Filter\DealerOrderPayWayIn;
use App\Admin\Repositories\DealerOrder;
use App\Enums\DealerOrderStatus;
use App\Enums\PayWay;
use App\Models\DealerChannelSubsidyLog;
use App\Models\DealerOrderProduct;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Widgets\Box;
use Illuminate\Support\Facades\Request;
class DealerOrderController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$builder = DealerOrder::with(['user', 'userInfo', 'consignor']);
return Grid::make($builder, function (Grid $grid) {
$type = Request::input('type', '');
if ($type == 'manager') {
$grid->model()->where(function ($query) {
return $query->where('consignor_id', 1)->orWhereNull('consignor_id');
});
}
$grid->setResource('dealer-orders');
$grid->column('id')->sortable();
$grid->column('sn');
$grid->column('user.phone')->copyable();
$grid->column('userInfo.nickname');
$grid->column('consignor.phone')->display(function ($value) {
return $value ?? '系统';
});
$grid->column('total_amount')->prepend('¥');
$statusTexts = DealerOrderStatus::texts();
$grid->column('pay_way')->display(function ($v) {
return $v?->text();
})->circleDot(PayWay::colors())->filter(DealerOrderPayWayIn::make([
PayWay::Offline->value => '线下',
PayWay::Wallet->value => '钱包',
PayWay::WxpayH5->value => '微信支付',
]));
$grid->column('order_status')->display(function ($v) {
return $this->order_status;
})->using($statusTexts)->dot([
DealerOrderStatus::Pending->value => 'primary',
DealerOrderStatus::Paying->value => 'danger',
DealerOrderStatus::Confirming->value => 'warning',
DealerOrderStatus::Paid->value => 'danger',
DealerOrderStatus::Shipped->value => 'warning',
DealerOrderStatus::Completed->value => 'success',
DealerOrderStatus::Cancelled->value => '#b3b9bf',
])->filter(Grid\Column\Filter\In::make($statusTexts)->setColumnName('status'));
// $grid->column('settle_state');
// $grid->column('pay_info');
// $grid->column('pay_image');
// $grid->column('pay_time');
$grid->column('paied_time');
// $grid->column('shipping_time');
// $grid->column('shippinged_time');
$grid->column('created_at')->sortable();
$grid->model()->orderBy('created_at', 'desc');
// $grid->column('updated_at')->sortable();
$grid->actions(function (Grid\Displayers\Actions $actions) {
if (Admin::user()->can('dcat.admin.dealer_orders.show')) {
$actions->append('<a style="cursor: pointer;" target="_blank" href="'.admin_route('dealer_orders.show', ['dealer_order'=>$actions->row]).'"><i class="feather icon-eye"></i> 显示 &nbsp;&nbsp;</a>');
// $actions->disableView(false);
}
if (!(empty($actions->row->consignor) || $actions->row->consignor_id == 1) && $actions->row->isPending() && Admin::user()->can('dcat.admin.dealer_orders.allocate')) {
$actions->append(new DealerOrderAllocate());
}
if ((empty($actions->row->consignor))) {
if ($actions->row->isPay() && Admin::user()->can('dcat.admin.dealer_orders.paid')) {
$actions->append(new DealerOrderPaid());
}
if (
$actions->row->isPay() &&
$actions->row->isPayWayOffline() &&
Admin::user()->can('dcat.admin.dealer_orders.refuse')
) {
$actions->append(new DealerOrderRefuse());
}
if ($actions->row->isPaid() && Admin::user()->can('dcat.admin.dealer_orders.shipping')) {
$actions->append(new DealerOrderShipping());
}
}
if ((
$actions->row->isPending() //待确认
|| $actions->row->isPendinged() //待付款
|| $actions->row->isPay()//待收款
) && Admin::user()->can('dcat.admin.dealer_orders.cancel')) {
$actions->append(new DealerOrderCancel());
}
});
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
$filter->like('user.phone')->width(3);
$filter->like('consignor.phone')->width(3);
$filter->like('sn')->width(3);
$filter->between('paied_time')->dateTime()->width(5);
$filter->between('created_at')->dateTime()->width(5);
// $filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return function (Row $row) use ($id) {
$row->column(5, function ($column) use ($id) {
$builder = DealerOrder::with(['user', 'userInfo', 'consignor']);
$column->row(Show::make($id, $builder, function (Show $show) {
$show->field('sn');
$show->field('created_at');
$show->field('order_status')->as(function ($v) {
return $this->order_status;
})->using(DealerOrderStatus::texts())->dot([
DealerOrderStatus::Pending->value => 'primary',
DealerOrderStatus::Paying->value => 'danger',
DealerOrderStatus::Confirming->value => 'warning',
DealerOrderStatus::Paid->value => 'danger',
DealerOrderStatus::Shipped->value => 'warning',
DealerOrderStatus::Completed->value => 'success',
DealerOrderStatus::Cancelled->value => '#b3b9bf',
]);
$show->field('user.phone');
$show->field('user_info.nickname');
$show->field('consignor.phone')->as(function ($value) {
return $value ?? '系统';
});
$show->field('pay_way', '支付方式')->as(function () {
return $this->pay_way?->text();
})->circleDot(PayWay::colors());
$show->field('pay_sn', '支付流水号');
$show->field('pay_time', '支付时间');
$show->field('paied_time');
if ($show->model()->isPayWayWxpay()) {
$show->field('out_trade_no', '外部交易号');
} elseif ($show->model()->isPayWayOffline()) {
$show->field('pay_image')->image();
}
$show->field('remark');
$show->divider();
$show->field('consignee_name');
$show->field('consignee_telephone');
$show->field('consignee', '收货地址')->as(function () {
return $this->consignee_zone . ' '. $this->consignee_address;
});
if (
$show->model()->isPayWayOffline() &&
!in_array($show->model()->order_status, [
DealerOrderStatus::Pending->value, DealerOrderStatus::Cancelled->value,
])
) {
$show->divider('收款信息-银行');
$show->field('bank_user_name', '银行-收款人')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['bank']['user_name'] ?? '';
});
$show->field('bank_bank_name', '银行-名称')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['bank']['bank_name'] ?? '';
});
$show->field('bank_bank_number', '银行-卡号')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['bank']['bank_number'] ?? '';
});
$show->field('bank_bank_description', '银行-开户行')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['bank']['bank_description'] ?? '';
});
$show->divider('收款信息-支付宝');
$show->field('alipay_user_name', '支付宝-真实名称')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['alipay']['user_name'] ?? '';
});
$show->field('alipay_ali_name', '支付宝-账户')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['alipay']['ali_name'] ?? '';
});
$show->field('alipay_image', '支付宝-收款码')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['alipay']['image'] ?? '';
})->image();
$show->divider('收款信息-微信');
$show->field('wechat_user_name', '微信-真实名称')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['wechat']['user_name'] ?? '';
});
$show->field('wechat_wechat_name', '微信-ID')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['wechat']['wechat_name'] ?? '';
});
$show->field('wechat_image', '微信-收款码')->as(function () {
$payInfo = $this->getConsignorPayInfo();
return $payInfo['wechat']['image'] ?? '';
})->image();
}
$show->panel()
->tools(function (Show\Tools $tools) use ($show) {
$tools->disableEdit();
$tools->disableDelete();
if (Admin::user()->can('dcat.admin.dealer_orders.remark')) {
$tools->append(new DealerOrderRemark());
}
});
}));
});
$row->column(7, function ($column) use ($id) {
$builder = DealerOrderProduct::where('order_id', $id);
$productGrid = Grid::make($builder, function (Grid $grid) {
$grid->column('name');
$grid->column('cover', '封面')->image(50, 50);
$grid->column('price', '标价')->prepend('¥');
$grid->column('sale_price', '实际售价')->prepend('¥');
$grid->column('qty', '数量');
$grid->column('deposit_qty', '云数量');
$grid->disableActions();
$grid->disablePagination();
$grid->disableRefreshButton();
});
$column->row(Box::make('订单商品', $productGrid));
//显示渠道补贴明细
// $channelSubsidy = '';
$builder = DealerChannelSubsidyLog::with(['user', 'earning'])->where('order_id', $id);
$channelSubsidy = Grid::make($builder, function (Grid $grid) {
$grid->column('user.phone', '手机号');
$grid->column('lvl', '等级')->display(function () {
return $this->lvl->text();
});
$grid->column('total_amount', '补贴金额');
$grid->column('remark', '备注');
$grid->column('earning.id', '操作')->display(function () {
return '查看';
})->link(function ($value) {
return admin_route('dealer_earnings.show', ['dealer_earning'=>$this->earning->id]);
});
$grid->disableActions();
$grid->disablePagination();
$grid->disableRefreshButton();
});
$column->row(Box::make('渠道补贴', $channelSubsidy));
});
};
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new DealerOrder(), function (Form $form) {
$form->display('id');
$form->text('sn');
$form->text('user_id');
$form->text('consignor_id');
$form->text('total_amount');
$form->text('status');
$form->text('settle_state');
$form->text('consignee_name');
$form->text('consignee_telephone');
$form->text('consignee_zone');
$form->text('consignee_address');
$form->text('pay_info');
$form->text('pay_image');
$form->text('pay_time');
$form->text('paied_time');
$form->text('shipping_time');
$form->text('shippinged_time');
$form->display('created_at');
$form->display('updated_at');
});
}
}