You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.2 KiB
118 lines
3.2 KiB
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Car;
|
|
use App\Models\Product;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
|
|
class CarController extends Controller
|
|
{
|
|
// 构造函数,设置中间件
|
|
public function __construct()
|
|
{
|
|
// 仅对 store 和 destroy 方法应用用户身份验证中间件
|
|
$this->middleware('user.auth')->only('store', 'destroy');
|
|
}
|
|
|
|
/**
|
|
* 显示购物车列表
|
|
*
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 返回购物车视图
|
|
*/
|
|
public function index()
|
|
{
|
|
$cars = collect(); // 初始化购物车集合
|
|
|
|
/**
|
|
* @var $user User
|
|
*/
|
|
// 获取当前登录用户的购物车
|
|
if ($user = \auth()->user()) {
|
|
// 直接获取当前用户的购物车及其关联的产品
|
|
$cars = $user->cars()->with('product')->get();
|
|
}
|
|
|
|
// 返回购物车视图,并传递购物车数据
|
|
return view('cars.index', compact('cars'));
|
|
}
|
|
|
|
/**
|
|
* 添加商品到购物车
|
|
*
|
|
* @param Request $request 请求对象
|
|
* @return array 返回操作结果
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
/**
|
|
* @var $car Car
|
|
* @var $product Product
|
|
* @var $user User
|
|
*/
|
|
// 根据产品 UUID 查找产品
|
|
$product = Product::query()->where('uuid', $request->input('product_id'))->firstOrFail();
|
|
|
|
// 获取当前用户
|
|
$user = auth()->user();
|
|
// 查找或新建购物车记录
|
|
$car = $user->cars()->firstOrNew([
|
|
'user_id' => \auth()->id(),
|
|
'product_id' => $product->id
|
|
]);
|
|
|
|
// 处理购物车数量变化
|
|
$change = 0; // 数量变化
|
|
$number = $request->input('number', 1); // 获取请求中的数量,默认为 1
|
|
|
|
if ($request->input('action') == 'sync') {
|
|
// 如果是同步操作,直接设置数量
|
|
$change = $number - $car->number;
|
|
$car->number = $number;
|
|
} else {
|
|
// 否则,增加数量
|
|
$car->number += $number;
|
|
}
|
|
|
|
// 检查库存是否足够
|
|
if ($car->number > $product->count) {
|
|
return responseJson(403, '库存不足'); // 返回库存不足的响应
|
|
}
|
|
|
|
// 保存购物车记录
|
|
$car->save();
|
|
|
|
// 返回成功响应
|
|
return responseJson(200, '加入购物车成功', compact('change'));
|
|
}
|
|
|
|
/**
|
|
* 从购物车中删除商品
|
|
*
|
|
* @param $id 购物车项的 ID
|
|
* @return array 返回操作结果
|
|
*/
|
|
public function destroy($id)
|
|
{
|
|
try {
|
|
/**
|
|
* @var $user User
|
|
*/
|
|
// 获取当前用户
|
|
$user = auth()->user();
|
|
// 查找购物车项并删除
|
|
$car = $user->cars()->whereKey($id)->firstOrFail();
|
|
$car->delete();
|
|
|
|
} catch (\Exception $e) {
|
|
// 捕获异常并返回错误响应
|
|
dd($e); // 可选:调试输出异常信息
|
|
return responseJson(500, '服务器异常,请稍后再试');
|
|
}
|
|
|
|
// 返回成功响应
|
|
return responseJson(200, '删除成功');
|
|
}
|
|
}
|