Jelajahi Sumber

【Add】增加营销海报,增加最低购买数量限制,增加产品标签显示范围

liuxiangxin 5 bulan lalu
induk
melakukan
10b71b98c8

+ 1 - 0
app/Facades/Servers/WechatMini/Mini.php

@@ -9,6 +9,7 @@ use Illuminate\Support\Facades\Facade;
  * @method static array  getUserPhone($code)        手机号授权
  * @method static string  getAccessToken()          获取AccessToken
  * @method static mixed  queryUrlLink($urlLink)     查询加密UrlLink
+ * @method static mixed  getUnlimit(string $scene, array $optional = [])                获取小程序码
  * 
  * 
  * @see \App\Servers\WechatMini\Mini

+ 53 - 2
app/Http/Controllers/Admin/CouponActive.php

@@ -6,8 +6,7 @@ use App\Models\Coupon\Active as Model;
 use App\Models\Coupon\ActiveCoupon as ActiveCoupon;
 use App\Models\City;
 use App\Models\WeiBan\Tags as WeiBanTags;
-
-use function PHPUnit\Framework\isNull;
+use Intervention\Image\Facades\Image;
 
 /**
  * 优惠券领取活动
@@ -66,7 +65,59 @@ class CouponActive extends Auth{
         }
         // 返回结果
         return                  $link;
+	}
 
+	/**
+	 * 获取小程序海报
+	 * 
+	 */
+	public function get_poster(Model $Model){
+		// 接收参数
+		$id								= request('id',0);
+		// 查询用户
+		$oldData						= $Model->where(['id'=>$id])->first();
+		// 错误告知
+		if( !$oldData )					return $this->error('查无数据');
+		// 获取分享海报图片
+		$result 						= $this->getShareImage('id='.$id);
+		// 错误提示
+		if( isset($result['error']) )	return $this->error($result['error']);
+		// 分配数据
+		$this->assign('image',$result);
+		$this->assign('oldData',$oldData);
+		$this->assign('crumbs','海报');
+		// 加载模板
+		return 							$this->fetch();
+	}
+
+	/**
+	 * 获取分享海报图片
+	 * @param string $scene
+	 * 
+	 */
+	private function getShareImage($scene){
+		// 尝试执行
+		try {
+			// 加载图片
+			$image							= Image::make(public_path('uploads/images/poster/').'get_coupon.png');
+			// 生成小程序二维码
+			$qrcode							= Mini::getUnlimit($scene,['page'=>'pages/coupon/active','width'=>280,'is_hyaline'=>true]);
+			// 错误提示
+			if( isset($qrcode['error']) )	return $qrcode;
+			// 加载图片
+			$qrcode							= Image::make($qrcode);
+			// 插入图片
+			$image->insert($qrcode,'bottom-right',30,50);
+			// 转码成字符串
+			$image							= $image->encode('jpg', 90)->__toString();
+			// 转base64
+			$base64							= 'data:image/jpg;base64,' . base64_encode($image);
+			// 返回结果
+			return							$base64;
+		} catch (\Throwable $th) {
+			// 错误提示
+			return 							['error'=>$th->getMessage()];
+		}
 	}
 
 	/**

+ 55 - 0
app/Http/Controllers/Admin/LotteryOrder.php

@@ -6,6 +6,8 @@ use App\Models\Lottery\Order as Model;
 use App\Models\City;
 use App\Models\Lottery\OrderReward;
 use App\Models\WeiBan\Tags as WeiBanTags;
+use Illuminate\Support\Facades\DB;
+use Intervention\Image\Facades\Image;
 
 /**
  * 优惠券自动发放规则
@@ -67,6 +69,59 @@ class LotteryOrder extends Auth{
 
 	}
 
+	/**
+	 * 获取小程序海报
+	 * 
+	 */
+	public function get_poster(Model $Model){
+		// 接收参数
+		$id								= request('id',0);
+		// 查询用户
+		$oldData						= $Model->where(['id'=>$id])->first();
+		// 错误告知
+		if( !$oldData )					return $this->error('查无数据');
+		// 获取分享海报图片
+		$result 						= $this->getShareImage('id='.$id);
+		// 错误提示
+		if( isset($result['error']) )	return $this->error($result['error']);
+		// 分配数据
+		$this->assign('image',$result);
+		$this->assign('oldData',$oldData);
+		$this->assign('crumbs','海报');
+		// 加载模板
+		return 							$this->fetch();
+	}
+
+	/**
+	 * 获取分享海报图片
+	 * @param  int $scene  场景值
+	 * 
+	 */
+	private function getShareImage($scene){
+		// 尝试执行
+		try {
+			// 加载图片
+			$image							= Image::make(public_path('uploads/images/poster/').'score_reward.png');
+			// 生成小程序二维码
+			$qrcode							= Mini::getUnlimit($scene,['page'=>'pages/orders/lottery','width'=>280,'is_hyaline'=>true]);
+			// 错误提示
+			if( isset($qrcode['error']) )	return $qrcode;
+			// 加载图片
+			$qrcode							= Image::make($qrcode)->resize(200,200);
+			// 插入图片
+			$image->insert($qrcode,'bottom-left',60,60);
+			// 转码成字符串
+			$image							= $image->encode('jpg', 90)->__toString();
+			// 转base64
+			$base64							= 'data:image/jpg;base64,' . base64_encode($image);
+			// 返回结果
+			return							$base64;
+		} catch (\Throwable $th) {
+			// 错误提示
+			return 							['error'=>$th->getMessage()];
+		}
+	}
+
 	/**
 	 * 添加
 	 * 

+ 79 - 0
app/Http/Controllers/Admin/Product.php

@@ -16,6 +16,9 @@ use App\Models\Product\City as ProductCity;
 use App\Models\ProductPhoto;
 use Illuminate\Support\Facades\DB;
 use App\Models\WeiBan\Tags as WeiBanTags;
+use Intervention\Image\Facades\Image;
+use Intervention\Image\Gd\Font;
+use App\Facades\Servers\WechatMini\Mini;
 
 /**
  * 产品管理
@@ -107,6 +110,79 @@ class Product extends Auth{
 		return $this->fetch();
     }
 
+	/**
+	 * 获取小程序海报
+	 * 
+	 */
+	public function get_poster(Model $Model){
+		// 接收参数
+		$id								= request('id',0);
+		// 查询用户
+		$oldData						= $Model->where(['id'=>$id])->first();
+		// 错误告知
+		if( !$oldData )					return $this->error('查无数据');
+		// 获取分享海报图片
+		$result 						= $this->getShareImage('id='.$id,$oldData);
+		// 错误提示
+		if( isset($result['error']) )	return $this->error($result['error']);
+		// 分配数据
+		$this->assign('image',$result);
+		$this->assign('oldData',$oldData);
+		$this->assign('crumbs','海报');
+		// 加载模板
+		return 							$this->fetch();
+	}
+
+	/**
+	 * 获取分享海报图片
+	 * @param  int $scene  场景值
+	 * 
+	 */
+	private function getShareImage($scene,$oldData){
+		// 尝试执行
+		try {
+			// 加载图片
+			$image							= Image::make(public_path('uploads/images/poster/').'product.png');
+			// 产品缩略图
+			$thumb							= Image::make(path_compat($oldData['thumb']))->resize(1000,1000);
+			// 设置文字样式(字体、大小、颜色等)
+			$fontPath						= public_path().'/fonts/msyh14.ttf';// 指定字体文件路径
+			// 生成小程序二维码
+			$qrcode							= Mini::getUnlimit($scene,['page'=>'pages/product/index','width'=>280,'is_hyaline'=>true]);
+			// 错误提示
+			if( isset($qrcode['error']) )	return $qrcode;
+			// 加载图片
+			$qrcode							= Image::make($qrcode)->resize(250,250);
+			// 插入图片
+			$image->insert($thumb,'top-center',0,130);
+			// 插入图片
+			$image->insert($qrcode,'bottom-left',120,120);
+			// 给图片写入文字
+			$image->text('¥'.$oldData['price'], 360,1280,function (Font $font) use ($fontPath) {
+				$font->file($fontPath);		// 字体文件地址
+				$font->size(88);			// 字体大小
+				$font->color('#333333');
+				$font->align('left');
+			});
+			// 给图片写入文字
+			$image->text($oldData['name'], 120,1380,function (Font $font) use ($fontPath) {
+				$font->file($fontPath);		// 字体文件地址
+				$font->size(48);			// 字体大小
+				$font->color('#333333');
+				$font->align('left');
+			});
+			// 转码成字符串
+			$image							= $image->encode('jpg', 90)->__toString();
+			// 转base64
+			$base64							= 'data:image/jpg;base64,' . base64_encode($image);
+			// 返回结果
+			return							$base64;
+		} catch (\Throwable $th) {
+			// 错误提示
+			return 							['error'=>$th->getMessage()];
+		}
+	}
+
 	/**
 	 * 添加
 	 * 
@@ -125,6 +201,7 @@ class Product extends Auth{
 			$data['producer_id']	= request('producer_id',0);
 			$data['business_id']	= request('business_id',0);
 			$data['quota']			= request('quota',0);
+			$data['min_quota']		= request('min_quota',0);
 			$data['quota_start']	= request('quota_start','');
 			$data['quota_end']		= request('quota_end','');
 			$data['puton_time']		= request('puton_time','');
@@ -326,6 +403,7 @@ class Product extends Auth{
 			$data['price']			= request('price',0);
 			$data['market_price']	= request('market_price',0);
 			$data['quota']			= request('quota',0);
+			$data['min_quota']		= request('min_quota',0);
 			$data['quota_start']	= request('quota_start','');
 			$data['quota_end']		= request('quota_end','');
 			$data['puton_time']		= request('puton_time','');
@@ -562,6 +640,7 @@ class Product extends Auth{
 			$data['producer_id']	= request('producer_id',0);
 			$data['business_id']	= request('business_id',0);
 			$data['quota']			= request('quota',0);
+			$data['min_quota']		= request('min_quota',0);
 			$data['quota_start']	= request('quota_start','');
 			$data['quota_end']		= request('quota_end','');
 			$data['stock']			= request('stock',0);

+ 54 - 3
app/Http/Controllers/Admin/RecruitmentActive.php

@@ -5,9 +5,8 @@ use App\Http\Requests\Admin\RecruitmentActive as Request;
 use App\Models\RecruitmentActive as Model;
 use App\Models\City;
 use App\Models\WeiBan\Tags as WeiBanTags;
-
-
-use function PHPUnit\Framework\isNull;
+use Illuminate\Support\Facades\DB;
+use Intervention\Image\Facades\Image;
 
 /**
  * 拉新活动
@@ -99,7 +98,59 @@ class RecruitmentActive extends Auth{
         }
         // 返回结果
         return                  $link;
+	}
+
+	/**
+	 * 获取小程序海报
+	 * 
+	 */
+	public function get_poster(Model $Model){
+		// 接收参数
+		$id								= request('id',0);
+		// 查询用户
+		$oldData						= $Model->where(['id'=>$id])->first();
+		// 错误告知
+		if( !$oldData )					return $this->error('查无数据');
+		// 获取分享海报图片
+		$result 						= $this->getShareImage('id='.$id);
+		// 错误提示
+		if( isset($result['error']) )	return $this->error($result['error']);
+		// 分配数据
+		$this->assign('image',$result);
+		$this->assign('oldData',$oldData);
+		$this->assign('crumbs','海报');
+		// 加载模板
+		return 							$this->fetch();
+	}
 
