Explorar o código

【Add】增加图书管理-入库管理功能

liuxiangxin hai 3 meses
pai
achega
534aab848f

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

@@ -0,0 +1,146 @@
+<?php namespace App\Http\Controllers\Admin;
+
+use App\Http\Requests\Admin\BookStock as Request;
+use App\Models\BookStock as Model;
+
+/**
+ * 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','');
+		// 查询条件
+		$map 					= [];
+		// 编码ID
+		if( $name )				$map[] = ['name','=',$name];
+		if( $batchNo )			$map[] = ['id','=',$Model->codeToId($batchNo)];
+		if( $author )			$map[] = ['author','=',$author];
+		// 查询数据
+		$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'=>'']);
+	}
+
+}

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

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

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

+ 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

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

@@ -0,0 +1,89 @@
+@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="text" class="form-control" name="name" value="{{request('name','')}}" placeholder="请输入book_stock名称查询" />
+	</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

+ 9 - 0
routes/web.php

@@ -620,4 +620,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']);
+
 });