diff --git a/app/Admin/Controllers/v3/GoodsActivityController.php b/app/Admin/Controllers/v3/GoodsActivityController.php index 8dd9914..2947553 100644 --- a/app/Admin/Controllers/v3/GoodsActivityController.php +++ b/app/Admin/Controllers/v3/GoodsActivityController.php @@ -17,6 +17,7 @@ use Dcat\Admin\Form\NestedForm; use App\Models\v3\GoodsCategory as GoodsCategoryModel; use App\Admin\Common\Auth; use App\Admin\Extensions\Tools\GoodsActivityOnSale; +use App\Admin\Forms\v3\GoodsActivityLimitForm; use App\Admin\Forms\v3\GoodsActivitySettingForm; use Dcat\Admin\Admin; use Dcat\Admin\Layout\Content; @@ -322,6 +323,13 @@ class GoodsActivityController extends AdminController { return $content ->title('活动设置') + ->body(new Card(new GoodsActivityLimitForm())); + } + + public function ActivitySettingForm(Content $content) + { + return $content + ->title('商品活动设置') ->body(new Card(new GoodsActivitySettingForm())); } } diff --git a/app/Admin/Forms/v3/GoodsActivityLimitForm.php b/app/Admin/Forms/v3/GoodsActivityLimitForm.php new file mode 100644 index 0000000..034ff35 --- /dev/null +++ b/app/Admin/Forms/v3/GoodsActivityLimitForm.php @@ -0,0 +1,89 @@ + $input['flash_sale'] ?? 0, + 'group_buy' => $input['group_buy'] ?? 0, + 'new_product' => $input['new_product'] ?? 0, + ]; + $setData = [ + 'buy_num_limit' => 0, + 'banner' => '', + 'show_type' => 'list', + 'index_num_limit' => 6, + 'index_image' => '', + 'index_url' => '', + ]; + $setting = Redis::hgetall(RedisKey::ACTIVITY_TYPE_SETTING); + $settingData = [ + 'flash_sale' => isset($setting['flash_sale']) ? json_decode($setting['flash_sale'],true) : $setData, + 'group_buy' => isset($setting['group_buy']) ? json_decode($setting['group_buy'],true) : $setData, + 'new_product' => isset($setting['new_product']) ? json_decode($setting['new_product'],true) : $setData, + ]; + + $settingData['flash_sale']['buy_num_limit'] = $data['flash_sale']; + $settingData['group_buy']['buy_num_limit'] = $data['group_buy']; + $settingData['new_product']['buy_num_limit'] = $data['new_product']; + + $activitySetting = [ + 'flash_sale' => json_encode($settingData['flash_sale']), + 'group_buy' => json_encode($settingData['group_buy']), + 'new_product' => json_encode($settingData['new_product']), + ]; + $res2 = Redis::hmset(RedisKey::ACTIVITY_TYPE_SETTING , $activitySetting); + + $res = Redis::hmset(RedisKey::ACTIVITY_TYPE_LIMIT_NUMS , $data); + if($res){ + return $this->success('修改成功','/goods_activity'); + }else{ + return $this->error('修改失败'); + } + } + + /** + * Build a form here. + */ + public function form() + { + $data = Redis::hgetall(RedisKey::ACTIVITY_TYPE_LIMIT_NUMS); + + $flashSale = isset($data['flash_sale'])?$data['flash_sale']:0; + $groupBuy= isset($data['group_buy'])?$data['group_buy']:0; + $newProduct= isset($data['new_product'])?$data['new_product']:0; + + $this->display(RedisKey::ACTIVITY_TYPE_LIMIT_NUMS , '设置')->value('同一活动类型的商品,单笔订单可购买商品种数'); + $this->number('flash_sale','秒杀')->attribute('min', 0)->default(1)->value($flashSale); + $this->number('group_buy','团购')->attribute('min', 0)->default(1)->value($groupBuy); + $this->number('new_product','新品')->attribute('min', 0)->default(1)->value($newProduct); + } + + /** + * The data of the form. + * + * @return array + */ + public function default() + { + return []; + } + +} diff --git a/app/Admin/Forms/v3/GoodsActivitySettingForm.php b/app/Admin/Forms/v3/GoodsActivitySettingForm.php index d032dd3..1653f3b 100644 --- a/app/Admin/Forms/v3/GoodsActivitySettingForm.php +++ b/app/Admin/Forms/v3/GoodsActivitySettingForm.php @@ -10,6 +10,25 @@ use App\Libs\Redis\RedisKey; class GoodsActivitySettingForm extends Form { + protected $typeOptions = [ + 1 => '列表轮播', + 2 => '大图片', + ]; + protected $typeOptionsValue = [ + 1 => 'list', + 2 => 'image', + ]; + protected $indexOptions = [ + 1 => '秒杀', + 2 => '团购', + 3 => '新品' + ]; + protected $indexOptionsValue = [ + 0 => 'default', + 1 => 'flash_sale', + 2 => 'group_buy', + 3 => 'new_product' + ]; /** * Handle the form request. * @@ -19,20 +38,91 @@ class GoodsActivitySettingForm extends Form */ public function handle(array $input) { - // 获取外部传递参数 - $flashSale = $input['flash_sale']; - $groupBuy= $input['group_buy']; - $newProduct= $input['new_product']; - - $data = [ - 'flash_sale' => $flashSale, - 'group_buy' => $groupBuy, - 'new_product' => $newProduct, + $activitySetting = [ + 'index_activity_type' => $this->indexOptionsValue[$input['index_activity_type']] ?? $this->indexOptionsValue[0] ]; + $imageUrl = config('filesystems.disks.oss.img_host'); + switch($activitySetting['index_activity_type']){ + case 'flash_sale': + $banner1 = $input['banner_1']; + $bLen = empty($banner1) ? 1 : strrpos($banner1,'http'); + $banner = $bLen !== false ? $banner1 : $imageUrl.'/'.$banner1 ; + + $image1 = $input['index_image_1']; + $iLen = empty($image1) ? 1 : strrpos($image1,'http'); + $image = $iLen !== false ? $image1 : $imageUrl.'/'.$image1 ; + + $setting = [ + 'buy_num_limit' => $input['buy_num_limit_1'] ?? 0, + 'banner' => $banner, + 'show_type' => $this->typeOptionsValue[$input['show_type_1']] ?? $this->typeOptionsValue[1], + 'index_num_limit' => $input['index_num_1'] ?? 6, + 'index_image' => $image, + 'index_url' => $input['index_url_1'] ?? '', + ]; + $data = [ + 'flash_sale' => $setting['buy_num_limit'], + ]; + break; + case 'group_buy': + $banner2 = $input['banner_2']; + $bLen = empty($banner2) ? 2 : strrpos($banner2,'http'); + $banner = $bLen !== false ? $banner2 : $imageUrl.'/'.$banner2 ; + + $image2 = $input['index_image_2']; + $iLen = empty($image2) ? 2 : strrpos($image2,'http'); + $image = $iLen !== false ? $image2 : $imageUrl.'/'.$image2 ; + + $setting = [ + 'buy_num_limit' => $input['buy_num_limit_2'] ?? 0, + 'banner' => $banner, + 'show_type' => $this->typeOptionsValue[$input['show_type_2']] ?? $this->typeOptionsValue[1], + 'index_num_limit' => $input['index_num_2'] ?? 6, + 'index_image' => $image, + 'index_url' => $input['index_url_2'] ?? '', + ]; + $data = [ + 'group_buy' => $setting['buy_num_limit'], + ]; + break; + case 'new_product': + $banner3 = $input['banner_3']; + $bLen = empty($banner3) ? 3 : strrpos($banner3,'http'); + $banner = $bLen !== false ? $banner3 : $imageUrl.'/'.$banner3 ; + + $image3 = $input['index_image_3']; + $iLen = empty($image3) ? 3 : strrpos($image3,'http'); + $image = $iLen !== false ? $image3 : $imageUrl.'/'.$image3 ; + + $setting = [ + 'buy_num_limit' => $input['buy_num_limit_3'] ?? 0, + 'banner' => $banner, + 'show_type' => $this->typeOptionsValue[$input['show_type_3']] ?? $this->typeOptionsValue[1], + 'index_num_limit' => $input['index_num_3'] ?? 6, + 'index_image' => $image, + 'index_url' => $input['index_url_3'] ?? '', + ]; + $data = [ + 'new_product' => $setting['buy_num_limit'], + ]; + break; + default: + return $this->error('请选择正确的首页展示的活动类型!'); + break; + } + if($setting['show_type'] == 'image' && empty($setting['index_image'])){ + return $this->error('请上传首页大图!'); + }else if($setting['show_type'] == 'image' && empty($setting['index_url'])){ + return $this->error('请填写跳转链接'); + } + $activitySetting[$activitySetting['index_activity_type']] = json_encode($setting); - $res = Redis::hmset(RedisKey::ACTIVITY_TYPE_LIMIT_NUMS , $data); - if($res){ - return $this->success('修改成功','/goods_activity'); + $res1 = Redis::hmset(RedisKey::ACTIVITY_TYPE_LIMIT_NUMS , $data); + + $res2 = Redis::hmset(RedisKey::ACTIVITY_TYPE_SETTING , $activitySetting); + + if($res1 && $res2){ + return $this->success('修改成功','/goods_activity_setting'); }else{ return $this->error('修改失败'); } @@ -44,15 +134,101 @@ class GoodsActivitySettingForm extends Form public function form() { $data = Redis::hgetall(RedisKey::ACTIVITY_TYPE_LIMIT_NUMS); + $setting = Redis::hgetall(RedisKey::ACTIVITY_TYPE_SETTING); + + $indexOptionsKey = array_flip($this->indexOptionsValue); + $typeOptionsKey = array_flip($this->typeOptionsValue); + + $limitData = [ + 1 => isset($data['flash_sale']) ? $data['flash_sale']:0, + 2 => isset($data['group_buy']) ? $data['group_buy']:0, + 3 => isset($data['new_product']) ? $data['new_product']:0, + ]; + + $settingData = [ + 'index_activity_type' => $indexOptionsKey[$setting['index_activity_type']] ?? 1, + 1 => isset($setting['flash_sale']) ? json_decode($setting['flash_sale'],true) : [], + 2 => isset($setting['group_buy']) ? json_decode($setting['group_buy'],true) : [], + 3 => isset($setting['new_product']) ? json_decode($setting['new_product'],true) : [], + ]; + + $this->select('index_activity_type','首页展示的活动类型') + ->when([1],function(Form $form) use($limitData,$settingData,$typeOptionsKey){ + $buyNumLimit = $limitData[1] ?? 0; + $sData = $settingData[1] ?? []; + $showType = $sData['show_type'] ?? 'list'; + $form->number('buy_num_limit_1','购买数量限制')->attribute('min', 0)->default(1)->value($buyNumLimit)->width(6)->help('同一活动类型的商品,单笔订单可购买商品个数'); + $form->image('banner_1','banner')->required()->autoUpload() + ->customFormat(function() use($sData){ + return [$sData['banner'] ?? '']; + })->width(3); - $flashSale = isset($data['flash_sale'])?$data['flash_sale']:0; - $groupBuy= isset($data['group_buy'])?$data['group_buy']:0; - $newProduct= isset($data['new_product'])?$data['new_product']:0; + $form->radio('show_type_1','展示形式') + ->when([1],function(Form $form) use($sData){ + $form->number('index_num_1','首页显示数量')->value($sData['index_num'] ?? 6)->min(1)->default(6)->width(6); + }) + ->when([2],function(Form $form) use($sData){ + $form->image('index_image_1','首页大图')->autoUpload() + ->customFormat(function() use($sData){ + return [$sData['index_image'] ?? '']; + })->width(3); + $form->text('index_url_1','跳转链接')->value($sData['index_url'] ?? '')->width(4); + }) + ->options($form->typeOptions) + ->value($typeOptionsKey[$showType] ?? 1) + ->default(1); + + }) + ->when([2],function(Form $form) use($limitData,$settingData,$typeOptionsKey){ + $buyNumLimit = $limitData[2] ?? 0; + $sData = $settingData[2] ?? []; + $showType = $sData['show_type'] ?? 'list'; + $form->number('buy_num_limit_2','购买数量限制')->attribute('min', 0)->default(1)->value($buyNumLimit)->width(6)->help('同一活动类型的商品,单笔订单可购买商品个数'); + $form->image('banner_2','banner')->required()->autoUpload() + ->customFormat(function() use($sData){ + return [$sData['banner'] ?? '']; + })->width(3); + $form->radio('show_type_2','展示形式') + ->when([1],function(Form $form) use($sData){ + $form->number('index_num_2','首页显示数量')->value($sData['index_num'] ?? 6)->min(1)->default(6)->width(6); + }) + ->when([2],function(Form $form) use($sData){ + $form->image('index_image_2','首页大图')->autoUpload() + ->customFormat(function() use($sData){ + return [$sData['index_image'] ?? '']; + })->width(3); + $form->text('index_url_2','跳转链接')->value($sData['index_url'] ?? '')->width(4); + }) + ->options($form->typeOptions) + ->value($typeOptionsKey[$showType] ?? 1) + ->default(1); + }) + ->when([3],function(Form $form) use($limitData,$settingData,$typeOptionsKey){ + $buyNumLimit = $limitData[3] ?? 0; + $sData = $settingData[3] ?? []; + $showType = $sData['show_type'] ?? 'list'; + $form->number('buy_num_limit_3','购买数量限制')->attribute('min', 0)->default(1)->value($buyNumLimit)->width(6)->help('同一活动类型的商品,单笔订单可购买商品个数'); + $form->image('banner_3','banner')->required()->autoUpload() + ->customFormat(function() use($sData){ + return [$sData['banner'] ?? '']; + })->width(3); - $this->display(RedisKey::ACTIVITY_TYPE_LIMIT_NUMS , '设置')->value('同一活动类型的商品,单笔订单可购买商品种数'); - $this->number('flash_sale','秒杀')->attribute('min', 0)->default(1)->value($flashSale); - $this->number('group_buy','团购')->attribute('min', 0)->default(1)->value($groupBuy); - $this->number('new_product','新品')->attribute('min', 0)->default(1)->value($newProduct); + $form->radio('show_type_3','展示形式') + ->when([1],function(Form $form) use($sData){ + $form->number('index_num_3','首页显示数量')->value($sData['index_num'] ?? 6)->min(1)->default(6)->width(6); + }) + ->when([2],function(Form $form) use($sData){ + $form->image('index_image_3','首页大图')->autoUpload() + ->customFormat(function() use($sData){ + return [$sData['index_image'] ?? '']; + })->width(3); + $form->text('index_url_3','跳转链接')->value($sData['index_url'] ?? '')->width(4); + }) + ->options($form->typeOptions) + ->value($typeOptionsKey[$showType] ?? 1) + ->default(1); + }) + ->options($this->indexOptions)->value($settingData['index_activity_type'] ?? 1)->default(1)->width(4); } /** diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 81605a6..f6d27c8 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -97,5 +97,7 @@ Route::group([ $router->resource('/goods_report', 'v3\GoodsReportController'); $router->any('/goods_report_export', 'v3\GoodsReportController@export'); + // 活动商品设置 + $router->get('/goods_activity_setting', 'v3\GoodsActivityController@ActivitySettingForm'); }); diff --git a/app/Libs/Redis/RedisKey.php b/app/Libs/Redis/RedisKey.php index 1ce5a70..19e221e 100644 --- a/app/Libs/Redis/RedisKey.php +++ b/app/Libs/Redis/RedisKey.php @@ -8,5 +8,5 @@ class RedisKey { const ACTIVITY_TYPE_LIMIT_NUMS = 'activity_type_limit_nums'; - + const ACTIVITY_TYPE_SETTING = 'activity_type_setting'; }