+	/**
+	 * 获取分享海报图片
+	 * @param  int $scene  场景值
+	 * 
+	 */
+	private function getShareImage($scene){
+		// 尝试执行
+		try {
+			// 加载图片
+			$image							= Image::make(public_path('uploads/images/poster/').'recruitment.png');
+			// 生成小程序二维码
+			$qrcode							= Mini::getUnlimit($scene,['page'=>'pages/recruitment/index','width'=>480,'is_hyaline'=>true]);
+			// 错误提示
+			if( isset($qrcode['error']) )	return $qrcode;
+			// 加载图片
+			$qrcode							= Image::make($qrcode);
+			// 插入图片
+			$image->insert($qrcode,'bottom-center',0,345);
+			// 转码成字符串
+			$image							= $image->encode('jpg', 90)->__toString();
+			// 转base64
+			$base64							= 'data:image/jpg;base64,' . base64_encode($image);
+			// 返回结果
+			return							$base64;
+		} catch (\Throwable $th) {
+			// 错误提示
+			return 							['error'=>$th->getMessage()];
+		}
 	}
 
 	/**

+ 56 - 4
app/Http/Controllers/Admin/ScoreClockinActive.php

@@ -7,7 +7,7 @@ use App\Models\Score\ClockinActive as Model;
 use App\Models\Score\Clockin as Clockin;
 use App\Models\WeiBan\Tags as WeiBanTags;
 use Illuminate\Support\Facades\DB;
-
+use Intervention\Image\Facades\Image;
 
 /**
  * 打卡活动
@@ -27,7 +27,7 @@ class ScoreClockinActive extends Auth{
      * 列表页
      *
      * */
