• PHP如何输出合并单元格的表


    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 AppRepository;
    
    use AppModelAllot;
    use AppModelAllotDetail;
    use AppModelAllotSkuBatch;
    use AppRepositoryCommonRepository;
    
    
    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="135px;min-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>

    一个功能模块包括增删改查,贴出来的代码会很多!这里只贴出列表的功能,有问题的可以留言

  • 相关阅读:
    Emit介绍【转】
    在.NET中使用反射实现简易插件机制【转】
    RabbitMQ笔记-Qos与消息应答
    Http级别缓存助手类(ASP.Net Core)
    实现一个迷你IOC容器
    使用CMake在Windows环境下的VS2019中配置openCV
    如何在Visual Studio 2019中启动并配置一个使用pyTorch的C++项目(Windows系统,CMAKE项目)
    windows环境下使用python中tensorflow的tensorboard功能无法创建指定路径的问题
    使用python的selenium库自动填写网页(疫情每日一报)
    十进制转换二进制toBinaryString源码分析
  • 原文地址:https://www.cnblogs.com/lxwphp/p/9625595.html
Copyright © 2020-2023  润新知