Kaynağa Gözat

完善功能

gorden 9 ay önce
ebeveyn
işleme
262700a9b4

+ 93 - 9
app/admin/controller/sys_manage/AdvController.php

@@ -37,6 +37,48 @@ class AdvController extends Curd
         return $this->doFormat($query, $format, $limit);
     }
 
+    protected function doSelect(array $where, string $field = null, string $order = 'desc')
+    {
+        $model = $this->model->with([
+            'category' => function ($query) {
+                $query->select('category_id', 'category_name');
+            }
+        ]);
+        foreach ($where as $column => $value) {
+            if (is_array($value)) {
+                if ($value[0] === 'like' || $value[0] === 'not like') {
+                    $model = $model->where($column, $value[0], "%$value[1]%");
+                } elseif (in_array($value[0], ['>', '=', '<', '<>'])) {
+                    $model = $model->where($column, $value[0], $value[1]);
+                } elseif ($value[0] == 'in' && !empty($value[1])) {
+                    $valArr = $value[1];
+                    if (is_string($value[1])) {
+                        $valArr = explode(",", trim($value[1]));
+                    }
+                    $model = $model->whereIn($column, $valArr);
+                } elseif ($value[0] == 'not in' && !empty($value[1])) {
+                    $valArr = $value[1];
+                    if (is_string($value[1])) {
+                        $valArr = explode(",", trim($value[1]));
+                    }
+                    $model = $model->whereNotIn($column, $valArr);
+                } elseif ($value[0] == 'null') {
+                    $model = $model->whereNull($column);
+                } elseif ($value[0] == 'not null') {
+                    $model = $model->whereNotNull($column);
+                } elseif ($value[0] !== '' || $value[1] !== '') {
+                    $model = $model->whereBetween($column, $value);
+                }
+            } else {
+                $model = $model->where($column, $value);
+            }
+        }
+        if ($field) {
+            $model = $model->orderBy($field, $order);
+        }
+        return $model;
+    }
+
     public function afterQuery($items)
     {
         foreach ($items as &$item) {
@@ -45,7 +87,16 @@ class AdvController extends Curd
                 if (isset($mediaJson['type'])) {
                     $item->adv_media_json = $mediaJson['type'];
                 }
-                if (empty($mediaJson)){
+                if (isset($mediaJson['advType'])) {
+                    $item->adv_type = $mediaJson['advType'];
+                }
+                if (isset($mediaJson['advMain'])) {
+                    $item->adv_main = $mediaJson['advMain'];
+                }
+                if (isset($mediaJson['cover'])) {
+                    $item->cover = getenv("STORAGE_DOMAIN") . $mediaJson['cover'];
+                }
+                if (empty($mediaJson)) {
                     $item->adv_media_json = "";
                 }
             }
@@ -65,29 +116,62 @@ class AdvController extends Curd
      */
     protected function insertInput(Request $request): array
     {
+        $type = $request->post('adv_type', 0);
+        $advMain = $request->post('adv_main', '');
+        $cover = $request->post('cover', '');
+
         $data = $this->inputFilter($request->post());
+        $mediaJson = [];
         if (!empty($data['adv_media'])) {
-            $data['adv_media_json'] = json_encode(['type' => $data['adv_media_json']]);
-        } else {
-            $data['adv_media_json'] = '[]';
+            $mediaJson = ['type' => $data['adv_media_json']];
+        }
+        if ($type != 0) {
+            $mediaJson['advType'] = $type;
+        }
+        if ($type == 3) {
+            $mediaJson['advMain'] = $advMain;
+        }
+        if (!empty($cover)) {
+            $mediaJson['cover'] = str_replace(getenv("STORAGE_DOMAIN"), '', $cover);
         }
-        
+
+        $data['adv_media_json'] = json_encode($mediaJson);
 
         return $data;
     }
 
     protected function updateInput(Request $request): array
     {
+        $type = $request->post('adv_type', 0);
+        $advMain = $request->post('adv_main', '');
+        $cover = $request->post('cover', '');
+
         $primary_key = $this->model->getKeyName();
         $id = $request->post($primary_key);
         $data = $this->inputFilter($request->post());
 
+        $model = $this->model->find($id);
+
+        $mediaJson = [];
+        if (!empty($model->adv_media_json)) {
+            $mediaJson = json_decode($model->adv_media_json, true);
+            $mediaJson['type'] = $data['adv_media_json'];
+        }
         if (!empty($data['adv_media_json'])) {
-            $data['adv_media_json'] = json_encode(['type' => $data['adv_media_json']]);
-        } else {
-            $data['adv_media_json'] = '[]';
+            $mediaJson['type'] = $data['adv_media_json'];
         }
-        $model = $this->model->find($id);
+        if ($type != 0) {
+            $mediaJson['advType'] = $type;
+        }
+        if ($type == 3) {
+            $mediaJson['advMain'] = $advMain;
+        }
+        if (!empty($cover)) {
+            $mediaJson['cover'] = str_replace(getenv("STORAGE_DOMAIN"), '', $cover);
+        }
+
+        $data['adv_media_json'] = json_encode($mediaJson);
+
         if (!$model) {
             throw new BusinessException('记录不存在', 2);
         }

+ 6 - 0
app/model/Adv.php

@@ -21,4 +21,10 @@ class Adv extends Model
     {
         return $date->format('Y-m-d H:i:s');
     }
+
+    public function category()
+    {
+        return $this->hasOne(SysCategory::class,'category_id','join_adv_category_id')
+            ->select('category_id','category_name');
+    }
 }