CartService::reloadData(), ]; $data['totals'] = $this->getOrderMoney($data['data']['carts']); $data = hook_filter('cart.index.data', $data); return view('cart/cart', $data); } /** * 选中购物车商品 * * POST /carts/select {cart_ids:[1, 2]} * @param Request $request * @return array */ public function select(Request $request): array { $cartIds = $request->get('cart_ids'); $customer = current_customer(); CartService::select($customer, $cartIds); $data = CartService::reloadData(); $data['totals'] = $this->getOrderMoney($data['carts']); $data = hook_filter('cart.select.data', $data); return json_success(trans('common.updated_success'), $data); } /** * POST /carts {sku_id:1, quantity: 2} * 创建购物车 * * @param CartRequest $request * @return mixed * @throws \Exception */ public function store(CartRequest $request) { try { $skuId = $request->sku_id; $quantity = $request->quantity ?? 1; $buyNow = (bool) $request->buy_now ?? false; $customer = current_customer(); // 多规格批量加入购物车处理 if(is_int($skuId)){ // 非多规格下单 $sku = ProductSku::query()->findOrFail($skuId); $cart = CartService::add($sku, $quantity, $customer); $cartIds = [$cart->id]; }else{ // 多规格下单 $skuList = array_values(json_decode($skuId,TRUE)); foreach($skuList as $item){ if((int)$item['quantity'] > 0){ $sku = ProductSku::query()->findOrFail($item['id']); $cart = CartService::add($sku, $item['quantity'], $customer); $cartIds[] = $cart->id; } } } if ($buyNow) CartService::select($customer, $cartIds); $cart = hook_filter('cart.store.data', $cart); return json_success(trans('shop/carts.added_to_cart'), $cart); } catch (\Exception $e) { return json_fail($e->getMessage()); } } /** * PUT /carts/{cart_id} {sku_id:1, quantity: 2} * @param CartRequest $request * @param $cartId * @return array */ public function update(CartRequest $request, $cartId): array { // return json_fail("错误"); try { $customer = current_customer(); $quantity = (int) $request->get('quantity'); CartService::updateQuantity($customer, $cartId, $quantity); $data = CartService::reloadData(); $data['totals'] = $this->getOrderMoney($data['carts']); $data = hook_filter('cart.update.data', $data); return json_success(trans('common.updated_success'), $data); } catch (\Exception $e) { return json_fail($e->getMessage()); } } /** * DELETE /carts/{cart_id} * @param Request $request * @param $cartId * @return array */ public function destroy(Request $request, $cartId): array { $customer = current_customer(); CartService::delete($customer, $cartId); $data = CartService::reloadData(); $data = hook_filter('cart.destroy.data', $data); return json_success(trans('common.deleted_success'), $data); } /** * 右上角购物车 * @return mixed */ public function miniCart() { $carts = CartService::list(current_customer()); $reloadData = CartService::reloadData($carts); $data['html'] = view('cart/mini', $reloadData)->render(); $data['quantity'] = $reloadData['quantity']; $data['quantity_all'] = $reloadData['quantity_all']; $data = hook_filter('cart.mini_cart.data', $data); return json_success(trans('common.success'), $data); } /** * Common: 实时计算购物车订单金额 * Author: wu-hui * Time: 2023/08/18 13:56 * @param $carts * @return mixed * @throws \Exception */ public function getOrderMoney($carts){ $carts = collect($carts)->where('selected', 1)->toArray(); $checkoutService = new CheckoutService(); $totalClass = hook_filter('service.checkout.total_service','Beike\Shop\Services\TotalService'); $checkoutService->totalService = (new $totalClass($checkoutService->cart,$carts)); $checkoutData = $checkoutService->checkoutData(); return $checkoutData['totals']; } }