Prechádzať zdrojové kódy

【Add】优惠券撤销恢复功能

liuxiangxin 6 mesiacov pred
rodič
commit
0a7b953bf7

+ 98 - 0
app/Http/Controllers/Admin/CustomCoupon.php

@@ -0,0 +1,98 @@
+<?php namespace App\Http\Controllers\Admin;
+
+use App\Models\Custom;
+use App\Models\CustomCoupon as Model;
+use App\Models\Coupon as Coupon;
+use App\Http\Requests\Admin\CustomCoupon as Request;
+
+/**
+ * 优惠券管理
+ *
+ * @author    刘相欣
+ *
+ */
+class CustomCoupon extends Auth{
+	
+	protected function _initialize(){
+		parent::_initialize();
+		$this->assign('breadcrumb1','营销管理');
+		$this->assign('breadcrumb2','客户优惠券');
+	}
+
+	/**
+	 * 首页列表
+	 * 
+	 * */
+    public function index(Model $Model,Coupon $Coupon,Custom $Custom){
+		// 接受参数
+		$code					= request('coupon_code','');
+		$customCode				= request('custom_code','');
+		$startTime				= request('start_time','');
+		$endTime				= request('end_time','');
+		$status					= request('status');
+		// 编码转ID
+		$couponId				= $code ? $Coupon->codeToId($code) : 0;
+		$customUid				= $customCode ? $Custom->codeToId($customCode) : 0;
+		// 查询条件
+		$map 					= [];
+		// 编码ID
+		if( $couponId )			$map[] = ['coupon.id','=',$couponId];
+		if( $customUid )		$map[] = ['custom_coupon.custom_uid','=',$customUid];
+		if( $startTime )		$map[] = ['custom_coupon.insert_time','>=',strtotime($startTime)];
+		if( $endTime )			$map[] = ['custom_coupon.insert_time','<=',strtotime($endTime)];
+		if( !is_null($status) )	$map[] = ['custom_coupon.status','=',$status];
+		// 查询数据
+		$list					= $Model
+								->query()->join('coupon','custom_coupon.coupon_id','=','coupon.id')
+								->where($map)
+								->orderBy('custom_coupon.status')
+								->orderByDesc('custom_coupon.id')
+								->select(['custom_coupon.id','coupon.id as coupon_id','coupon.name as coupon_name','coupon.type_id','coupon.rebate_type','coupon.std_pay','coupon.rebate','custom_coupon.status','custom_coupon.custom_uid','custom_coupon.exp_time'])
+								->paginate(request('limit',config('page_num',10)))
+								->appends(request()->all());
+		// 循环处理数据
+		foreach ($list as $key => $value) {
+			// id转编号
+			$value['coupon_code']= $Coupon->idToCode($value['coupon_id']);
+			// id转编号
+			$value['custom_code'] = $Custom->idToCode($value['custom_uid']);
+			// 如果过期时间
+			if( $value['status'] == 0 && ( $value['exp_time']>0 && $value['exp_time']< time() ) ) {
+				// 状态设置
+				$Model->edit($value['id'],['status'=>3]);
+				// 状态设置
+				$value['status'] = 3;
+			}
+			// 重组
+			$list[$key]			= $value;
+		}
+		// 分配数据
+		$this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
+		$this->assign('list', $list);
+		// 加载模板
+		return					$this->fetch();
+    }
+
+
+	/**
+	 * 状态
+	 * 
+	 * */
+	public function set_status( Request $request, Model $Model){
+		// 验证参数
+		$request->scene('set_status')->validate();
+		// 接收参数
+		$id				= request('id',0);
+		$status			= request('status',0);
+		// 查询数据
+		$result			= $Model->edit($id,['status'=>$status]);
+		// 提示新增失败
+		if( !$result )	return json_send(['code'=>'error','msg'=>'设置失败']);
+		// 记录行为
+		$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,[],['status'=>$status]);
+		// 告知结果
+		return			json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
+	}
+	
+
+}

+ 50 - 0
app/Http/Requests/Admin/CustomCoupon.php

