Browse Source

Merge branch 'goods_setting_1103'

# Conflicts:
#	app/Admin/routes.php
master
liangyuyan 5 years ago
parent
commit
fb079797e4
  1. 8
      app/Admin/Controllers/v3/GoodsActivityController.php
  2. 89
      app/Admin/Forms/v3/GoodsActivityLimitForm.php
  3. 214
      app/Admin/Forms/v3/GoodsActivitySettingForm.php
  4. 2
      app/Admin/routes.php
  5. 2
      app/Libs/Redis/RedisKey.php

8
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()));
}
}

89
app/Admin/Forms/v3/GoodsActivityLimitForm.php

@ -0,0 +1,89 @@
<?php
namespace App\Admin\Forms\v3;
use Dcat\Admin\Widgets\Form;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Redis;
use App\Libs\Redis\RedisKey;
class GoodsActivityLimitForm extends Form
{
/**
* Handle the form request.
*
* @param array $input
*
* @return Response
*/
public function handle(array $input)
{
// 获取外部传递参数
$data = [
'flash_sale' => $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 [];
}
}

214
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);
}
/**

2
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');
});

2
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';
}
Loading…
Cancel
Save