https://mp.weixin.qq.com/s/ChPIKIv9tqmuqGyfc9Zi7Q
合并单元格的表,很多地方可以见到,比如购物车,订单合并等,今天给大家讲解一下,如何操作,虽然我用的laravel,但是都是PHP。以下只做参考!
部分效果图如下
路由文件
Route::get('admin/allots/index', ['as'=> 'admin.allots.index', 'uses' => 'AllotController@index']);
控制器文件:AllotController.php
/** * Display a listing of the Allot. * * @param Request $request * @return Response */ public function index(Request $request) { $param = $request->all(); $params = [ 'orderBy' => ['allot_id', 'desc'], 'groupBy' => 'allot_sn' ]; $params['left_join'][] = ['allot_detail','allot.allot_id','=','allot_detail.allot_id']; $params['left_join'][] = ['goods_sku','allot_detail.sku_id','=','goods_sku.sku_id']; $params['left_join'][] = ['goods','goods_sku.goods_id','=','goods.goods_id']; $params['select'] = [ 'allot.*', 'allot_detail.sku_id', 'goods_sku.sku_id', 'goods_sku.goods_id', 'goods.goods_id', 'goods.goods_name' ]; if(!empty($param['goods_name'])){ $params['where'] = $this->entryWareRepository->getLikeGoods(trim($param['goods_name'])); $search_sku_id = $this->entryWareRepository->getLikeSkuID(trim($param['goods_name'])); } //用户所属对应仓库的信息 $admin_ware = $this->allotRepository->getAdminWare(); if($admin_ware > 0){ $params['whereIn'] = ['allot.from_ware_id', $admin_ware]; } $this->allotRepository->pushCriteria(new RequestCriteria($request)); $allots = $this->allotRepository->paginate(config('config.pagesize'),[ 'detail.sku.goods','out_ware','entry_ware' ],$params); $allots->each(function($item,$key){ $item->is_out_ware = count($this->allotRepository->out_ware($item->allot_sn)); $item->is_entry_ware = count($this->allotRepository->entry_ware($item->allot_sn)); }); foreach ($allots as $val){ $val->detail->each(function($vo,$k){ $vo->change_sku = $vo->sku->getShowSku(); }); } //dd($allots); return view('admin.allots.index', compact('allots','admin_ware','param')); }
model文件:Allot.php
class Allot extends Model { public $table = 'allot'; const CREATED_AT = 'created_at'; const UPDATED_AT = 'updated_at'; protected $primaryKey = 'allot_id'; public $fillable = [ 'allot_sn', 'remark', 'status', 'from_ware_id', 'to_ware_id', 'create_admin_id', 'create_admin_name', 'examine_admin_id', 'examine_admin_name', 'entry_ware_status', 'out_ware_status', 'confirm_admin_id', 'confirm_admin_name' ]; /** * The attributes that should be casted to native types. * * @var array */ protected $casts = [ 'allot_id' => 'integer', 'allot_sn' => 'string', 'remark' => 'string', 'status' => 'integer', 'from_ware_id' => 'integer', 'to_ware_id' => 'integer', 'create_admin_id' => 'integer', 'create_admin_name' => 'string', 'examine_admin_id' => 'integer', 'examine_admin_name' => 'string', 'confirm_admin_id' => 'integer', 'confirm_admin_name' => 'string', 'entry_ware_status' =>'integer', 'out_ware_status' => 'integer', ]; /** * Validation rules * * @var array */ public static $rules = [ ];
容器文件:AllotRepository.php
<?php namespace App\Repository; use App\Model\Allot; use App\Model\AllotDetail; use App\Model\AllotSkuBatch; use App\Repository\CommonRepository; class AllotRepository extends CommonRepository { /** * @var array */ protected $fieldSearchable = [ 'allot_id', ]; /** * Configure the Model **/ public function model() { return Allot::class; } public function search($param = []) { $model = $this->model(); $model = new $model; $rs = $model; if (!empty($param['goods_name'])) { $rs = $model->where('goods_name', '=', $param['goods_name']); } //创建时间开始 if (!empty($param['add_time_start'])) { $rs = $rs->where('created_at', '>=', $param['created_at'] . ' 00:00:00'); } //创建时间结束 if (!empty($param['add_time_end'])) { $rs = $rs->where('created_at', '<=', $param['created_at'] . ' 23:59:59'); } return $rs; } /** * Function:自动生成入单号 * User:wucy * @return string */ public function createAllotSn() { $model = $this->model(); $allot_id = $model::max('allot_id'); $date = date('Ymd',time()); $allot_id = $allot_id +1; $allot_sn = 'A' .$date. str_repeat('0', 8 - strlen($allot_id)) . $allot_id; $sn_list = $model::where('allot_sn','like','%'.$allot_id.'%')->where('allot_id','<>',$allot_id)->get()->toArray(); if (in_array($allot_sn, $sn_list)) { $max = pow(10, strlen($sn_list[0]) - strlen($allot_sn) + 1) - 1; $new_sn = $allot_sn . mt_rand(0, $max); while (in_array($new_sn, $sn_list)) { $new_sn = $allot_sn . mt_rand(0, $max); } $allot_sn = $new_sn; } return $allot_sn; }
模板文件table.blade.php
<div class="box" style="overflow-x:scroll;"> <div class="box-body"> <table class="table table-bordered table-hover lastTd" id="allots-table" style="font-size:12px;"> <thead> <tr class="nowrap"> <th>调拨单号</th> <th>制单时间</th> <th>调出仓库</th> <th>商品SKU</th> <th>商品名称</th> <th>商品属性</th> <th>单位</th> <th>调拨数量</th> <th>调入仓库</th> <th>调拨备注</th> <th>审核状态</th> <th>审核人</th> <th>是否出库</th> <th>是否入库</th> <th style="width:135px;min-width:135px;">操作</th> </tr> </thead> <tbody> @foreach($allots as $allot) <?php if(isset($param['goods_name']) && !empty($param['goods_name'])){ $detail = $allot->detail->whereInLoose('sku_id',$search_sku_id); }else{ $detail = $allot->detail; } $count = count($detail); $rowspan = $count == 1 ? '' : "rowspan='{$count}'"; //单元格合并 $first_detail = $detail->shift(); $admin_id = Auth::id(); if(($admin_ware > 0 && in_array( $allot->from_ware_id,$admin_ware)) || $admin_ware==0){ $from_admin_ware =1; }else{ $from_admin_ware =0; } if(($admin_ware > 0 && in_array( $allot->to_ware_id,$admin_ware)) || $admin_ware==0){ $to_admin_ware =1; }else{ $to_admin_ware =0; } //dd($from_admin_ware); ?> <tr> <td {!! $rowspan !!}>{!! $allot->allot_sn !!}</td> <td {!! $rowspan !!}>{!! $allot->created_at !!}</td> <td {!! $rowspan !!}>{!! $allot['out_ware']['name'] !!}</td> <td>{!! !empty($first_detail) ? $first_detail->change_sku : '--' !!}</td> <td>{!! !empty($first_detail) ? $first_detail->sku->goods->goods_name : '--' !!}</td> <td>{!! !empty($first_detail) ? $first_detail->sku->value_name : '--' !!}</td> <td>{!! !empty($first_detail) ? $first_detail->sku->goods->goods_unit : '--' !!}</td> <td>{!! !empty($first_detail) ? $first_detail->send_number : '--' !!}</td> <td {!! $rowspan !!}>{!! $allot['entry_ware']['name'] !!}</td> <td {!! $rowspan !!}>{!! $allot->remark !!}</td> <td {!! $rowspan !!}> <small class="label pull-left bg-blue">{!! config('const.ware.entry_status')[$allot->status] !!}</small> </td> <td {!! $rowspan !!}>{!! $allot->confirm_admin_name ? $allot->confirm_admin_name : '--'!!}</td> <td {!! $rowspan !!}>{!! config('const.ware.entry_or_out_ware')[$allot->out_ware_status] !!}</td> <td {!! $rowspan !!}>{!! config('const.ware.entry_or_out_ware')[$allot->entry_ware_status] !!}</td> <td {!! $rowspan !!}> {!! Form::open(['route' => ['admin.allots.destroy', $allot->getKey()], 'method' => 'delete']) !!} <div class='btn-group'> <a href="@if($allot->status==1) javascript:; @else {!! route('admin.allots.edit', [$allot->getKey()]) !!} @endif" class='btn btn-default btn-xs' @if($allot->status==1) disabled="disabled" @endif title="编辑" alt="编辑"><i class="fa fa-edit"></i></a> <a href="@if($allot->status==1) javascript:; @else{!! route('admin.allots.examine', [$allot->getKey()]) !!} @endif" class='btn btn-default btn-xs' @if($allot->status==1) disabled="disabled" @endif title="审核" alt="审核"><i class="fa fa-user"></i></a> <a href="@if($allot->is_out_ware == 1 || $from_admin_ware ==0)javascript:; @else {!! route('admin.allots.out_ware', [$allot->getKey()]) !!} @endif" class='btn btn-default btn-xs' @if($allot->is_out_ware==1 ||$allot->status==0 || $from_admin_ware ==0) disabled="disabled" @endif title="办理出库" alt="办理出库"><i class="fa fa-share"></i></a> <a href="@if($allot->entry_ware_status == 1 || $allot->out_ware_status==0 || $allot->is_entry_ware==1 || $to_admin_ware == 0) javascript:; @else {!! route('admin.allots.entry_ware', [$allot->getKey()]) !!} @endif" class='btn btn-default btn-xs' @if($allot->entry_ware_status==1 || $allot->out_ware_status==0 ||$allot->is_entry_ware==1 || $to_admin_ware == 0) disabled="disabled" @endif title="办理入库" alt="办理入库"><i class="fa fa-reply"></i></a> <a @if($allot->status > 0) disabled="disabled" @endif href="{!! route('admin.allots.destroy', [$allot->getKey()]) !!}" title="删除" alt="删除" class='btn btn-default btn-xs'><i class="fa fa-trash"></i></a> </div> {!! Form::close() !!} </td> </tr> @if($rowspan != '') @foreach($detail as $row) <tr> <td>{{ $row->change_sku }}</td> <td>{{ $row->sku->goods->goods_name }}</td> <td>{{ $row->sku->value_name }}</td> <td>{{ $row->sku->goods->goods_unit }}</td> <td>{{ $row->send_number }}</td> </tr> @endforeach @endif @endforeach </tbody> </table> </div> </div>
一个功能模块包括增删改查,贴出来的代码会很多!这里只贴出列表的功能,有问题的可以留言
评论(0)