Эх сурвалжийг харах

【Add】积分兑换落地页轮播

liuxiangxin 3 сар өмнө
parent
commit
7f832b8dce

+ 144 - 0
app/Http/Controllers/Admin/ScoreBanner.php

@@ -0,0 +1,144 @@
+<?php namespace App\Http\Controllers\Admin;
+
+use App\Http\Requests\Admin\Score\Banner as Request;
+use App\Models\Orders\Banner as Model;
+use App\Models\City;
+
+/**
+ * banner管理
+ *
+ * @author    刘相欣
+ *
+ */
+class ScoreBanner extends Auth{
+	
+	protected function _initialize(){
+		parent::_initialize();
+		$this->assign('breadcrumb1','积分兑换');
+		$this->assign('breadcrumb2','结算轮播');
+	}
+	
+	/**
+	 * 首页列表
+	 * 
+	 * */
+    public function index(Model $Model){
+		// 接受参数
+		$name					= request('name','');
+		// 查询条件
+		$map 					= [];
+		// 编码ID
+		if( $name )				$map[] = ['name','=',$name];
+		// 查询数据
+		$list					= $Model->query()->where($map)->orderByDesc('id')->paginate(request('limit',config('page_num',10)))->appends(request()->all());
+		// 循环处理数据
+		foreach ($list as $key => $value) {
+			// id转编号
+			$value['thumb']		= $value['thumb'] ? path_compat($value['thumb']) : '';
+			// 重组
+			$list[$key]			= $value;
+		}
+		// 分配数据
+		$this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');
+		$this->assign('list', $list);
+		// 加载模板
+		return $this->fetch();
+    }
+
+	/**
+	 * 添加
+	 * 
+	 * */
+	public function add( Request $request, Model $Model,City $City){
+		if( request()->isMethod('post') ){
+			// 验证参数
+			$request->scene('add')->validate();
+			// 组合数据
+			$data['name']			= request('name','');
+			$data['thumb']			= request('thumb','');
+			$data['link_url']		= request('link_url','');
+			$cityIds				= request('city_ids',[]);
+			$data['city_ids']		= implode(',',$cityIds);
+			// 写入
+			$id						= $Model->add($data);
+			// 提示新增失败
+			if( !$id )				return json_send(['code'=>'error','msg'=>'新增失败']);
+			// 记录行为
+			$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,1,[],$data);
+			// 告知结果
+			return					json_send(['code'=>'success','msg'=>'新增成功','action'=>'add']);
+		}
+		// 获取列表
+		$cityList					= $City->getCityList();
+		// 分配数据
+		$this->assign('crumbs','新增');
+		$this->assign('cityList',$cityList);
+		// 加载模板
+		return 					$this->fetch();
+	}
+	
+	/**
+	 * 编辑
+	 * 
+	 * */
+	public function edit( Request $request, Model $Model,City $City){
+		if(request()->isMethod('post')){
+			// 验证参数
+			$request->scene('edit')->validate();
+			// 组合数据
+			$id						= request('id',0);
+			$data['name']			= request('name','');
+			$data['thumb']			= request('thumb','');
+			$data['link_url']		= request('link_url','');
+			$cityIds				= request('city_ids',[]);
+			$data['city_ids']		= implode(',',$cityIds);
+			// 如果没有选择,则意味着全部
+			$cityIds				= $cityIds ? $cityIds : [1];
+			// 写入
+			$result					= $Model->edit($id,$data);
+			// 提示新增失败
+			if( !$result )			return json_send(['code'=>'error','msg'=>'修改失败']);
+			// 记录行为
+			$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,[],$data);
+			// 告知结果
+			return					json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
+		}
+		// 接收参数
+		$id							= request('id',0);
+		// 查询数据
+		$oldData					= $Model->where(['id'=>$id])->first();
+		// 如果是没有数据
+		if( !$oldData ) 			return $this->error('查无数据');
+		// 获取城市ID
+		$oldData['city_ids']		= explode(',',$oldData['city_ids']);
+		// 获取列表
+		$cityList					= $City->getCityList();
+		// 分配数据
+		$this->assign('oldData',$oldData);
+		$this->assign('cityList',$cityList);
+		$this->assign('crumbs','修改');
+		// 加载模板
+		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/Controllers/Api/Score/Banner.php

