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;
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 . '<span class="label bg-primary">用户</span>';
}
return '未知身份';
});
$grid->column('remarks', '备注');

View File

@ -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 = [