店铺关联商品
parent
d783768e4c
commit
611fbb9934
|
|
@ -54,6 +54,7 @@ class StoreController extends AdminController
|
||||||
$show->field('id');
|
$show->field('id');
|
||||||
$show->field('title');
|
$show->field('title');
|
||||||
$show->field('image');
|
$show->field('image');
|
||||||
|
$show->field('remarks');
|
||||||
$show->field('created_at');
|
$show->field('created_at');
|
||||||
$show->field('updated_at');
|
$show->field('updated_at');
|
||||||
});
|
});
|
||||||
|
|
@ -66,11 +67,31 @@ class StoreController extends AdminController
|
||||||
*/
|
*/
|
||||||
protected function form()
|
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->display('id');
|
||||||
$form->text('title');
|
$form->text('title');
|
||||||
$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->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')
|
$form->image('image')
|
||||||
->move('store/'.Carbon::now()->toDateString())
|
->move('store/'.Carbon::now()->toDateString())
|
||||||
->saveFullUrl()
|
->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 Illuminate\Http\Request;
|
||||||
use App\Models\Store;
|
use App\Models\Store;
|
||||||
use App\Endpoint\Api\Http\Resources\StoreResource;
|
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
|
class StoreController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -26,4 +29,21 @@ class StoreController extends Controller
|
||||||
|
|
||||||
return StoreResource::make($info);
|
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::apiResource('store', StoreController::class)->only(['index', 'show']);
|
||||||
|
|
||||||
Route::group(['middleware' => ['auth:api', \App\Endpoint\Api\Http\Middleware\CheckUserStatus::class]], function () {
|
Route::group(['middleware' => ['auth:api', \App\Endpoint\Api\Http\Middleware\CheckUserStatus::class]], function () {
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,16 @@ class Store extends Model
|
||||||
'sort' => 1
|
'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)
|
public function scopeEffective($q)
|
||||||
{
|
{
|
||||||
return $q->where('status', 1);
|
return $q->where('status', 1);
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,9 @@ class CreateStoresTable extends Migration
|
||||||
$table->unsignedInteger('admin_user_id');
|
$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('store_id');
|
||||||
$table->unsignedInteger('product_id');
|
$table->unsignedInteger('product_sku_id');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -43,6 +43,6 @@ class CreateStoresTable extends Migration
|
||||||
{
|
{
|
||||||
Schema::dropIfExists('stores');
|
Schema::dropIfExists('stores');
|
||||||
Schema::dropIfExists('store_admin_users');
|
Schema::dropIfExists('store_admin_users');
|
||||||
Schema::dropIfExists('store_products');
|
Schema::dropIfExists('store_product_skus');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,12 @@ return [
|
||||||
'sort' => '排序',
|
'sort' => '排序',
|
||||||
'status' => '状态',
|
'status' => '状态',
|
||||||
'remarks' => '备注',
|
'remarks' => '备注',
|
||||||
|
'admin_users' => '管理员',
|
||||||
|
'product_skus' => '商品',
|
||||||
|
'cover' => '封面图',
|
||||||
|
'sell_price' => '销售价格',
|
||||||
|
'vip_price' => '会员价格',
|
||||||
|
'specs' => '规格',
|
||||||
],
|
],
|
||||||
'options' => [
|
'options' => [
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue