diff --git a/app/Admin/Controllers/StoreController.php b/app/Admin/Controllers/StoreController.php new file mode 100644 index 00000000..2db5bb0d --- /dev/null +++ b/app/Admin/Controllers/StoreController.php @@ -0,0 +1,85 @@ +model()->sort(); + + $grid->column('id'); + $grid->column('title'); + $grid->column('image')->image('', 100, 100); + $grid->column('status')->switch(); + $grid->column('sort'); + $grid->column('created_at'); + + $grid->disableCreateButton(false); + $grid->enableDialogCreate(); + $grid->setDialogFormDimensions('40%', '70%'); + $grid->showEditButton(); + + $grid->filter(function (Grid\Filter $filter) { + $filter->panel(); + $filter->like('title')->width(3); + }); + }); + } + + /** + * Make a show builder. + * + * @param mixed $id + * + * @return Show + */ + protected function detail($id) + { + return Show::make($id, new Store(), function (Show $show) { + $show->field('id'); + $show->field('title'); + $show->field('image'); + $show->field('created_at'); + $show->field('updated_at'); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + return Form::make(new Store(), function (Form $form) { + $form->display('id'); + $form->text('title'); + $form->switch('status')->default(1); + $form->number('sort')->min(1)->default(1); + $form->image('image') + ->move('store/'.Carbon::now()->toDateString()) + ->saveFullUrl() + ->removable(false) + ->retainable() + ->autoUpload(); + + $form->display('created_at'); + $form->display('updated_at'); + }); + } +} diff --git a/app/Endpoint/Api/Http/Controllers/StoreController.php b/app/Endpoint/Api/Http/Controllers/StoreController.php new file mode 100644 index 00000000..0745d3ae --- /dev/null +++ b/app/Endpoint/Api/Http/Controllers/StoreController.php @@ -0,0 +1,29 @@ +sort(); + if ($request->filled('title')) { + $query->where('title', 'like', '%'.$request->input('title').'%'); + } + + $list = $query->simplePaginate($request->input('per_page', 10)); + + return StoreResource::collection($list); + } + + public function show($id) + { + $info = Store::findOrFail($id); + + return StoreResource::make($info); + } +} diff --git a/app/Endpoint/Api/Http/Resources/StoreResource.php b/app/Endpoint/Api/Http/Resources/StoreResource.php new file mode 100644 index 00000000..647549a5 --- /dev/null +++ b/app/Endpoint/Api/Http/Resources/StoreResource.php @@ -0,0 +1,22 @@ + (string) $this->title, + 'image' => (string) $this->image, + ]; + } +} diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index 033862b8..3ee58b04 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -36,6 +36,8 @@ use App\Endpoint\Api\Http\Controllers\SmsCodeController; use App\Endpoint\Api\Http\Controllers\UserBankController; use App\Endpoint\Api\Http\Controllers\UserCouponController; use App\Endpoint\Api\Http\Controllers\ZoneController; +use App\Endpoint\Api\Http\Controllers\Auth\MiniprogramController; +use App\Endpoint\Api\Http\Controllers\StoreController; use Illuminate\Support\Facades\Route; Route::group([ @@ -205,4 +207,14 @@ Route::group([ Route::post('bargains/bargain/{order}', [\App\Endpoint\Api\Http\Controllers\BargainController::class, 'bargain']); Route::post('bargains/create-mall-order/{bargainOrder}', [\App\Endpoint\Api\Http\Controllers\BargainController::class, 'createMallOrderByBargainOrder']); }); + + // 微信小程序 + Route::group(['prefix' => 'wechat-mini'], function () { + Route::post('login', [MiniprogramController::class, 'login']); + Route::group(['middleware' => ['auth:api', \App\Endpoint\Api\Http\Middleware\CheckUserStatus::class]], function () { + Route::post('bind-phone', [MiniprogramController::class, 'bindPhone']); + }); + }); + + Route::apiResource('store', StoreController::class)->only(['index', 'show']); }); diff --git a/app/Models/Store.php b/app/Models/Store.php new file mode 100644 index 00000000..f81ec49c --- /dev/null +++ b/app/Models/Store.php @@ -0,0 +1,27 @@ + 1, + 'sort' => 1 + ]; + + public function scopeEffective($q) + { + return $q->where('status', 1); + } + + public function scopeSort($q) + { + return $q->orderBy('sort')->orderBy('id', 'desc'); + } +} diff --git a/database/migrations/2022_05_06_161251_create_stores_table.php b/database/migrations/2022_05_06_161251_create_stores_table.php new file mode 100644 index 00000000..57781a21 --- /dev/null +++ b/database/migrations/2022_05_06_161251_create_stores_table.php @@ -0,0 +1,35 @@ +id(); + $table->string('title')->comment('标题'); + $table->string('image')->comment('封面图'); + $table->tinyInteger('status')->default(1)->comment('状态(1: 可用, 0: 不可用)'); + $table->unsignedInteger('sort')->default(1)->comment('排序, 正序'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('stores'); + } +}