kphcdr 1 år sedan
förälder
incheckning
f0f747511e

+ 33 - 0
app/Models/Setting.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Models;
+
+use App\Base\BaseModel;
+
+/**
+ * App\Models\Setting
+ *
+ * @property int                             $id
+ * @property string                          $type
+ * @property string                          $key
+ * @property string                          $value
+ * @property \Illuminate\Support\Carbon|null $created_at
+ * @property \Illuminate\Support\Carbon|null $updated_at
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting newModelQuery()
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting newQuery()
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting query()
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting whereCreatedAt($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting whereId($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting whereKey($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting whereType($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting whereUpdatedAt($value)
+ * @method static \Illuminate\Database\Eloquent\Builder|Setting whereValue($value)
+ * @mixin \Eloquent
+ */
+class Setting extends BaseModel
+{
+    const TYPE_BANNER = 'banner';
+    const TYPE_HOT_KEYWORD = "hot_keyword";
+    protected $table = "setting";
+
+}

+ 51 - 0
app/Modules/Admin/Controllers/Admin/BannerController.php

@@ -0,0 +1,51 @@
+<?php
+
+namespace App\Modules\Admin\Controllers\Admin;
+
+use App\Base\BaseController;
+use App\Models\Setting;
+use App\Modules\Admin\Services\SettingService;
+
+class BannerController extends BaseController
+{
+    /** @var SettingService $service */
+    protected $service;
+
+    public function __construct(SettingService $authService)
+    {
+        $this->service = $authService;
+    }
+
+    public function paginate()
+    {
+        $data = $this->valid([
+            "name" => "",
+            "status" => "",
+            "page_size" => "",
+        ]);
+
+        return $this->ok($this->service->bannerPaginate($data));
+    }
+
+    public function store()
+    {
+        $params = $this->valid([
+            "id" => "",
+            "name" => "required",
+            "imageUrl" => "required|url",
+            "sort" => "required|int",
+            "interval" => "",
+        ]);
+
+        return $this->ok($this->service->store($params));
+    }
+
+    public function del()
+    {
+        $id = request()->input("id", 0);
+
+        Setting::whereType(Setting::TYPE_BANNER)->where("id", $id)->delete();
+
+        return $this->ok(true);
+    }
+}

+ 9 - 0
app/Modules/Admin/Controllers/Admin/CommonController.php

@@ -5,6 +5,8 @@ namespace App\Modules\Admin\Controllers\Admin;
 use App\Base\BaseController;
 use App\Models\Auth\AdminGroup;
 use App\Models\Auth\AdminPermission;
+use App\Models\Setting;
+use App\Modules\Admin\Services\SettingService;
 use App\Modules\Admin\Services\UserService;
 
 class CommonController extends BaseController
@@ -35,4 +37,11 @@ class CommonController extends BaseController
             }),
         ]);
     }
+
+    public function settingMap()
+    {
+        return $this->ok([
+            app(SettingService::class)->settingMap(),
+        ]);
+    }
 }

+ 59 - 0
app/Modules/Admin/Services/SettingService.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace App\Modules\Admin\Services;
+
+use App\Base\BaseService;
+use App\Models\Setting;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Arr;
+
+class SettingService extends BaseService
+{
+    public function settingMap()
+    {
+        $r = Setting::all(['type', "key", "value"])->groupBy("type");
+
+        return $r;
+    }
+
+    public function bannerPaginate($params)
+    {
+        $p = Setting::query()->where("type", Setting::TYPE_BANNER)->when($params['status'], function (Builder $query) use ($params) {
+            return $query->where("status", $params['status']);
+        })->when($params['name'], function (Builder $query) use ($params) {
+            return $query->where("key", $params['name']);
+        })->orderByDesc("id")->paginate($params['page_size']);
+
+        return [
+            "total" => $p->total(),
+            "page_total" => $p->lastPage(),
+            "list" => array_map(function (Setting $u) {
+                return array_merge([
+                    "id" => $u->id,
+                    "name" => $u->key,
+                    "created_at" => $u->created_at->format("Y-m-d H:i:s"),
+                ], json_decode($u->value, true));
+            }, $p->items()),
+        ];
+    }
+
+    public function store($params)
+    {
+        $id = $params['id'];
+        if ($id) {
+            $m = Setting::find($id);
+        } else {
+            $m = new Setting();
+        }
+        $m->type = Setting::TYPE_BANNER;
+        $m->key = Arr::get($params, "name");
+        $m->value = json_encode([
+            "sort" => $params['sort'] ?? 0,
+            "imageUrl" => $params['imageUrl'],
+            "is_use" => $params['is_use'] ?? 1,
+        ]);
+
+        $m->save();
+        return true;
+    }
+}

