From 9fcd37b6464870c58ae57521f51b068cf31e9d9a Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Mon, 1 Aug 2022 15:52:00 +0800 Subject: [PATCH] goods-brand --- .../goods/resources/lang/en/goods-brand.php | 3 + .../goods/resources/lang/en/goods-type.php | 3 + .../resources/lang/zh_CN/goods-brand.php | 13 ++++ .../goods/resources/lang/zh_CN/goods-type.php | 16 +++++ .../goods/resources/views/grid/part.blade.php | 15 +++++ .../goods/resources/views/grid/spec.blade.php | 6 +- packages/goods/src/GoodsServiceProvider.php | 2 + .../Admin/GoodsBrandController.php | 50 +++++++++++++++ .../Admin/GoodsCategoryController.php | 2 +- .../Controllers/Admin/GoodsController.php | 6 +- .../Controllers/Admin/GoodsTypeController.php | 64 +++++++++++++++++++ packages/goods/src/Http/routes.php | 2 + packages/goods/src/Models/GoodsBrand.php | 5 ++ packages/goods/updates/CreateGoodsTable.php | 8 +-- 14 files changed, 185 insertions(+), 10 deletions(-) create mode 100644 packages/goods/resources/lang/en/goods-brand.php create mode 100644 packages/goods/resources/lang/en/goods-type.php create mode 100644 packages/goods/resources/lang/zh_CN/goods-brand.php create mode 100644 packages/goods/resources/lang/zh_CN/goods-type.php create mode 100644 packages/goods/resources/views/grid/part.blade.php create mode 100644 packages/goods/src/Http/Controllers/Admin/GoodsBrandController.php create mode 100644 packages/goods/src/Http/Controllers/Admin/GoodsTypeController.php diff --git a/packages/goods/resources/lang/en/goods-brand.php b/packages/goods/resources/lang/en/goods-brand.php new file mode 100644 index 0000000..0b67a5f --- /dev/null +++ b/packages/goods/resources/lang/en/goods-brand.php @@ -0,0 +1,3 @@ + [ + 'GoodsBrand' => '品牌管理', + 'goods' => '商品管理', + 'brand' => '品牌', + ], + 'fields' => [ + 'name' => '名称', + 'image' => '图片', + ] +]; diff --git a/packages/goods/resources/lang/zh_CN/goods-type.php b/packages/goods/resources/lang/zh_CN/goods-type.php new file mode 100644 index 0000000..e653e2f --- /dev/null +++ b/packages/goods/resources/lang/zh_CN/goods-type.php @@ -0,0 +1,16 @@ + [ + 'GoodsType' => '商品类别', + 'goods' => '商品管理', + 'brand' => '类别', + ], + 'fields' => [ + 'name' => '名称', + 'spec' => '规格', + 'attr' => '属性', + 'part' => '配件', + 'values' => '可选值', + ] +]; diff --git a/packages/goods/resources/views/grid/part.blade.php b/packages/goods/resources/views/grid/part.blade.php new file mode 100644 index 0000000..69a636a --- /dev/null +++ b/packages/goods/resources/views/grid/part.blade.php @@ -0,0 +1,15 @@ + + + +@if($value) +@foreach($value as $item) +
+ {{ $item['name'] }} + @if($item['values']) + @foreach($item['values'] as $subItem) + {{ $subItem }} + @endforeach + @endif +
+@endforeach +@endif diff --git a/packages/goods/resources/views/grid/spec.blade.php b/packages/goods/resources/views/grid/spec.blade.php index 697e800..e5aa0a5 100644 --- a/packages/goods/resources/views/grid/spec.blade.php +++ b/packages/goods/resources/views/grid/spec.blade.php @@ -5,9 +5,11 @@ @foreach($value as $item)
{{ $item['name'] }} - @foreach($item['values'] as $value) - {{ $value['value'] }}({{ $value['price'] }}) + @if($item['values']) + @foreach($item['values'] as $subItem) + {{ $subItem['value'] }}({{ $subItem['price'] }}) @endforeach + @endif
@endforeach @endif diff --git a/packages/goods/src/GoodsServiceProvider.php b/packages/goods/src/GoodsServiceProvider.php index 5d0f646..6dac8d7 100644 --- a/packages/goods/src/GoodsServiceProvider.php +++ b/packages/goods/src/GoodsServiceProvider.php @@ -10,6 +10,8 @@ class GoodsServiceProvider extends ServiceProvider protected $menu = [ ['title' => '商品管理', 'uri' => '', 'icon' => ''], ['title' => '商品分类', 'uri' => 'goods/category', 'icon' => '', 'parent' => '商品管理'], + ['title' => '品牌管理', 'uri' => 'goods/brand', 'icon' => '', 'parent' => '商品管理'], + ['title' => '商品类别', 'uri' => 'goods/type', 'icon' => '', 'parent' => '商品管理'], ['title' => '商品信息', 'uri' => 'goods', 'icon' => '', 'parent' => '商品管理'], ]; } diff --git a/packages/goods/src/Http/Controllers/Admin/GoodsBrandController.php b/packages/goods/src/Http/Controllers/Admin/GoodsBrandController.php new file mode 100644 index 0000000..65df6eb --- /dev/null +++ b/packages/goods/src/Http/Controllers/Admin/GoodsBrandController.php @@ -0,0 +1,50 @@ +disableRowSelector(); + + $grid->disableViewButton(); + + $grid->column('name'); + $grid->column('image')->image('', 120); + }); + } + + protected function form() + { + return Form::make(new GoodsBrand(), function (Form $form) { + $form->text('name'); + $form->image('image')->autoUpload()->saveFullUrl()->move('goods/brand'); + + $form->disableResetButton(); + $form->disableCreatingCheck(); + $form->disableViewCheck(); + $form->disableEditingCheck(); + + $form->deleting(function (Form $form) { + $data = $form->model()->toArray(); + foreach($data as $item) { + $id = data_get($item, 'id'); + // 品牌下面包含商品, 阻止删除 + if (Goods::where('brand_id', $id)->exists()) { + return $form->response()->error('请先删除关联的商品'); + } + } + }); + }); + } +} diff --git a/packages/goods/src/Http/Controllers/Admin/GoodsCategoryController.php b/packages/goods/src/Http/Controllers/Admin/GoodsCategoryController.php index 6223aef..c71c529 100644 --- a/packages/goods/src/Http/Controllers/Admin/GoodsCategoryController.php +++ b/packages/goods/src/Http/Controllers/Admin/GoodsCategoryController.php @@ -35,7 +35,7 @@ class GoodsCategoryController extends AdminController $form->text('name')->required(); $form->image('image') ->uniqueName() - ->move('article-category') + ->move('goods/category') ->autoUpload(); $form->number('sort') ->min(0) diff --git a/packages/goods/src/Http/Controllers/Admin/GoodsController.php b/packages/goods/src/Http/Controllers/Admin/GoodsController.php index c5ab3c6..4263b2d 100644 --- a/packages/goods/src/Http/Controllers/Admin/GoodsController.php +++ b/packages/goods/src/Http/Controllers/Admin/GoodsController.php @@ -93,16 +93,16 @@ class GoodsController extends AdminController $form->image('cover_image') ->autoUpload() ->saveFullUrl() - ->move('goods') + ->move('goods/goods') ->required(); $form->multipleImage('images') ->autoUpload() ->saveFullUrl() - ->move('goods'); + ->move('goods/goods'); $form->multipleImage('content') ->autoUpload() ->saveFullUrl() - ->move('goods'); + ->move('goods/goods'); $form->number('price')->min(0)->attribute('step', 0.01); $form->switch('on_sale'); diff --git a/packages/goods/src/Http/Controllers/Admin/GoodsTypeController.php b/packages/goods/src/Http/Controllers/Admin/GoodsTypeController.php new file mode 100644 index 0000000..87a9f1f --- /dev/null +++ b/packages/goods/src/Http/Controllers/Admin/GoodsTypeController.php @@ -0,0 +1,64 @@ +disableRowSelector(); + $grid->disableViewButton(); + + $grid->column('name'); + $grid->column('attr')->view('peidikeji.dcat-admin-extension-goods::grid.part'); + $grid->column('spec')->view('peidikeji.dcat-admin-extension-goods::grid.part'); + $grid->column('part')->view('peidikeji.dcat-admin-extension-goods::grid.part'); + }); + } + + protected function form() + { + return Form::make(new GoodsType(), function (Form $form) { + $form->text('name'); + + $form->array('attr', function (NestedForm $table) { + $table->text('name')->required(); + $table->list('values'); + }); + $form->array('spec', function (NestedForm $table) { + $table->text('name')->required(); + $table->list('values'); + }); + $form->array('part', function (NestedForm $table) { + $table->text('name')->required(); + $table->list('values'); + }); + + $form->disableResetButton(); + $form->disableCreatingCheck(); + $form->disableViewCheck(); + $form->disableEditingCheck(); + + $form->deleting(function (Form $form) { + $data = $form->model()->toArray(); + foreach($data as $item) { + $id = data_get($item, 'id'); + // 下面包含商品, 阻止删除 + if (Goods::where('type_id', $id)->exists()) { + return $form->response()->error('请先删除关联的商品'); + } + } + }); + }); + } +} diff --git a/packages/goods/src/Http/routes.php b/packages/goods/src/Http/routes.php index 4f98c7c..8337ee7 100644 --- a/packages/goods/src/Http/routes.php +++ b/packages/goods/src/Http/routes.php @@ -5,5 +5,7 @@ namespace Peidikeji\Goods\Http\Controllers\Admin; use Illuminate\Support\Facades\Route; Route::resource('goods/category', GoodsCategoryController::class); +Route::resource('goods/brand', GoodsBrandController::class); +Route::resource('goods/type', GoodsTypeController::class); Route::resource('goods', GoodsController::class); diff --git a/packages/goods/src/Models/GoodsBrand.php b/packages/goods/src/Models/GoodsBrand.php index 367562c..c0a6b58 100644 --- a/packages/goods/src/Models/GoodsBrand.php +++ b/packages/goods/src/Models/GoodsBrand.php @@ -11,4 +11,9 @@ class GoodsBrand extends Model protected $fillable = ['name', 'image']; public $timestamps = false; + + public function goods() + { + return $this->hasMany(Goods::class, 'brand_id'); + } } diff --git a/packages/goods/updates/CreateGoodsTable.php b/packages/goods/updates/CreateGoodsTable.php index 5ab70e6..0e81261 100644 --- a/packages/goods/updates/CreateGoodsTable.php +++ b/packages/goods/updates/CreateGoodsTable.php @@ -59,9 +59,9 @@ class CreateGoodsTable extends Migration $table->unsignedInteger('stock')->default(0)->comment('库存'); $table->unsignedInteger('sold_count')->default(0)->comment('销量'); $table->decimal('price', 12, 2)->comment('售价'); - $table->json('attr')->nullable()->comment('属性'); - $table->json('spec')->nullable()->comment('规格'); - $table->json('part')->nullable()->comment('配件'); + $table->json('attr')->nullable()->comment('属性[{name, value}]'); + $table->json('spec')->nullable()->comment('规格[{name, values: [{value, price}]}]'); + $table->json('part')->nullable()->comment('配件[{name, values: [{value, price}]}]'); $table->timestamps(); $table->softDeletes(); @@ -79,7 +79,7 @@ class CreateGoodsTable extends Migration $table->string('name')->comment('名称'); $table->decimal('price', 12, 2)->comment('价格'); $table->unsignedInteger('stock')->comment('库存'); - $table->json('spec')->nullable()->comment('规格'); + $table->json('spec')->nullable()->comment('规格[{name, value, price}]'); $table->foreign('goods_id')->references('id')->on('goods');