@@ -0,0 +1,50 @@
+<?php namespace App\Http\Requests\Admin;
+
+use App\Http\Requests\BaseRequest;
+/**
+ * 入库验证器
+ * 
+ */
+class CustomCoupon extends BaseRequest
+{
+    /**
+     * 获取应用于请求的规则
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        // 编辑时排除ID
+        // 返回结果
+        return      [
+            // 有时候我们希望某个字段在第一次验证失败后就停止运行验证规则,只需要将 bail 添加到规则中:
+            // 验证字段,验证规则,提示信息
+            'id'            => 'required|integer|gt:0',
+            'status'        => 'required|integer|gte:0',
+        ];
+    }
+
+    // 场景列表
+    protected   $scenes         = [
+        'add'                   => [],
+        'set_status'            => ['id','status'],
+	];
+
+    /**
+     * 获取已定义验证规则的错误消息
+     *
+     * @return array
+     */
+    public function messages()
+    {
+        return [
+            'id.required'   		    => 'ID未知',
+            'id.integer'   		        => 'ID格式错误',
+            'id.gt'   		            => 'ID格式错误',
+            'status.required'   		=> '请选择状态',
+            'status.integer'   		    => '状态格式错误',
+            'status.gte'   		        => '状态格式错误',
+        ];
+    }
+
+}

+ 11 - 4
resources/views/admin/coupon/index.blade.php

@@ -19,8 +19,10 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<select name="status" class="form-control">
 			<option value="" >优惠券状态</option>
 			<option value="0" @if (request('status') === '0' ) selected="selected" @endif >正常</option>
-			<option value="1" @if (request('status') === '1' ) selected="selected" @endif >暂停</option>
-			<option value="2" @if (request('status') === '2' ) selected="selected" @endif >结束</option>
+			<option value="1" @if (request('status') === '1' ) selected="selected" @endif >已用</option>
+			<option value="2" @if (request('status') === '2' ) selected="selected" @endif >暂停</option>
+			<option value="2" @if (request('status') === '3' ) selected="selected" @endif >过期</option>
+			<option value="2" @if (request('status') === '3' ) selected="selected" @endif >作废</option>
 		</select>
 	</div>
 	<div class="form-group col col-md-1" style="margin-right: 2px;">
@@ -72,7 +74,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 						</td>
 						<td> 
 							@if ($a['status'] == 0) 正常 @endif
-							@if ($a['status'] == 1) 暂停 @endif
+							@if ($a['status'] == 1) 已用 @endif
 							@if ($a['status'] == 2) 暂停 @endif
 							@if ($a['status'] == 3) 过期 @endif
 							@if ($a['status'] == 4) 作废 @endif
@@ -83,6 +85,11 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 						<td> {{$a['admin_name']}}</td>
 						<td> {{date('Y/m/d H:i:s',$a['insert_time'])}}</td>
 						<td>
+							@if( check_auth('admin/custom_coupon/index') )
+							<a class="btn btn-sm btn-primary" href="{{url('admin/custom_coupon/index?'.http_build_query(['coupon_code'=>$a['coupon_code']]))}}" title="领用记录">
+								领用记录
+							</a>
+							@endif
 							@if( check_auth('admin/coupon/edit') )
 							<a class="btn btn-sm btn-warning" href="{{url('admin/coupon/edit?'.http_build_query(['id'=>$a['id']]))}}" title="查看">
 								编辑
@@ -101,7 +108,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 								@endif
 								@if ( $a['status'] < 3 )
 								<a class="delete btn btn-sm btn-danger" data-url="{{url('admin/coupon/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'4']))}}">
-									结束
+									作废
 								</a>
 								@endif
 							@endif

+ 96 - 0
resources/views/admin/custom_coupon/add.blade.php

