4
0
Fork 0
master
panliang 2022-10-08 15:42:37 +08:00
parent a197f7254d
commit 8bc63ce9c7
4 changed files with 78 additions and 23 deletions

View File

@ -20,7 +20,7 @@
## 权限 ## 权限
````php ```php
$permissions = [ $permissions = [
'orders' => ['name' => '订单列表', 'curd' => ['index', 'show', 'destroy'], 'children' => [ 'orders' => ['name' => '订单列表', 'curd' => ['index', 'show', 'destroy'], 'children' => [
'pay' => '支付订单', 'pay' => '支付订单',
@ -30,8 +30,17 @@ $permissions = [
'price' => '订单改价', 'price' => '订单改价',
]], ]],
]; ];
```
```` ## 菜单
```php
$menus = [
['title' => '订单模块', 'icon' => 'feather icon-book', 'uri' => '', 'permission' => ['orders'], 'children' => [
['title' => '订单管理', 'icon' => '', 'uri' => '/orders', 'permission' => 'orders.index'],
]],
];
```
## 配置 ## 配置

View File

@ -64,7 +64,6 @@ class OrderController extends AdminController
}); });
$grid->column('sn')->copyable(); $grid->column('sn')->copyable();
$grid->column('merchant.name');
$grid->column('user.phone'); $grid->column('user.phone');
$grid->column('total_money'); $grid->column('total_money');
$grid->column('order_status')->display(fn() => $this->status()->dot()); $grid->column('order_status')->display(fn() => $this->status()->dot());
@ -101,6 +100,12 @@ class OrderController extends AdminController
$show->width(6)->field('score_discount_money'); $show->width(6)->field('score_discount_money');
$show->width(6)->field('score_discount_amount'); $show->width(6)->field('score_discount_amount');
}); });
if ($info->coupon_money > 0) {
$show->row(function (Show\Row $show) {
$show->width(6)->field('coupon_money')->as(fn ($v) => '<span class="text-danger">-'.floatval($v).'</span>')->unescape();
$show->width(6)->field('coupon.name', '优惠券');
});
}
$show->row(function (Show\Row $show) use ($info) { $show->row(function (Show\Row $show) use ($info) {
$show->width(6)->field('pay_money')->as(function ($value) { $show->width(6)->field('pay_money')->as(function ($value) {
return '<span>'.$value.'</span>' . ($this->discount_price > 0 ? '(<span class="text-danger">-'.$this->discount_price.'</span>)' : ''); return '<span>'.$value.'</span>' . ($this->discount_price > 0 ? '(<span class="text-danger">-'.$this->discount_price.'</span>)' : '');

View File

@ -6,6 +6,8 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
use Peidikeji\Coupon\CouponService;
use Peidikeji\Coupon\Http\Resources\UserCouponResource;
use Peidikeji\Order\Enums\PayStatus; use Peidikeji\Order\Enums\PayStatus;
use Peidikeji\Order\Enums\PayWay; use Peidikeji\Order\Enums\PayWay;
use Peidikeji\Order\Enums\ShipStatus; use Peidikeji\Order\Enums\ShipStatus;
@ -14,10 +16,13 @@ use Peidikeji\Order\Events\OrderCanceled;
use Peidikeji\Order\Events\OrderCreated; use Peidikeji\Order\Events\OrderCreated;
use Peidikeji\Order\Events\OrderPaid; use Peidikeji\Order\Events\OrderPaid;
use Peidikeji\Order\Events\OrderReceived; use Peidikeji\Order\Events\OrderReceived;
use Peidikeji\Order\Exceptions\OrderException;
use Peidikeji\Order\Http\Resources\OrderResource; use Peidikeji\Order\Http\Resources\OrderResource;
use Peidikeji\Order\Http\Resources\OrderShipResouce; use Peidikeji\Order\Http\Resources\OrderShipResouce;
use Peidikeji\Order\OrderService; use Peidikeji\Order\OrderService;
use Peidikeji\Order\OrderStore; use Peidikeji\Order\OrderStore;
use Peidikeji\Region\Models\Region;
use Peidikeji\User\Models\UserAddress;
class OrderController extends Controller class OrderController extends Controller
{ {
@ -51,12 +56,19 @@ class OrderController extends Controller
$service->goods($goods); $service->goods($goods);
// 收货地址 // 收货地址
$address = $request->input('address'); $address = $this->getAddress();
$service->ship(ShipWay::Express->value, $address);
// 优惠券 // 优惠券
// $coupons = UserCoupon::where('user_id', $user->id)->effective()->get(); $couponList = $user->coupons()->effective()->get();
$coupons = CouponService::make()->availableList($couponList, $service->orderGoodsList);
$service->ship(ShipWay::Express->value, $this->formatAddress($address)); if ($request->filled('coupon_id')) {
$coupon = $couponList->firstWhere('id', $request->input('coupon_id'));
if (!$coupon) {
throw new OrderException('优惠券不存在或已过期');
}
$service->coupon($coupon);
}
$score = $request->input('score'); $score = $request->input('score');
$userScore = $user->balance; $userScore = $user->balance;
@ -81,11 +93,11 @@ class OrderController extends Controller
'price' => [ 'price' => [
'goods' => floatval($goodsList->sum('money')), 'goods' => floatval($goodsList->sum('money')),
'ship' => $service->ship['money'], 'ship' => $service->ship['money'],
'coupon' => 0, 'coupon' => $service->coupon['money'],
'score' => $service->score['money'], 'score' => $service->score['money'],
'total' => $payMoney, 'total' => $payMoney,
], ],
'coupons' => [] 'coupons' => UserCouponResource::collection($coupons),
]); ]);
} }
@ -106,18 +118,8 @@ class OrderController extends Controller
} }
$store->goods($goods); $store->goods($goods);
$address = null; $address = $this->getAddress();
if ($request->filled('address_id')) { $store->ship($request->input('ship_way', ShipWay::None->value), $address);
$address = $user->addresses()->find($request->input('address_id'));
if (!$address) {
return $this->error('收货地址不存在');
}
}
if (!$address) {
$address = $request->input('address');
}
$store->ship($request->input('ship_way', ShipWay::None->value), $this->formatAddress($address));
$store->score($request->input('score', 0)); $store->score($request->input('score', 0));
@ -260,8 +262,35 @@ class OrderController extends Controller
return $goods; return $goods;
} }
protected function formatAddress($userAddress) protected function getAddress()
{ {
return $userAddress; $address = [];
$request = request();
if ($request->filled('address_id')) {
$user = auth('api')->user();
$userAddress = $user->addresses()->find($request->input('address_id'));
if (!$address) {
throw new OrderException('收货地址不存在');
}
$address = [
'name' => $userAddress->contact_name,
'phone' => $userAddress->phone,
'region' => [$userAddress->province?->name, $userAddress->city?->name, $userAddress->area?->name],
'zone' => [$userAddress->province_id, $userAddress->city_id, $userAddress->area_id],
'address' => $userAddress->address,
'address_id' => $userAddress->id,
];
} else {
$address = $request->input('address');
$region = data_get($address, 'region');
if (! $region || count($region) === 0) {
throw new OrderException('收货地址格式不正确');
}
$area = Region::where('name', $region[2])->where('level', 3)->firstOrFail();
$city = Region::findOrFail($area->parent_id);
$address['zone'] = [$city->parent_id, $area->parent_id, $area->id];
}
return $address;
} }
} }

