From 611fbb9934c202a936741898727958a4b9ec1921 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Tue, 10 May 2022 16:18:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=97=E9=93=BA=E5=85=B3=E8=81=94=E5=95=86?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/StoreController.php | 23 +++++++++++++- app/Admin/Renderable/AdministratorTable.php | 30 +++++++++++++++++++ .../Api/Http/Controllers/StoreController.php | 20 +++++++++++++ app/Endpoint/Api/routes.php | 1 + app/Models/Store.php | 10 +++++++ .../2022_05_06_161251_create_stores_table.php | 6 ++-- resources/lang/zh_CN/store.php | 6 ++++ 7 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 app/Admin/Renderable/AdministratorTable.php diff --git a/app/Admin/Controllers/StoreController.php b/app/Admin/Controllers/StoreController.php index 28fc7a26..3a1c5717 100644 --- a/app/Admin/Controllers/StoreController.php +++ b/app/Admin/Controllers/StoreController.php @@ -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() diff --git a/app/Admin/Renderable/AdministratorTable.php b/app/Admin/Renderable/AdministratorTable.php new file mode 100644 index 00000000..66583f30 --- /dev/null +++ b/app/Admin/Renderable/AdministratorTable.php @@ -0,0 +1,30 @@ +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(); + }); + } +} diff --git a/app/Endpoint/Api/Http/Controllers/StoreController.php b/app/Endpoint/Api/Http/Controllers/StoreController.php index 0745d3ae..ca013640 100644 --- a/app/Endpoint/Api/Http/Controllers/StoreController.php +++ b/app/Endpoint/Api/Http/Controllers/StoreController.php @@ -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); + } } diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 17318335..3db3a007 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -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 () { diff --git a/app/Models/Store.php b/app/Models/Store.php index f81ec49c..4f2c1e60 100644 --- a/app/Models/Store.php +++ b/app/Models/Store.php @@ -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); diff --git a/database/migrations/2022_05_06_161251_create_stores_table.php b/database/migrations/2022_05_06_161251_create_stores_table.php index ec8a05f6..c78f5845 100644 --- a/database/migrations/2022_05_06_161251_create_stores_table.php +++ b/database/migrations/2022_05_06_161251_create_stores_table.php @@ -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'); } } diff --git a/resources/lang/zh_CN/store.php b/resources/lang/zh_CN/store.php index 931678ce..e4d230bf 100644 --- a/resources/lang/zh_CN/store.php +++ b/resources/lang/zh_CN/store.php @@ -11,6 +11,12 @@ return [ 'sort' => '排序', 'status' => '状态', 'remarks' => '备注', + 'admin_users' => '管理员', + 'product_skus' => '商品', + 'cover' => '封面图', + 'sell_price' => '销售价格', + 'vip_price' => '会员价格', + 'specs' => '规格', ], 'options' => [ ],