@@ -0,0 +1,96 @@
+@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" enctype="multipart/form-data">
+	<div class="form-group col-sm-12">
+		<label class="control-label">优惠券名称 <span class="text-red">*</span></label>
+		<input class="form-control" required="required" type="text" placeholder="优惠券名称" maxlength="20" name="name" value="" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">优惠券类型 <span class="text-red">*</span></label>
+		<select class="form-control" required="required" name="rebate_type" id="rebate_type">
+			<option value="1" >满减券</option>
+			<option value="2" >折扣券</option>
+			<option value="3" >赠品券</option>
+		</select>
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">优惠力度 <span class="text-red">*</span></label>
+		<div class="form-group col-sm-12">
+			<label class="control-label"> </label>
+			<div class="form-group col-sm-2">
+				<input  required="required" class="form-control" type="text" placeholder="满多少元" name="std_pay" value="" />
+			</div>
+			<div class="form-group col-sm-2">
+				<input  required="required" class="form-control" id="rebate" type="text" placeholder="减多少元" name="rebate" value="" />
+			</div>
+		</div>
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">优惠券有效期 <span class="text-red">*</span></label>
+		<div class="form-group col-sm-12">
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" checked name="exp_type" value="1"> 领取后X天有效 </label>
+				<input class="form-control" type="number" placeholder="天数" name="exp_days" value="" />
+			</div>
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="exp_type"  value="2"> 固定有效期</label>
+				<input class="form-control" id="rebate" type="date" placeholder="开始时间" name="start_time" value="" />
+				<input class="form-control" id="rebate" type="date" placeholder="结束时间" name="end_time" value="" />
+			</div>
+		</div>
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">发行数量 <span class="text-red">*</span> </label>
+		<input class="form-control" required="required" type="number" placeholder="发行数量" min="0" max="999999" name="issue_total" value="" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">适用商品</label>
+		<div class="form-group col-sm-12">
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="type_id" checked value="2"> 全部商品范围</label>
+			</div>
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="type_id"  value="1"> 指定商品范围</label>
+				<input class="form-control" type="file" placeholder="适用商品范围" maxlength="20" name="product_file" value="" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
+			</div>
+		</div>
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">适用客户</label>
+		<div class="form-group col-sm-12">
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="is_appt" checked value="0"> 全部客户</label>
+			</div>
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="is_appt"  value="1"> 指定客户范围</label>
+				<input class="form-control" type="file" placeholder="适用客户范围" name="custom_file" value="" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
+			</div>
+		</div>
+	</div>
+	<div class="form-group col-sm-12">
+		@csrf
+		<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
+	</div>
+</form>
+@endsection
+
+@section('javascript')
+<script>
+	$(function(){
+		// 类型变更
+		$('#rebate_type').change(function(){
+			// 获取值
+			var rebateType = $(this).val();
+			// 如果是满减
+			if( rebateType == 1 ) $('#rebate').attr('placeholder','减多少元');
+			// 如果是折扣
+			if( rebateType == 2 ) $('#rebate').attr('placeholder','打几折');
+			// 如果是赠品
+			if( rebateType == 3 ) $('#rebate').attr('placeholder','产品编码');
+		})
+	})
+</script>
+@endsection

+ 96 - 0
resources/views/admin/custom_coupon/edit.blade.php