@@ -0,0 +1,50 @@
+<?php namespace App\Http\Controllers\Api\Score;
+
+use App\Http\Controllers\Api\Api;
+use App\Models\Score\Banner as Model;
+use App\Models\Custom;
+
+/**
+ * 订单落地页Banner
+ * 
+ * @author 刘相欣
+ * 
+ * */
+class Banner extends Api{
+	
+	
+	/**
+	 * 获取客户信息			/api/score_banner/get_list
+	 * 
+	 * @param	string		$code		授权码
+	 * 
+	 * */
+	public function get_list(Model $Model,Custom $Custom){
+		// 接口验签
+		// $this->verify_sign();
+		// 检查登录
+		$uid							= $this->getUid();
+		// 获取客户信息
+		$custom							= $uid ? $Custom->getOne($uid) : [];
+		// 客户的城市ID
+		$cityId							= empty($custom['city_id']) ? 0 : $custom['city_id'];
+		// 查新客户类型
+		$list			                = $Model->getList();
+		// 循环处理数据
+		foreach ($list as $key => $value) {
+			//  如果没有限制城市
+			if( empty($value['city_ids']) )	continue;
+			// 如果限制了的话,转数组
+			$value['city_ids']			= explode(',',$value['city_ids']);
+			// 判断用户的城市是否在内
+			if( in_array($cityId,$value['city_ids']) )  continue;
+			// 不在范围的删除
+			unset($list[$key]);
+		}
+		// 获取数组格式
+        $list                           = array_values($list);
+		// 返回结果
+		return							json_send(['code'=>'success','msg'=>'获取成功','data'=>$list]);
+	}
+	
+}

+ 49 - 0
app/Http/Requests/Admin/Score/Banner.php

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

+ 110 - 0
app/Models/Score/Banner.php

@@ -0,0 +1,110 @@
+<?php namespace App\Models\Score;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 下单活动
+ * 
+ */
+class Banner extends Model
+{
+    use HasFactory;
+
+    // 与模型关联的表名
+    protected $table = 'score_banner';
+    // 是否主动维护时间戳
+    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);
+        // 失败结果
+        if( !$id )                          return 0;                       
+        // 更新缓存
+        $this->getList(true);
+        // 返回结果
+        return                              $id;
+    }
+
+
+    /**
+     * 添加数据
+     * 
+     */
+    public function edit($id,$data)
+    {
+        // 更新时间
+        $data['update_time']                = time();
+        // 写入数据表
+        $result						        = $this->query()->where(['id'=>$id])->update($data);
+        // 失败结果
+        if( !$result )                      return 0;                       
+        // 更新缓存
+        $this->getList(true);
+        // 返回结果
+        return                              $result;
+    }
+
+    /**
+     * 获取列表
+     * @param   Bool    $force  是否强制更新
+     * 
+     */
+    public function getList($force = false)
+    {
+        // 结果数据
+        $list                  = $force ? [] : cache('orders:banner:list');
+        // 不存在数据
+        if ( !$list )          {
+            // 从数据库获取数据
+            $data              = $this->query()->where(['status'=>0])->get(['id','thumb','name','link_url','city_ids','status']);
+            // 是否有数据
+            $data              = $data ? $data->toArray() : [];
+            // 循环处理数据
+            $list              = [];
+            // 进行更新
+            foreach ($data as $value) {
+                // 处理图片
+                $value['thumb'] = $value['thumb'] ? path_compat($value['thumb']) : '';
+                // 重组数据
+                $list[$value['id']] = $value;
+            }
+            // 存起来
+            cache(['orders:banner:list'=>$list]);
+        }
+        // 返回结果
+        return                  $list;
+    }
+
+    /**
+     * 获取配置平台对应的应用数据
+     * 
+     * @param   int      用户ID
+     * @param   string     指定字段
+     * 
+     */
+    public function getOne($id,$field='')
+    {
+        // 获取列表数据
+        $list                   = $this->getList();
+        // 获取数据
+        $one                    = isset($list[$id]) ? $list[$id] : [];
+        // 返回值
+        return                  empty($field) ? $one : ( isset($one[$field]) ? $one[$field] : null);
+    }
+    
+    
+
+}

+ 41 - 0
resources/views/admin/score_banner/add.blade.php

@@ -0,0 +1,41 @@
+@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-2">
+		<label class="control-label">活动图片【1200 x 675】</label>
+		<div id="thumb">
+			<a id="thumb-image" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat('')}}" height="100" />
+			</a>
+			<input type="hidden" name="thumb" value="" id="input-image" />
+		</div>
+	</div>
+	<div class="form-group col-sm-10">
+		<label class="control-label">活动名称</label>
+		<input class="form-control" required="required" type="text" placeholder="活动名称" maxlength="50" name="name" value="" />
+	</div>
+	<div class="form-group col-sm-5">
+		<label class="control-label">跳转链接</label>
+		<input class="form-control" type="text" placeholder="跳转链接 /pages/user/follow 添加客服路径" maxlength="120" name="link_url" value="" />
+	</div>
+	<div class="form-group col-sm-5">
+		<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>
+			@foreach ($cityList as $group)
+			<optgroup label="{{$group['name']}}">
+				@foreach ($group['city'] as $city)
+				<option value="{{$city['id']}}" >{{$city['name']}}</option>
+				@endforeach
+			</optgroup>
+			@endforeach
+		</select>
+	</div>
+	<div class="form-group col-sm-12">
+		@csrf
+		<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
+	</div>
+</form>
+@endsection

+ 42 - 0
resources/views/admin/score_banner/edit.blade.php