View File

@ -11,6 +11,8 @@ use Peidikeji\Order\Events\OrderCreated;
use Peidikeji\Order\Listeners\OrderUseScore; use Peidikeji\Order\Listeners\OrderUseScore;
use Peidikeji\Order\Listeners\UpdateGoodsSoldCount; use Peidikeji\Order\Listeners\UpdateGoodsSoldCount;
use Peidikeji\Order\Listeners\UpdateGoodsStock; use Peidikeji\Order\Listeners\UpdateGoodsStock;
use Dcat\Admin\Admin;
use Dcat\Admin\Layout\Menu;
class OrderServiceProvider extends ServiceProvider class OrderServiceProvider extends ServiceProvider
{ {
@ -43,5 +45,15 @@ class OrderServiceProvider extends ServiceProvider
$this->loadMigrationsFrom(__DIR__.'/../database/'); $this->loadMigrationsFrom(__DIR__.'/../database/');
$this->loadTranslationsFrom(__DIR__.'/../lang', 'dcat-admin-order'); $this->loadTranslationsFrom(__DIR__.'/../lang', 'dcat-admin-order');
Admin::menu(function (Menu $menu) {
// ['title' => '订单模块', 'icon' => 'feather icon-book', 'uri' => '', 'permission' => ['orders'], 'children' => [
// ['title' => '订单管理', 'icon' => '', 'uri' => '/orders', 'permission' => 'orders.index'],
// ]],
$menu->add([
['id' => 1, 'parent_id' => 0, 'title' => '订单模块', 'icon' => 'feather icon-book', 'uri' => '', 'permission' => ['orders']],
['id' => 2, 'parent_id' => 1, 'title' => '订单管理', 'icon' => '', 'uri' => '/orders', 'permission' => 'orders.index']
]);
});
} }
} }