@@ -0,0 +1,96 @@
+@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">优惠券名称 <span class="text-red">*</span></label>
+		<input class="form-control" required="required" type="text" placeholder="优惠券名称" maxlength="20" name="name" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">优惠券类型 <span class="text-red">*</span></label>
+		<select class="form-control" required="required" name="rebate_type" id="rebate_type">
+			<option value="1" @if ( $oldData['rebate_type'] == '1' ) selected="selected" @endif>满减券</option>
+			<option value="2" @if ( $oldData['rebate_type'] == '2' ) selected="selected" @endif>折扣券</option>
+			<option value="3" @if ( $oldData['rebate_type'] == '3' ) selected="selected" @endif>赠品券</option>
+		</select>
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">优惠力度 <span class="text-red">*</span></label>
+		<div class="form-group col-sm-12">
+			<label class="control-label"> </label>
+			<div class="form-group col-sm-2">
+				<input  required="required" class="form-control" type="text" placeholder="满多少元" name="std_pay" value="{{$oldData['std_pay']}}" />
+			</div>
+			<div class="form-group col-sm-2">
+				<input  required="required" class="form-control" id="rebate" type="text" placeholder="减多少元" name="rebate" value="{{$oldData['rebate']}}" />
+			</div>
+		</div>
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">优惠券有效期 <span class="text-red">*</span></label>
+		<div class="form-group col-sm-12">
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" checked name="exp_type" value="1" @if ( $oldData['exp_type'] == 1 ) checked="" @endif > 领取后X天有效 </label>
+				<input class="form-control" type="number" placeholder="天数" name="exp_days" @if ( $oldData['exp_type'] == 1 ) value="{{intval($oldData['exp_time'])}}" @endif />
+			</div>
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="exp_type"  value="2" @if ( $oldData['exp_type'] == 2 )  checked="" @endif > 固定有效期</label>
+				<input class="form-control" id="rebate" type="date" placeholder="开始时间" name="start_time" @if ( $oldData['exp_type'] == 2 )  value="{{date('Y-m-d',$oldData['start_time'])}}" @endif />
+				<input class="form-control" id="rebate" type="date" placeholder="结束时间" name="end_time"  @if ( $oldData['exp_type'] == 2 ) value="{{date('Y-m-d',$oldData['end_time'])}}" @endif />
+			</div>
+		</div>
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">发行数量 <span class="text-red">*</span> </label>
+		<input class="form-control" required="required" type="number" placeholder="发行数量" min="0" max="999999" name="issue_total" value="{{$oldData['issue_total']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">适用商品</label>
+		<div class="form-group col-sm-12">
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="type_id" value="2" @if ( $oldData['type_id'] == 2 ) checked="" @endif> 全部商品范围</label>
+			</div>
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="type_id"  value="1" @if ( $oldData['type_id'] == 1 ) checked="" @endif > 指定商品范围</label>
+				<input class="form-control" type="file" placeholder="适用商品范围" maxlength="20" name="product_file" value="" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
+			</div>
+		</div>
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">适用客户</label>
+		<div class="form-group col-sm-12">
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="is_appt" value="0" @if ( $oldData['is_appt'] == 0 ) checked="" @endif> 全部客户</label>
+			</div>
+			<div class="form-group col-sm-2">
+				<label class="control-label"><input type="radio" name="is_appt"  value="1" @if ( $oldData['is_appt'] == 1 ) checked="" @endif> 指定客户范围</label>
+				<input class="form-control" type="file" placeholder="适用客户范围" name="custom_file" value="" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
+			</div>
+		</div>
+	</div>
+	<div class="form-group col-sm-12">
+		@csrf
+		<input type="hidden" name="id" value="{{$oldData['id']}}" />
+		<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
+	</div>
+</form>
+@endsection
+@section('javascript')
+<script>
+	$(function(){
+		// 类型变更
+		$('#rebate_type').change(function(){
+			// 获取值
+			var rebateType = $(this).val();
+			// 如果是满减
+			if( rebateType == 1 ) $('#rebate').attr('placeholder','减多少元');
+			// 如果是折扣
+			if( rebateType == 2 ) $('#rebate').attr('placeholder','打几折');
+			// 如果是赠品
+			if( rebateType == 3 ) $('#rebate').attr('placeholder','产品编码');
+		})
+	})
+</script>
+@endsection

+ 109 - 0
resources/views/admin/custom_coupon/index.blade.php

