Browse Source

Merge branch 'liuxiangxin' into jun

jun 2 months ago
parent
commit
cce0f3d15e

+ 150 - 0
app/Http/Controllers/Admin/BookStock.php

@@ -0,0 +1,150 @@
+<?php namespace App\Http\Controllers\Admin;
+
+use App\Http\Requests\Admin\BookStock as Request;
+use App\Models\BookStock as Model;
+use Illuminate\Support\Carbon;
+/**
+ * BookStock管理
+ *
+ * @author    刘相欣
+ *
+ */
+class BookStock extends Auth{
+	
+	protected function _initialize(){
+		parent::_initialize();
+		$this->assign('breadcrumb1','图书管理');
+		$this->assign('breadcrumb2','入库管理');
+	}
+	
+	/**
+	 * 首页列表
+	 * 
+	 * */
+    public function index(Model $Model){
+		// 接受参数
+		$name					= request('name','');
+		$batchNo				= request('batch_no','');
+		$author					= request('author','');
+		$startTime				= request('start_time','');
+		$endTime				= request('end_time','');
+		// 查询条件
+		$map 					= [];
+		// 编码ID
+		if( $name )				$map[] = ['name','=',$name];
+		if( $batchNo )			$map[] = ['id','=',$Model->codeToId($batchNo)];
+		if( $author )			$map[] = ['author','=',$author];
+		if( $startTime )		$map[] = ['insert_time','>=',Carbon::createFromFormat('Y-m-d',$startTime)->startOfDay()->getTimestamp()];
+		if( $endTime )			$map[] = ['insert_time','<=',Carbon::createFromFormat('Y-m-d',$endTime)->endOfDay()->getTimestamp()];
+		// 查询数据
+		$list					= $Model->query()->where($map)->orderByDesc('id')->paginate(request('limit',config('page_num',10)))->appends(request()->all());
+		// 循环处理数据
+		foreach ($list as $key => $value) {
+			// id转编号
+			$value['batch_no']	= $Model->idToCode($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){
+		if( request()->isMethod('post') ){
+			// 验证参数
+			$request->scene('add')->validate();
+			// 组合数据
+			$data['name']			= request('name','');
+			$data['thumb']			= request('thumb','');
+			$data['isbn']			= request('isbn','');
+			$data['author']			= request('author','');
+			$data['press']			= request('press','');
+			$data['stock']			= request('stock',0);
+			$data['remark']			= request('remark','');
+			$data['publish_date']	= request('publish_date','');
+			$data['publish_date']	= $data['publish_date'] ? strtotime($data['publish_date']) : 0;
+			// 写入
+			$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']);
+		}
+		// 分配数据
+		$this->assign('crumbs','新增');
+		// 加载模板
+		return 					$this->fetch();
+	}
+	
+	/**
+	 * 编辑
+	 * 
+	 * */
+	public function edit( Request $request, Model $Model){
+		if(request()->isMethod('post')){
+			// 验证参数
+			$request->scene('edit')->validate();
+			// 组合数据
+			$id						= request('id',0);
+			$data['name']			= request('name','');
+			$data['thumb']			= request('thumb','');
+			$data['isbn']			= request('isbn','');
+			$data['author']			= request('author','');
+			$data['press']			= request('press','');
+			$data['stock']			= request('stock',0);
+			$data['remark']			= request('remark','');
+			$data['publish_date']	= request('publish_date','');
+			$data['publish_date']	= $data['publish_date'] ? strtotime($data['publish_date']) : 0;
+			// 写入
+			$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('查无数据');
+		// 分配数据
+		$this->assign('oldData',$oldData);
+		$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'=>'']);
+	}
+
+}

+ 93 - 32
app/Http/Controllers/Admin/Orders.php

@@ -11,6 +11,7 @@ use App\Models\Orders as Model;
 use App\Models\Orders\Receipt;
 use App\Models\OrdersAddr;
 use App\Models\OrdersProduct;
+use App\Models\School;
 use Illuminate\Support\Facades\DB;
 use Kra8\Snowflake\Snowflake;
 use Intervention\Image\Facades\Image;
@@ -38,15 +39,16 @@ class Orders extends Auth{
     public function index(Model $Model,OrdersProduct $OrdersProduct,Product $Product,Custom $Custom){
 		// 接受参数
 		$code					= request('order_code','');
-		$snowflake_id			= request('snowflake_id','');
-		$orders_other			= request('orders_other',0);
 		$productCode			= request('product_code','');
-		$phone					= request('phone','');
+		$snowflakeId			= request('snowflake_id',0);
+		$orders_other			= request('orders_other',0);
 		$customCode				= request('custom_code','');
-		$contact_area			= request('contact_area','');
-		$contact_school			= request('contact_school','');
-		$contact_grade			= request('contact_grade','');
-		$contact_class			= request('contact_class','');
+		$productName			= request('product_name','');
+		$phone					= request('phone','');
+        $contact_area			= request('contact_area','');
+        $contact_school			= request('contact_school','');
+        $contact_grade			= request('contact_grade','');
+        $contact_class			= request('contact_class','');
 		$status					= request('status',0);
 		$startTime				= request('start_time','');
 		$endTime				= request('end_time','');
@@ -57,37 +59,58 @@ class Orders extends Auth{
 		// 查询条件
 		$map 					= [];
 		// 编码ID
-		if( $id )				$map[] = ['orders.id','=',$id];
-		if( $snowflake_id )		$map[] = ['orders.snowflake_id','=',$snowflake_id];
+		if( $id )				$map[] = ['orders_product.order_id','=',$id];
+		if( $snowflakeId )		$map[] = ['orders.snowflake_id','=',$snowflakeId];
+		if( $uid )				$map[] = ['custom.uid','=',$uid];
 		// 编码ID
 		if( $orders_other )		$map[] = $orders_other == 1 ? ['orders_product.product_id','>',0] : ['orders_product.product_id','=',0];
-		if( $uid )				$map[] = ['custom.uid','=',$uid];
+		if( $productId )		$map[] = ['orders_product.product_id','=',$productId];
+		if( $productName )		$map[] = ['orders_product.product_name','=',$productName];
 		if( $phone )			$map[] = ['orders_addr.contact_phone','=',$phone];
-		if( $contact_area )		$map[] = ['orders_addr.contact_area','LIKE','%'.$contact_area.'%'];
-		if( $contact_school )	$map[] = ['orders_addr.contact_school','LIKE','%'.$contact_school.'%'];
-		if( $contact_grade )	$map[] = ['orders_addr.contact_grade','LIKE','%'.$contact_grade.'%'];
-		if( $contact_class )	$map[] = ['orders_addr.contact_class','LIKE','%'.$contact_class.'%'];
-		if( $startTime )		$map[] = ['orders.insert_time','>=',strtotime($startTime)];
-		if( $endTime )			$map[] = ['orders.insert_time','<=',strtotime($endTime)];
-		if( $status )			$map[] = ['orders.status','=',$status];
+        if( $contact_area )		$map[] = ['orders_addr.contact_area','LIKE','%'.$contact_area.'%'];
+        if( $contact_school )	$map[] = ['orders_addr.contact_school','LIKE','%'.$contact_school.'%'];
+        if( $contact_grade )	$map[] = ['orders_addr.contact_grade','LIKE','%'.$contact_grade.'%'];
+        if( $contact_class )	$map[] = ['orders_addr.contact_class','LIKE','%'.$contact_class.'%'];
+		if( $startTime )		$map[] = ['orders_product.insert_time','>=',strtotime($startTime)];
+		if( $endTime )			$map[] = ['orders_product.insert_time','<=',strtotime($endTime)];
+		if( $status )			$map[] = ['orders_product.status','=',$status];
 		// 查询数据
-        $list					= $Model->query()
-								->join('custom','orders.custom_uid','=','custom.uid')
-								->join('orders_addr','orders_addr.order_id','=','orders.id')
-								->where($map)
-								->orderByDesc('id')
-								->select(['orders.id as order_id',
-									'orders.*','custom.username as custom_name','orders.regiment_id as regiment_id',
-									'orders_addr.contact_area','orders_addr.contact_school','orders_addr.contact_grade','orders_addr.contact_class','orders_addr.contact_name','orders_addr.contact_phone',
-								])
-								->paginate(request('limit',config('page_num',10)))->appends(request()->all());
+		$list					= $OrdersProduct->query()
+									->join('custom','orders_product.custom_uid','=','custom.uid')
+									->join('orders','orders.id','=','orders_product.order_id')
+									->join('orders_addr','orders_addr.order_id','=','orders_product.order_id')
+									->where($map)
+									->orderByDesc('orders_product.id')
+									->select([
+										'orders_product.id as id',
+										'orders.snowflake_id',
+										'orders_product.order_id',
+										'orders_product.product_id',
+										'orders_product.product_name',
+										'orders_product.sku_attr_names as product_spec',
+										'orders_product.product_thumb',
+										'orders_product.buy_num',
+										'orders_product.price_total',
+										'orders_product.coupon_total',
+										'orders_product.pay_total',
+										'orders_product.status',
+										'orders_addr.contact_area',
+										'orders_addr.contact_school',
+										'orders_addr.contact_grade',
+										'orders_addr.contact_class',
+										'orders_addr.contact_name',
+										'orders_addr.contact_phone',
+										'custom.uid as custom_uid',
+										'custom.username as custom_name',
+										'custom.external_userid as external_userid',
+										'orders_product.insert_time',
+									])->paginate(request('limit',config('page_num',10)))->appends(request()->all());
 		// 循环处理数据
 		foreach ($list as $key => $value) {
 			// id转编号
-			$value['order_code']	= $Model->idToCode($value['id']);
+			$value['order_code']	= $Model->idToCode($value['order_id']);
 			$value['custom_code']	= $Custom->idToCode($value['custom_uid']);
 			$value['state']			= $Model->getState($value['status'],'state');
-            $value['product']       = $OrdersProduct->query()->where('order_id',$value['id'])->select(['product_name','buy_num'])->get()->toArray();
 			// 重组
 			$list[$key]				= $value;
 		}
@@ -382,6 +405,7 @@ class Orders extends Auth{
 		// 接受参数
 		$code					= request('order_code','');
 		$productCode			= request('product_code','');
+		$snowflakeId			= request('snowflake_id',0);
 		$orders_other			= request('orders_other',0);
 		$customCode				= request('custom_code','');
 		$productName			= request('product_name','');
@@ -401,6 +425,7 @@ class Orders extends Auth{
 		$map 					= [];
 		// 编码ID
 		if( $id )				$map[] = ['orders_product.order_id','=',$id];
+		if( $snowflakeId )		$map[] = ['orders.snowflake_id','=',$snowflakeId];
 		if( $uid )				$map[] = ['custom.uid','=',$uid];
 		// 编码ID
 		if( $orders_other )		$map[] = $orders_other == 1 ? ['orders_product.product_id','>',0] : ['orders_product.product_id','=',0];
@@ -417,11 +442,13 @@ class Orders extends Auth{
 		// 查询数据
 		$data					= $OrdersProduct->query()
 									->join('custom','orders_product.custom_uid','=','custom.uid')
+									->join('orders','orders.id','=','orders_product.order_id')
 									->join('orders_addr','orders_addr.order_id','=','orders_product.order_id')
 									->where($map)
 									->orderByDesc('orders_product.id')
 									->select([
 										'orders_product.id as id',
+										'orders.snowflake_id',
 										'orders_product.order_id',
 										'orders_product.product_id',
 										'orders_product.product_name',
@@ -446,7 +473,6 @@ class Orders extends Auth{
 		// 循环处理数据
         foreach ($data as $key => $value) {
             // id转编号
-            $value['order_id']		= $Model->idToCode($value['order_id']);
             $value['status']		= $Model->getState($value['status'],'state');
             $value['custom_uid']	= $Custom->idToCode($value['custom_uid']);
 			$value['product_id']	= $value['product_id'] ? $Product->idToCode($value['product_id']) : '— —';
@@ -454,7 +480,8 @@ class Orders extends Auth{
             $value['pay_price']		= $value['buy_num'] ? ($value['pay_total'] / $value['buy_num']) : $value['buy_num'];
             // 重组
             $data[$key]             = [
-                'order_id'		    => $value['order_id'],
+                'order_id'		    => $Model->idToCode($value['order_id']),
+				'snowflake_id'		=> (string)$value['snowflake_id'],
                 'status'		    => $value['status'],
                 'contact_area'		=> $value['contact_area'],
                 'contact_school'	=> $value['contact_school'],
@@ -496,6 +523,7 @@ class Orders extends Auth{
             $excel      = new \Vtiful\Kernel\Excel($config);
             $header     =   [
                 '订单ID',
+				'订单编号',
                 '订单状态',
                 '区域',
                 '学校',
@@ -605,7 +633,7 @@ class Orders extends Auth{
 	/**
 	 * 设置订单地址
 	 */
-	public function set_addr(Request $request,OrdersAddr $OrdersAddr){
+	public function set_addr(Request $request,OrdersAddr $OrdersAddr,School $School){
 		// 接收参数
 		$orderId						= request('order_id',''); 
 		// 获取数据
@@ -628,10 +656,43 @@ class Orders extends Auth{
 			// 告知结果
 			return						json_send(['code'=>'success','msg'=>'编辑成功','action'=>'edit']);
 		}
+		// 获取地址
+		$areaList 						= $School->getAreaList();
+		// 年级
+		$gradeList 						= $School->getGradeList();
+		// 班级
+		$classList 						= $School->getClassList();
+		// 学校
+		$schoolList 					= $School->query()->where([['area','=',request('contact_area',$oldData['contact_area'])]])->get(['id','name'])->toArray();
 		// 分配数据
 		$this->assign('oldData',$oldData);
+		$this->assign('areaList',$areaList);
+		$this->assign('gradeList',$gradeList);
+		$this->assign('classList',$classList);
+		$this->assign('schoolList',$schoolList);
 		$this->assign('crumbs','修改地址');
 		// 加载模板
 		return						$this->fetch();
 	}
+
+	/**
+	 * 设置订单地址
+	 */
+	public function get_school(OrdersAddr $OrdersAddr,School $School){
+		// 接收参数
+		$orderId						= request('order_id',0); 
+		// 获取数据
+		$oldData						= $OrdersAddr->getOneByOrderId($orderId);
+		// 接收参数
+		$contactArea					= request('contact_area',''); 
+		// 学校
+		$schoolList 					= $School->query()->where([['area','=',$contactArea]])->get(['id','name'])->toArray();
+		// 分配数据
+		$this->assign('oldData',$oldData);
+		$this->assign('schoolList',$schoolList);
+		// 加载模板
+		return						$this->fetch();
+	}
+
+
 }

+ 43 - 12
app/Http/Controllers/Admin/Product.php

@@ -69,13 +69,6 @@ class Product extends Auth{
 		$salesList				= $OrdersProduct->query()->where([['status','<>',4]])->whereIn('product_id',array_column($list->items(),'id'))->groupBy('product_id')->select([DB::raw('sum(`buy_num`) as sales_total'),'product_id'])->pluck('sales_total','product_id')->toArray();
 		// 循环处理数据
 		foreach ($list as $key => $value) {
-			// 判断总库存
-			if( !$value['stock_total'] )	{
-				// 以首次添加时的为准
-				$value['stock_total']= (int) $AdminHistory->query()->where([['table_name','=','product'],['primary_id','=',$value['id']],['notes_type','=',1],['column_name','=','stock']])->orderBy('update_time')->value('after_value');
-				// 修改库存
-				$Model->edit($value['id'],['stock_total'=>$value['stock_total']]);
-			}
 			// id转编号
 			$value['product_code']	= $Model->idToCode($value['id']);
 			// id转编号
@@ -354,6 +347,11 @@ class Product extends Auth{
 	 * 
 	 * */
 	public function edit( Request $request, Model $Model,Course $Course,WeiBanTags $WeiBanTags,ProductPhoto $ProductPhoto,Producer $Producer,Business $Business,ProductType $ProductType,ProductSpec $ProductSpec,ProductAttr $ProductAttr,ProductSkus $ProductSkus,City $City,ProductCity $ProductCity){
+		// 接收参数
+		$id							= request('id',0);
+		// 查询数据
+		$oldData					= $Model->where(['id'=>$id])->first();
+
 		if(request()->isMethod('post')){
 			// 验证参数
 			$request->scene('edit')->validate();
@@ -509,7 +507,7 @@ class Product extends Auth{
 				// 提交
 				DB::commit();
 				// 记录行为
-				$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,[],$data);
+				$this->addAdminHistory(admin('uid'),$Model->getTable(),$id,2,$oldData,$data);
 				// 告知结果
 				return					json_send(['code'=>'success','msg'=>'修改成功','action'=>'edit']);
 			} catch (\Throwable $th) {
@@ -519,10 +517,6 @@ class Product extends Auth{
 				return 				json_send(['code'=>'error','msg'=>'系统异常,写入失败','data'=>$th->getMessage() .'=>'.$th->getLine()]);
 			}	
 		}
-		// 接收参数
-		$id							= request('id',0);
-		// 查询数据
-		$oldData					= $Model->where(['id'=>$id])->first();
 		// 如果是没有数据
 		if( !$oldData ) 			return $this->error('查无数据');
 		// 产品信息转格式
@@ -995,4 +989,41 @@ class Product extends Auth{
 		return			json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
 	}
 
+
+	/**
+	 * 排序
+	 * 
+	 * */
+	public function batch_status( Request $request, Model $Model ){
+		// 验证参数
+		// $request->scene('batch_status')->validate();
+		// 接收参数
+		$idList				= request('product_list',[]);
+		$status				= request('status',0);
+		// 查询对应的数据
+		$oldList			= $Model->query()->where([['status','=',$status ? 0 : 1]])->whereIn('id',$idList)->get(['id','status','puton_time'])->toArray();
+		// 没有符合条件的数据
+		if( !$oldList )		return json_send(['code'=>'error','msg'=>'无可操作数据']);
+		// 开启事务
+		DB::beginTransaction();
+		// 循环数据
+		foreach ($oldList as $value) {
+			// 如果是有上架时间, 预上架,否则直接上架
+			$result 		= $Model->edit($value['id'],['status'=>$status]);
+			// 提示新增失败
+			if( !$result )	{
+				// 事务回滚
+				DB::rollBack();
+				// 返回提示
+				return		json_send(['code'=>'error','msg'=>'设置失败']);
+			}
+			// 记录行为
+			$this->addAdminHistory(admin('uid'),$Model->getTable(),$value['id'],2,$value,['status'=>$status]);
+		}
+		// 提交事务
+		DB::commit();
+		// 告知结果
+		return			json_send(['code'=>'success','msg'=>'设置成功','path'=>'']);
+	}
+
 }

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

@@ -36,7 +36,7 @@ class School extends Auth{
         if( $startTime )		$map[] = ['insert_time','<=',Carbon::createFromFormat('Y-m-d',$startTime)->endOfDay()->getTimestamp()];
         if( !is_null($status) )	$map[] = ['status','=',$status];
         // 查询数据
-        $list					= $Model->query()->where($map)->orderByDesc('id')->paginate(config('page_num',10));
+        $list					= $Model->query()->where($map)->orderByDesc('id')->paginate(config('page_num',10))->appends(request()->all());
         $areaList               = $Model->getAreaList();
         // 分配数据
         $this->assign('empty', '<tr><td colspan="20">~~暂无数据</td></tr>');

+ 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\Score\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]);
+	}
+	
+}

+ 3 - 3
app/Http/Controllers/Api/WechatWork.php

@@ -89,11 +89,11 @@ class WechatWork extends Api{
 		// 如果添加失败
 		if( !$id )					return ['error'=>'新用户添加失败'];
 		// 跳转链接pages/user/bind
-		$link						= Mini::getUrlLink('pages/user/bind',http_build_query(['id'=>1,'kailin_uid'=>Hashids::encodeHex($id),'work_userid'=>$message['UserID']]));
+		// $link						= Mini::getUrlLink('pages/user/bind',http_build_query(['id'=>1,'kailin_uid'=>Hashids::encodeHex($id),'work_userid'=>$message['UserID']]));
 		// 欢迎语
-		$welcome					= $link ? ['link'=>['title'=>'请点此返回小程序领取玩具','desc'=>'家长好,我是您的专属客服,有问题请联系我','url'=>$link]] : ['text'=>['content'=>'请联系您的对接人员为您录入信息']];
+		// $welcome					= $link ? ['link'=>['title'=>'请点此返回小程序领取玩具','desc'=>'家长好,我是您的专属客服,有问题请联系我','url'=>$link]] : ['text'=>['content'=>'请联系您的对接人员为您录入信息']];
 		// 发送欢迎语
-		ExternalContact::sendWelcome($message['WelcomeCode'],$welcome);
+		// ExternalContact::sendWelcome($message['WelcomeCode'],$welcome);
 		// 循环跟进人员
 		foreach ($extUser['follow_user'] as $workUser)		{
 			// 如果是当前的跟进人员

+ 1 - 0
app/Http/Middleware/AdminAuth.php

@@ -22,6 +22,7 @@ class AdminAuth
                                 'admin/image_manager/folder',       // 获取sku
                                 'admin/image_manager/delete',       // 获取sku
                                 'admin/ueditor/upload',             // 获取sku
+                                'admin/orders/get_school'
                             ];
     //默认配置
     protected   $_config    = [

+ 49 - 0
app/Http/Requests/Admin/BookStock.php

@@ -0,0 +1,49 @@
+<?php namespace App\Http\Requests\Admin;
+
+use App\Http\Requests\BaseRequest;
+
+/**
+ * 类型验证器
+ * 
+ */
+class BookStock 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格式错误',
+        ];
+    }
+    
+}

+ 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格式错误',
+        ];
+    }
+    
+}

+ 77 - 0
app/Models/BookStock.php

@@ -0,0 +1,77 @@
+<?php namespace App\Models;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 订单落地BookStock
+ * 
+ */
+class BookStock extends Model
+{
+    use HasFactory;
+
+    // 与模型关联的表名
+    protected $table = 'book_stock';
+    // 是否主动维护时间戳
+    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;                       
+        // 返回结果
+        return                              $id;
+    }
+
+
+    /**
+     * 添加数据
+     * 
+     */
+    public function edit($id,$data)
+    {
+        // 更新时间
+        $data['update_time']                = time();
+        // 写入数据表
+        $result						        = $this->query()->where(['id'=>$id])->update($data);
+        // 失败结果
+        if( !$result )                      return 0;                       
+        // 返回结果
+        return                              $result;
+    }
+
+
+    /**
+     * 编码转id
+     * 
+     * @param  string $code 编码
+     * 
+     */
+    public function codeToId($code){
+        return intval(str_ireplace('bk','',$code));
+    }
+ 
+    /**
+     * id转编码
+    * 
+    * @param  int  $id 编码
+    * 
+    */
+    public function idToCode($id){
+        return str_pad($id, 9, '0', STR_PAD_LEFT);;
+    }
+
+}

+ 1 - 1
app/Models/Orders.php

@@ -88,7 +88,7 @@ class Orders extends Model
         // 提示新增失败
         if( !$result )	{
             // 提示信息
-            return      ['error'=>'子订单修改失败'];json_send(['code'=>'error','msg'=>'取消失败','data'=>['error'=>'']]);
+            return      ['error'=>'子订单修改失败'];
         }
         // 进行操作
         return          ['success'=>'成功'];

+ 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);
+    }
+    
+    
+
+}

+ 49 - 0
resources/views/admin/book_stock/add.blade.php

@@ -0,0 +1,49 @@
+@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-3">
+		<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" />
+			</a>
+			<input type="hidden" name="thumb" value="" id="input-image" />
+		</div>
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">图书ISBN</label>
+		<input class="form-control" required="required" type="text" placeholder="图书ISBN" maxlength="64" name="isbn" value="" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">书名</label>
+		<input class="form-control" required="required" type="text" placeholder="书名" maxlength="64" name="name" value="" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">作者</label>
+		<input class="form-control" required="required" type="text" placeholder="作者" maxlength="64" name="author" value="" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">出版社</label>
+		<input class="form-control" required="required" type="text" placeholder="出版社" maxlength="64" name="press" value="" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">出版时间</label>
+		<input class="form-control" required="required" type="date" placeholder="出版时间"  name="publish_date" value="" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">库存数量</label>
+		<input class="form-control" required="required" type="number" placeholder="库存数量"  name="stock" value="" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">备注说明</label>
+		<input class="form-control" type="text" placeholder="备注说明" maxlength="25" name="remark" value="" />
+	</div>
+	<div class="form-group col-sm-12">
+		@csrf
+		<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
+	</div>
+</form>
+@endsection

+ 50 - 0
resources/views/admin/book_stock/edit.blade.php

@@ -0,0 +1,50 @@
+@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-3">
+		<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-3">
+		<label class="control-label">图书ISBN</label>
+		<input class="form-control" required="required" type="text" placeholder="图书ISBN" maxlength="64" name="isbn" value="{{$oldData['isbn']}}" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">书名</label>
+		<input class="form-control" required="required" type="text" placeholder="书名" maxlength="64" name="name" value="{{$oldData['name']}}" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">作者</label>
+		<input class="form-control" required="required" type="text" placeholder="作者" maxlength="64" name="author" value="{{$oldData['author']}}" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">出版社</label>
+		<input class="form-control" required="required" type="text" placeholder="出版社" maxlength="64" name="press" value="{{$oldData['press']}}" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">出版时间</label>
+		<input class="form-control" required="required" type="date" placeholder="出版时间"  name="publish_date" value="{{date('Y-m-d',$oldData['publish_date'])}}" />
+	</div>
+	<div class="form-group col-sm-3">
+		<label class="control-label">库存数量</label>
+		<input class="form-control" required="required" type="number" placeholder="库存数量"  name="stock" value="{{$oldData['stock']}}" />
+	</div>
+	<div class="form-group col-sm-12">
+		<label class="control-label">备注说明</label>
+		<input class="form-control" type="text" placeholder="备注说明" maxlength="25" name="remark" value="{{$oldData['remark']}}" />
+	</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

+ 92 - 0
resources/views/admin/book_stock/index.blade.php

@@ -0,0 +1,92 @@
+@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/book_stock/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="batch_no" value="{{request('batch_no','')}}" placeholder="请输入批次编码查询" />
+	</div>
+	<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>
+	<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="author" value="{{request('author','')}}" placeholder="请输入作者查询" />
+	</div>
+	<div class="form-group col col-lg-2 col-md-2 col-sm-2 col-xs-2" style="margin-right: 2px;">
+		<input type="date" class="form-control" name="start_time" value="{{request('start_time','')}}" placeholder="请输入开始时间" />
+	</div>
+	<div class="form-group col col-lg-2 col-md-2 col-sm-2 col-xs-2" style="margin-right: 2px;">
+		<input type="date" 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/book_stock/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>图书ISBN</th>
+						<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['batch_no']}}</td>
+						<td> <img src="{{$a['thumb']}}" alt="" height="50"> </td>
+						<td> {{$a['isbn']}} </td>
+						<td> {{$a['name']}}</td>
+						<td> {{$a['author']}} </td>
+						<td> {{$a['press']}}</td>
+						<td> {{date('Y/m/d',$a['publish_date'])}}</td>
+						<td> {{$a['stock']}}</td>
+						<td> {{$a['status']?'停用':'启用'}} </td>
+						<td> {{date('Y/m/d H:i:s',$a['update_time'])}}</td>
+						<td>
+							@if(check_auth('admin/book_stock/edit'))
+							<a class="btn btn-sm btn-warning" href="{{url('admin/book_stock/edit?'.http_build_query(['id'=>$a['id']]))}}" title="查看">
+								编辑
+							</a>
+							@endif
+							@if(check_auth('admin/book_stock/set_status'))
+								@if ($a['status'])
+									<a class="delete btn btn-sm btn-success" data-url="{{url('admin/book_stock/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'0']))}}">
+										启用
+									</a>
+								@else
+									<a class="delete btn btn-sm btn-danger" data-url="{{url('admin/book_stock/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

+ 3 - 0
resources/views/admin/orders/get_school.blade.php

@@ -0,0 +1,3 @@
+@foreach ($schoolList as $school)
+	<option value="{{$school['name']}}" @if( $oldData['contact_school'] == $school['name'] ) selected @endif >{{$school['name']}}</option>
+@endforeach

+ 1 - 4
resources/views/admin/orders/index.blade.php

@@ -101,10 +101,7 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 					    <td>{{$a['is_rebate']?'【赠品】':''}}{{$a['order_code']}}</td>
 					    <td>{{$a['snowflake_id']}}</td>
 						<td><a href="{{url('admin/custom/index?'.http_build_query(['custom_code'=>$a['custom_code']]))}}">{{$a['custom_name']}}</a></td>
-						<td>@foreach($a['product'] as $product)
-								{{$product['product_name'].'*'.$product['buy_num']}}<br/>
-							@endforeach
-						</td>
+						<td>{{$a['product_name']}}  * {{$a['buy_num']}}</td>
 						<td>¥{{$a['price_total']}}</td>
 						<td>¥{{$a['pay_total']}}</td>
 						<td>{{$a['contact_name']}}</td>

+ 42 - 5
resources/views/admin/orders/set_addr.blade.php

@@ -6,19 +6,35 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 <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" type="text" placeholder="区域" maxlength="45" name="contact_area" value="{{$oldData['contact_area']}}" />
+		<select name="contact_area" required="required" class="form-control" id="contact_area">
+			@foreach ($areaList as $name)
+			<option value="{{$name}}" @if( request('contact_area',$oldData['contact_area']) == $name ) selected @endif >{{$name}}</option>
+			@endforeach
+		</select>
 	</div>
-	<div class="form-group col-sm-2">
+	<div class="form-group col-sm-12">
 		<label class="control-label">学校</label>
-		<input class="form-control" required="required" type="text" placeholder="学校" maxlength="45" name="contact_school" value="{{$oldData['contact_school']}}" />
+		<select name="contact_school" id="contact_school" class="form-control selectpicker" data-live-search="true" data-live-search-placeholder="搜索学校" data-none-results-text="未搜索到 {0}" title="选择学校">
+			@foreach ($schoolList as $school)
+				<option value="{{$school['name']}}" @if( $oldData['contact_school'] == $school['name'] ) selected @endif >{{$school['name']}}</option>
+			@endforeach
+		</select>
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">年级</label>
-		<input class="form-control" required="required" type="text" placeholder="年级" maxlength="20" name="contact_grade" value="{{$oldData['contact_grade']}}" />
+		<select name="contact_grade" required="required" class="form-control">
+			@foreach ($gradeList as $name)
+			<option value="{{$name}}" @if( $oldData['contact_grade'] == $name ) selected @endif >{{$name}}</option>
+			@endforeach
+		</select>
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">班级</label>
-		<input class="form-control" required="required" type="text" placeholder="班级" maxlength="20" name="contact_class" value="{{$oldData['contact_class']}}" />
+		<select name="contact_class" required="required" class="form-control">
+			@foreach ($classList as $name)
+			<option value="{{$name}}" @if( $oldData['contact_class'] == $name ) selected @endif >{{$name}}</option>
+			@endforeach
+		</select>
 	</div>
 	<div class="form-group col-sm-12">
 		<label class="control-label">学生</label>
@@ -35,4 +51,25 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 		<input id="send" type="submit" value="提交" class="btn btn-primary btn-block" />
 	</div>
 </form>
+@endsection
+@section('javascript')
+<script type="text/javascript">
+// 获取节点
+$(function(){
+
+	$('#contact_area').change(function(){
+		var contact_area	= $(this).val();
+		var order_id		= "{{$oldData['order_id']}}";
+		var url 			= "{{url('admin/orders/get_school')}}";
+
+		$.get(url,{contact_area:contact_area,order_id:order_id},function(data){
+			console.log(data);
+			$('#contact_school').html(data);
+			$('.selectpicker').selectpicker('render');
+			$('.selectpicker').selectpicker('refresh');
+		})
+		
+	})
+})
+</script>
 @endsection

+ 131 - 70
resources/views/admin/product/index.blade.php

@@ -46,78 +46,96 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 <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>
-						<th>服务城市</th>
-						<th>排序</th>
-						<th>限购数量</th>
-						<th>修改时间</th>
-						<th>操作</th>
-					</tr>
-				</thead>
-				<tbody>
-					@foreach ($list as $a)
-					<tr>
-						<td> {{$a['product_code']}}</td>
-						<td> {{$a['name']}}</td>
-						<td> {{$a['spec']}}</td>
-						<td> ¥<del>{{$a['market_price']}}</del> ¥{{$a['price']}}</td>
-						<td>{{$a['stock']}}</td>
-						<td>{{$a['sales_total']}}</td>
-						<td>{{$a['stock_total']}}</td>
-						<td> {{$a['status']?'已下架':'已上架'}} </td>
-						<td> {{$a['city_name']}}</td>
-						<td> 
-							@if(check_auth('admin/product/set_sort'))
-							<input type="text" class="set_sort" id="{{$a['id']}}" value="{{$a['sort']}}">
-							@else
-								{{$a['sort']}}
-							@endif
-						</td>
-						<td> {{$a['quota']}} </td>
-						<td> {{date('Y/m/d H:i:s',$a['update_time'])}}</td>
-						<td>
-							@if(check_auth('admin/product/edit'))
-							<a class="btn btn-sm btn-warning" href="{{url('admin/product/edit?'.http_build_query(['id'=>$a['id']]))}}" title="查看">
-								编辑
-							</a>
-							@endif
-							@if(check_auth('admin/product/copy'))
-							<a class="btn btn-sm btn-primary" href="{{url('admin/product/copy?'.http_build_query(['id'=>$a['id']]))}}" title="复制">
-								复制
-							</a>
-							@endif
-							@if(check_auth('admin/product/set_status'))
-								@if ($a['status'])
-									<a class="delete btn btn-sm btn-success" data-url="{{url('admin/product/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'0']))}}">
-										上架
-									</a>
+			<form action="{{url('admin/product/batch_status')}}" method="post" class="post-form" id="batch_form">
+				<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>
+							<th>服务城市</th>
+							<th>排序</th>
+							<th>限购数量</th>
+							<th>修改时间</th>
+							<th>操作</th>
+						</tr>
+					</thead>
+					<tbody>
+						@foreach ($list as $a)
+						<tr>
+							<td> <label ><input type="checkbox" name="product_list[]" class="check_items" value="{{$a['id']}}"> {{$a['product_code']}}</label></td>
+							<td> {{$a['name']}}</td>
+							<td> {{$a['spec']}}</td>
+							<td> ¥<del>{{$a['market_price']}}</del> ¥{{$a['price']}}</td>
+							<td>{{$a['stock']}}</td>
+							<td>{{$a['sales_total']}}</td>
+							<td>{{$a['stock_total']}}</td>
+							<td> {{$a['status']?'已下架':'已上架'}} </td>
+							<td> {{$a['city_name']}}</td>
+							<td> 
+								@if(check_auth('admin/product/set_sort'))
+								<input type="text" class="set_sort" id="{{$a['id']}}" value="{{$a['sort']}}">
 								@else
-									<a class="delete btn btn-sm btn-danger" data-url="{{url('admin/product/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'1']))}}">
-										下架
-									</a>
+									{{$a['sort']}}
 								@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>
+							</td>
+							<td> {{$a['quota']}} </td>
+							<td> {{date('Y/m/d H:i:s',$a['update_time'])}}</td>
+							<td>
+								@if(check_auth('admin/product/edit'))
+								<a class="btn btn-sm btn-warning" href="{{url('admin/product/edit?'.http_build_query(['id'=>$a['id']]))}}" title="查看">
+									编辑
+								</a>
+								@endif
+								@if(check_auth('admin/product/copy'))
+								<a class="btn btn-sm btn-primary" href="{{url('admin/product/copy?'.http_build_query(['id'=>$a['id']]))}}" title="复制">
+									复制
+								</a>
+								@endif
+								@if(check_auth('admin/product/set_status'))
+									@if ($a['status'])
+										<a class="delete btn btn-sm btn-success" data-url="{{url('admin/product/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'0']))}}">
+											上架
+										</a>
+									@else
+										<a class="delete btn btn-sm btn-danger" data-url="{{url('admin/product/set_status?'.http_build_query(['id'=>$a['id'],'status'=>'1']))}}">
+											下架
+										</a>
+									@endif
+								@endif
+							</td>
+						</tr>
+						@endforeach
+						@if(check_auth('admin/product/batch_status'))
+						<tr>
+							<td><label ><input type="checkbox" class="check_all" > 全选</label></td>
+							<td>
+								<select name="status" class="form-control" required="" >
+									<option value="">选择操作</option>
+									<option value="1">下架</option>
+									<option value="0">上架</option>
+								</select>
+							</td>
+							<td colspan="20" >
+								@csrf
+								<input type="submit" class="btn btn-sm btn-primary" value="提交"/>
+							</td>
+						</tr>
+						@endif
+						<tr>
+							<td colspan="20" class="page">{{$list->render()}}</td>
+						</tr>
+						<tr>
+							<td colspan="20">总计 {{$list->total()}} 个产品</td>
+						</tr>
+					</tbody>
+				</table>
+			</form>
 		</div>
 	</div>
 </div>
@@ -200,4 +218,47 @@ style="margin: 0 auto;width: 96%;padding: 30px 0px;"
 	});
  })
 </script>
+<script>
+	$(function(){
+	// 全选按钮
+	$('.check_all').click(function(){
+		// 获取选择状态
+		var check_all			=  $(this).prop('checked');
+		// 子项选择
+		$('.check_items').prop('checked',check_all);
+	})
+	// 单选按钮
+	$('.check_items').click(function(){
+		// 默认全选
+		var check_all			=  true;
+		// 循环选项
+		$.each($('.check_items'),function(k,v){
+			// 选项状态
+			var check_items		=  $(v).prop('checked');
+			// 如果有一个未选。取消全选
+			if( !check_items )	check_all = false;
+		})
+		// 修改
+		$('.check_all').prop('checked',check_all);
+	})
+	// 站点传输
+	$('#batch_form').submit(function(){
+		// 默认未选择
+		var checked				=  false;
+		// 循环选项
+		$.each($('.check_items'),function(k,v){
+			// 选项状态
+			var check_items		=  $(v).prop('checked');
+			// 如果有一个选中,改为已选
+			if( check_items )	checked = true;
+		})
+		// 未选择,提示
+		if( !checked )			{
+			alert('请至少选择一个产品');
+			// 阻止事件
+			return				false;
+		}
+	});
+})
+</script>
 @endsection

+ 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']);

+ 25 - 3
routes/web.php

@@ -133,9 +133,10 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('product/get_sku_html',[App\Http\Controllers\Admin\Product::class,'get_sku_html']);
     // 状态
     Route::any('product/set_sort',[App\Http\Controllers\Admin\Product::class,'set_sort']);
-    // 订单导入
+    // 导入
     Route::any('product/import_execl',[App\Http\Controllers\Admin\Product::class,'import_execl']);
-
+    // 批量状态
+    Route::any('product/batch_status',[App\Http\Controllers\Admin\Product::class,'batch_status']);
 
     /* 客户管理 */
     // 列表
@@ -195,7 +196,8 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     Route::any('orders/refund',[App\Http\Controllers\Admin\Orders::class,'refund']);
     // 修改地址
     Route::any('orders/set_addr',[App\Http\Controllers\Admin\Orders::class,'set_addr']);
-    
+    // 修改地址
+    Route::any('orders/get_school',[App\Http\Controllers\Admin\Orders::class,'get_school']);
 
     /* 订单物流-发货 */
     // 列表
@@ -370,6 +372,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']);
@@ -619,4 +632,13 @@ Route::middleware('admin')->prefix('admin')->group(function(){
     // 列表
     Route::any('orders_class_summary/index',[App\Http\Controllers\Admin\OrdersClassSummary::class,'index']);
 
+    // 图书管理
+    Route::any('book_stock/index',[App\Http\Controllers\Admin\BookStock::class,'index']);
+    // 添加
+    Route::any('book_stock/add',[App\Http\Controllers\Admin\BookStock::class,'add']);
+    // 编辑
+    Route::any('book_stock/edit',[App\Http\Controllers\Admin\BookStock::class,'edit']);
+    // 状态
+    Route::any('book_stock/set_status',[App\Http\Controllers\Admin\BookStock::class,'set_status']);
+
 });