6
0
Fork 0

添加后台订单操作

release
vine_liutk 2022-01-14 21:04:35 +08:00 committed by 李静
parent d172684b86
commit 6fa2952467
11 changed files with 408 additions and 13 deletions

View File

@ -0,0 +1,62 @@
<?php
namespace App\Admin\Actions\Grid;
use App\Models\DealerOrder;
use App\Services\Dealer\OrderService;
use Dcat\Admin\Grid\RowAction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Throwable;
class DealerOrderPaid extends RowAction
{
public function title()
{
if ($this->title) {
return $this->title;
}
return '<i class="feather icon-stop-circle grid-action-icon"></i> 确认收款 &nbsp;&nbsp;';
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return $user->can('dcat.admin.dealer.paid');
}
/**
* Handle the action request.
*
* @param Request $request
*
* @return Response
*/
public function handle(Request $request)
{
$order = DealerOrder::findOrFail($this->getKey());
try {
DB::beginTransaction();
(new OrderService())->paidOrder($order);
DB::commit();
} catch (Throwable $th) {
DB::rollBack();
report($th);
return $this->response()->error('操作失败,'.$th->getMessage())->refresh();
}
return $this->response()->success('操作成功')->refresh();
}
/**
* @return string|array|void
*/
public function confirm()
{
return ['确认当前订单已收款?', '确认后将无法逆操作'];
}
}

View File

@ -0,0 +1,62 @@
<?php
namespace App\Admin\Actions\Grid;
use App\Models\DealerOrder;
use App\Services\Dealer\OrderService;
use Dcat\Admin\Grid\RowAction;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Throwable;
class DealerOrderShipping extends RowAction
{
public function title()
{
if ($this->title) {
return $this->title;
}
return '<i class="feather icon-package grid-action-icon"></i> 确认发货 &nbsp;&nbsp;';
}
/**
* @param Model|Authenticatable|HasPermissions|null $user
*
* @return bool
*/
protected function authorize($user): bool
{
return $user->can('dcat.admin.dealer.shipping');
}
/**
* Handle the action request.
*
* @param Request $request
*
* @return Response
*/
public function handle(Request $request)
{
$order = DealerOrder::findOrFail($this->getKey());
try {
DB::beginTransaction();
(new OrderService())->shippingOrder($order);
DB::commit();
} catch (Throwable $th) {
DB::rollBack();
report($th);
return $this->response()->error('操作失败,'.$th->getMessage())->refresh();
}
return $this->response()->success('操作成功')->refresh();
}
/**
* @return string|array|void
*/
public function confirm()
{
return ['确认当前订单已发货?', '确认后将无法逆操作'];
}
}

View File

@ -0,0 +1,132 @@
<?php
namespace App\Admin\Controllers;
use App\Admin\Actions\Grid\DealerOrderPaid;
use App\Admin\Actions\Grid\DealerOrderShipping;
use App\Admin\Repositories\DealerOrder;
use App\Enums\DealerOrderStatus;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Show;
class DealerOrderController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
$builder = DealerOrder::with(['user', 'consignor']);
return Grid::make($builder, function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('sn');
$grid->column('user.phone')->copyable();
$grid->column('consignor.phone')->display(function ($value) {
return $value??'系统';
});
$grid->column('total_amount')->prepend('¥');
$statusTexts = DealerOrderStatus::texts();
$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',
]);
// $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->column('updated_at')->sortable();
$grid->actions(function (Grid\Displayers\Actions $actions) {
if ($actions->row->status == DealerOrderStatus::Confirming && Admin::user()->can('dcat.admin.dealers_orders.paid')) {
$actions->append(new DealerOrderPaid());
}
if ($actions->row->status == DealerOrderStatus::Paid && Admin::user()->can('dcat.admin.dealers_orders.shipping')) {
$actions->append(new DealerOrderShipping());
}
});
$grid->filter(function (Grid\Filter $filter) {
$filter->panel();
// $filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new DealerOrder(), function (Show $show) {
$show->field('id');
$show->field('sn');
$show->field('user_id');
$show->field('consignor_id');
$show->field('total_amount');
$show->field('status');
$show->field('settle_state');
$show->field('consignee_name');
$show->field('consignee_telephone');
$show->field('consignee_zone');
$show->field('consignee_address');
$show->field('pay_info');
$show->field('pay_image');
$show->field('pay_time');
$show->field('paied_time');
$show->field('shipping_time');
$show->field('shippinged_time');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* 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');
});
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace App\Admin\Repositories;
use App\Models\DealerOrder as Model;
use Dcat\Admin\Repositories\EloquentRepository;
class DealerOrder extends EloquentRepository
{
/**
* Model.
*
* @var string
*/
protected $eloquentClass = Model::class;
}

