店铺关联商品
parent
d783768e4c
commit
611fbb9934
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 () {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,12 @@ return [
|
|||
'sort' => '排序',
|
||||
'status' => '状态',
|
||||
'remarks' => '备注',
|
||||
'admin_users' => '管理员',
|
||||
'product_skus' => '商品',
|
||||
'cover' => '封面图',
|
||||
'sell_price' => '销售价格',
|
||||
'vip_price' => '会员价格',
|
||||
'specs' => '规格',
|
||||
],
|
||||
'options' => [
|
||||
],
|
||||
|
|
|
|||
Loading…
Reference in New Issue