4
0
Fork 0

goods create

master
panliang 2022-08-03 15:00:58 +08:00
parent 41eafd3cdd
commit f050bbf5b5
9 changed files with 131 additions and 34 deletions

View File

@ -9,8 +9,9 @@ return [
'fields' => [ 'fields' => [
'sn' => '货号', 'sn' => '货号',
'name' => '名称', 'name' => '名称',
'price' => '', 'price' => '价',
'stock' => '库存', 'stock' => '库存',
'spec' => '规格', 'spec' => '规格',
'origin_price' => '原价',
] ]
]; ];

View File

@ -4,7 +4,7 @@ return [
'labels' => [ 'labels' => [
'GoodsType' => '商品类别', 'GoodsType' => '商品类别',
'goods' => '商品管理', 'goods' => '商品管理',
'brand' => '类别', 'type' => '商品类别',
], ],
'fields' => [ 'fields' => [
'name' => '名称', 'name' => '名称',
@ -12,5 +12,6 @@ return [
'attr' => '属性', 'attr' => '属性',
'part' => '配件', 'part' => '配件',
'values' => '可选值', 'values' => '可选值',
'group' => '分组',
] ]
]; ];

View File

@ -4,6 +4,8 @@ return [
'labels' => [ 'labels' => [
'Goods' => '商品信息', 'Goods' => '商品信息',
'goods' => '商品信息', 'goods' => '商品信息',
'create' => '创建',
'edit' => '修改',
], ],
'fields' => [ 'fields' => [
'category_id' => '分类', 'category_id' => '分类',

View File

@ -32,7 +32,12 @@ class GoodsBrandController extends AdminController
->autoUpload() ->autoUpload()
->saveFullUrl() ->saveFullUrl()
->move('goods/brand'); ->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->disableResetButton();
$form->disableCreatingCheck(); $form->disableCreatingCheck();

View File

@ -2,7 +2,11 @@
namespace Peidikeji\Goods\Http\Controllers\Admin; namespace Peidikeji\Goods\Http\Controllers\Admin;
use Dcat\Admin\Admin;
use Dcat\Admin\Form; 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;
use Dcat\Admin\Grid\Displayers\Actions; use Dcat\Admin\Grid\Displayers\Actions;
use Dcat\Admin\Grid\Tools\Selector; use Dcat\Admin\Grid\Tools\Selector;
@ -91,32 +95,113 @@ class GoodsController extends AdminController
protected function form() protected function form()
{ {
return Form::make(new Goods(), function (Form $form) { return Form::make(new Goods(), function (Form $form) {
$form->select('category_id')->options(GoodsCategory::selectOptions(null, false))->required(); $model = $form->model();
$form->select('brand_id')->options(GoodsBrand::pluck('name', 'id')); $isCreating = $form->isCreating();
$form->select('type_id')->options(GoodsType::pluck('name', 'id')); $type = null;
$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); if (request('type_id') && $isCreating) {
$form->switch('on_sale'); $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->disableResetButton();
$form->disableCreatingCheck(); $form->disableCreatingCheck();
$form->disableViewCheck(); $form->disableViewCheck();
$form->disableEditingCheck(); $form->disableEditingCheck();
$admin_url = request()->url();
Admin::script(
<<<JS
var url = "{$admin_url}"
var isCreating = "${isCreating}"
console.log(isCreating)
console.log(url)
$('[name="type_id"]').change(function (e) {
if (isCreating) {
Dcat.reload(url + '?type_id=' + e.target.value);
}
})
JS
);
}); });
} }
} }

View File

@ -40,6 +40,7 @@ class GoodsSkuController extends Controller
$grid->column('id'); $grid->column('id');
$grid->column('sn'); $grid->column('sn');
$grid->column('name'); $grid->column('name');
$grid->column('origin_price')->display(fn() => $goods->price);
$grid->column('price'); $grid->column('price');
$grid->column('stock'); $grid->column('stock');
foreach($goods->spec as $key => $item) { foreach($goods->spec as $key => $item) {

View File

@ -33,6 +33,7 @@ class GoodsTypeController extends AdminController
$form->array('attr', function (NestedForm $table) { $form->array('attr', function (NestedForm $table) {
$table->text('name')->required(); $table->text('name')->required();
$table->text('group');
$table->list('values'); $table->list('values');
}); });
$form->array('spec', function (NestedForm $table) { $form->array('spec', function (NestedForm $table) {

View File

@ -36,9 +36,9 @@ class GoodsTableSeeder extends Seeder
[ [
'name' => '手机', 'name' => '手机',
'attr' => [ 'attr' => [
['name' => '入网型号', 'values' => ['5G', '4G']], ['group' => '主体', 'name' => '入网型号', 'values' => ['5G', '4G']],
['name' => '上市年份', 'values' => null], ['group' => '主体', 'name' => '上市年份', 'values' => null],
['name' => '品牌', 'values' => null] ['group' => '主体', 'name' => '品牌', 'values' => null]
], ],
'spec' => [ 'spec' => [
['name' => '颜色', 'values' => ['白色', '红色', '黑色']], ['name' => '颜色', 'values' => ['白色', '红色', '黑色']],
@ -51,8 +51,8 @@ class GoodsTableSeeder extends Seeder
[ [
'name' => '笔记本电脑', 'name' => '笔记本电脑',
'attr' => [ 'attr' => [
['name' => '屏幕类型', 'values' => ['LED 背光显示屏']], ['group' => '显示器', 'name' => '屏幕类型', 'values' => ['LED 背光显示屏']],
['name' => '物理分辨率', 'values' => ['3072 x 1920 (226 ppi)']], ['group' => '显示器','name' => '物理分辨率', 'values' => ['3072 x 1920 (226 ppi)']],
], ],
'spec' => [ 'spec' => [
['name' => '颜色', 'values' => ['白色', '灰色']], ['name' => '颜色', 'values' => ['白色', '灰色']],
@ -92,9 +92,9 @@ class GoodsTableSeeder extends Seeder
'stock' => 100, 'stock' => 100,
'price' => 6499.00, 'price' => 6499.00,
'attr' => [ 'attr' => [
['name' => '入网型号', 'value' => '5G'], ['group' => '主体', 'name' => '入网型号', 'value' => '5G'],
['name' => '品牌', 'value' => '三星Galaxy'], ['group' => '主体', 'name' => '品牌', 'value' => '三星Galaxy'],
['name' => '上市年份', 'value' => '2020'], ['group' => '主体', 'name' => '上市年份', 'value' => '2020'],
], ],
'spec' => [ 'spec' => [
['name' => '颜色', 'values' => [ ['name' => '颜色', 'values' => [
@ -133,8 +133,8 @@ class GoodsTableSeeder extends Seeder
'stock' => 150, 'stock' => 150,
'price' => 17999.00, 'price' => 17999.00,
'attr' => [ 'attr' => [
['name' => '屏幕类型', 'value' => 'LED 背光显示屏'], ['group' => '显示器','name' => '屏幕类型', 'value' => 'LED 背光显示屏'],
['name' => '物理分辨率', 'value' => '3072 x 1920 (226 ppi)'], ['group' => '显示器','name' => '物理分辨率', 'value' => '3072 x 1920 (226 ppi)'],
], ],
'spec' => [ 'spec' => [
['name' => '颜色', 'values' => [ ['name' => '颜色', 'values' => [

View File

@ -1183,13 +1183,14 @@ class Form implements Renderable
{ {
$this->build(); $this->build();
$this->fillFields($this->model()->toArray());
if ($this->isCreating()) { if ($this->isCreating()) {
$this->callCreating(); $this->callCreating();
return; return;
} }
$this->fillFields($this->model()->toArray());
$this->callEditing(); $this->callEditing();
} }