فهرست منبع

【Add】产品主图增加至5张,领取活动相关优化

liuxiangxin 6 ماه پیش
والد
کامیت
e364a7dd83

+ 22 - 3
app/Http/Controllers/Admin/Coupon.php

@@ -26,7 +26,7 @@ class Coupon extends Auth{
 	 * 首页列表
 	 * 
 	 * */
-    public function index(Model $Model,CustomCoupon $CustomCoupon){
+    public function index(Model $Model,CustomCoupon $CustomCoupon,City $City,CouponRebate $CouponRebate){
 		// 接受参数
 		$code					= request('coupon_code','');
 		$status					= request('status');
@@ -58,10 +58,29 @@ class Coupon extends Auth{
 				// 状态设置
 				$value['status'] = 3;
 			}
+			// 判断是不是可以参与
+			if( $value['city_ids'] ) {
+				// 解析数组
+				$cityids			= explode(',',$value['city_ids']);
+				// 获取城市
+				foreach ($cityids as $kk=>$vv) 	{
+					// 获取值
+					$vv				= $City->getOne($vv,'name');
+					// 获取城市名
+					$cityids[$kk]	= $vv;
+				}
+				// 城市列表
+				$value['city_ids']	= implode('、',$cityids);
+			}
+			// 赠品
+			if( $value['rebate_type'] == 3 ) {
+				// 返回结果
+				$value['rebate'] 	= (string) $CouponRebate->query()->join('product','coupon_rebate.product_id','=','product.id')->where([['coupon_id','=',$value['id']]])->value('product.name');
+			}
 			// id转编号
-			$value['custom_total'] = isset($customTotal[$value['id']]) ? $customTotal[$value['id']] : 0;
+			$value['custom_total']	= isset($customTotal[$value['id']]) ? $customTotal[$value['id']] : 0;
 			// 重组
-			$list[$key]			= $value;
+			$list[$key]				= $value;
 		}
 		// 分配数据
 		$this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');

+ 1 - 1
app/Http/Controllers/Admin/CouponProduct.php

@@ -33,7 +33,7 @@ class CouponProduct extends Auth{
 		$map 					= [];
 		// 组合条件
 		if( $couponId )			$map[] = ['coupon_product.coupon_id','=',$couponId];
-		if( $productId )		$map[] = ['product.product_id','=',$productId];
+		if( $productId )		$map[] = ['product.id','=',$productId];
 		// 查询数据
 		$list					= $Model->query()
 									->join('product','coupon_product.product_id','=','product.id')

+ 2 - 8
app/Http/Controllers/Admin/ImageManager.php

@@ -75,7 +75,7 @@ class ImageManager extends Auth{
 		// 循环上传的文件
 		foreach( $files as $file )		{
 			// 仅支持字母数字-_
-			if( !preg_match('/^[A-Za-z0-9\-\_\.]+$/',$file->getClientOriginalName() )) return ['error'=>'仅支持字母数字-_组合'];
+			if( !preg_match('/^[A-Za-z0-9\_\.]+$/',$file->getClientOriginalName() )) return ['error'=>'仅支持字母数字-_组合'];
 			//保存图片
 			$info						= $file->move($directory,$file->getClientOriginalName());
 			// 如果有错误
@@ -103,7 +103,7 @@ class ImageManager extends Auth{
 		// 仅支持字母数字-_
 		if( !preg_match('/^[A-Za-z0-9\_\.]+$/',$folder) ) return ['error'=>$folder.' 文件夹仅支持字母数字_组合'];
 		// 验证是否有这个文件夹
-		$directory					= $directory ? $this->upload_url.'/'.str_replace('-','/', $directory) : $this->upload_url.'/';
+		$directory					= $directory ? $this->upload_url.'/' : $this->upload_url.'/';
 		// 替换上级目录
 		$folder 					= str_replace(['../', '..\\', '..'],'',$folder,$count);
 		// 有上级目录
@@ -133,8 +133,6 @@ class ImageManager extends Auth{
 		if( !$paths )		return ['success'=>'非法操作'];
 		// 删除
 		foreach ($paths as $key => $value) {
-			// 替换路径
-			$value 			= str_replace('-','/', $value);
 			// 判断是否增加路径
 			$paths[$key] 	= is_dir($value) ? $value : DIR_IMAGE.$value;
 		}
@@ -157,10 +155,6 @@ class ImageManager extends Auth{
 		foreach ($paths as $value) {
 			// 替换掉前后路径
 			$value			= str_replace(['../', '..\\', '..'],'', $value);
-			// 替换成斜杠路径
-			$value			= str_replace('-','/', $value);
-			// 拼接路径
-			$value			= $value;
 			// 判断是文件么
 			if( is_file($value) ){
 				// 文件直接删除

+ 85 - 3
app/Http/Controllers/Admin/Product.php

@@ -12,6 +12,7 @@ use App\Models\Product\Type as ProductType;
 use App\Models\Product\Attr as ProductAttr;
 use App\Models\Product\Skus as ProductSkus;
 use App\Models\Product\City as ProductCity;
+use App\Models\ProductPhoto;
 use Illuminate\Support\Facades\DB;
 
 /**
@@ -97,7 +98,7 @@ class Product extends Auth{
 	 * 添加
 	 * 
 	 * */
-	public function add( Request $request, Model $Model,Producer $Producer,Business $Business,ProductType $ProductType,ProductSpec $ProductSpec,ProductAttr $ProductAttr,ProductSkus $ProductSkus,City $City,ProductCity $ProductCity){
+	public function add( Request $request, Model $Model,ProductPhoto $ProductPhoto,Producer $Producer,Business $Business,ProductType $ProductType,ProductSpec $ProductSpec,ProductAttr $ProductAttr,ProductSkus $ProductSkus,City $City,ProductCity $ProductCity){
 		if( request()->isMethod('post') ){
 			// 验证参数
 			$request->scene('add')->validate();
@@ -122,6 +123,12 @@ class Product extends Auth{
 			$attr					= request('attr',[]);
 			$skuList				= request('sku',[]);
 			$cityIds				= request('city_ids',[]);
+			$photoList				= request('photo_list',[]);
+			// 循环
+			foreach ($photoList as $key => $value) {
+				if( !$value )		unset($photoList[$key]);
+			}
+			$photoList				= array_values($photoList);
 			// 如果没有选择,则意味着全部
 			$cityIds				= $cityIds ? $cityIds : [1];
 			$data['quota_start']	= $data['quota_start'] ? strtotime($data['quota_start']) : 0;
@@ -131,6 +138,8 @@ class Product extends Auth{
 			// 限购提示
 			if( !$data['thumb'] ) 	return json_send(['code'=>'error','msg'=>'请上传产品主图','data'=>['error'=>'请上传产品主图']]);
 			// 限购提示
+			if( $attr && !$skuList ) return json_send(['code'=>'error','msg'=>'规格属性存在时,请填写SKU','data'=>['error'=>'规格属性存在时,请填写SKU']]);
+			// 限购提示
 			if( $data['quota'] && ( !$data['quota_start'] || !$data['quota_end'] )) 	return json_send(['code'=>'error','msg'=>'限购必填限购时间','data'=>['error'=>'限购必填限购时间']]);
 			// 上下架
 			if( $data['puton_time'] ) 	{
@@ -171,6 +180,25 @@ class Product extends Auth{
 					// 重组
 					$specAttr[$key]		= $value;
 				}
+				// 图册
+				foreach ($photoList as $key => $value) {
+					// 整理数据
+					$value				= ['sort'=>$key,'thumb'=>$value,'product_id'=>$id,'insert_time'=>time(),'update_time'=>time()];
+					// 重新整理
+					$photoList[$key]	= $value;
+				}
+				// 存在图册
+				if( $photoList )		{
+					// 写入失败
+					$result 			= $ProductPhoto->query()->insert($photoList);
+					// 提示新增失败
+					if( !$result )		{
+						// 回滚
+						DB::rollBack();
+						// 提示
+						return 			json_send(['code'=>'error','msg'=>'商品图册写入失败']);
+					}
+				}
 				// 循环SKU
 				foreach ($skuList as $attrNames => $value) {
 					// 属性ID值
@@ -257,7 +285,7 @@ class Product extends Auth{
 	 * 编辑
 	 * 
 	 * */
-	public function edit( Request $request, Model $Model,Producer $Producer,Business $Business,ProductType $ProductType,ProductSpec $ProductSpec,ProductAttr $ProductAttr,ProductSkus $ProductSkus,City $City,ProductCity $ProductCity){
+	public function edit( Request $request, Model $Model,ProductPhoto $ProductPhoto,Producer $Producer,Business $Business,ProductType $ProductType,ProductSpec $ProductSpec,ProductAttr $ProductAttr,ProductSkus $ProductSkus,City $City,ProductCity $ProductCity){
 		if(request()->isMethod('post')){
 			// 验证参数
 			$request->scene('edit')->validate();
@@ -282,6 +310,12 @@ class Product extends Auth{
 			$attr					= request('attr',[]);
 			$skuList				= request('sku',[]);
 			$cityIds				= request('city_ids',[]);
+			$photoList				= request('photo_list',[]);
+			// 循环
+			foreach ($photoList as $key => $value) {
+				if( !$value )		unset($photoList[$key]);
+			}
+			$photoList				= array_values($photoList);
 			// 如果没有选择,则意味着全部
 			$cityIds				= $cityIds ? $cityIds : [1];
 			$data['quota_start']	= $data['quota_start'] ? strtotime($data['quota_start']) : 0;
@@ -291,6 +325,8 @@ class Product extends Auth{
 			// 限购提示
 			if( !$data['thumb'] ) 	return json_send(['code'=>'error','msg'=>'请上传产品主图','data'=>['error'=>'请上传产品主图']]);
 			// 限购提示
+			if( $attr && !$skuList ) return json_send(['code'=>'error','msg'=>'规格属性存在时,请填写SKU','data'=>['error'=>'规格属性存在时,请填写SKU']]);
+			// 限购提示
 			if( $data['quota'] && ( !$data['quota_start'] || !$data['quota_end'] )) 	return json_send(['code'=>'error','msg'=>'限购必填限购时间','data'=>['error'=>'限购必填限购时间']]);
 			// 上下架
 			if( $data['puton_time'] ) 	{
@@ -317,6 +353,17 @@ class Product extends Auth{
 					// 提示
 					return 				json_send(['code'=>'error','msg'=>'修改失败']);
 				}
+				// 获取旧图册
+				$oldPhoto				= $ProductPhoto->getListByProductId($id);
+				// 循环个数
+				for ($i=0; $i < 4; $i++) { 
+					// 如果存在旧数据与新数据,修改
+					if( isset($oldPhoto[$i]) && isset($photoList[$i]) )  $ProductPhoto->query()->where([['product_id','=',$id],['sort','=',$i]])->update(['thumb'=>(string)$photoList[$i],'update_time'=>time()]);
+					// 如果存在旧数据,不存在新数据,删除
+					if( isset($oldPhoto[$i]) && !isset($photoList[$i]) ) $ProductPhoto->query()->where([['product_id','=',$id],['sort','=',$i]])->delete();
+					// 如果不存在旧数据,存在新数据,新增
+					if( !isset($oldPhoto[$i]) && isset($photoList[$i]) ) $ProductPhoto->add(['sort'=>$i,'product_id'=>$id,'thumb'=>(string)$photoList[$i],'insert_time'=>time(),'update_time'=>time()]);
+				}
 				// 组合数据
 				foreach ($specAttr as $key => $value) {
 					// 查询结果
@@ -405,6 +452,7 @@ class Product extends Auth{
 		$oldData					= $oldData->toArray();
 		$oldData['description']		= $Model->getDesc($id);
 		$oldData['city_ids']		= $ProductCity->getListByProductId($id);
+		$photoList					= $ProductPhoto->getListByProductId($id);
 		// 获取产品属性
 		$attrList					= $ProductAttr->getListByProductId($id);
 		// 规格属性
@@ -442,6 +490,7 @@ class Product extends Auth{
 		$this->assign('businessList',$businessList);
 		$this->assign('producerList',$producerList);
 		$this->assign('oldData',$oldData);
+		$this->assign('photoList',$photoList);
 		$this->assign('skuList',$skuList);
 		$this->assign('specList',$specList);
 		$this->assign('crumbs','修改');
@@ -454,7 +503,7 @@ class Product extends Auth{
 	 * 编辑
 	 * 
 	 * */
-	public function copy( Request $request, Model $Model,Producer $Producer,Business $Business,ProductType $ProductType,ProductSpec $ProductSpec,ProductAttr $ProductAttr,ProductSkus $ProductSkus,City $City,ProductCity $ProductCity){
+	public function copy( Request $request, Model $Model,ProductPhoto $ProductPhoto,Producer $Producer,Business $Business,ProductType $ProductType,ProductSpec $ProductSpec,ProductAttr $ProductAttr,ProductSkus $ProductSkus,City $City,ProductCity $ProductCity){
 		if( request()->isMethod('post') ){
 			// 验证参数
 			$request->scene('add')->validate();
@@ -477,6 +526,12 @@ class Product extends Auth{
 			$attr					= request('attr',[]);
 			$skuList				= request('sku',[]);
 			$cityIds				= request('city_ids',[]);
+			$photoList				= request('photo_list',[]);
+			// 循环
+			foreach ($photoList as $key => $value) {
+				if( !$value )		unset($photoList[$key]);
+			}
+			$photoList				= array_values($photoList);
 			// 如果没有选择,则意味着全部
 			$cityIds				= $cityIds ? $cityIds : [1];
 			$data['quota_start']	= $data['quota_start'] ? strtotime($data['quota_start']) : 0;
@@ -484,9 +539,13 @@ class Product extends Auth{
 			// 限购提示
 			if( !$data['thumb'] ) 	return json_send(['code'=>'error','msg'=>'请上传产品主图','data'=>['error'=>'请上传产品主图']]);
 			// 限购提示
+			if( $attr && !$skuList ) return json_send(['code'=>'error','msg'=>'规格属性存在时,请填写SKU','data'=>['error'=>'规格属性存在时,请填写SKU']]);
+			// 限购提示
 			if( $data['quota'] && ( !$data['quota_start'] || !$data['quota_end'] )) 	return json_send(['code'=>'error','msg'=>'限购必填限购时间','data'=>['error'=>'限购必填限购时间']]);
 			// 总库存
 			if( $skuList )			$data['stock'] = array_sum(array_column($skuList,'stock'));
+			// 总库存
+			$data['stock_total']	= $data['stock'];
 			// 获取规格属性
 			$specAttr				= $this->getSpecAttr($attr,$ProductSpec,true);
 			// 开启事务
@@ -501,6 +560,25 @@ class Product extends Auth{
 					// 提示
 					return 				json_send(['code'=>'error','msg'=>'新增失败']);
 				}
+				// 图册
+				foreach ($photoList as $key => $value) {
+					// 整理数据
+					$value				= ['sort'=>$key,'thumb'=>$value,'product_id'=>$id,'insert_time'=>time(),'update_time'=>time()];
+					// 重新整理
+					$photoList[$key]	= $value;
+				}
+				// 存在图册
+				if( $photoList )		{
+					// 写入失败
+					$result 			= $ProductPhoto->query()->insert($photoList);
+					// 提示新增失败
+					if( !$result )		{
+						// 回滚
+						DB::rollBack();
+						// 提示
+						return 			json_send(['code'=>'error','msg'=>'商品图册写入失败']);
+					}
+				}
 				// 组合数据
 				foreach ($specAttr as $key => $value) {
 					// 查询结果
@@ -543,6 +621,8 @@ class Product extends Auth{
 					// 转成好存储的数据
 					$value['product_id']= $id;
 					// 转成好存储的数据
+					$value['stock_total']= $value['stock'];
+					// 转成好存储的数据
 					$value['insert_time']= time();
 					// 转成好存储的数据
 					$value['update_time']= time();
@@ -590,6 +670,7 @@ class Product extends Auth{
 		$oldData					= $oldData->toArray();
 		$oldData['description']		= $Model->getDesc($id);
 		$oldData['city_ids']		= $ProductCity->getListByProductId($id);
+		$photoList					= $ProductPhoto->getListByProductId($id);
 		// 获取产品属性
 		$attrList					= $ProductAttr->getListByProductId($id);
 		// 规格属性
@@ -627,6 +708,7 @@ class Product extends Auth{
 		$this->assign('businessList',$businessList);
 		$this->assign('producerList',$producerList);
 		$this->assign('oldData',$oldData);
+		$this->assign('photoList',$photoList);
 		$this->assign('skuList',$skuList);
 		$this->assign('specList',$specList);
 		$this->assign('crumbs','复制');

+ 1 - 1
app/Http/Controllers/Api/Coupon/Active.php

@@ -99,7 +99,7 @@ class Active extends Api{
 				// 解析数组
 				$value['city_ids']		= explode(',',$value['city_ids']);
 				// 如果在城市范围
-				if( in_array($custom['city_id'],$value['city_ids']) ) {
+				if( !in_array($custom['city_id'],$value['city_ids']) ) {
 					// 如果不在城市范围
 					unset($couponList[$key]);
 					continue;

+ 19 - 4
app/Http/Controllers/Api/CustomAddr.php

@@ -3,6 +3,7 @@
 use App\Http\Controllers\Api\Api;
 use App\Models\CustomAddr as Model;
 use App\Http\Requests\Api\CustomAddr as Request;
+use App\Models\City;
 use App\Models\Custom;
 
 /**
@@ -37,13 +38,13 @@ class CustomAddr extends Api{
 	 * @param	string		$code		授权码
 	 * 
 	 * */
-	public function add(Request $request,Model $Model){
+	public function add(Request $request,Model $Model,Custom $Custom,City $City){
 		// 接口验签
 		// $this->verify_sign();
-		// 检查登录
-		$uid							= $this->checkLogin();
 		// 验证参数
 		$request->scene('add')->validate();
+		// 检查登录
+		$uid							= $this->checkLogin();
 		// 接收参数
 		$data['contact_province']		= request('contact_province','');
 		$data['contact_city']			= request('contact_city','');
@@ -54,6 +55,13 @@ class CustomAddr extends Api{
 		$data['contact_phone']			= request('contact_phone','');
 		$data['is_default']				= request('is_default',0);
 		$data['custom_uid']				= $uid;
+		// 获取客户城市ID
+		$cityId							= (int) $Custom->getValue($uid,'city_id');
+		$cityName						= $City->getOne($cityId,'name');
+		$pid 							= $City->getOne($cityId,'pid');
+		$province						= $City->getOne($pid,'name');
+		// 判断选择的城市名称是不是一致
+		if( $cityName != $data['contact_city'] ) return json_send(['code'=>'error','msg'=>'收货地址请选择'.$province.'/'.$cityName,'data'=>['error'=>'收货地址需与您所选城市一致']]);
 		// 替换地址中间的空格
 		$data['contact_addr']			= str_ireplace(' ','',$data['contact_addr']);
 		// 最大数量
@@ -78,7 +86,7 @@ class CustomAddr extends Api{
 	 * @param	string		$code		授权码
 	 * 
 	 * */
-	public function edit(Request $request,Model $Model){
+	public function edit(Request $request,Model $Model,Custom $Custom,City $City){
 		// 接口验签
 		// $this->verify_sign();
 		// 检查登录
@@ -95,6 +103,13 @@ class CustomAddr extends Api{
 		$data['contact_shop']			= request('contact_shop','');
 		$data['contact_phone']			= request('contact_phone','');
 		$data['is_default']				= request('is_default',0);
+		// 获取客户城市ID
+		$cityId							= (int) $Custom->getValue($uid,'city_id');
+		$cityName						= $City->getOne($cityId,'name');
+		$pid 							= $City->getOne($cityId,'pid');
+		$province						= $City->getOne($pid,'name');
+		// 判断选择的城市名称是不是一致
+		if( $cityName != $data['contact_city'] ) return json_send(['code'=>'error','msg'=>'收货地址请选择'.$province.'/'.$cityName,'data'=>['error'=>'收货地址需与您所选城市一致']]);
 		// 替换地址中间的空格
 		$data['contact_addr']			= str_ireplace(' ','',$data['contact_addr']);
 		// 如果需要默认当前的话

+ 10 - 4
app/Http/Controllers/Api/Orders.php

@@ -6,6 +6,8 @@ use App\Models\Product;
 use App\Models\Product\Skus as ProductSkus;
 use App\Http\Requests\Api\Orders as Request;
 use App\Models\Business;
+use App\Models\City;
+use App\Models\Custom;
 use App\Models\CustomAddr;
 use App\Models\CustomCoupon;
 use App\Models\CustomScore;
@@ -25,11 +27,8 @@ class Orders extends Api{
 	/**
 	 * 创建订单						 	/api/orders/create
 	 * 
-	 * @param	string	$car_info		需要下单的产品ID
-	 * @param	string	$buyer_number	需要下单的数量
-	 * 
 	 * */
-	public function create(Request $request,Model $Model,OrdersAddr $OrdersAddr,OrdersProduct $OrdersProduct,Product $Product,ProductSkus $ProductSkus,CustomCoupon $CustomCoupon,ShopCart $ShopCart,CustomAddr $CustomAddr,CustomScore $CustomScore){
+	public function create(Request $request,Custom $Custom,City $City,Model $Model,OrdersAddr $OrdersAddr,OrdersProduct $OrdersProduct,Product $Product,ProductSkus $ProductSkus,CustomCoupon $CustomCoupon,ShopCart $ShopCart,CustomAddr $CustomAddr,CustomScore $CustomScore){
 		// 接口验签
 		// $this->verify_sign();
 		// 验证参数
@@ -45,6 +44,13 @@ class Orders extends Api{
 		if( !$addr )					return json_send(['code'=>'error','msg'=>'地址有误,请核对','data'=>['error'=>'没有找到对应的地址']]);
 		// 重组数据
 		$addr							= ['contact_name'=>$addr['contact_name'],'contact_shop'=>$addr['contact_shop'],'contact_phone'=>$addr['contact_phone'],'contact_province'=>$addr['contact_province'],'contact_city'=>$addr['contact_city'],'contact_area'=>$addr['contact_area'],'contact_addr'=>$addr['contact_addr']];
+		// 获取客户城市ID
+		$cityId							= (int) $Custom->getValue($uid,'city_id');
+		$cityName						= $City->getOne($cityId,'name');
+		$pid 							= $City->getOne($cityId,'pid');
+		$province						= $City->getOne($pid,'name');
+		// 判断选择的城市名称是不是一致
+		if( $cityName != $addr['contact_city'] ) return json_send(['code'=>'error','msg'=>'收货地址请选择'.$province.'/'.$cityName,'data'=>['error'=>'收货地址需与您所选城市一致']]);
 		// 解码购买信息
 		$buyList						= json_decode($productList,true);
 		// 如果不存在数据

+ 10 - 1
app/Http/Controllers/Api/Product.php

@@ -9,6 +9,7 @@ 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;
 
 /**
  * 产品接口
@@ -77,7 +78,7 @@ class Product extends Api{
 	 * @param	int     $id		        产品id
 	 * 
 	 * */
-	public function get_detail(Request $request,Model $Model,Business $Business,ProductAttr $ProductAttr,ProductSpec $ProductSpec,ProductSkus $ProductSkus ){
+	public function get_detail(Request $request,Model $Model,ProductPhoto $ProductPhoto,Business $Business,ProductAttr $ProductAttr,ProductSpec $ProductSpec,ProductSkus $ProductSkus ){
 		// 接口验签
 		// $this->verify_sign();
         // 验证参数
@@ -99,6 +100,14 @@ class Product extends Api{
 		$data['poster'] 			= $data['poster'] ? path_compat($data['poster']) : '';
 		$data['description'] 		= $Model->getDesc($id);
 		$data['business_info'] 		= $Business->getOne($data['business_id']);
+		$data['photo_list'] 		= $ProductPhoto->getListByProductId($id);
+		// 缩略图处理
+		foreach ($data['photo_list']  as $key => $value) {
+			$value['thumb']			= path_compat($value['thumb']);
+			$data['photo_list'][$key] = $value;
+		}
+		// 主图追加进去
+		if( $data['photo_list'] )	array_unshift($data['photo_list'],['id'=>0,'sort'=>0,'thumb'=>$data['thumb']]);
 		// 获取产品属性
 		$attr						= $ProductAttr->getListByProductId($id);
 		// 规格属性

+ 1 - 0
app/Http/Requests/Api/Custom.php

@@ -27,6 +27,7 @@ class Custom extends BaseRequest
     // 场景列表
     protected   $scenes             = [
         'set_city'                  => ['city'],
+        'get_city'                  => [],
 	];
 
     /**

+ 66 - 0
app/Models/ProductPhoto.php

@@ -0,0 +1,66 @@
+<?php namespace App\Models;
+
+use App\Models\Traits\MultipUpdate;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 产品图册模型
+ * 
+ */
+class ProductPhoto extends Model
+{
+    use HasFactory,MultipUpdate;
+
+    // 与模型关联的表名
+    protected $table = 'product_photo';
+    // 是否主动维护时间戳
+    public $timestamps = false;
+    // 定义时间戳字段名
+    // const CREATED_AT = 'insert_time';
+    // const UPDATED_AT = 'update_time';
+
+    /**
+     * 添加数据
+     * 
+     */
+    public function add($data)
+    {
+        // 时间
+        $data['insert_time']				= time();
+        $data['update_time']				= time();
+        // 写入数据表
+        $id						            = $this->query()->insertGetId($data);
+        // 返回结果
+        return                              $id;
+    }
+
+
+    /**
+     * 添加数据
+     * 
+     */
+    public function edit($id,$data)
+    {
+        // 更新时间
+        $data['update_time']                = time();
+        // 写入数据表
+        $result						        = $this->query()->where(['id'=>$id])->update($data);
+        // 返回结果
+        return                              $result;
+    }
+
+    /**
+     * 添加数据
+     * 
+     * @param   int     $productId       产品列表
+     * 
+     */
+    public function getListByProductId($productId){
+        // 写入数据表
+        $list						       = $this->query()->where([['product_id','=',$productId]])->get(['id','sort','thumb'])->toArray();
+        // 返回结果
+        return                             $list;
+    }
+
+}

+ 1 - 1
resources/views/admin/coupon/edit.blade.php

@@ -24,7 +24,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 				<input  required="required" class="form-control" type="text" placeholder="满多少元" name="std_pay" value="{{$oldData['std_pay']}}" />
 			</div>
 			<div class="form-group col-sm-6">
-				<input  required="required" class="form-control" id="rebate" type="text" placeholder="减多少元" name="rebate" value="{{$oldData['rebate']}}" />
+				<input  required="required" class="form-control" id="rebate" type="text" placeholder="{{$oldData['rebate_type']==1?'减多少元':($oldData['rebate_type']==2?'打几折':'输入产品编码')}}" name="rebate" value="{{$oldData['rebate']}}" />
 			</div>
 		</div>
 	</div>

+ 15 - 0
resources/views/admin/coupon/index.blade.php

@@ -50,7 +50,9 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 						<th>优惠券编码</th>
 						<th>优惠券名称</th>
 						<th>优惠券类型</th>
+						<th>优惠力度</th>
 						<th>已领取/发行量</th>
+						<th>活动城市</th>
 						<th>商品范围</th>
 						<th>发放类型</th>
 						<th>优惠券状态</th>
@@ -69,7 +71,20 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 							@if ($a['rebate_type'] == 2) 折扣券 @endif
 							@if ($a['rebate_type'] == 3) 赠品券 @endif
 						</td>
+						<td>
+							满 {{$a['std_pay']}} 元
+							@if ($a['rebate_type'] == 1) 
+								减 {{$a['rebate']}} 元
+							@endif
+							@if ($a['rebate_type'] == 2) 
+								打 {{$a['rebate']}} 折
+							@endif
+							@if ($a['rebate_type'] == 3) 
+								赠送 {{$a['rebate']}}
+							@endif
+						</td>
 						<td> {{$a['custom_total']}}/{{$a['issue_total']}}</td>
+						<td> {{$a['city_ids']}}</td>
 						<td> 
 							@if ( $a['type_id'] == 1 )
 								<a href="{{url('admin/coupon_product/index?'.http_build_query(['coupon_code'=>$a['coupon_code']]))}}">指定商品</a>

+ 9 - 1
resources/views/admin/custom_coupon/index.blade.php

@@ -55,7 +55,9 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 						<th>商品范围</th>
 						<th>优惠券类型</th>
 						<th>优惠券状态</th>
+						<th>领取时间</th>
 						<th>有效期限</th>
+						<th>使用时间</th>
 						<th>操作人员</th>
 						<th>操作</th>
 					</tr>
@@ -86,7 +88,13 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 							@if ($a['status'] == 3) 过期 @endif
 							@if ($a['status'] == 4) 作废 @endif
 						</td>
-						<td> {{date('Y/m/d H:i:s',$a['insert_time'])}} ~ {{date('Y/m/d H:i:s',$a['exp_time'])}}</td>
+						<td> {{date('Y/m/d H:i:s',$a['insert_time'])}}</td>
+						<td> {{date('Y/m/d H:i:s',$a['exp_time'])}}</td>
+						<td> 
+							@if ($a['status'] == 1) 
+							{{date('Y/m/d H:i:s',$a['update_time'])}}
+							@endif
+						</td>
 						<td> {{$a['admin_name']}}</td>
 						<td>
 							@if( check_auth('admin/custom_coupon/set_status') )

+ 45 - 9
resources/views/admin/product/add.blade.php

@@ -5,7 +5,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 @section('content')
 <form class="post-form" action="" method="post">
 	<div class="form-group col-sm-2">
-		<label class="control-label">产品图</label>
+		<label class="control-label">产品图</label>
 		<div id="thumb">
 			<a id="thumb-image" href="#" data-toggle="image" class="img-thumb">
 				<img src="{{path_compat('')}}" height="100" />
@@ -13,6 +13,42 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			<input type="hidden" name="thumb" value="" id="input-image" />
 		</div>
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb1">
+			<a id="thumb-image1" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat('')}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="" id="input-image1" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb2">
+			<a id="thumb-image2" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat('')}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="" id="input-image2" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb3">
+			<a id="thumb-image3" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat('')}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="" id="input-image3" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb4">
+			<a id="thumb-image4" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat('')}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="" id="input-image4" />
+		</div>
+	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">产品海报</label>
 		<div id="poster">
@@ -54,6 +90,14 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">限购结束</label>
 		<input class="form-control" type="datetime-local" placeholder="限购结束时间" name="quota_end" value="" />
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">上架时间</label>
+		<input class="form-control" type="datetime-local" placeholder="上架时间"  name="puton_time" value="" />
+	</div>
+	<div class="form-group col-sm-2">
+		<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>
 		<select name="city_ids[]" class="form-control selectpicker" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>
@@ -90,14 +134,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>
-		<input class="form-control" type="datetime-local" placeholder="上架时间"  name="puton_time" value="" />
-	</div>
-	<div class="form-group col-sm-2">
-		<label class="control-label">下架时间</label>
-		<input class="form-control" type="datetime-local" placeholder="下架时间" name="putoff_time" value="" />
-	</div>
 	<div class="form-group col-sm-12" id="add_spec">
 		
 	</div>

+ 36 - 0
resources/views/admin/product/copy.blade.php

@@ -13,6 +13,42 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			<input type="hidden" name="thumb" value="{{$oldData['thumb']}}" id="input-image" />
 		</div>
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb1">
+			<a id="thumb-image1" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat(empty($photoList[0]['thumb'])?'':$photoList[0]['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="{{empty($photoList[0]['thumb'])?'':$photoList[0]['thumb']}}" id="input-image1" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb2">
+			<a id="thumb-image2" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat(empty($photoList[1]['thumb'])?'':$photoList[1]['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="{{empty($photoList[1]['thumb'])?'':$photoList[1]['thumb']}}" id="input-image2" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb3">
+			<a id="thumb-image3" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat(empty($photoList[2]['thumb'])?'':$photoList[2]['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="{{empty($photoList[2]['thumb'])?'':$photoList[2]['thumb']}}" id="input-image3" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb4">
+			<a id="thumb-image4" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat(empty($photoList[3]['thumb'])?'':$photoList[3]['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="{{empty($photoList[3]['thumb'])?'':$photoList[3]['thumb']}}" id="input-image4" />
+		</div>
+	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">产品海报</label>
 		<div id="poster">

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

@@ -13,6 +13,42 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 			<input type="hidden" name="thumb" value="{{$oldData['thumb']}}" id="input-image" />
 		</div>
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb1">
+			<a id="thumb-image1" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat(empty($photoList[0]['thumb'])?'':$photoList[0]['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="{{empty($photoList[0]['thumb'])?'':$photoList[0]['thumb']}}" id="input-image1" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb2">
+			<a id="thumb-image2" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat(empty($photoList[1]['thumb'])?'':$photoList[1]['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="{{empty($photoList[1]['thumb'])?'':$photoList[1]['thumb']}}" id="input-image2" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb3">
+			<a id="thumb-image3" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat(empty($photoList[2]['thumb'])?'':$photoList[2]['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="{{empty($photoList[2]['thumb'])?'':$photoList[2]['thumb']}}" id="input-image3" />
+		</div>
+	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">产品图册</label>
+		<div id="thumb4">
+			<a id="thumb-image4" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat(empty($photoList[3]['thumb'])?'':$photoList[3]['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="photo_list[]" value="{{empty($photoList[3]['thumb'])?'':$photoList[3]['thumb']}}" id="input-image4" />
+		</div>
+	</div>
 	<div class="form-group col-sm-2">
 		<label class="control-label">产品海报</label>
 		<div id="poster">
@@ -54,6 +90,14 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<label class="control-label">限购结束</label>
 		<input class="form-control" type="datetime-local" placeholder="限购结束时间" name="quota_end" value="{{$oldData['quota_end']?date('Y-m-d H:i',$oldData['quota_end']):''}}" />
 	</div>
+	<div class="form-group col-sm-2">
+		<label class="control-label">上架时间</label>
+		<input class="form-control" type="datetime-local" placeholder="上架时间"  name="puton_time" value="{{$oldData['puton_time']?date('Y-m-d H:i',$oldData['puton_time']):''}}" />
+	</div>
+	<div class="form-group col-sm-2">
+		<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>
 		<select name="city_ids[]" class="form-control selectpicker" data-live-search="true" data-live-search-placeholder="搜索城市" data-none-results-text="未搜索到 {0}" title="选择城市" multiple>
@@ -90,14 +134,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>
-		<input class="form-control" type="datetime-local" placeholder="上架时间"  name="puton_time" value="{{$oldData['puton_time']?date('Y-m-d H:i',$oldData['puton_time']):''}}" />
-	</div>
-	<div class="form-group col-sm-2">
-		<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-12" id="add_spec">
 		@foreach ($specList as $spec)
 		<div class="form-group col-sm-12">

+ 4 - 4
resources/views/admin/product/get_spec_html.blade.php

@@ -13,10 +13,10 @@
 						<input type="hidden" name="attr[{{$spec['id']}}][thumb][]" placeholder="图片路径">
 					</span>
 					@endif -->
-					<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" required="required" placeholder="属性" />
+					<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" maxlength="20" required="required" placeholder="属性" />
 				</div>
 				<div class="input-group col-sm-4">
-					<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]"  placeholder="备注" />
+					<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]" maxlength="20" placeholder="备注" />
 					<span class="input-group-addon btn-danger remove_attr" style="cursor:pointer;">
 						<i class="fa fa-trash-o"></i>
 					</span>
@@ -34,10 +34,10 @@
 							<input type="hidden" name="attr[{{$spec['id']}}][thumb][]" placeholder="图片路径" vlalue="value="{{$attr['thumb']}}" ">
 						</span>
 						@endif -->
-						<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" required="required" placeholder="属性" value="{{$attr['name']}}" />
+						<input type="{{$spec['input_type']}}" name="attr[{{$spec['id']}}][name][]" class="form-control attr_name" maxlength="20" required="required" placeholder="属性" value="{{$attr['name']}}" />
 					</div>
 					<div class="input-group col-sm-4">
-						<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]"  placeholder="备注" value="{{$attr['remark']}}" />
+						<input type="text" class="form-control" name="attr[{{$spec['id']}}][remark][]" maxlength="20" placeholder="备注" value="{{$attr['remark']}}" />
 						<span class="input-group-addon btn-danger remove_attr" style="cursor:pointer;">
 							<i class="fa fa-trash-o"></i>
 						</span>

+ 1 - 1
resources/views/admin/product/index.blade.php

@@ -49,7 +49,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 						<th>产品名称</th>
 						<th>规格</th>
 						<th>产品价格</th>
-						<th>产品库存</th>
+						<th>剩余库存/总库存</th>
 						<th>产品状态</th>
 						<th>服务城市</th>
 						<th>排序</th>