-    public function index(Request $request, Model $Model, City $City){
+    public function index( Model $Model, City $City){
         // 接收参数
         $name					= request('name','');
         // 查询条件
@@ -73,15 +73,67 @@ class ScoreClockinActive extends Auth{
         // 不存在数据
         if ( is_null($link) ) {
             // 从数据库获取数据
-            $link              = Mini::getUrlLink('pages/clockin/active','?id='.$id);
+            $link              = Mini::getUrlLink('pages/score/clockin','?id='.$id);
             // 存起来
             cache(['admin:clockin:active:urllink:'.$id=>$link],$link ? now()->addDays(28) : now()->addMinutes(3));
         }
         // 返回结果
         return                  $link;
-
     }
 
+    /**
+	 * 获取小程序海报
+	 * 
+	 */
+	public function get_poster(Model $Model){
+		// 接收参数
+		$id								= request('id',0);
+		// 查询用户
+		$oldData						= $Model->where(['id'=>$id])->first();
+		// 错误告知
+		if( !$oldData )					return $this->error('查无数据');
+		// 获取分享海报图片
+		$result 						= $this->getShareImage('id='.$id);
+		// 错误提示
+		if( isset($result['error']) )	return $this->error($result['error']);
+		// 分配数据
+		$this->assign('image',$result);
+		$this->assign('oldData',$oldData);
+		$this->assign('crumbs','海报');
+		// 加载模板
+		return 							$this->fetch();
+	}
+
+	/**
+	 * 获取分享海报图片
+	 * @param  int $scene  场景值
+	 * 
+	 */
+	private function getShareImage($scene){
+		// 尝试执行
+		try {
+			// 加载图片
+			$image							= Image::make(public_path('uploads/images/poster/').'score_clockin.png');
+			// 生成小程序二维码
+			$qrcode							= Mini::getUnlimit($scene,['page'=>'pages/score/clockin','width'=>280,'is_hyaline'=>true]);
+			// 错误提示
+			if( isset($qrcode['error']) )	return $qrcode;
+			// 加载图片
+			$qrcode							= Image::make($qrcode);
+			// 插入图片
+			$image->insert($qrcode,'bottom-right',60,80);
+			// 转码成字符串
+			$image							= $image->encode('jpg', 90)->__toString();
+			// 转base64
+			$base64							= 'data:image/jpg;base64,' . base64_encode($image);
+			// 返回结果
+			return							$base64;
+		} catch (\Throwable $th) {
+			// 错误提示
+			return 							['error'=>$th->getMessage()];
+		}
+	}
+
     /**
      * 添加
      *

+ 8 - 0
app/Http/Controllers/Api/Orders.php

@@ -119,6 +119,14 @@ class Orders extends Api{
 					if( in_array($value['name'],$productInfo['tag_exclude']) )  return json_send(['code'=>'error','msg'=>'不在 '.$productInfo['product_name'].' 可参与范围','data'=>['error'=>'用户在标签排除范围']]);
 				}
 			}
+			// 如果产品有最低起购
+			if( $productInfo['min_quota'] )	{
+				// 如果购买数量小于最低起购数量
+				if( $buyNum[$buyInfo['product_id']] < $productInfo['min_quota'] ){
+					// 如果超过数量
+					return json_send(['code'=>'error','msg'=>'最少购买'.$productInfo['min_quota'].'套-'.$productInfo['product_name'],'data'=>['error'=>'最少购买'.$productInfo['min_quota'].'套-'.$productInfo['product_name']]]);
+				}
+			}
 			// 如果产品限购
 			if( $productInfo['quota'] )	{
 				// 是否在限购时间,当前时间大于开始时间,并且小于结束时间

+ 35 - 18
app/Http/Controllers/Api/Product.php

@@ -6,11 +6,9 @@ use App\Models\Business;
 use App\Models\Custom;
 use App\Models\Product as Model;
 use App\Models\Product\Attr as ProductAttr;
-use App\Models\Product\City as ProductCity;
 use App\Models\Product\Spec as ProductSpec;
 use App\Models\Product\Skus as ProductSkus;
 use App\Models\ProductPhoto;
-use App\Models\Promo;
 use App\Models\PromoProduct;
 use App\Models\PromoRebate;
 use App\Models\RegimentActive;
@@ -45,6 +43,7 @@ class Product extends Api{
 		// 接收参数
 		$name					    = request('name','');
 		$limit						= request('limit',10);
+        $cityId                     = empty($custom['city_id']) ? 0 : $custom['city_id'];
 		// 显示
 		$map						= [['status','=','0'],['stock','>',0]];
 		// 分类ID
@@ -59,7 +58,7 @@ class Product extends Api{
 										->groupBy('product_id')
 										->orderBy('product.sort')
 										->orderBy('product.id')
-										->paginate($limit,['product.id','product.sort','product.name','product.thumb','product.spec','product.price','product.market_price','product.stock']);
+										->paginate($limit,['product.id','product.sort','product.name','product.tag_scope','product.tag_exclude','product.thumb','product.spec','product.price','product.market_price','product.stock']);
 		// 获取数据
 		$data['total']				= $Paginator->total();
 		$data['current_page']		= $Paginator->currentPage();
@@ -75,25 +74,41 @@ class Product extends Api{
                                             ['promo.end_time','>=',$time],
                                             ['promo_product.status','=',0],
                                         ];
+        // 查询促销活动
         $promoList                  = PromoProduct::query()
-            ->join('promo','promo.id','=','promo_product.promo_id')
-            ->where($where)
-            ->whereIn('promo_product.product_id',$productIds)
-            ->select('promo.*','promo_product.product_id','promo_product.id as promo_product_id')
-            ->get()
-            ->toArray();
-        if ($promoList){
-            $promoList  =   array_column($promoList,NULL,'product_id');
-        }
+                                    ->join('promo','promo.id','=','promo_product.promo_id')
+                                    ->where($where)
+                                    ->whereIn('promo_product.product_id',$productIds)
+                                    ->select('promo.*','promo_product.product_id','promo_product.id as promo_product_id')
+                                    ->get()
+                                    ->toArray();
+        // 查询促销活动
+        if ($promoList)             $promoList = array_column($promoList,NULL,'product_id');
         // 查询用户标签
-        $tags                       =   [];
-        $cityId                     =   '';
-        if ($custom){
-            $tags					= $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']);
-            $cityId					= $custom['city_id'];
-        }
+        $tags                       = $custom ? $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']) : [];
+        $tagsList                   = array_column($tags,'name');
 		// 处理请求
 		foreach ( $data['data'] as $key => $value ) {
+            // 判断是不是可以参与
+			if( $value['tag_scope'] ) {
+				// 解析数组
+				$value['tag_scope']	= explode(',',$value['tag_scope']);
+				// 如果没有交集,不在参与范围内
+                if( !array_intersect($value['tag_scope'],$tagsList) ) {
+                    unset($data['data'][$key]);
+                    continue;
+                }
+			}
+			// 判断是不是可以参与
+			if( $value['tag_exclude'] ) {
+				// 解析数组
+				$value['tag_exclude']	= explode(',',$value['tag_exclude']);
+				// 如果有交集,在排除范围内
+                if( array_intersect($value['tag_exclude'],$tagsList) ) {
+                    unset($data['data'][$key]);
+                    continue;
+                }
+			}
 			// 处理数据
 			$value['thumb'] 				= path_compat($value['thumb']);
 			$value['regiment_active_id'] 	= null;
@@ -148,6 +163,8 @@ class Product extends Api{
 			// 重组数据
 			$data['data'][$key]		= $value;
 		}
+        // 数据重组
+        $data['data']               = array_values($data['data']);
 		// 返回结果
 		return						json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]);
 	}

+ 1 - 1
app/Models/Product.php

@@ -160,7 +160,7 @@ class Product extends Model
     public function getListByIds($productIds)
     {
         // 写入数据表
-        $data				    = $this->query()->whereIn('id',$productIds)->where([['status','=',0]])->get(['id','name as product_name','thumb as product_thumb','spec as sku_attr_names','price','stock','status','business_id','quota','quota_start','quota_end','tag_scope','tag_exclude'])->toArray();
+        $data				    = $this->query()->whereIn('id',$productIds)->where([['status','=',0]])->get(['id','name as product_name','thumb as product_thumb','spec as sku_attr_names','price','stock','status','business_id','quota','min_quota','quota_start','quota_end','tag_scope','tag_exclude'])->toArray();
         // 列表
         $list                   = [];
         // 循环处理

+ 20 - 0
app/Servers/WechatMini/Mini.php

@@ -82,5 +82,25 @@ class Mini
 		// 获取不包含区号的手机号(因为绑定手机号字段会有国际区号)
 		return                                  ['error'=>$result['errcode'].'=>'.$result['errmsg']];
     }
+
+    /**
+     * 获取小程序码
+     * 
+     * @param  string   $scene                  小程序码的场景值
+     * @param  array    $optional               其他参数
+     *                  page                    小程序码的页面路径
+     *                  width                   小程序码的宽度
+     * 
+     */
+    public function getUnlimit(string $scene, array $optional = []){
+        // // 版本
+        // $optional['env_version']                = 'production';//config('app.env','production') == 'production' ?  'release' : 'trial';
+        // 执行生成
+        $result                                 = $this->mp->app_code->getUnlimit($scene, $optional);
+        // 判断结果
+		if( $result instanceof \EasyWeChat\Kernel\Http\StreamResponse ) return $result->getBody()->getContents();
+		// 错误
+		return                                  ['error'=>$result['errcode'].'=>'.$result['errmsg']];
+    }
     
 }

+ 18 - 0
resources/views/admin/coupon_active/get_poster.blade.php

@@ -0,0 +1,18 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<form class="post-form" action="" method="post">
+	<div class="form-group col-sm-12">
+		<label class="control-label">活动名称</label>
+		<input class="form-control" required="required" disabled="" type="text" placeholder="活动名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">活动海报</label>
+		<div class="form-group col-sm-12">
+			<img src="{{$image}}" alt="{{$oldData['name']}}" height="300" title="{{$oldData['name']}}">
+		</div>
+	</div>
+</form>
+@endsection

+ 3 - 0
resources/views/admin/coupon_active/index.blade.php

@@ -68,6 +68,9 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 								@if(check_auth('admin/coupon_active/edit'))
 								<a href="{{url('admin/coupon_active/edit?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-warning" >编辑</a>
 								@endif
+								@if(check_auth('admin/coupon_active/get_poster'))
+								<a href="{{url('admin/coupon_active/get_poster?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-success" >海报</a>
+								@endif
 								@if(check_auth('admin/coupon_active/set_status'))
 									@if($a['status'])
 									<a data-url="{{url('admin/coupon_active/set_status?'.http_build_query(['id'=>$a['id'],'status'=>0]))}}" class="set_status btn btn-sm btn-success" >启用</a>

+ 18 - 0
resources/views/admin/lottery_order/get_poster.blade.php

@@ -0,0 +1,18 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<form class="post-form" action="" method="post">
+	<div class="form-group col-sm-12">
+		<label class="control-label">活动名称</label>
+		<input class="form-control" required="required" disabled="" type="text" placeholder="活动名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">活动海报</label>
+		<div class="form-group col-sm-12">
+			<img src="{{$image}}" alt="{{$oldData['name']}}" height="300" title="{{$oldData['name']}}">
+		</div>
+	</div>
+</form>
+@endsection

+ 3 - 0
resources/views/admin/lottery_order/index.blade.php

@@ -81,6 +81,9 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 									<a data-url="{{url('admin/lottery_order/set_status?'.http_build_query(['id'=>$a['id'],'status'=>1]))}}" class="set_status btn btn-sm btn-danger" >停用</a>
 									@endif
 								@endif
+								@if(check_auth('admin/lottery_order/get_poster'))
+								<a href="{{url('admin/lottery_order/get_poster?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-success" >海报</a>
+								@endif
 							</td>							
 						</tr>  
 						@endforeach

+ 12 - 8
resources/views/admin/product/add.blade.php

@@ -98,6 +98,18 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">下架时间</label>
 		<input class="form-control" type="datetime-local" placeholder="下架时间" name="putoff_time" value="" />
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">最低起购</label>
+		<input class="form-control" required="required" type="number" placeholder="最低起购数量,设置为0表示不限制"  name="min_quota" value="0" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">商品类型</label>
+		<select name="type_id" class="form-control" id="typeId">
+			@foreach ($typeList as $value)
+				<option value="{{$value['id']}}"  >{{$value['name']}}</option>
+			@endforeach
+		</select>
+	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">服务城市</label>
 		<select name="city_ids[]" class="form-control selectpicker" data-max-options="20" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>
@@ -110,14 +122,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-2">
-		<label class="control-label">商品类型</label>
-		<select name="type_id" class="form-control" id="typeId">
-			@foreach ($typeList as $value)
-				<option value="{{$value['id']}}"  >{{$value['name']}}</option>
-			@endforeach
-		</select>
-	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">生产厂家</label>
 		<select name="producer_id" class="form-control selectpicker"  data-live-search="true" data-live-search-placeholder="搜索生产厂家" data-none-results-text="未搜索到 {0}" title="选择厂家">

+ 12 - 8
resources/views/admin/product/copy.blade.php

@@ -98,6 +98,18 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">下架时间</label>
 		<input class="form-control" type="datetime-local" placeholder="下架时间" name="putoff_time" value="{{$oldData['putoff_time']?date('Y-m-d H:i',$oldData['putoff_time']):''}}" />
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">最低起购</label>
+		<input class="form-control" required="required" type="number" placeholder="最低起购数量,设置为0表示不限制"  name="min_quota" value="{{$oldData['min_quota']}}" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">商品类型</label>
+		<select name="type_id" class="form-control" id="typeId">
+			@foreach ($typeList as $value)
+				<option value="{{$value['id']}}"  >{{$value['name']}}</option>
+			@endforeach
+		</select>
+	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">服务城市</label>
 		<select name="city_ids[]" class="form-control selectpicker" data-max-options="20" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>
@@ -110,14 +122,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-2">
-		<label class="control-label">商品类型</label>
-		<select name="type_id" class="form-control" id="typeId">
-			@foreach ($typeList as $value)
-				<option value="{{$value['id']}}"  >{{$value['name']}}</option>
-			@endforeach
-		</select>
-	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">生产厂家</label>
 		<select name="producer_id" required class="form-control selectpicker"  data-live-search="true" data-live-search-placeholder="搜索生产厂家" data-none-results-text="未搜索到 {0}" title="选择厂家">

+ 12 - 8
resources/views/admin/product/edit.blade.php

@@ -98,6 +98,18 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">下架时间</label>
 		<input class="form-control" type="datetime-local" placeholder="下架时间" name="putoff_time" value="{{$oldData['putoff_time']?date('Y-m-d H:i',$oldData['putoff_time']):''}}" />
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">最低起购</label>
+		<input class="form-control" required="required" type="number" placeholder="最低起购数量,设置为0表示不限制"  name="min_quota" value="{{$oldData['min_quota']}}" />
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">商品类型</label>
+		<select name="type_id" class="form-control" id="typeId">
+			@foreach ($typeList as $value)
+				<option value="{{$value['id']}}"  >{{$value['name']}}</option>
+			@endforeach
+		</select>
+	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">服务城市</label>
 		<select name="city_ids[]" class="form-control selectpicker" data-max-options="20" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>
@@ -110,14 +122,6 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			@endforeach
 		</select>
 	</div>
-	<div class="form-group col-sm-2">
-		<label class="control-label">商品类型</label>
-		<select name="type_id" class="form-control" id="typeId">
-			@foreach ($typeList as $value)
-				<option value="{{$value['id']}}"  >{{$value['name']}}</option>
-			@endforeach
-		</select>
-	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">生产厂家</label>
 		<select name="producer_id" required class="form-control selectpicker"  data-live-search="true" data-live-search-placeholder="搜索生产厂家" data-none-results-text="未搜索到 {0}" title="选择厂家">

+ 18 - 0
resources/views/admin/product/get_poster.blade.php

@@ -0,0 +1,18 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<form class="post-form" action="" method="post">
+	<div class="form-group col-sm-12">
+		<label class="control-label">产品名称</label>
+		<input class="form-control" required="required" disabled="" type="text" placeholder="产品名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">产品海报</label>
+		<div class="form-group col-sm-12">
+			<img src="{{$image}}" alt="{{$oldData['name']}}" height="300" title="{{$oldData['name']}}">
+		</div>
+	</div>
+</form>
+@endsection

+ 3 - 0
resources/views/admin/product/index.blade.php

@@ -103,6 +103,9 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 									</a>
 								@endif
 							@endif
+							@if(check_auth('admin/product/get_poster'))
+							<a href="{{url('admin/product/get_poster?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-success" >海报</a>
+							@endif
 						</td>
 					</tr>
 					@endforeach

+ 18 - 0
resources/views/admin/recruitment_active/get_poster.blade.php

@@ -0,0 +1,18 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<form class="post-form" action="" method="post">
+	<div class="form-group col-sm-12">
+		<label class="control-label">活动名称</label>
+		<input class="form-control" required="required" disabled="" type="text" placeholder="活动名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">活动海报</label>
+		<div class="form-group col-sm-12">
+			<img src="{{$image}}" alt="{{$oldData['name']}}" height="300" title="{{$oldData['name']}}">
+		</div>
+	</div>
+</form>
+@endsection

+ 3 - 0
resources/views/admin/recruitment_active/index.blade.php

@@ -96,6 +96,9 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 									<a data-url="{{url('admin/recruitment_active/set_status?'.http_build_query(['id'=>$a['id'],'status'=>1]))}}" class="set_status btn btn-sm btn-danger" >停用</a>
 									@endif
 								@endif
+								@if(check_auth('admin/recruitment_active/get_poster'))
+									<a href="{{url('admin/recruitment_active/get_poster?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-success" >海报</a>
+								@endif
 							</td>							
 						</tr>  
 						@endforeach

+ 18 - 0
resources/views/admin/score_clockin_active/get_poster.blade.php

@@ -0,0 +1,18 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<form class="post-form" action="" method="post">
+	<div class="form-group col-sm-12">
+		<label class="control-label">活动名称</label>
+		<input class="form-control" required="required" disabled="" type="text" placeholder="活动名称" name="name" maxlength="45" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">活动海报</label>
+		<div class="form-group col-sm-12">
+			<img src="{{$image}}" alt="{{$oldData['name']}}" height="300" title="{{$oldData['name']}}">
+		</div>
+	</div>
+</form>
+@endsection

+ 6 - 3
resources/views/admin/score_clockin_active/index.blade.php

@@ -47,7 +47,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 							<td>{{$a['tag_scope']}}</td>
 							<td>{{date('Y/m/d H:i:s',$a['start_time'])}}</td>
 							<td>{{date('Y/m/d H:i:s',$a['end_time'])}}</td>
-							<td>/pages/coupon/active?id={{$a['id']}}</td>
+							<td>/pages/score/clockin?id={{$a['id']}}</td>
 							<td>{{$a['mp_urllink']}}</td>
 							<td>
 								@if( $a['status'] )
@@ -69,11 +69,14 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 								@if(check_auth('admin/score_clockin/index'))
 								<a href="{{url('admin/score_clockin/index?'.http_build_query(['active_id'=>$a['id']]))}}" class="btn btn-sm btn-primary" >打卡配置</a>
 								@endif
+								@if(check_auth('admin/score_clockin_active/copy'))
+									<a data-url="{{url('admin/score_clockin_active/copy?'.http_build_query(['id'=>$a['id'],'status'=>0]))}}" class="set_status btn btn-sm btn-success" >复制</a>
+								@endif
 								@if(check_auth('admin/score_clockin_active/edit'))
 								<a href="{{url('admin/score_clockin_active/edit?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-warning" >编辑</a>
 								@endif
-								@if(check_auth('admin/score_clockin_active/copy'))
-									<a data-url="{{url('admin/score_clockin_active/copy?'.http_build_query(['id'=>$a['id'],'status'=>0]))}}" class="set_status btn btn-sm btn-success" >复制</a>
+								@if(check_auth('admin/score_clockin_active/get_poster'))
+									<a href="{{url('admin/score_clockin_active/get_poster?'.http_build_query(['id'=>$a['id']]))}}" class="btn btn-sm btn-success" >海报</a>
 								@endif
 								@if(check_auth('admin/score_clockin_active/set_status'))
 									@if($a['status'])

+ 14 - 3
routes/web.php

@@ -113,6 +113,8 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     // 状态
     Route::any('product/set_status',[App\Http\Controllers\Admin\Product::class,'set_status']);
     // 状态
+    Route::any('product/get_poster',[App\Http\Controllers\Admin\Product::class,'get_poster']);
+    // 状态
     Route::any('product/get_spec_html',[App\Http\Controllers\Admin\Product::class,'get_spec_html']);
     // 状态
     Route::any('product/get_sku_html',[App\Http\Controllers\Admin\Product::class,'get_sku_html']);
@@ -253,6 +255,8 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('coupon_active/edit',[App\Http\Controllers\Admin\CouponActive::class,'edit']);
     // 状态
     Route::any('coupon_active/set_status',[App\Http\Controllers\Admin\CouponActive::class,'set_status']);
+    // 状态
+    Route::any('coupon_active/get_poster',[App\Http\Controllers\Admin\CouponActive::class,'get_poster']);
 
     /* 优惠券活动 */
     // 列表
@@ -409,6 +413,8 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('lottery_order/edit',[App\Http\Controllers\Admin\LotteryOrder::class,'edit']);
     // 状态
     Route::any('lottery_order/set_status',[App\Http\Controllers\Admin\LotteryOrder::class,'set_status']);
+    // 状态
+    Route::any('lottery_order/get_poster',[App\Http\Controllers\Admin\LotteryOrder::class,'get_poster']);
 
     /* 下单抽奖 */
     // 列表
@@ -439,13 +445,16 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     /* 打卡活动 */
     // 列表
     Route::any('score_clockin_active/index',[App\Http\Controllers\Admin\ScoreClockinActive::class,'index']);
-    // 详情
+    // 添加
     Route::any('score_clockin_active/add',[App\Http\Controllers\Admin\ScoreClockinActive::class,'add']);
-    // 详情
+    // 编辑
     Route::any('score_clockin_active/edit',[App\Http\Controllers\Admin\ScoreClockinActive::class,'edit']);
+    // 复制
+    Route::any('score_clockin_active/copy',[App\Http\Controllers\Admin\ScoreClockinActive::class,'copy']);
     // 状态
     Route::any('score_clockin_active/set_status',[App\Http\Controllers\Admin\ScoreClockinActive::class,'set_status']);
-    Route::any('score_clockin_active/copy',[App\Http\Controllers\Admin\ScoreClockinActive::class,'copy']);
+    // 海报
+    Route::any('score_clockin_active/get_poster',[App\Http\Controllers\Admin\ScoreClockinActive::class,'get_poster']);
 
     //打卡记录
     Route::any('custom_clockin_record/index',[App\Http\Controllers\Admin\CustomClockinRecord::class,'index']);
@@ -524,6 +533,8 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('recruitment_active/copy',[App\Http\Controllers\Admin\RecruitmentActive::class,'copy']);
     // 状态
     Route::any('recruitment_active/set_status',[App\Http\Controllers\Admin\RecruitmentActive::class,'set_status']);
+    // 状态
+    Route::any('recruitment_active/get_poster',[App\Http\Controllers\Admin\RecruitmentActive::class,'get_poster']);
     //奖励配置
     Route::any('recruitment_active_prize/edit',[App\Http\Controllers\Admin\RecruitmentActivePrize::class,'edit']);
     // 拉新活动数据列表