kphcdr 1 year ago
parent
commit
c4af73e3c6

+ 8 - 0
app/Base/BaseController.php

@@ -7,6 +7,14 @@ use Illuminate\Support\Arr;
 
 class BaseController extends Controller
 {
+    /**
+     * 不支持多维结构
+     *
+     * @param array $rules
+     * @param array $messages
+     * @param array $customAttributes
+     * @return array
+     */
     public function valid(array $rules, array $messages = [], array $customAttributes = []): array
     {
         $data = [];

+ 6 - 1
app/Models/Setting.php

@@ -10,7 +10,7 @@ use App\Base\BaseModel;
  * @property int                             $id
  * @property string                          $type
  * @property string                          $key
- * @property string                          $value
+ * @property array                           $value
  * @property \Illuminate\Support\Carbon|null $created_at
  * @property \Illuminate\Support\Carbon|null $updated_at
  * @method static \Illuminate\Database\Eloquent\Builder|Setting newModelQuery()
@@ -27,7 +27,12 @@ use App\Base\BaseModel;
 class Setting extends BaseModel
 {
     const TYPE_BANNER = 'banner';
+    const TYPE_CUSTOM = 'custom';
     const TYPE_HOT_KEYWORD = "hot_keyword";
     protected $table = "setting";
 
+    protected $casts = [
+        "value" => "array",
+    ];
+
 }

+ 2 - 2
app/Modules/Admin/Controllers/Admin/BannerController.php

@@ -54,14 +54,14 @@ class BannerController extends BaseController
     {
         $id = request()->input("id", 0);
         $m = Setting::whereType(Setting::TYPE_BANNER)->where("id", $id)->firstOrFail();
-        $value = json_decode($m->value, true);
+        $value = $m->value ?? [];
 
         $isUse = 1;
         if (Arr::get($value, "is_use")) {
             $isUse = 0;
         }
         $value['is_use'] = $isUse;
-        $m->value = json_encode($value);
+        $m->value = $value;
         $m->save();
         return $this->ok(true);
     }

+ 11 - 3
app/Modules/Admin/Controllers/Admin/CommonController.php

@@ -5,9 +5,7 @@ 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
 {
@@ -40,8 +38,18 @@ class CommonController extends BaseController
 
     public function settingMap()
     {
-        return $this->ok([
+        return $this->ok(
             app(SettingService::class)->settingMap(),
+        );
+    }
+
+    public function settingSave()
+    {
+        $data = request()->validate([
+            "hot_keywords.id" => "required",
+            "hot_keywords.values" => "array",
         ]);
+
+        return $this->ok(app(SettingService::class)->settingSave($data));
     }
 }

+ 18 - 4
app/Modules/Admin/Services/SettingService.php

@@ -11,7 +11,7 @@ class SettingService extends BaseService
 {
     public function settingMap()
     {
-        $r = Setting::all(['type', "key", "value"])->groupBy("type");
+        $r = Setting::all(['id', 'type', "key", "value"])->groupBy("type");
 
         return $r;
     }
@@ -32,7 +32,7 @@ class SettingService extends BaseService
                     "id" => $u->id,
                     "name" => $u->key,
                     "created_at" => $u->created_at->format("Y-m-d H:i:s"),
-                ], json_decode($u->value, true));
+                ], $u->value ?? []);
             }, $p->items()),
         ];
     }
@@ -47,13 +47,27 @@ class SettingService extends BaseService
         }
         $m->type = Setting::TYPE_BANNER;
         $m->key = Arr::get($params, "name");
-        $m->value = json_encode([
+        $m->value = [
             "sort" => $params['sort'] ?? 0,
             "imageUrl" => $params['imageUrl'],
             "is_use" => $params['is_use'] ?? 1,
-        ]);
+        ];
 
         $m->save();
         return true;
     }
+
+    public function settingSave($data)
+    {
+        //{"hot_keywords":{"id":2,"values":["文本1","文本2","test","test2"]}}
+        foreach ($data as $k => $v) {
+            $id = Arr::get($v, "id");
+            if ($id) {
+                $setting = Setting::find($id);
+                $setting->value = Arr::get($v, "values");
+                $setting->save();
+            }
+        }
+        return true;
+    }
 }

+ 6 - 1
database/seeders/DatabaseSeeder.php

@@ -45,7 +45,12 @@ class DatabaseSeeder extends Seeder
         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]),
+            "value" => ["is_use" => 1, "imageUrl" => "https://fendi-liaona.oss-cn-hangzhou.aliyuncs.com/yimei/logo/20230427/0db2bfbd1d3eccd33e03894128efdab1.png", "sort" => 9],
+        ]);
+        Setting::create([
+            "type" => Setting::TYPE_HOT_KEYWORD,
+            "key" => "hot_keyword",
+            "value" => ["热搜词1", "热搜词2"],
         ]);
     }
 

+ 1 - 0
routes/api.php

@@ -21,5 +21,6 @@ Route::middleware([\App\Http\Middleware\AdminAuthMiddleware::class])->group(func
     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"]);
+    Route::post("/admin/common/settingSave", [\App\Modules\Admin\Controllers\Admin\CommonController::class, "settingSave"]);
 
 });