6
0
Fork 0

Admin Store ExportProductSku

base
panliang 2022-07-13 17:51:03 +08:00
parent d12c76d0aa
commit 644be10419
3 changed files with 82 additions and 27 deletions

View File

@ -0,0 +1,50 @@
<?php
namespace App\Admin\Actions\Store;
use App\Models\ProductSku;
use App\Models\Store\ProductSku as StoreProductSku;
use App\Models\Store\Store;
use Dcat\Admin\Show\AbstractTool;
use Illuminate\Support\Facades\DB;
class ExportGoodsSpu extends AbstractTool
{
protected $title = '导入全站商品';
protected $style = 'btn btn-sm btn-primary mr-1';
protected $amount = 10000;
public function handle()
{
$id = $this->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 . ', 店铺已经存在的商品会被忽略'];
}
}

View File

@ -2,6 +2,7 @@
namespace App\Admin\Controllers\Store; namespace App\Admin\Controllers\Store;
use App\Admin\Actions\Store\ExportGoodsSpu;
use App\Models\Store\{Store, ProductSku, Administrator as StoreAdministrator, StockLog}; use App\Models\Store\{Store, ProductSku, Administrator as StoreAdministrator, StockLog};
use Dcat\Admin\{Form, Grid, Show, Admin}; use Dcat\Admin\{Form, Grid, Show, Admin};
use Dcat\Admin\Http\Controllers\AdminController; 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\Widgets\{Box, Tab, Card};
use Dcat\Admin\Layout\{Content, Row}; use Dcat\Admin\Layout\{Content, Row};
use App\Admin\Metrics\Store\{TotalStore, TotalUser, TotalOrder, TotalMoney}; use App\Admin\Metrics\Store\{TotalStore, TotalUser, TotalOrder, TotalMoney};
use Dcat\Admin\Show\Tools;
class StoreController extends AdminController class StoreController extends AdminController
{ {
@ -42,16 +44,16 @@ class StoreController extends AdminController
} }
protected function grid() protected function grid()
{ {
$grid = Grid::make(new Store()); $grid = Grid::make(new Store());
$user = Admin::user(); $user = Admin::user();
$canAdmin = $this->canAdmin(); $canAdmin = $this->canAdmin();
if (!$canAdmin) { if (!$canAdmin) {
$stores = $user->stores; $stores = $user->stores;
$grid->model()->whereIn('id', $stores->pluck('id')); $grid->model()->whereIn('id', $stores->pluck('id'));
} }
$grid->model()->sort(); $grid->model()->sort();
$grid->column('id'); $grid->column('id');
@ -65,18 +67,18 @@ class StoreController extends AdminController
$grid->enableDialogCreate(); $grid->enableDialogCreate();
$grid->showViewButton($user->can('dcat.admin.store.list.show')); $grid->showViewButton($user->can('dcat.admin.store.list.show'));
$grid->showQuickEditButton($user->can('dcat.admin.store.list.edit')); $grid->showQuickEditButton($user->can('dcat.admin.store.list.edit'));
$grid->showDeleteButton($canAdmin); $grid->showDeleteButton($canAdmin);
$grid->filter(function (Grid\Filter $filter) { $grid->filter(function (Grid\Filter $filter) {
$filter->panel(); $filter->panel();
$filter->like('title')->width(3); $filter->like('title')->width(3);
}); });
return $grid; return $grid;
} }
/** /**
@ -88,19 +90,23 @@ class StoreController extends AdminController
*/ */
protected function detail($id) protected function detail($id)
{ {
if (!$this->canAdmin()) { if ($this->canAdmin()) {
$info = Store::findOrFail($id);
} else {
$user = Admin::user(); $user = Admin::user();
$user->stores()->findOrFail($id); $info = $user->stores()->findOrFail($id);
} }
$show = Show::make($id, new Store(), function (Show $show) { $show = Show::make($id, $info);
$show->field('id');
$show->field('id'); $show->field('title');
$show->field('title'); $show->field('image')->image();
$show->field('image')->image(); $show->field('sort');
$show->field('sort'); $show->field('status')->using([ 0 => '关闭', 1 => '开启' ]);
$show->field('status')->using([ 0 => '关闭', 1 => '开启' ]); $show->field('remarks');
$show->field('remarks'); $show->field('created_at');
$show->field('created_at');
$show->tools(function (Tools $tools) {
$tools->append(new ExportGoodsSpu());
}); });
return $show; return $show;
} }
@ -136,7 +142,7 @@ class StoreController extends AdminController
$form->text('remarks'); $form->text('remarks');
$form->switch('status')->default(1); $form->switch('status')->default(1);
$form->number('sort')->min(1)->default(1); $form->number('sort')->min(1)->default(1);
$form->disableDeleteButton(); $form->disableDeleteButton();
$form->footer(function ($footer) { $form->footer(function ($footer) {
$footer->disableEditingCheck(); $footer->disableEditingCheck();
@ -153,14 +159,14 @@ class StoreController extends AdminController
{ {
$grid = Grid::make(StoreAdministrator::with(['administrator'])); $grid = Grid::make(StoreAdministrator::with(['administrator']));
$grid->model()->where('store_id', $id); $grid->model()->where('store_id', $id);
$grid->setResource('store/' . $id . '/admin'); $grid->setResource('store/' . $id . '/admin');
$grid->column('administrator.id', 'ID'); $grid->column('administrator.id', 'ID');
$grid->column('administrator.username', '登录名'); $grid->column('administrator.username', '登录名');
$grid->column('administrator.name', '姓名'); $grid->column('administrator.name', '姓名');
$grid->paginate(10); $grid->paginate(10);
$grid->showCreateButton(); $grid->showCreateButton();
$grid->enableDialogCreate(); $grid->enableDialogCreate();
@ -176,14 +182,14 @@ class StoreController extends AdminController
$grid->model()->where('store_id', $id)->orderBy('id', 'desc'); $grid->model()->where('store_id', $id)->orderBy('id', 'desc');
$grid->setResource('store/'.$id.'/product'); $grid->setResource('store/'.$id.'/product');
$grid->column('productSku.id', 'ID'); $grid->column('productSku.id', 'ID');
$grid->column('productSku.name', '名称'); $grid->column('productSku.name', '名称');
$grid->column('amount', '库存'); $grid->column('amount', '库存');
$grid->column('productSku.specs', '规格')->label(); $grid->column('productSku.specs', '规格')->label();
$grid->column('status', '状态')->switch(); $grid->column('status', '状态')->switch();
$grid->paginate(10); $grid->paginate(10);
$grid->showCreateButton(); $grid->showCreateButton();
$grid->enableDialogCreate(); $grid->enableDialogCreate();
@ -195,7 +201,7 @@ class StoreController extends AdminController
protected function gridStock($id) protected function gridStock($id)
{ {
$grid = new Grid(StockLog::with(['productSku', 'operator', 'source', 'tag'])); $grid = new Grid(StockLog::with(['productSku', 'operator', 'source', 'tag']));
$grid->model()->where('store_id', $id)->orderBy('created_at', 'desc'); $grid->model()->where('store_id', $id)->orderBy('created_at', 'desc');
$grid->setResource('store/'.$id.'/stock'); $grid->setResource('store/'.$id.'/stock');
@ -209,7 +215,7 @@ class StoreController extends AdminController
} else if ($v instanceof \App\Models\User) { } else if ($v instanceof \App\Models\User) {
return $v->phone . '<span class="label bg-primary">用户</span>'; return $v->phone . '<span class="label bg-primary">用户</span>';
} }
return '未知身份'; return '未知身份';
}); });
$grid->column('remarks', '备注'); $grid->column('remarks', '备注');

View File

@ -2,13 +2,12 @@
namespace App\Models\Store; namespace App\Models\Store;
use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class ProductSku extends Model class ProductSku extends Model
{ {
protected $table = 'store_product_skus'; protected $table = 'store_product_skus';
protected $fillable = ['amount', 'product_sku_id', 'status', 'store_id']; protected $fillable = ['amount', 'product_sku_id', 'status', 'store_id'];
protected $attributes = [ protected $attributes = [