From 42830e49382082c85a87c77ae37ceefafed7370f Mon Sep 17 00:00:00 2001 From: Sam Chen Date: Sat, 1 Jan 2022 23:20:29 +0800 Subject: [PATCH] admin products --- .../Controllers/Admin/ProductsController.php | 67 +++++----------- app/Http/Kernel.php | 2 +- app/Models/Product.php | 5 ++ app/Services/ProductService.php | 38 ++++++++++ .../views/admin/layouts/master.blade.php | 5 +- resources/views/admin/pages/home.blade.php | 4 + .../admin/pages/products/form/form.blade.php | 76 +++++++++++++++++++ .../admin/pages/products/index.blade.php | 17 ++++- 8 files changed, 165 insertions(+), 49 deletions(-) create mode 100644 app/Services/ProductService.php create mode 100644 resources/views/admin/pages/products/form/form.blade.php diff --git a/app/Http/Controllers/Admin/ProductsController.php b/app/Http/Controllers/Admin/ProductsController.php index 5098f2c7..314babf9 100644 --- a/app/Http/Controllers/Admin/ProductsController.php +++ b/app/Http/Controllers/Admin/ProductsController.php @@ -3,81 +3,56 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\Product; +use App\Services\ProductService; use Illuminate\Http\Request; +use Illuminate\Http\Response; class ProductsController extends Controller { - /** - * Display a listing of the resource. - * - * @return \Illuminate\Http\Response - */ public function index() { - return view('admin.pages.products.index'); + $products = Product::query() + ->withCount('skus') + ->paginate(); + + $data = [ + 'products' => $products, + ]; + + return view('admin.pages.products.index', $data); } - /** - * Show the form for creating a new resource. - * - * @return \Illuminate\Http\Response - */ public function create() { - // + return view('admin.pages.products.form.form'); } - /** - * Store a newly created resource in storage. - * - * @param \Illuminate\Http\Request $request - * @return \Illuminate\Http\Response - */ public function store(Request $request) { - // + $product = (new ProductService)->create($request->all()); + + return redirect()->route('admin.products.index')->with('success', 'product created'); } - /** - * Display the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ public function show($id) { // } - /** - * Show the form for editing the specified resource. - * - * @param int $id - * @return \Illuminate\Http\Response - */ - public function edit($id) + public function edit(Product $product) { - // + $data = [ + 'product' => $product, + ]; + return view('admin.pages.products.form.form', $data); } - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param int $id - * @return \Illuminate\Http\Response - */ public function update(Request $request, $id) { // } - /** - * Remove the specified resource from storage. - * - * @param int $id - * @return \Illuminate\Http\Response - */ public function destroy($id) { // diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 39910d78..28111c88 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -20,7 +20,7 @@ class Kernel extends HttpKernel \App\Http\Middleware\PreventRequestsDuringMaintenance::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, - \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, + // \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** diff --git a/app/Models/Product.php b/app/Models/Product.php index 73e7f9b0..ebf05e31 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -15,4 +15,9 @@ class Product extends Model { return $this->hasMany(ProductSku::class); } + + public function getVariableDecodedAttribute() + { + return json_decode($this->variable, true); + } } diff --git a/app/Services/ProductService.php b/app/Services/ProductService.php new file mode 100644 index 00000000..d46d9bf2 --- /dev/null +++ b/app/Services/ProductService.php @@ -0,0 +1,38 @@ +variable = json_encode($data['variant']); + } + $product->saveOrFail(); + + $skus = []; + foreach ($data['skus'] as $index => $rawSku) { + $sku = $rawSku; + $sku['is_default'] = $index == 0; + $skus[] = $sku; + } + + $product->skus()->createMany($skus); + + DB::commit(); + + return $product; + } catch (\Exception $e) { + DB::rollBack(); + throw $e; + } + } +} diff --git a/resources/views/admin/layouts/master.blade.php b/resources/views/admin/layouts/master.blade.php index 3e0fa571..fbd2b626 100644 --- a/resources/views/admin/layouts/master.blade.php +++ b/resources/views/admin/layouts/master.blade.php @@ -6,8 +6,11 @@ content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> Document + @stack('header') - + @yield('content') + +@stack('footer') diff --git a/resources/views/admin/pages/home.blade.php b/resources/views/admin/pages/home.blade.php index d28b2401..3cb98599 100644 --- a/resources/views/admin/pages/home.blade.php +++ b/resources/views/admin/pages/home.blade.php @@ -1 +1,5 @@ @extends('admin.layouts.master') + +@section('content') + Products +@endsection \ No newline at end of file diff --git a/resources/views/admin/pages/products/form/form.blade.php b/resources/views/admin/pages/products/form/form.blade.php new file mode 100644 index 00000000..18088790 --- /dev/null +++ b/resources/views/admin/pages/products/form/form.blade.php @@ -0,0 +1,76 @@ +@extends('admin.layouts.master') + +@push('header') + +@endpush + +@section('content') +

product

+
+ @csrf + + + + + + + +
+

skus

+ 单规格 + 多规格 +
+
+
+ + + +
+
+ +
+ + + + + + + + + +
+
+
+ +
+
+ + + + + + +
+
+
+ + +
+@endsection + +@push('footer') + +@endpush \ No newline at end of file diff --git a/resources/views/admin/pages/products/index.blade.php b/resources/views/admin/pages/products/index.blade.php index 2114092e..0ab8f58c 100644 --- a/resources/views/admin/pages/products/index.blade.php +++ b/resources/views/admin/pages/products/index.blade.php @@ -1 +1,16 @@ -@extends('admin.pages.products.index') +@extends('admin.layouts.master') + +@section('content') + Create + + @foreach ($products as $product) + + + + + + @endforeach +
{{ $product->id }}{{ $product->variable ? '多规格' : '单规格' }} + 编辑 +
+@endsection