+ 7 - 7
app/Modules/Admin/Services/UserService.php

@@ -9,15 +9,15 @@ use Illuminate\Support\Arr;
 
 class UserService
 {
-    public function paginate($data)
+    public function paginate($params)
     {
-        $p = User::query()->with(["group", "company"])->when($data['status'], function (Builder $query) use ($data) {
-            return $query->where("status", $data['status']);
-        })->when($data['userinfo'], function (Builder $query) use ($data) {
-            return $query->where(function (Builder $query) use ($data) {
-                return $query->where("phone", $data['userinfo'])->orWhere("email", $data['userinfo'])->orWhere("id", $data['userinfo']);
+        $p = User::query()->with(["group", "company"])->when($params['status'], function (Builder $query) use ($params) {
+            return $query->where("status", $params['status']);
+        })->when($params['userinfo'], function (Builder $query) use ($params) {
+            return $query->where(function (Builder $query) use ($params) {
+                return $query->where("phone", $params['userinfo'])->orWhere("email", $params['userinfo'])->orWhere("id", $params['userinfo']);
             });
-        })->orderByDesc("id")->paginate($data['page_size']);
+        })->orderByDesc("id")->paginate($params['page_size']);
 
         return [
             "total" => $p->total(),

+ 35 - 0
database/migrations/2023_04_27_064441_create_setting_table.php

@@ -0,0 +1,35 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration {
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('setting', function (Blueprint $table) {
+            $table->id();
+            $table->string("type", 20)->default("");
+            $table->string("key")->default("");
+            $table->string("value")->default("");
+            $table->timestamps();
+
+            $table->index(["type"]);
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('setting');
+    }
+};

+ 8 - 0
database/seeders/DatabaseSeeder.php

@@ -5,9 +5,11 @@ namespace Database\Seeders;
 // use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 use App\Models\Auth\AdminGroup;
 use App\Models\Auth\AdminPermission;
+use App\Models\Setting;
 use App\Models\User\User;
 use App\Models\User\UserCompany;
 use Illuminate\Database\Seeder;
+use Illuminate\Support\Facades\DB;
 
 class DatabaseSeeder extends Seeder
 {
@@ -39,6 +41,12 @@ class DatabaseSeeder extends Seeder
             "phone" => 13012341234,
         ]);
         $this->company();
+
+        Setting::create([
+            "type" => Setting::TYPE_BANNER,
+            "key" => "banner1",
+            "value" => json_encode(["is_use" => 1, "imageUrl" => "https://fendi-liaona.oss-cn-hangzhou.aliyuncs.com/yimei/logo/20230427/0db2bfbd1d3eccd33e03894128efdab1.png", "sort" => 9]),
+        ]);
     }
 
     public function company()

+ 5 - 0
routes/api.php

@@ -13,7 +13,12 @@ Route::middleware([\App\Http\Middleware\AdminAuthMiddleware::class])->group(func
     Route::post("/admin/user/changeStatus", [\App\Modules\Admin\Controllers\Admin\UserController::class, "changeStatus"]);
     Route::post("/admin/user/saveSetting", [\App\Modules\Admin\Controllers\Admin\UserController::class, "saveSetting"]);
 
+    Route::get("/admin/banner/paginate", [\App\Modules\Admin\Controllers\Admin\BannerController::class, "paginate"]);
+    Route::post("/admin/banner/store", [\App\Modules\Admin\Controllers\Admin\BannerController::class, "store"]);
+    Route::post("/admin/banner/del", [\App\Modules\Admin\Controllers\Admin\BannerController::class, "del"]);
+
     Route::get("/admin/common/groupMap", [\App\Modules\Admin\Controllers\Admin\CommonController::class, "groupMap"]);
     Route::get("/admin/common/permissionMap", [\App\Modules\Admin\Controllers\Admin\CommonController::class, "permissionMap"]);
+    Route::get("/admin/common/settingMap", [\App\Modules\Admin\Controllers\Admin\CommonController::class, "settingMap"]);
 
 });