@@ -0,0 +1,42 @@
+@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-2">
+		<label class="control-label">活动图片【1200 x 675】</label>
+		<div id="thumb">
+			<a id="thumb-image" href="#" data-toggle="image" class="img-thumb">
+				<img src="{{path_compat($oldData['thumb'])}}" height="100" />
+			</a>
+			<input type="hidden" name="thumb" value="{{$oldData['thumb']}}" id="input-image" />
+		</div>
+	</div>
+	<div class="form-group col-sm-10">
+		<label class="control-label">活动名称</label>
+		<input class="form-control" required="required" type="text" placeholder="活动名称" maxlength="50" name="name" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-5">
+		<label class="control-label">跳转链接</label>
+		<input class="form-control" type="text" placeholder="跳转链接 /pages/user/follow 添加客服路径" maxlength="120" name="link_url" value="{{$oldData['link_url']}}" />
+	</div>
+	<div class="form-group col-sm-5">
+		<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>
+			@foreach ($cityList as $group)
+			<optgroup label="{{$group['name']}}">
+				@foreach ($group['city'] as $city)
+				<option value="{{$city['id']}}" @if(in_array($city['id'],$oldData['city_ids'])) selected @endif >{{$city['name']}}</option>
+				@endforeach
+			</optgroup>
+			@endforeach
+		</select>
+	</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

+ 72 - 0
resources/views/admin/score_banner/index.blade.php

@@ -0,0 +1,72 @@
+@extends('admin.public.base')
+@section('body_class')
+style="margin: 0 auto;width: 96%;padding: 30px 0px;"
+@endsection
+@section('content')
+<div class="page-header">
+	<a href="{{url('admin/score_banner/add')}}" class="btn btn-primary">新增</a>
+</div>
+<form action="" method="get" class="form-horizontal form-line">
+	<div class="form-group col col-lg-2 col-md-2 col-sm-2 col-xs-2" style="margin-right: 2px;">
+		<input type="text" class="form-control" name="name" value="{{request('name','')}}" placeholder="请输入名称查询" />
+	</div>
+	<input type="submit" class="btn btn-sm btn-primary" value="查询"/>
+	<a href="{{url('admin/score_banner/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>ID</th>
+						<th>名称</th>
+						<th>活动图片</th>
+						<th>跳转链接</th>
+						<th>状态</th>
+						<th>修改时间</th>
+						<th>操作</th>
+					</tr>
+				</thead>
+				<tbody>
+					@foreach ($list as $a)
+					<tr>
+						<td> {{$a['id']}}</td>
+						<td> {{$a['name']}}</td>
+						<td> <img src="{{$a['thumb']}}" alt="" height="50"> </td>
+						<td> {{$a['link_url']}} </td>
+						<td> {{$a['status']?'停用':'启用'}} </td>
+						<td> {{date('Y/m/d H:i:s',$a['update_time'])}}</td>
+						<td>
+							@if( check_auth('admin/score_banner/edit') )
+							<a class="btn btn-sm btn-warning" href="{{url('admin/score_banner/edit?'.http_build_query(['id'=>$a['id']]))}}" title="查看">
+								编辑
+							</a>
+							@endif
+							@if( check_auth('admin/score_banner/set_status') )
+								@if ($a['status'])
+									<a class="delete btn btn-sm btn-success" data-url="{{url('admin/score_banner/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'0']))}}">
+										启用
+									</a>
+								@else
+									<a class="delete btn btn-sm btn-danger" data-url="{{url('admin/score_banner/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'1']))}}">
+										停用
+									</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

+ 2 - 1
routes/api.php

@@ -113,7 +113,8 @@ Route::any('score_orders/get_list',[\App\Http\Controllers\Api\Score\Orders::clas
 
 // 订单落地页Banner
 Route::any('orders_banner/get_list',[\App\Http\Controllers\Api\Orders\Banner::class,'get_list']);
-
+// 订单落地页Banner
+Route::any('score_banner/get_list',[\App\Http\Controllers\Api\Score\Banner::class,'get_list']);
 
 // 设置用户城市
 Route::any('custom/set_city',[\App\Http\Controllers\Api\Custom::class,'set_city']);

+ 11 - 0
routes/web.php

@@ -371,6 +371,17 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     // 状态
     Route::any('orders_banner/set_status',[App\Http\Controllers\Admin\OrdersBanner::class,'set_status']);
 
+
+    /* 积分Banner */
+    // 列表
+    Route::any('score_banner/index',[App\Http\Controllers\Admin\ScoreBanner::class,'index']);
+    // 添加
+    Route::any('score_banner/add',[App\Http\Controllers\Admin\ScoreBanner::class,'add']);
+    // 编辑
+    Route::any('score_banner/edit',[App\Http\Controllers\Admin\ScoreBanner::class,'edit']);
+    // 状态
+    Route::any('score_banner/set_status',[App\Http\Controllers\Admin\ScoreBanner::class,'set_status']);
+
     /* 首页banner */
     // 列表
     Route::any('banner/index',[App\Http\Controllers\Admin\Banner::class,'index']);