From e0246775d2f5e6de831b10757ca514f327a632f9 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Sat, 4 Dec 2021 16:57:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=8Asku=E5=88=97=E8=A1=A8=E6=8F=90?= =?UTF-8?q?=E5=87=BA=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ProductPartController.php | 45 +++++---- .../Controllers/ProductSkuController.php | 80 +--------------- .../Controllers/ProductSpuController.php | 95 +------------------ app/Admin/Renderable/ProductSkuTable.php | 92 ++++++++++++++++-- 4 files changed, 115 insertions(+), 197 deletions(-) diff --git a/app/Admin/Controllers/ProductPartController.php b/app/Admin/Controllers/ProductPartController.php index 6f201db5..8da7c262 100644 --- a/app/Admin/Controllers/ProductPartController.php +++ b/app/Admin/Controllers/ProductPartController.php @@ -2,7 +2,8 @@ namespace App\Admin\Controllers; -use App\Admin\Renderable\ProductSkuTable; +use App\Admin\Renderable\ProductPartSkuTable; +use App\Admin\Renderable\ProductSkuSimpleTable; use App\Admin\Repositories\ProductPart; use App\Models\ProductSku; use Dcat\Admin\Admin; @@ -25,7 +26,10 @@ class ProductPartController extends AdminController $grid->column('id')->sortable(); $grid->column('key'); $grid->column('name'); - // $grid->column('') + $grid->column('skus')->display('分区商品')->modal(function ($modal) { + $modal->title('商品'); + return ProductPartSkuTable::make(['id'=>$this->id]); + }); $grid->column('is_show') ->if(function () { @@ -92,28 +96,35 @@ class ProductPartController extends AdminController */ protected function form() { - $builder = ProductPart::with(['partSkus']); + $builder = ProductPart::with(['skus']); return Form::make($builder, function (Form $form) { $form->display('id'); $form->text('key')->rules(function (Form $form) { return 'unique:product_parts,key,'.$form->model()->id.',id'; })->required(); $form->text('name'); - if ($form->isCreating()) { - $form->multipleSelectTable('skus') - ->from(ProductSkuTable::make()) - ->model(ProductSku::class, 'id', 'name'); - } else { - $form->hasMany('partSkus', function (Form\NestedForm $form) { - $form->select('sku_id')->options(function ($id) { - $sku = ProductSku::find($id); - if ($sku) { - return [$sku->id => $sku->name]; + // if ($form->isCreating()) { + $form->multipleSelectTable('skus') + ->from(ProductSkuSimpleTable::make()) + ->model(ProductSku::class, 'id', 'name') + ->customFormat(function ($v) { + if (!$v) { + return []; } - })->ajax(admin_route('api.product_skus')); - $form->number('sort')->default(0); - }); - } + // 这一步非常重要,需要把数据库中查出来的二维数组转化成一维数组 + return array_column($v, 'id'); + }); + // } else { + // $form->hasMany('partSkus', function (Form\NestedForm $form) { + // $form->select('sku_id')->options(function ($id) { + // $sku = ProductSku::find($id); + // if ($sku) { + // return [$sku->id => $sku->name]; + // } + // })->ajax(admin_route('api.product_skus')); + // $form->number('sort')->default(0); + // }); + // } $form->switch('is_show')->default(0); diff --git a/app/Admin/Controllers/ProductSkuController.php b/app/Admin/Controllers/ProductSkuController.php index 7a316a3a..1bcd7207 100644 --- a/app/Admin/Controllers/ProductSkuController.php +++ b/app/Admin/Controllers/ProductSkuController.php @@ -2,20 +2,13 @@ namespace App\Admin\Controllers; -use App\Admin\Actions\Grid\ReleaseCancel; -use App\Admin\Actions\Grid\ReleaseDown; -use App\Admin\Actions\Grid\ReleaseUp; -use App\Admin\Actions\Grid\SkuSyncSpu; -use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseCancel; -use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseDown; -use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseUp; +use App\Admin\Renderable\ProductSkuTable; use App\Admin\Repositories\ProductSku; use App\Exceptions\BizException; use App\Models\ProductBuynote; use App\Models\ProductGroup; use App\Models\ProductSku as ProductSkuModel; use Carbon\Carbon; -use Dcat\Admin\Admin; use Dcat\Admin\Form; use Dcat\Admin\Grid; use Dcat\Admin\Http\Controllers\AdminController; @@ -31,76 +24,7 @@ class ProductSkuController extends AdminController */ protected function grid() { - $builder = ProductSku::with('category'); - return Grid::make($builder, function (Grid $grid) { - $grid->showRowSelector(); - $grid->batchActions(function ($batch) { - //批量下架 - if (Admin::user()->can('dcat.admin.product_skus.batch_release_down')) { - $batch->add(new BatchReleaseDown()); - } - //批量上架 - if (Admin::user()->can('dcat.admin.product_skus.batch_release_up')) { - $batch->add(new BatchReleaseUp()); - } - //批量取消审核 - if (Admin::user()->can('dcat.admin.product_skus.batch_release_cancel')) { - $batch->add(new BatchReleaseCancel()); - } - }); - $grid->column('id')->sortable(); - // $grid->column('spu_id'); - $grid->column('name'); - $grid->column('subtitle'); - $grid->column('category.name'); - $grid->column('specs')->label(); - $grid->column('sell_price')->prepend('¥'); - $grid->column('market_price')->prepend('¥'); - $grid->column('cost_price')->prepend('¥'); - $grid->column('vip_price')->prepend('¥'); - $grid->column('weight'); - $grid->column('stock'); - $grid->column('sales'); - $grid->column('verify_state') - ->using([0=>'正常', 1=>'审核中', 2=>'审核失败']) - ->dot([ - 0 => 'success', - 1 => 'primary', - 2 => 'danger', - ]); - $grid->column('release_at'); - $grid->model()->orderBy('created_at', 'desc'); - $grid->model()->orderBy('release_at', 'desc'); - $grid->actions(function (Grid\Displayers\Actions $actions) { - if (is_null($actions->row->release_at) || $actions->row->verify_state == 1) {//未上架或者审核未通过 - $actions->disableEdit(Admin::user()->cannot('dcat.admin.product_skus.edit')); - $actions->disableDelete(Admin::user()->cannot('dcat.admin.product_skus.destroy')); - if ($actions->row->verify_state == 0) { - if (Admin::user()->can('dcat.admin.product_skus.release_up')) { - $actions->append(new ReleaseUp()); - } - } - if ($actions->row->verify_state == 1) { - if (Admin::user()->can('dcat.admin.product_skus.release_cancel')) { - $actions->append(new ReleaseCancel()); - } - } - if (Admin::user()->can('dcat.admin.product_skus.sku_sync_spu')) { - $actions->append(new SkuSyncSpu()); - } - } - if ($actions->row->release_at) {//已上架 - if (Admin::user()->can('dcat.admin.product_skus.release_down')) { - $actions->append(new ReleaseDown()); - } - } - }); - - $grid->filter(function (Grid\Filter $filter) { - $filter->panel(); - $filter->equal('name')->width(3); - }); - }); + return ProductSkuTable::grid(); } /** diff --git a/app/Admin/Controllers/ProductSpuController.php b/app/Admin/Controllers/ProductSpuController.php index 329589a9..a2a7cb22 100644 --- a/app/Admin/Controllers/ProductSpuController.php +++ b/app/Admin/Controllers/ProductSpuController.php @@ -2,24 +2,13 @@ namespace App\Admin\Controllers; -use App\Admin\Actions\Grid\ReleaseCancel; -use App\Admin\Actions\Grid\ReleaseDown; -use App\Admin\Actions\Grid\ReleaseUp; use App\Admin\Actions\Grid\SkuList; -use App\Admin\Actions\Grid\SkuSyncSpu; -use App\Admin\Extensions\Grid\Tools\Product\AddSku; -use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseCancel; -use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseDown; -use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseUp; -use App\Admin\Extensions\Grid\Tools\Product\BatchSkuSyncSpu; -use App\Admin\Extensions\Grid\Tools\Product\InitSkuBySpecs; -use App\Admin\Extensions\Grid\Tools\Product\SettingSpecs; +use App\Admin\Renderable\ProductSkuTable; use App\Admin\Repositories\ProductSpu; use App\Exceptions\BizException; use App\Models\ProductBuynote; use App\Models\ProductFeature; use App\Models\ProductGroup; -use App\Models\ProductSku; use App\Models\ProductSpu as ProductSpuModel; use Carbon\Carbon; use Dcat\Admin\Admin; @@ -189,86 +178,6 @@ class ProductSpuController extends AdminController { return $content->header(__('product-spu.labels.ProductSpu')) ->description($spu->name) - ->body(Grid::make(ProductSku::where('spu_id', $spu->id), function ($grid) use ($spu) { - $grid->showRowSelector(); - $grid->setResource('product-skus'); - $grid->id(); - $grid->tools(function (Grid\Tools $tools) use ($spu) { - //设置规格 - if (Admin::user()->can('dcat.admin.product_spus.setting_specs')) { - $tools->append(new SettingSpecs($spu->id)); - } - if ($spu->hasSku()) { //下面有sku,手动创建sku - if (Admin::user()->can('dcat.admin.product_spus.add_sku')) { - $tools->append(new AddSku($spu->id)); - } - } else {//下面无sku,根据规格自动生成sku - if (Admin::user()->can('dcat.admin.product_spus.init_sku_by_specs')) { - $tools->append(new InitSkuBySpecs($spu->id)); - } - } - }); - $grid->batchActions(function ($batch) { - //批量下架 - if (Admin::user()->can('dcat.admin.product_skus.batch_release_down')) { - $batch->add(new BatchReleaseDown()); - } - //批量上架 - if (Admin::user()->can('dcat.admin.product_skus.batch_release_up')) { - $batch->add(new BatchReleaseUp()); - } - //批量取消审核 - if (Admin::user()->can('dcat.admin.product_skus.batch_release_cancel')) { - $batch->add(new BatchReleaseCancel()); - } - //批量同步主商品 - if (Admin::user()->can('dcat.admin.product_skus.batch_sku_sync_spu')) { - $batch->add(new BatchSkuSyncSpu()); - } - }); - $grid->column('name'); - $grid->column('subtitle'); - $grid->column('specs')->label(); - $grid->column('sell_price')->prepend('¥'); - $grid->column('market_price')->prepend('¥'); - $grid->column('cost_price')->prepend('¥'); - $grid->column('vip_price')->prepend('¥'); - $grid->column('weight'); - $grid->column('stock'); - $grid->column('sales'); - $grid->column('verify_state') - ->using([0=>'正常', 1=>'审核中', 2=>'审核失败']) - ->dot([ - 0 => 'success', - 1 => 'primary', - 2 => 'danger', - ]); - $grid->column('release_at'); - - $grid->actions(function (Grid\Displayers\Actions $actions) { - if (is_null($actions->row->release_at) || $actions->row->verify_state == 1) {//未上架或者审核未通过 - $actions->disableEdit(Admin::user()->cannot('dcat.admin.product_skus.edit')); - $actions->disableDelete(Admin::user()->cannot('dcat.admin.product_skus.destroy')); - if ($actions->row->verify_state == 0) { - if (Admin::user()->can('dcat.admin.product_skus.release_up')) { - $actions->append(new ReleaseUp()); - } - } - if ($actions->row->verify_state == 1) { - if (Admin::user()->can('dcat.admin.product_skus.release_cancel')) { - $actions->append(new ReleaseCancel()); - } - } - if (Admin::user()->can('dcat.admin.product_skus.sku_sync_spu')) { - $actions->append(new SkuSyncSpu()); - } - } - if ($actions->row->release_at) {//已上架 - if (Admin::user()->can('dcat.admin.product_skus.release_down')) { - $actions->append(new ReleaseDown()); - } - } - }); - })); + ->body(ProductSkuTable::grid($spu->id)); } } diff --git a/app/Admin/Renderable/ProductSkuTable.php b/app/Admin/Renderable/ProductSkuTable.php index d951877b..34cdb77e 100644 --- a/app/Admin/Renderable/ProductSkuTable.php +++ b/app/Admin/Renderable/ProductSkuTable.php @@ -2,21 +2,95 @@ namespace App\Admin\Renderable; +use App\Admin\Actions\Grid\ReleaseCancel; +use App\Admin\Actions\Grid\ReleaseDown; +use App\Admin\Actions\Grid\ReleaseUp; +use App\Admin\Actions\Grid\SkuSyncSpu; +use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseCancel; +use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseDown; +use App\Admin\Extensions\Grid\Tools\Product\BatchReleaseUp; use App\Models\ProductSku; +use Dcat\Admin\Admin; use Dcat\Admin\Grid; -use Dcat\Admin\Grid\LazyRenderable; -class ProductSkuTable extends LazyRenderable +class ProductSkuTable extends Grid { - public function grid(): Grid + public static function grid(int $spuId = null) { - $id = $this->id; - // $builder = ProductSku::where('id', $id); - return Grid::make(new ProductSku(), function (Grid $grid) { - $grid->disableRowSelector(false); + $builder = ProductSku::with('category'); + if ($spuId) { + $builder->where('spu_id', $spuId); + } + $grid = parent::make($builder, function (Grid $grid) { + $grid->setResource('product-skus'); + $grid->showRowSelector(); + $grid->batchActions(function ($batch) { + //批量下架 + if (Admin::user()->can('dcat.admin.product_skus.batch_release_down')) { + $batch->add(new BatchReleaseDown()); + } + //批量上架 + if (Admin::user()->can('dcat.admin.product_skus.batch_release_up')) { + $batch->add(new BatchReleaseUp()); + } + //批量取消审核 + if (Admin::user()->can('dcat.admin.product_skus.batch_release_cancel')) { + $batch->add(new BatchReleaseCancel()); + } + }); + $grid->column('id')->sortable(); + // $grid->column('spu_id'); $grid->column('name'); - $grid->quickSearch(['name']); - $grid->disableActions(); + $grid->column('subtitle'); + $grid->column('category.name'); + $grid->column('specs')->label(); + $grid->column('sell_price')->prepend('¥'); + $grid->column('market_price')->prepend('¥'); + $grid->column('cost_price')->prepend('¥'); + $grid->column('vip_price')->prepend('¥'); + $grid->column('weight'); + $grid->column('stock'); + $grid->column('sales'); + $grid->column('verify_state') + ->using([0=>'正常', 1=>'审核中', 2=>'审核失败']) + ->dot([ + 0 => 'success', + 1 => 'primary', + 2 => 'danger', + ]); + $grid->column('release_at'); + $grid->model()->orderBy('created_at', 'desc'); + $grid->model()->orderBy('release_at', 'desc'); + $grid->actions(function (Grid\Displayers\Actions $actions) { + if (is_null($actions->row->release_at) || $actions->row->verify_state == 1) {//未上架或者审核未通过 + $actions->disableEdit(Admin::user()->cannot('dcat.admin.product_skus.edit')); + $actions->disableDelete(Admin::user()->cannot('dcat.admin.product_skus.destroy')); + if ($actions->row->verify_state == 0) { + if (Admin::user()->can('dcat.admin.product_skus.release_up')) { + $actions->append(new ReleaseUp()); + } + } + if ($actions->row->verify_state == 1) { + if (Admin::user()->can('dcat.admin.product_skus.release_cancel')) { + $actions->append(new ReleaseCancel()); + } + } + if (Admin::user()->can('dcat.admin.product_skus.sku_sync_spu')) { + $actions->append(new SkuSyncSpu()); + } + } + if ($actions->row->release_at) {//已上架 + if (Admin::user()->can('dcat.admin.product_skus.release_down')) { + $actions->append(new ReleaseDown()); + } + } + }); + + $grid->filter(function (Grid\Filter $filter) { + $filter->panel(); + $filter->equal('name')->width(3); + }); }); + return $grid; } }