6
0
Fork 0

店铺关联商品

release
panliang 2022-05-10 16:18:32 +08:00
parent d783768e4c
commit 611fbb9934
7 changed files with 92 additions and 4 deletions

View File

@ -54,6 +54,7 @@ class StoreController extends AdminController
$show->field('id');
$show->field('title');
$show->field('image');
$show->field('remarks');
$show->field('created_at');
$show->field('updated_at');
});
@ -66,11 +67,31 @@ class StoreController extends AdminController
*/
protected function form()
{
return Form::make(new Store(), function (Form $form) {
return Form::make(Store::with(['adminUsers', 'productSkus']), function (Form $form) {
$form->display('id');
$form->text('title');
$form->switch('status')->default(1);
$form->number('sort')->min(1)->default(1);
$form->multipleSelectTable('admin_users')
->from(\App\Admin\Renderable\AdministratorTable::make())
->model(\Dcat\Admin\Models\Administrator::class, 'id', 'name')
->customFormat(function ($v) {
if (! $v) {
return [];
}
return array_column($v, 'id');
});
$form->multipleSelectTable('product_skus')
->from(\App\Admin\Renderable\ProductSkuSimpleTable::make())
->model(\App\Models\ProductSku::class, 'id', 'name')
->customFormat(function ($v) {
if (! $v) {
return [];
}
return array_column($v, 'id');
});
$form->image('image')
->move('store/'.Carbon::now()->toDateString())
->saveFullUrl()

View File

@ -0,0 +1,30 @@
<?php
namespace App\Admin\Renderable;
use Dcat\Admin\Grid;
use Dcat\Admin\Grid\LazyRenderable;
use Dcat\Admin\Models\Administrator;
class AdministratorTable extends LazyRenderable
{
public function grid(): Grid
{
// 获取外部传递的参数
$id = $this->id;
return Grid::make(new Administrator(), function (Grid $grid) {
$grid->showRowSelector();
$grid->column('id');
$grid->column('username');
$grid->column('name');
$grid->quickSearch(['username', 'name']);
$grid->paginate(10);
$grid->disableActions();
});
}
}

View File

@ -5,6 +5,9 @@ namespace App\Endpoint\Api\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Store;
use App\Endpoint\Api\Http\Resources\StoreResource;
use App\Endpoint\Api\Http\Resources\ProductSkuTinyResource;
use App\Models\ProductSku;
use App\Helpers\Paginator;
class StoreController extends Controller
{
@ -26,4 +29,21 @@ class StoreController extends Controller
return StoreResource::make($info);
}
public function products($id, Request $request)
{
$store = Store::findOrFail($id);
$input = $request->all();
if ($request->isNotFilled('sort')) {
$input['sort'] = '-id';
}
$fields = ['id', 'name', 'cover', 'sell_price', 'vip_price', 'market_price'];
$skus = $store->productSkus()->select($fields)->filter($input)->online()->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50));
return ProductSkuTinyResource::collection($skus);
}
}

View File

@ -216,6 +216,7 @@ Route::group([
});
});
Route::get('store/{id}/products', [StoreController::class, 'products']);
Route::apiResource('store', StoreController::class)->only(['index', 'show']);
Route::group(['middleware' => ['auth:api', \App\Endpoint\Api\Http\Middleware\CheckUserStatus::class]], function () {

View File

@ -15,6 +15,16 @@ class Store extends Model
'sort' => 1
];
public function adminUsers()
{
return $this->belongsToMany(\Dcat\Admin\Models\Administrator::class, 'store_admin_users', 'store_id', 'admin_user_id');
}
public function productSkus()
{
return $this->belongsToMany(ProductSku::class, 'store_product_skus', 'store_id', 'product_sku_id');
}
public function scopeEffective($q)
{
return $q->where('status', 1);

View File

@ -28,9 +28,9 @@ class CreateStoresTable extends Migration
$table->unsignedInteger('admin_user_id');
});
Schema::create('store_products', function (Blueprint $table) {
Schema::create('store_product_skus', function (Blueprint $table) {
$table->unsignedInteger('store_id');
$table->unsignedInteger('product_id');
$table->unsignedInteger('product_sku_id');
});
}
@ -43,6 +43,6 @@ class CreateStoresTable extends Migration
{
Schema::dropIfExists('stores');
Schema::dropIfExists('store_admin_users');
Schema::dropIfExists('store_products');
Schema::dropIfExists('store_product_skus');
}
}

View File

@ -11,6 +11,12 @@ return [
'sort' => '排序',
'status' => '状态',
'remarks' => '备注',
'admin_users' => '管理员',
'product_skus' => '商品',
'cover' => '封面图',
'sell_price' => '销售价格',
'vip_price' => '会员价格',
'specs' => '规格',
],
'options' => [
],