View File

@ -164,6 +164,9 @@ Route::group([
//经销商
$router->resource('dealer-products', 'DealerProductController')->names('dealer_products');
$router->resource('dealer-orders', 'DealerOrderController')->only([
'index', 'edit', 'update',
])->names('dealer_orders');
/** api接口 **/
$router->get('api/product-categories', 'ProductCategoryController@categories')->name('api.product_categories');

View File

@ -10,4 +10,17 @@ enum DealerOrderStatus: int {
case Shipped = 4; // 已发货 待收货
case Completed = 9; // 已完成
case Cancelled = 10; // 已取消
public static function texts(): array
{
return [
static::Pending->value => '待确认',
static::Paying->value => '待付款',
static::Confirming->value => '待收款',
static::Paid->value => '待发货',
static::Shipped->value => '待收货',
static::Completed->value => '已完成',
static::Cancelled->value => '已取消',
];
}
}

View File

@ -45,6 +45,11 @@ class DealerOrder extends Model
'shippinged_time',
];
public function getOrderStatusAttribute()
{
return $this->status->value;
}
/**
* 获取待确认订单
*/

View File

@ -107,7 +107,7 @@ class OrderService
]);
if (!$order->consignor) {//如果订单分配给公司,则直接确认
$order->confirmOrder();
$this->confirmOrder($order);
}
return $order;

View File

@ -95,6 +95,36 @@ class AdAddressSeeder extends Seeder
'dimensions'=> '600*700',
'is_show'=> true,
],
'article_banner'=>[
'name' =>'文章广告位',
'dimensions'=> '',
'is_show'=> true,
],
'vip_coupon_banner'=>[
'name' =>'会员优惠券广告位',
'dimensions'=> '750*524',
'is_show'=> true,
],
'mall_notice'=>[
'name' =>'商城公告广告位',
'dimensions'=> '600*700',
'is_show'=> true,
],
'merchant_notice'=>[
'name' =>'商户公告广告位',
'dimensions'=> '600*700',
'is_show'=> true,
],
'homepage_popup'=>[
'name' =>'首页弹窗广告位',
'dimensions'=> '608*735',
'is_show'=> true,
],
'wholesale_homepage_banner'=>[
'name' =>'批零首页广告位',
'dimensions'=> '750*550',
'is_show'=> true,
],
] as $key => $values) {
AdAddress::firstOrCreate(['key' => $key], $values);
}

View File

