diff --git a/app/Admin/Controllers/ArticleCategoryController.php b/app/Admin/Controllers/ArticleCategoryController.php index eb0d6bc1..dbb5288f 100644 --- a/app/Admin/Controllers/ArticleCategoryController.php +++ b/app/Admin/Controllers/ArticleCategoryController.php @@ -111,16 +111,6 @@ class ArticleCategoryController extends AdminController $form->switch('is_recommend'); $form->number('sort')->default(0); - $form->saving(function (Form $form) { - if ($form->isEditing()) { - if (!is_null($form->is_show) && (bool) $form->is_show !== $form->model()->is_show) {//如果改变显示隐藏 - //影响下级分类; - $form->model()->descendants()->update(['is_show' => $form->is_show]); - //影响上级分类;能力有限无法实现 - } - } - }); - $form->display('created_at'); $form->display('updated_at'); }); diff --git a/app/Admin/Controllers/ProductSpuController.php b/app/Admin/Controllers/ProductSpuController.php index 4aee7e30..661a547d 100644 --- a/app/Admin/Controllers/ProductSpuController.php +++ b/app/Admin/Controllers/ProductSpuController.php @@ -94,7 +94,6 @@ class ProductSpuController extends AdminController return Form::make(new ProductSpu(), function (Form $form) { $form->display('id'); - if ($form->isCreating()) { $form->select('one_category')->options(admin_route('api.product_categories'))->load('two_category', admin_route('api.product_categories')); $form->select('two_category')->load('category_id', admin_route('api.product_categories')); @@ -121,6 +120,9 @@ class ProductSpuController extends AdminController $form->currency('vip_price')->symbol('¥'); $form->select('attr_group')->options(ProductGroup::all()->pluck('name', 'id')); $form->selectAttr('attrs')->listen('attr_group'); + if ($form->isCreating()) { + $form->selectSpec('specs')->listen('attr_group'); + } $form->ignore(['one_category', 'two_category', 'attr_group']); $form->display('created_at'); diff --git a/app/Admin/Extensions/Form/Product/SelectSpec.php b/app/Admin/Extensions/Form/Product/SelectSpec.php index 82bab361..d8e7f288 100644 --- a/app/Admin/Extensions/Form/Product/SelectSpec.php +++ b/app/Admin/Extensions/Form/Product/SelectSpec.php @@ -35,7 +35,23 @@ class SelectSpec extends Field */ protected function prepareInputValue($value) { - return $value; + $specs = $value; + if ($specs) { + $specs =json_decode($specs, true); + foreach ($specs as $key=> &$item) { + $item['items'] = array_filter(array_map(function ($value) { + if (!empty($value['value'])) { + return $value; + } + }, $item['specs'])); + unset($item['specs']); + //如果该组无值,则删除该组 + if (count($item['items']) < 1) { + unset($specs[$key]); + } + } + } + return $specs; } /** diff --git a/app/Models/ArticleCategory.php b/app/Models/ArticleCategory.php index 7b5d1a9c..b4ae547c 100644 --- a/app/Models/ArticleCategory.php +++ b/app/Models/ArticleCategory.php @@ -30,4 +30,18 @@ class ArticleCategory extends Model { return $this->parent_id; } + + /** + * {@inheritdoc} + */ + protected static function booted() + { + parent::updated(function ($articleCategory) { + if ($articleCategory->wasChanged('is_show')) {//如果改变显示隐藏 + //影响下级分类; + $articleCategory->descendants()->update(['is_show' => $articleCategory->is_show]); + //影响上级分类;能力有限无法实现 + } + }); + } } diff --git a/app/Models/ProductSpu.php b/app/Models/ProductSpu.php index 37435fc2..c590faef 100644 --- a/app/Models/ProductSpu.php +++ b/app/Models/ProductSpu.php @@ -41,4 +41,9 @@ class ProductSpu extends Model 'sales', 'release_at', ]; + + public function specs() + { + return $this->hasMany(ProductSpuSpec::class, 'product_spu_id'); + } } diff --git a/app/Models/ProductSpuSpec.php b/app/Models/ProductSpuSpec.php new file mode 100644 index 00000000..61056a44 --- /dev/null +++ b/app/Models/ProductSpuSpec.php @@ -0,0 +1,22 @@ + JsonArray::class, + ]; + + protected $fillable = [ + 'product_spu_id', + 'name', + 'items', + ]; +} diff --git a/resources/views/admin/form/product-select-attr.blade.php b/resources/views/admin/form/product-select-attr.blade.php index d655e634..df5a4a55 100644 --- a/resources/views/admin/form/product-select-attr.blade.php +++ b/resources/views/admin/form/product-select-attr.blade.php @@ -16,7 +16,7 @@ -
+
@@ -24,7 +24,7 @@
-
+
@@ -84,7 +84,7 @@ function getTypeAttrs(group_id){ }, success: function (result) { vm.attr_group = []; - if(result.attrs.length > 0){ + if(result.attrs && result.attrs.length > 0){ for(j = 0, len=result.attrs.length; j < len; j++){ vm.attr_group.push(result.attrs[j]); } diff --git a/resources/views/admin/form/product-select-spec.blade.php b/resources/views/admin/form/product-select-spec.blade.php index 9d60c330..2f8101d7 100644 --- a/resources/views/admin/form/product-select-spec.blade.php +++ b/resources/views/admin/form/product-select-spec.blade.php @@ -14,25 +14,42 @@ - + + + + + + +
-
+
-
- + +
-
+
-
+
+   +
+
+
+  新增 +
+
+
@@ -50,14 +67,35 @@ var vm = new Vue({ el: '#' + id, data: { - spec_group:[] + spec_group:[], + spec_items:[], }, computed: { getSpecs() { - return; + return JSON.stringify(this.spec_group); + } + }, + methods: { + addSpecs(specIndex){ + this.spec_group[specIndex].specs.push( + { + name:"NONE", + value:"" + } + ); + }, + delSpecs(specIndex, itemIndex){ + console.log("123456") + if(this.spec_group[specIndex].specs[itemIndex]){ + if(itemIndex >= 0){ + let arr = this.spec_group[specIndex].specs; + this.spec_group[specIndex].specs = (arr.slice(0, itemIndex).concat(arr.slice(itemIndex+1,arr.length))); + } + } } } }); + function getTypeSpecs(group_id){ var url_path = "{{ admin_route('api.product_group_details') }}"; var goods_id = 0; @@ -73,7 +111,17 @@ function getTypeSpecs(group_id){ vm.spec_group = []; if(result.specs.length > 0){ for(j = 0, len=result.specs.length; j < len; j++){ - vm.spec_group.push(result.specs[j]); + vm.spec_group.push({ + name:result.specs[j].name, + specs:[] + }); + let items = []; + if(result.specs[j] && result.specs[j].specs.length > 0){ + for(i = 0, llen = result.specs[j].specs.length; i