diff --git a/app/Admin/Actions/Store/ExportGoodsSpu.php b/app/Admin/Actions/Store/ExportGoodsSpu.php new file mode 100644 index 00000000..19978237 --- /dev/null +++ b/app/Admin/Actions/Store/ExportGoodsSpu.php @@ -0,0 +1,50 @@ +getKey(); + $store = Store::findOrFail($id); + + try { + DB::beginTransaction(); + $skuIds = StoreProductSku::where('store_id', $store->id)->pluck('product_sku_id'); + $skus = ProductSku::online()->whereNotIn('id', $skuIds)->get(); + foreach($skus as $sku) { + StoreProductSku::create([ + 'store_id' => $store->id, + 'product_sku_id' => $sku->id, + 'status' => 1, + 'amount' => $this->amount, + ]); + } + + DB::commit(); + return $this->response()->success('导入 '.$skus->count().' 个商品')->refresh(); + } catch (\Exception $e) { + DB::rollBack(); + report($e); + return $this->response()->error($e->getMessage()); + } + } + + public function confirm() + { + return ['是否确定?', '导入全部上架的商品, 库存为 ' . $this->amount . ', 店铺已经存在的商品会被忽略']; + } +} diff --git a/app/Admin/Controllers/Store/StoreController.php b/app/Admin/Controllers/Store/StoreController.php index 5e98549d..1aa40a83 100644 --- a/app/Admin/Controllers/Store/StoreController.php +++ b/app/Admin/Controllers/Store/StoreController.php @@ -2,6 +2,7 @@ namespace App\Admin\Controllers\Store; +use App\Admin\Actions\Store\ExportGoodsSpu; use App\Models\Store\{Store, ProductSku, Administrator as StoreAdministrator, StockLog}; use Dcat\Admin\{Form, Grid, Show, Admin}; use Dcat\Admin\Http\Controllers\AdminController; @@ -11,6 +12,7 @@ use App\Models\Admin\Administrator; use Dcat\Admin\Widgets\{Box, Tab, Card}; use Dcat\Admin\Layout\{Content, Row}; use App\Admin\Metrics\Store\{TotalStore, TotalUser, TotalOrder, TotalMoney}; +use Dcat\Admin\Show\Tools; class StoreController extends AdminController { @@ -42,16 +44,16 @@ class StoreController extends AdminController } protected function grid() - { + { $grid = Grid::make(new Store()); - + $user = Admin::user(); $canAdmin = $this->canAdmin(); if (!$canAdmin) { $stores = $user->stores; $grid->model()->whereIn('id', $stores->pluck('id')); } - + $grid->model()->sort(); $grid->column('id'); @@ -65,18 +67,18 @@ class StoreController extends AdminController $grid->enableDialogCreate(); $grid->showViewButton($user->can('dcat.admin.store.list.show')); - + $grid->showQuickEditButton($user->can('dcat.admin.store.list.edit')); - + $grid->showDeleteButton($canAdmin); - + $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->like('title')->width(3); }); return $grid; - + } /** @@ -88,19 +90,23 @@ class StoreController extends AdminController */ protected function detail($id) { - if (!$this->canAdmin()) { + if ($this->canAdmin()) { + $info = Store::findOrFail($id); + } else { $user = Admin::user(); - $user->stores()->findOrFail($id); + $info = $user->stores()->findOrFail($id); } - $show = Show::make($id, new Store(), function (Show $show) { - - $show->field('id'); - $show->field('title'); - $show->field('image')->image(); - $show->field('sort'); - $show->field('status')->using([ 0 => '关闭', 1 => '开启' ]); - $show->field('remarks'); - $show->field('created_at'); + $show = Show::make($id, $info); + $show->field('id'); + $show->field('title'); + $show->field('image')->image(); + $show->field('sort'); + $show->field('status')->using([ 0 => '关闭', 1 => '开启' ]); + $show->field('remarks'); + $show->field('created_at'); + + $show->tools(function (Tools $tools) { + $tools->append(new ExportGoodsSpu()); }); return $show; } @@ -136,7 +142,7 @@ class StoreController extends AdminController $form->text('remarks'); $form->switch('status')->default(1); $form->number('sort')->min(1)->default(1); - + $form->disableDeleteButton(); $form->footer(function ($footer) { $footer->disableEditingCheck(); @@ -153,14 +159,14 @@ class StoreController extends AdminController { $grid = Grid::make(StoreAdministrator::with(['administrator'])); $grid->model()->where('store_id', $id); - + $grid->setResource('store/' . $id . '/admin'); $grid->column('administrator.id', 'ID'); $grid->column('administrator.username', '登录名'); $grid->column('administrator.name', '姓名'); $grid->paginate(10); - + $grid->showCreateButton(); $grid->enableDialogCreate(); @@ -176,14 +182,14 @@ class StoreController extends AdminController $grid->model()->where('store_id', $id)->orderBy('id', 'desc'); $grid->setResource('store/'.$id.'/product'); - + $grid->column('productSku.id', 'ID'); $grid->column('productSku.name', '名称'); $grid->column('amount', '库存'); $grid->column('productSku.specs', '规格')->label(); $grid->column('status', '状态')->switch(); $grid->paginate(10); - + $grid->showCreateButton(); $grid->enableDialogCreate(); @@ -195,7 +201,7 @@ class StoreController extends AdminController protected function gridStock($id) { $grid = new Grid(StockLog::with(['productSku', 'operator', 'source', 'tag'])); - + $grid->model()->where('store_id', $id)->orderBy('created_at', 'desc'); $grid->setResource('store/'.$id.'/stock'); @@ -209,7 +215,7 @@ class StoreController extends AdminController } else if ($v instanceof \App\Models\User) { return $v->phone . '用户'; } - + return '未知身份'; }); $grid->column('remarks', '备注'); diff --git a/app/Models/Store/ProductSku.php b/app/Models/Store/ProductSku.php index b58149cc..b62daeed 100644 --- a/app/Models/Store/ProductSku.php +++ b/app/Models/Store/ProductSku.php @@ -2,13 +2,12 @@ namespace App\Models\Store; -use Illuminate\Database\Eloquent\Relations\Pivot; use Illuminate\Database\Eloquent\Model; class ProductSku extends Model { protected $table = 'store_product_skus'; - + protected $fillable = ['amount', 'product_sku_id', 'status', 'store_id']; protected $attributes = [