Procházet zdrojové kódy

双十一产品关联

gorden před 5 měsíci
rodič
revize
a9001acdef

+ 128 - 0
app/admin/controller/content/SubjectController.php

@@ -4,8 +4,11 @@ namespace app\admin\controller\content;
 
 use app\controller\Curd;
 use app\model\Content;
+use app\model\Goods;
+use support\exception\BusinessException;
 use support\Request;
 use support\Response;
+use Tinywan\Jwt\JwtToken;
 
 class SubjectController extends Curd
 {
@@ -18,8 +21,133 @@ class SubjectController extends Curd
     {
         [$where, $format, $limit, $field, $order] = $this->selectInput($request);
         $where['content_category'] = 'SUBJECT';
+        $field = 'content_addtimes';
+        $order = 'DESC';
         $this->model = $this->model->with('user');
         $query = $this->doSelect($where, $field, $order);
         return $this->doFormat($query, $format, $limit);
     }
+
+    /**
+     * @Desc 详情
+     * @Author Gorden
+     * @Date 2024/11/8 13:24
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function info(Request $request): Response
+    {
+        $primaryKey = $this->model->getKeyName();
+
+        $data = $this->model->with('user')->where($primaryKey, $request->get('id'))->first();
+
+        if (method_exists($this, "afterInfoQuery")) {
+            $data = call_user_func([$this, "afterInfoQuery"], $data);
+        }
+
+        return json_success('', $data);
+    }
+
+    public function afterInfoQuery($item)
+    {
+        if (!empty($item->content_config_json)) {
+            $contentConfigJson = json_decode($item->content_config_json, true);
+            if (!empty($contentConfigJson['cate'])) {
+                $item->cate = $contentConfigJson['cate'];
+            }
+            if (!empty($contentConfigJson['goods'])) {
+                $goodsIds = array_column($contentConfigJson['goods'], 'goods_id');
+                $goodsList = Goods::whereIn('goods_id', $goodsIds)
+                    ->select('goods_cover', 'goods_id', 'goods_name', 'goods_market_price', 'goods_sales_price')
+                    ->get()
+                    ->toArray();
+                $formGoods = [];
+                foreach ($goodsList as $key => $goods){
+                    foreach ($contentConfigJson['goods'] as $cateGoods){
+                        if($cateGoods['goods_id'] == $goods['goods_id']){
+                            $goodsList[$key]['cate'] = $cateGoods['cate'];
+                            $formGoods[] = [
+                                'cate' => $cateGoods['cate'],
+                                'goods_id' => $cateGoods['goods_id'],
+                            ];
+                        }
+                    }
+                    $goodsList[$key]['goods_cover'] = getenv('STORAGE_DOMAIN').$goods['goods_cover'];
+                }
+                $item->goods = $formGoods;
+                $item->goodsList = $goodsList;
+            }
+            if (!empty($contentConfigJson['slider'])) {
+                $sliders = [];
+                $originSliders = [];
+                foreach ($contentConfigJson['slider'] as $slider) {
+                    $sliders[] = getenv('STORAGE_DOMAIN') . $slider['url'];
+                    $originSliders[] = getenv('STORAGE_DOMAIN').str_replace('/thumb','',$slider['url']);
+                }
+                $item->sliders = $sliders;
+                $item->originSliders = $originSliders;
+            }
+        }
+
+        return $item;
+    }
+
+    public function insertInput(Request $request): array
+    {
+        $params = $request->post();
+        $data = $this->inputFilter($request->post());
+        $contentConfigJson = [];
+        if (!empty($params['sliders'])) {
+            $sliders = explode(',', $params['sliders']);
+            foreach ($sliders as $slider) {
+                $contentConfigJson['slider'][] = ['url' => str_replace(getenv('STORAGE_DOMAIN'), '', $slider)];
+            }
+        }
+        if (!empty($params['cate'])) {
+            $contentConfigJson['cate'] = $params['cate'];
+        }
+        if (!empty($params['goods'])) {
+            $contentConfigJson['goods'] = $params['goods'];
+        }
+        $data['content_config_json'] = json_encode($contentConfigJson);
+        $data['creator_user_id'] = JwtToken::getCurrentId();
+        $data['join_content_category_id'] = 207;
+
+        return $data;
+    }
+
+    protected function updateInput(Request $request): array
+    {
+        $params = $request->post();
+        $primary_key = $this->model->getKeyName();
+        $id = $request->post($primary_key);
+        $data = $this->inputFilter($request->post());
+        $model = $this->model->find($id);
+        if (!$model) {
+            throw new BusinessException('记录不存在', 2);
+        }
+        $contentConfigJson = [];
+        if (!empty($model->content_config_json)){
+            $contentConfigJson = json_decode($model->content_config_json,true);
+        }
+        if (!empty($params['sliders'])) {
+            $contentConfigJson['slider'] = [];
+            $sliders = explode(',', $params['sliders']);
+            foreach ($sliders as $slider) {
+                $contentConfigJson['slider'][] = ['url' => str_replace(getenv('STORAGE_DOMAIN'), '', $slider)];
+            }
+        }
+        if (!empty($params['cate'])) {
+            $contentConfigJson['cate'] = $params['cate'];
+        }
+        if (!empty($params['goods'])) {
+            $contentConfigJson['goods'] = $params['goods'];
+        }
+        $data['content_config_json'] = json_encode($contentConfigJson);
+        $data['content_updatetimes'] = time();
+
+        unset($data[$primary_key]);
+        return [$id, $data];
+    }
 }

+ 13 - 0
app/admin/controller/goods/EntityGoodsController.php

@@ -24,6 +24,19 @@ class EntityGoodsController
         return GoodsService::select($request, 'GOODS');
     }
 
+    /**
+     * @Desc 搜索产品
+     * @Author Gorden
+     * @Date 2024/11/8 10:12
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public function selectIdNameList(Request $request)
+    {
+        return GoodsService::selectIdNameList($request);
+    }
+
     public function selectAll(Request $request)
     {
         $goodsIds = $request->get('goods_id', '');

+ 7 - 4
app/admin/controller/sys_manage/LogsController.php

@@ -32,14 +32,17 @@ class LogsController extends Curd
         $order = $request->get('order', 'desc');
         $field = $field ?? 'log_create_time';
 
-        if(!empty($where['log_admin_id'])){
-            $userIds = SysUser::where('user_name','like','%'.$where['log_admin_id'].'%')->pluck('user_id')->toArray();
-            $where['log_admin_id'] = ['in',$userIds];
+        if (!empty($where['log_admin_id'])) {
+            $userIds = SysUser::where('user_name', 'like', '%' . $where['log_admin_id'] . '%')->pluck('user_id')->toArray();
+            $where['log_admin_id'] = ['in', $userIds];
         }
-        if(!empty($where['log_create_time'])){
+        if (!empty($where['log_create_time'])) {
             $where['log_create_time'][0] = strtotime($where['log_create_time'][0]);
             $where['log_create_time'][1] = strtotime($where['log_create_time'][1]);
         }
+        if (!empty($where['log_operation'])) {
+            $where['log_operation'] = ['like', $where['log_operation']];
+        }
 
         $query = $this->doSelect($where, $field, $order);
         return $this->doFormat($query, $format, $limit);

+ 27 - 4
app/admin/service/goods/GoodsService.php

@@ -38,6 +38,29 @@ class GoodsService
         return json_success('', $goods);
     }
 
+    /**
+     * @Desc 产品搜索
+     * @Author Gorden
+     * @Date 2024/11/8 10:10
+     *
+     * @param Request $request
+     * @return Response
+     */
+    public static function selectIdNameList(Request $request)
+    {
+        $keywords = $request->get('keywords');
+        if (!$keywords) {
+            return json_fail('参数异常');
+        }
+
+        $goods = Goods::where('goods_name', 'like', '%' . $keywords . '%')
+            ->select('goods_id', 'goods_name')
+            ->get()
+            ->toArray();
+
+        return json_success('success', $goods);
+    }
+
     public static function selectAllByGoodsName($goodsName)
     {
         $goods = Goods::with('sku')
@@ -1924,13 +1947,13 @@ class GoodsService
                 $attributeJson['min-count'] = $params['min_count'];
                 $model->goods_attribute_json = json_encode($attributeJson);
             }
-            if (isset($params['max_limit'])){
+            if (isset($params['max_limit'])) {
                 $attributeJson = [];
                 if (!empty($model->goods_attribute_json) && !is_array($model->goods_attribute_json)) {
                     $attributeJson = json_decode($model->goods_attribute_json, true);
                 }
                 $attributeJson['max-limit'] = $params['max_limit'];
-                if ($attributeJson['max-limit'] == 0 || $attributeJson['max-limit'] == ''){
+                if ($attributeJson['max-limit'] == 0 || $attributeJson['max-limit'] == '') {
                     unset($attributeJson['max-limit']);
                 }
             }
@@ -2515,11 +2538,11 @@ class GoodsService
             if (isset($params['max_limit'])) {
                 if (!empty($data['goods_attribute_json']) && !is_array($data['goods_attribute_json'])) {
                     $data['goods_attribute_json'] = json_decode($data['goods_attribute_json'], true);
-                }elseif (empty($data['goods_attribute_json'])) {
+                } elseif (empty($data['goods_attribute_json'])) {
                     $data['goods_attribute_json'] = [];
                 }
                 $data['goods_attribute_json']['max-limit'] = $params['max_limit'];
-                if ($data['goods_attribute_json']['max-limit'] == 0 || $data['goods_attribute_json']['max-limit'] == ''){
+                if ($data['goods_attribute_json']['max-limit'] == 0 || $data['goods_attribute_json']['max-limit'] == '') {
                     unset($data['goods_attribute_json']['max-limit']);
                 }
                 $data['goods_attribute_json'] = json_encode($data['goods_attribute_json']);

+ 2 - 0
route/admin.php

@@ -42,6 +42,7 @@ Route::group('/admin', function () {
         ]);
         Route::group('/subject', function () {
             Route::get('/list', [\app\admin\controller\content\SubjectController::class, 'select']);
+            Route::get('/info', [\app\admin\controller\content\SubjectController::class, 'info']);
             Route::post('/add', [\app\admin\controller\content\SubjectController::class, 'insert']);
             Route::post('/update', [\app\admin\controller\content\SubjectController::class, 'update']);
             Route::delete('/delete', [\app\admin\controller\content\SubjectController::class, 'delete']);
@@ -61,6 +62,7 @@ Route::group('/admin', function () {
         /* 实物商品管理 */
         Route::group('/entity', function () {
             Route::get('/selectAll', [\app\admin\controller\goods\EntityGoodsController::class, 'selectAll']);
+            Route::get('/selectIdNameList', [\app\admin\controller\goods\EntityGoodsController::class, 'selectIdNameList']);
             Route::get('/selectAllByGoodsName', [\app\admin\controller\goods\EntityGoodsController::class, 'selectAllByGoodsName']);
             Route::get('/selectAllByCategoryForRuleAddComponent', [\app\admin\controller\goods\EntityGoodsController::class, 'selectAllByCategoryForRuleAddComponent']);
             Route::get('/getPremises', [\app\admin\controller\goods\EntityGoodsController::class, 'selectPremisesByGoodsId']);