@@ -0,0 +1,109 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<div class="page-header">
+	@if( check_auth('admin/custom_coupon/add') )
+	<!-- <a href="{{url('admin/custom_coupon/add')}}" class="btn btn-primary">新增</a> -->
+	@endif
+</div>
+<form action="" method="get" class="form-horizontal form-line">
+	<div class="form-group col col-md-1" style="margin-right: 2px;">
+		<input type="text" class="form-control" name="coupon_code" value="{{request('coupon_code','')}}" placeholder="请输入优惠券编码查询" />
+	</div>
+	<div class="form-group col col-md-1" style="margin-right: 2px;">
+		<input type="text" class="form-control" name="custom_code" value="{{request('custom_code','')}}" placeholder="请输入客户编码查询" />
+	</div>
+	<div class="form-group col col-md-1" style="margin-right: 2px;">
+		<select name="status" class="form-control">
+			<option value="" >优惠券状态</option>
+			<option value="0" @if (request('status') === '0' ) selected="selected" @endif >正常</option>
+			<option value="1" @if (request('status') === '1' ) selected="selected" @endif >已用</option>
+			<option value="2" @if (request('status') === '2' ) selected="selected" @endif >暂停</option>
+			<option value="2" @if (request('status') === '3' ) selected="selected" @endif >过期</option>
+			<option value="2" @if (request('status') === '3' ) selected="selected" @endif >作废</option>
+		</select>
+	</div>
+	<div class="form-group col col-md-1" style="margin-right: 2px;">
+		<select name="rebate_type" class="form-control">
+			<option value="0" >优惠券类型</option>
+			<option value="1" @if (request('rebate_type') == '1' ) selected="selected" @endif >满减</option>
+			<option value="2" @if (request('rebate_type') == '2' ) selected="selected" @endif >折扣</option>
+			<option value="3" @if (request('rebate_type') == '3' ) selected="selected" @endif >赠品</option>
+		</select>
+	</div>
+	<div class="form-group col col-md-1" style="margin-right: 2px;">
+		<input type="text" class="form-control" name="start_time" value="{{request('start_time','')}}" placeholder="请输入开始时间查询" />
+	</div>
+	<div class="form-group col col-md-1" style="margin-right: 2px;">
+		<input type="text" class="form-control" name="end_time" value="{{request('end_time','')}}" placeholder="请输入结束时间查询" />
+	</div>
+	<input type="submit" class="btn btn-sm btn-primary" value="查询"/>
+	<a href="{{url('admin/custom_coupon/index')}}" class="btn btn-sm btn-default" >重置</a>
+</form>
+<div class="row">
+	<div class="col-xs-12">
+		<div class="table-responsive">
+			<table class="table table-striped table-bordered table-hover">
+				<thead>
+					<tr>
+						<th>优惠券编码</th>
+						<th>优惠券名称</th>
+						<th>指定商品</th>
+						<th>优惠券类型</th>
+						<th>优惠券状态</th>
+						<th>客户编码</th>
+						<th>有效期限</th>
+						<th>操作</th>
+					</tr>
+				</thead>
+				<tbody>
+					@foreach ($list as $a)
+					<tr>
+						<td> {{$a['coupon_code']}}</td>
+						<td> {{$a['coupon_name']}}</td>
+						<td> {{$a['type_id']==2?'全部商品':'指定商品'}}</td>
+						<td> 
+							@if ($a['rebate_type'] == 1) 满减券 @endif
+							@if ($a['rebate_type'] == 2) 折扣券 @endif
+							@if ($a['rebate_type'] == 3) 赠品券 @endif
+						</td>
+						<td> 
+							@if ($a['status'] == 0) 正常 @endif
+							@if ($a['status'] == 1) 已用 @endif
+							@if ($a['status'] == 2) 暂停 @endif
+							@if ($a['status'] == 3) 过期 @endif
+							@if ($a['status'] == 4) 作废 @endif
+						</td>
+						<td> {{$a['custom_code']}}</td>
+						<td> {{date('Y/m/d H:i:s',$a['exp_time'])}}</td>
+						<td>
+							@if( check_auth('admin/custom_coupon/set_status') )
+								@if ( $a['status'] == 4 )
+									<a class="delete btn btn-sm btn-success" data-url="{{url('admin/custom_coupon/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'0']))}}">
+										恢复
+									</a>
+								@endif
+								@if ( $a['status'] == 0 )
+									<a class="delete btn btn-sm btn-danger" data-url="{{url('admin/custom_coupon/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'4']))}}">
+										作废
+									</a>
+								@endif
+							@endif
+						</td>
+					</tr>
+					@endforeach
+					<tr>
+						<td colspan="20" class="page">{{$list->render()}}</td>
+					</tr>
+					<tr>
+						<td colspan="20">总计 {{$list->total()}} 个记录</td>
+					</tr>
+				</tbody>
+
+			</table>
+		</div>
+	</div>
+</div>
+@endsection

+ 11 - 0
routes/web.php

@@ -182,6 +182,16 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     // 状态
     Route::any('coupon/set_status',[App\Http\Controllers\Admin\Coupon::class,'set_status']);
 
+    /* 优惠券 */
+    // 列表
+    Route::any('custom_coupon/index',[App\Http\Controllers\Admin\CustomCoupon::class,'index']);
+    // 详情
+    Route::any('custom_coupon/add',[App\Http\Controllers\Admin\CustomCoupon::class,'add']);
+    // 详情
+    Route::any('custom_coupon/edit',[App\Http\Controllers\Admin\CustomCoupon::class,'edit']);
+    // 状态
+    Route::any('custom_coupon/set_status',[App\Http\Controllers\Admin\CustomCoupon::class,'set_status']);
+
     /* 商业公司 */
     // 列表
     Route::any('business/index',[App\Http\Controllers\Admin\Business::class,'index']);
@@ -287,5 +297,6 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('weiban_qrcode/edit',[App\Http\Controllers\Admin\WeibanQrcode::class,'edit']);
     // 状态
     Route::any('weiban_qrcode/set_status',[App\Http\Controllers\Admin\WeibanQrcode::class,'set_status']);
+    
 
 });