From f050bbf5b5f5a629143c64421c47ad483e36ae2d Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Wed, 3 Aug 2022 15:00:58 +0800 Subject: [PATCH] goods create --- .../goods/resources/lang/zh_CN/goods-sku.php | 3 +- .../goods/resources/lang/zh_CN/goods-type.php | 3 +- packages/goods/resources/lang/zh_CN/goods.php | 2 + .../Admin/GoodsBrandController.php | 7 +- .../Controllers/Admin/GoodsController.php | 125 +++++++++++++++--- .../Controllers/Admin/GoodsSkuController.php | 1 + .../Controllers/Admin/GoodsTypeController.php | 1 + packages/goods/updates/GoodsTableSeeder.php | 20 +-- src/Form.php | 3 +- 9 files changed, 131 insertions(+), 34 deletions(-) diff --git a/packages/goods/resources/lang/zh_CN/goods-sku.php b/packages/goods/resources/lang/zh_CN/goods-sku.php index 3edc557..5c8f5bc 100644 --- a/packages/goods/resources/lang/zh_CN/goods-sku.php +++ b/packages/goods/resources/lang/zh_CN/goods-sku.php @@ -9,8 +9,9 @@ return [ 'fields' => [ 'sn' => '货号', 'name' => '名称', - 'price' => '价格', + 'price' => '售价', 'stock' => '库存', 'spec' => '规格', + 'origin_price' => '原价', ] ]; diff --git a/packages/goods/resources/lang/zh_CN/goods-type.php b/packages/goods/resources/lang/zh_CN/goods-type.php index e653e2f..c2c16dc 100644 --- a/packages/goods/resources/lang/zh_CN/goods-type.php +++ b/packages/goods/resources/lang/zh_CN/goods-type.php @@ -4,7 +4,7 @@ return [ 'labels' => [ 'GoodsType' => '商品类别', 'goods' => '商品管理', - 'brand' => '类别', + 'type' => '商品类别', ], 'fields' => [ 'name' => '名称', @@ -12,5 +12,6 @@ return [ 'attr' => '属性', 'part' => '配件', 'values' => '可选值', + 'group' => '分组', ] ]; diff --git a/packages/goods/resources/lang/zh_CN/goods.php b/packages/goods/resources/lang/zh_CN/goods.php index 23838e5..f314135 100644 --- a/packages/goods/resources/lang/zh_CN/goods.php +++ b/packages/goods/resources/lang/zh_CN/goods.php @@ -4,6 +4,8 @@ return [ 'labels' => [ 'Goods' => '商品信息', 'goods' => '商品信息', + 'create' => '创建', + 'edit' => '修改', ], 'fields' => [ 'category_id' => '分类', diff --git a/packages/goods/src/Http/Controllers/Admin/GoodsBrandController.php b/packages/goods/src/Http/Controllers/Admin/GoodsBrandController.php index 89c4864..946956e 100644 --- a/packages/goods/src/Http/Controllers/Admin/GoodsBrandController.php +++ b/packages/goods/src/Http/Controllers/Admin/GoodsBrandController.php @@ -32,7 +32,12 @@ class GoodsBrandController extends AdminController ->autoUpload() ->saveFullUrl() ->move('goods/brand'); - // $form->oss('file')->dir('mv'); + $form->oss('file')->config([ + 'accessId' => 'LTAI5tFMaynxgZ9aDMNLxpU9', + 'accessKey' => 'pecJA3LX2sQyWxWDMUUb5NhsMe4Czu', + 'host' => 'https://zcs-test.oss-cn-chengdu.aliyuncs.com', + 'dir' => 'mv', + ]); $form->disableResetButton(); $form->disableCreatingCheck(); diff --git a/packages/goods/src/Http/Controllers/Admin/GoodsController.php b/packages/goods/src/Http/Controllers/Admin/GoodsController.php index 4c9f517..10f80a0 100644 --- a/packages/goods/src/Http/Controllers/Admin/GoodsController.php +++ b/packages/goods/src/Http/Controllers/Admin/GoodsController.php @@ -2,7 +2,11 @@ namespace Peidikeji\Goods\Http\Controllers\Admin; +use Dcat\Admin\Admin; use Dcat\Admin\Form; +use Dcat\Admin\Form\BlockForm; +use Dcat\Admin\Form\NestedForm; +use Dcat\Admin\Form\Row; use Dcat\Admin\Grid; use Dcat\Admin\Grid\Displayers\Actions; use Dcat\Admin\Grid\Tools\Selector; @@ -91,32 +95,113 @@ class GoodsController extends AdminController protected function form() { return Form::make(new Goods(), function (Form $form) { - $form->select('category_id')->options(GoodsCategory::selectOptions(null, false))->required(); - $form->select('brand_id')->options(GoodsBrand::pluck('name', 'id')); - $form->select('type_id')->options(GoodsType::pluck('name', 'id')); - $form->text('name')->required(); - $form->text('goods_sn'); - $form->image('cover_image') - ->autoUpload() - ->saveFullUrl() - ->move('goods/goods') - ->required(); - $form->multipleImage('images') - ->autoUpload() - ->saveFullUrl() - ->move('goods/goods'); - $form->multipleImage('content') - ->autoUpload() - ->saveFullUrl() - ->move('goods/goods'); + $model = $form->model(); + $isCreating = $form->isCreating(); + $type = null; - $form->number('price')->min(0)->attribute('step', 0.01); - $form->switch('on_sale'); + if (request('type_id') && $isCreating) { + $typeId = request('type_id'); + $type = GoodsType::find($typeId); + if ($type) { + $attrbutes = [ + 'type_id' => $type->id, + 'attr' => $type->attr, + 'spec' => $type->spec, + 'part' => $type->part, + ]; + $form->model($attrbutes); + } + } + $model = $form->model(); + if (!$type) { + $type = $model && $model->type_id ? GoodsType::find($form->model()->type_id) : null; + } + + $form->disableHeader(); + $form->tab('基本设置', function (Form $form) use ($isCreating, $type) { + if ($isCreating) { + $form->select('type_id')->options(GoodsType::pluck('name', 'id')); + } else { + $form->display('type_id')->with(fn() => $type->name); + } + $form->select('category_id')->options(GoodsCategory::selectOptions(null, false))->required(); + $form->select('brand_id')->options(GoodsBrand::pluck('name', 'id')); + $form->text('name')->required(); + $form->text('goods_sn'); + $form->image('cover_image') + ->autoUpload() + ->saveFullUrl() + ->move('goods/goods') + ->required(); + $form->multipleImage('images') + ->autoUpload() + ->saveFullUrl() + ->move('goods/goods'); + $form->multipleImage('content') + ->autoUpload() + ->saveFullUrl() + ->move('goods/goods'); + + $form->number('price')->min(0)->attribute('step', 0.01); + $form->switch('on_sale'); + }); + + $form->tab('属性', function (Form $form) use ($type) { + $form->array('attr', null, function (NestedForm $table) use ($type) { + $values = data_get($type, 'attr.' . $table->getKey() . '.values') ?: []; + $table->text('group', '分组'); + $table->text('name', '属性名')->required(); + $table->autocomplete('value', '属性值')->options($values)->configs(['minChars' => 0]); + }); + }); + $form->tab('规格', function (Form $form) use ($type) { + $form->array('spec', null, function (NestedForm $table) use ($type) { + $table->text('name', '名称')->required(); + $values = data_get($type, 'spec.' . $table->getKey() . '.values') ?: []; + $table->array('values', null, function (NestedForm $table) use ($values) { + $index = $table->getKey(); + $table->autocomplete('value', '可选值') + ->default($index === null ? '' : data_get($values, $index, '')) + ->options($values) + ->configs(['minChars' => 0]); + $table->number('price', '加价')->min(0)->default(); + }); + }); + }); + $form->tab('配件', function (Form $form) use ($type) { + $form->array('part', null, function (NestedForm $table) use ($type) { + $table->text('name', '名称')->required(); + $values = data_get($type, 'part.' . $table->getKey() . '.values') ?: []; + $table->array('values', null, function (NestedForm $table) use ($values) { + $index = $table->getKey(); + $table->autocomplete('value', '可选值') + ->default($index === null ? '' : data_get($values, $index, '')) + ->options($values) + ->configs(['minChars' => 0]); + $table->number('price', '加价')->min(0)->default(); + }); + }); + }); $form->disableResetButton(); $form->disableCreatingCheck(); $form->disableViewCheck(); $form->disableEditingCheck(); + + $admin_url = request()->url(); + Admin::script( + <<column('sn'); $grid->column('name'); + $grid->column('origin_price')->display(fn() => $goods->price); $grid->column('price'); $grid->column('stock'); foreach($goods->spec as $key => $item) { diff --git a/packages/goods/src/Http/Controllers/Admin/GoodsTypeController.php b/packages/goods/src/Http/Controllers/Admin/GoodsTypeController.php index 87a9f1f..950b5c4 100644 --- a/packages/goods/src/Http/Controllers/Admin/GoodsTypeController.php +++ b/packages/goods/src/Http/Controllers/Admin/GoodsTypeController.php @@ -33,6 +33,7 @@ class GoodsTypeController extends AdminController $form->array('attr', function (NestedForm $table) { $table->text('name')->required(); + $table->text('group'); $table->list('values'); }); $form->array('spec', function (NestedForm $table) { diff --git a/packages/goods/updates/GoodsTableSeeder.php b/packages/goods/updates/GoodsTableSeeder.php index f52eadf..bf0f38f 100644 --- a/packages/goods/updates/GoodsTableSeeder.php +++ b/packages/goods/updates/GoodsTableSeeder.php @@ -36,9 +36,9 @@ class GoodsTableSeeder extends Seeder [ 'name' => '手机', 'attr' => [ - ['name' => '入网型号', 'values' => ['5G', '4G']], - ['name' => '上市年份', 'values' => null], - ['name' => '品牌', 'values' => null] + ['group' => '主体', 'name' => '入网型号', 'values' => ['5G', '4G']], + ['group' => '主体', 'name' => '上市年份', 'values' => null], + ['group' => '主体', 'name' => '品牌', 'values' => null] ], 'spec' => [ ['name' => '颜色', 'values' => ['白色', '红色', '黑色']], @@ -51,8 +51,8 @@ class GoodsTableSeeder extends Seeder [ 'name' => '笔记本电脑', 'attr' => [ - ['name' => '屏幕类型', 'values' => ['LED 背光显示屏']], - ['name' => '物理分辨率', 'values' => ['3072 x 1920 (226 ppi)']], + ['group' => '显示器', 'name' => '屏幕类型', 'values' => ['LED 背光显示屏']], + ['group' => '显示器','name' => '物理分辨率', 'values' => ['3072 x 1920 (226 ppi)']], ], 'spec' => [ ['name' => '颜色', 'values' => ['白色', '灰色']], @@ -92,9 +92,9 @@ class GoodsTableSeeder extends Seeder 'stock' => 100, 'price' => 6499.00, 'attr' => [ - ['name' => '入网型号', 'value' => '5G'], - ['name' => '品牌', 'value' => '三星Galaxy'], - ['name' => '上市年份', 'value' => '2020'], + ['group' => '主体', 'name' => '入网型号', 'value' => '5G'], + ['group' => '主体', 'name' => '品牌', 'value' => '三星Galaxy'], + ['group' => '主体', 'name' => '上市年份', 'value' => '2020'], ], 'spec' => [ ['name' => '颜色', 'values' => [ @@ -133,8 +133,8 @@ class GoodsTableSeeder extends Seeder 'stock' => 150, 'price' => 17999.00, 'attr' => [ - ['name' => '屏幕类型', 'value' => 'LED 背光显示屏'], - ['name' => '物理分辨率', 'value' => '3072 x 1920 (226 ppi)'], + ['group' => '显示器','name' => '屏幕类型', 'value' => 'LED 背光显示屏'], + ['group' => '显示器','name' => '物理分辨率', 'value' => '3072 x 1920 (226 ppi)'], ], 'spec' => [ ['name' => '颜色', 'values' => [ diff --git a/src/Form.php b/src/Form.php index b6cb6cb..0592589 100755 --- a/src/Form.php +++ b/src/Form.php @@ -1183,13 +1183,14 @@ class Form implements Renderable { $this->build(); + $this->fillFields($this->model()->toArray()); + if ($this->isCreating()) { $this->callCreating(); return; } - $this->fillFields($this->model()->toArray()); $this->callEditing(); }