@ -107,8 +107,12 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection use_day
* @property Grid\Column|Collection use_end_at
* @property Grid\Column|Collection use_start_at
* @property Grid\Column|Collection price
* @property Grid\Column|Collection lvl
* @property Grid\Column|Collection order_completed_at
* @property Grid\Column|Collection product_id
* @property Grid\Column|Collection sales_volume
* @property Grid\Column|Collection total_amount
* @property Grid\Column|Collection price
* @property Grid\Column|Collection qty
* @property Grid\Column|Collection sale_price
* @property Grid\Column|Collection consignee_address
@ -123,11 +127,15 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection settle_state
* @property Grid\Column|Collection shipping_time
* @property Grid\Column|Collection shippinged_time
* @property Grid\Column|Collection total_amount
* @property Grid\Column|Collection lvl
* @property Grid\Column|Collection min_order_amount
* @property Grid\Column|Collection price_1st
* @property Grid\Column|Collection price_2st
* @property Grid\Column|Collection price_3st
* @property Grid\Column|Collection is_sale
* @property Grid\Column|Collection manager_subsidy
* @property Grid\Column|Collection sales_count
* @property Grid\Column|Collection unit
* @property Grid\Column|Collection is_manager
* @property Grid\Column|Collection failed_reason
* @property Grid\Column|Collection jobable_id
* @property Grid\Column|Collection jobable_type
@ -258,6 +266,7 @@ namespace Dcat\Admin {
* @property Grid\Column|Collection pre_growth_value
* @property Grid\Column|Collection quota_v1
* @property Grid\Column|Collection quota_v2
* @property Grid\Column|Collection real_inviter_id
* @property Grid\Column|Collection vip_id
* @property Grid\Column|Collection email
* @property Grid\Column|Collection email_verified_at
@ -368,8 +377,12 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection use_day(string $label = null)
* @method Grid\Column|Collection use_end_at(string $label = null)
* @method Grid\Column|Collection use_start_at(string $label = null)
* @method Grid\Column|Collection price(string $label = null)
* @method Grid\Column|Collection lvl(string $label = null)
* @method Grid\Column|Collection order_completed_at(string $label = null)
* @method Grid\Column|Collection product_id(string $label = null)
* @method Grid\Column|Collection sales_volume(string $label = null)
* @method Grid\Column|Collection total_amount(string $label = null)
* @method Grid\Column|Collection price(string $label = null)
* @method Grid\Column|Collection qty(string $label = null)
* @method Grid\Column|Collection sale_price(string $label = null)
* @method Grid\Column|Collection consignee_address(string $label = null)
@ -384,11 +397,15 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection settle_state(string $label = null)
* @method Grid\Column|Collection shipping_time(string $label = null)
* @method Grid\Column|Collection shippinged_time(string $label = null)
* @method Grid\Column|Collection total_amount(string $label = null)
* @method Grid\Column|Collection lvl(string $label = null)
* @method Grid\Column|Collection min_order_amount(string $label = null)
* @method Grid\Column|Collection price_1st(string $label = null)
* @method Grid\Column|Collection price_2st(string $label = null)
* @method Grid\Column|Collection price_3st(string $label = null)
* @method Grid\Column|Collection is_sale(string $label = null)
* @method Grid\Column|Collection manager_subsidy(string $label = null)
* @method Grid\Column|Collection sales_count(string $label = null)
* @method Grid\Column|Collection unit(string $label = null)
* @method Grid\Column|Collection is_manager(string $label = null)
* @method Grid\Column|Collection failed_reason(string $label = null)
* @method Grid\Column|Collection jobable_id(string $label = null)
* @method Grid\Column|Collection jobable_type(string $label = null)
@ -519,6 +536,7 @@ namespace Dcat\Admin {
* @method Grid\Column|Collection pre_growth_value(string $label = null)
* @method Grid\Column|Collection quota_v1(string $label = null)
* @method Grid\Column|Collection quota_v2(string $label = null)
* @method Grid\Column|Collection real_inviter_id(string $label = null)
* @method Grid\Column|Collection vip_id(string $label = null)
* @method Grid\Column|Collection email(string $label = null)
* @method Grid\Column|Collection email_verified_at(string $label = null)
@ -634,8 +652,12 @@ namespace Dcat\Admin {
* @property Show\Field|Collection use_day
* @property Show\Field|Collection use_end_at
* @property Show\Field|Collection use_start_at
* @property Show\Field|Collection price
* @property Show\Field|Collection lvl
* @property Show\Field|Collection order_completed_at
* @property Show\Field|Collection product_id
* @property Show\Field|Collection sales_volume
* @property Show\Field|Collection total_amount
* @property Show\Field|Collection price
* @property Show\Field|Collection qty
* @property Show\Field|Collection sale_price
* @property Show\Field|Collection consignee_address
@ -650,11 +672,15 @@ namespace Dcat\Admin {
* @property Show\Field|Collection settle_state
* @property Show\Field|Collection shipping_time
* @property Show\Field|Collection shippinged_time
* @property Show\Field|Collection total_amount
* @property Show\Field|Collection lvl
* @property Show\Field|Collection min_order_amount
* @property Show\Field|Collection price_1st
* @property Show\Field|Collection price_2st
* @property Show\Field|Collection price_3st
* @property Show\Field|Collection is_sale
* @property Show\Field|Collection manager_subsidy
* @property Show\Field|Collection sales_count
* @property Show\Field|Collection unit
* @property Show\Field|Collection is_manager
* @property Show\Field|Collection failed_reason
* @property Show\Field|Collection jobable_id
* @property Show\Field|Collection jobable_type
@ -785,6 +811,7 @@ namespace Dcat\Admin {
* @property Show\Field|Collection pre_growth_value
* @property Show\Field|Collection quota_v1
* @property Show\Field|Collection quota_v2
* @property Show\Field|Collection real_inviter_id
* @property Show\Field|Collection vip_id
* @property Show\Field|Collection email
* @property Show\Field|Collection email_verified_at
@ -895,8 +922,12 @@ namespace Dcat\Admin {
* @method Show\Field|Collection use_day(string $label = null)
* @method Show\Field|Collection use_end_at(string $label = null)
* @method Show\Field|Collection use_start_at(string $label = null)
* @method Show\Field|Collection price(string $label = null)
* @method Show\Field|Collection lvl(string $label = null)
* @method Show\Field|Collection order_completed_at(string $label = null)
* @method Show\Field|Collection product_id(string $label = null)
* @method Show\Field|Collection sales_volume(string $label = null)
* @method Show\Field|Collection total_amount(string $label = null)
* @method Show\Field|Collection price(string $label = null)
* @method Show\Field|Collection qty(string $label = null)
* @method Show\Field|Collection sale_price(string $label = null)
* @method Show\Field|Collection consignee_address(string $label = null)
@ -911,11 +942,15 @@ namespace Dcat\Admin {
* @method Show\Field|Collection settle_state(string $label = null)
* @method Show\Field|Collection shipping_time(string $label = null)
* @method Show\Field|Collection shippinged_time(string $label = null)
* @method Show\Field|Collection total_amount(string $label = null)
* @method Show\Field|Collection lvl(string $label = null)
* @method Show\Field|Collection min_order_amount(string $label = null)
* @method Show\Field|Collection price_1st(string $label = null)
* @method Show\Field|Collection price_2st(string $label = null)
* @method Show\Field|Collection price_3st(string $label = null)
* @method Show\Field|Collection is_sale(string $label = null)
* @method Show\Field|Collection manager_subsidy(string $label = null)
* @method Show\Field|Collection sales_count(string $label = null)
* @method Show\Field|Collection unit(string $label = null)
* @method Show\Field|Collection is_manager(string $label = null)
* @method Show\Field|Collection failed_reason(string $label = null)
* @method Show\Field|Collection jobable_id(string $label = null)
* @method Show\Field|Collection jobable_type(string $label = null)
@ -1046,6 +1081,7 @@ namespace Dcat\Admin {
* @method Show\Field|Collection pre_growth_value(string $label = null)
* @method Show\Field|Collection quota_v1(string $label = null)
* @method Show\Field|Collection quota_v2(string $label = null)
* @method Show\Field|Collection real_inviter_id(string $label = null)
* @method Show\Field|Collection vip_id(string $label = null)
* @method Show\Field|Collection email(string $label = null)
* @method Show\Field|Collection email_verified_at(string $label = null)

View File

@ -0,0 +1,36 @@
<?php
return [
'labels' => [
'DealerOrder' => 'DealerOrder',
'dealer-order' => 'DealerOrder',
],
'fields' => [
'sn' => '订单编号',
'user_id' => '下单用户',
'user'=>[
'phone' => '下单用户',
],
'consignor_id' => '发货用户',
'consignor' => [
'phone' => '发货用户',
],
'total_amount' => '订单价格',
'status' => '状态',
'order_status'=>'状态',
'settle_state' => '结算状态',
'consignee_name' => '收货人姓名',
'consignee_telephone' => '收货人联系方式',
'consignee_zone' => '收货人所在地区',
'consignee_address' => '收货人详细地址',
'pay_info' => '收款信息',
'pay_image' => '打款凭证',
'pay_time' => '支付时间',
'paied_time' => '确认收款时间',
'shipping_time' => '发货时间',
'shippinged_time' => '确认收货时间',
'created_at'=>'下单时间',
],
'options' => [
],
];