天天看点

Laravel下拉单选与多选

路由: routes.php

/**
     *  印绣洗工厂管理
     */
    $router->group(['prefix' => 'pewfactory'], function ($router) {
        $router->get('', PewfactoryController::class.'@index');
        $router->get('create', PewfactoryController::class.'@create');       //新增页
        $router->post('', PewfactoryController::class.'@store');             //提交
        $router->get('{id}/edit', PewfactoryController::class.'@edit');      //编辑页
        $router->put('{id}', PewfactoryController::class.'@update');         //修改
        $router->get('{id}/detail', PewfactoryController::class.'@detail');  //查看
    });
           

控制器: PewfactoryController.php

Laravel下拉单选与多选
<?php

namespace App\Admin\Controllers;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\PewfactoryRequest;
use App\Models\MaterialCategory;
use App\Models\PubNlocation;
use App\Models\Pewfactory;
use App\Models\Ryhplantcoopcate;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Illuminate\Support\Facades\DB;

class PewfactoryController extends Controller
{
    /**
     * 标题
     * @var string
     */
    protected $title = '印绣洗工厂管理';
    /**
     * @var array
     */
    protected $description  =  [
        'index'   =>'列表',
        'create'  =>'新增',
        'edit'    =>'修改',
        'view'    =>'查看',
    ];
    /**
     * 列表
     */
    public function index(Content $content)
    {
        $content->header($this->title)
            ->description($this->description['index'])
            ->breadcrumb(
                ['text' => $this->title, 'url' => '/pewfactory']
            )
            ->row($this->grid());
        return $content;
    }
    /**
     * 表格
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new Pewfactory);

        /**
         * 屏蔽控件
         */
        $grid->disableExport();         //屏蔽导出
        $grid->disableRowSelector();    //屏蔽多选
        $grid->disableColumnSelector(); //屏蔽字段筛选
        $grid->disableCreateButton();   //屏蔽初始创建按钮
        $grid->disableFilter();         //屏蔽查询
        $grid->fixColumns(4, -1);  //固定显示列    head- 前几列  tail-后几列
        $grid->model()->orderBy('created_at','desc');
        /**
         * 列表行
         */
        $grid->column('factory_no',__('工厂编号'));
        ...
        //单选
        $grid->column('nlocation.name',__('所在地'));  
        //多选
        $grid->column('cate_remark',__('生产品类'))->display(function (){
            $re_cateremark = [];
            if(isset($this->cate_remark)){
                $re_cateremark = MaterialCategory::getSelectCateOptions('id',explode(',',$this->cate_remark));
            }
            return $re_cateremark;
        })->label();
        $grid->column('collaborate',__('合作品类'))->display(function (){
            $re_cateremark = [];
            if(isset($this->collaborate)){
                $re_cateremark = MaterialCategory::getSelectCateOptions('id',explode(',',$this->collaborate));
            }
            return $re_cateremark;
        })->label();
        /**
         * 列表行操作按钮
         */
        $grid->actions(function ($actions){
            $actions->disableView();
            $actions->disableDelete();
            $actions->disableEdit();
            $actions->append('<a href="/admin/pewfactory/'.$actions->getkey().'/detail" class="btn btn-sm btn-default" style="margin-right: 5px" >查看</a>');
            $actions->append('<a href="/admin/pewfactory/'.$actions->getkey().'/edit" class="btn btn-sm btn-default" >修改</a>');
        });
        /**
         * 增加工具栏
         */
        $grid->tools(function ($tools){
            $tools->append('<a href="/admin/pewfactory/create" target="_blank" rel="external nofollow"  class="btn btn-sm btn-success" title="新增工厂">
                <i class="fa fa-plus"></i><span class="hidden-xs">&nbsp;&nbsp;新增工厂</span>
            </a>');
        });
        return $grid;
    }
    /**
     * 新增
     */
    public function create(Content $content)
    {
        $nlocation = PubNlocation::getSelectOptions([]); //单选 所在地
        $MaterialCategory = MaterialCategory::getSelectInOptions('parent_id',[8]); //多选品类
        $content->title($this->title)
            ->description($this->description['create'])
            ->breadcrumb(
                ['text' =>  $this->title, 'url' => '/pewfactory'],
                ['text' =>  $this->description['create']]
            )->row(view('tpl.pewfactory.create',['nlocation'=>$nlocation,'MaterialCategory'=>$MaterialCategory]));
        return $content;
    }

    /**
     * 编辑
     */
    public function edit($id,Content $content){
        $nlocation = PubNlocation::getSelectOptions([]);//单选 所在地
        $MaterialCategory = MaterialCategory::getSelectInOptions('parent_id',[8]);//多选 品类
        $data = pewfactory::where('id',$id)->first();
        $content
            ->header($this->title)
            ->description($this->description['edit'])
            ->breadcrumb(
                ['text'=>$this->title,'url'=>'/pewfactory'],
                ['text'=>$this->description['edit']]
            )->row(view('tpl.pewfactory.create',['nlocation'=>$nlocation,'data'=>$data,'MaterialCategory'=>$MaterialCategory]));
        return $content;
    }
    /**
     * 查看
     * @param $id
     * @param Content $content
     * @return Content
     */
    public function detail($id, Content $content){
        $data = pewfactory::where('id',$id)->with (["nlocation"])
            ->first();
        //dd($data);调试
        $cateremark = '';  //擅长品类
        if(isset($data->cate_remark)){
            $re_cateremark = MaterialCategory::getSelectCateOptions('id',explode(',',$data->cate_remark));
            $cateremark = implode(',',$re_cateremark);
        }

        $coopcate ='';   //合作品类
        if(isset($data->collaborate)){
            $re_coopcate = MaterialCategory::getSelectCateOptions('id',explode(',',$data->collaborate));
            $coopcate = implode(',',$re_coopcate);
        }
        $content
            ->header($this->title)
            ->description($this->description['view'])
            ->breadcrumb(
                ['text'=>$this->title,'url'=>'/pewfactory'],
                ['text'=>$this->description['view']]
            )->row(view('tpl.pewfactory.detail',['data'=>$data,'cateremark'=>$cateremark,'coopcate'=>$coopcate]));
        return $content;
    }

    /**
     * 提交保存
     */
    public function store(PewfactoryRequest $request){
        $validated = $request->validated();
        $data    = [
            "factory_no"    => $request->factory_no,
            "name"          => $request->name,
               ...
            "locations"     => $request->locations,
            "cate_remark"   => collect($request->cate_remark)->implode(','),
            "collaborate"   => collect($request->collaborate)->implode(','),
            'user_id'       => Admin::user()->id,
            "updated_at"    => date("Y-m-d H:i:s"),
        ];
        if ($request->id){
            $id =   DB::table('pew_factory')->where('id', $request->id) ->update($data);
        }else{
            $data['created_at'] = date("Y-m-d H:i:s");
            $id =   DB::table('pew_factory')->insertGetId($data);
        }

        //擅长品类
        $coopcate_arr = [];
        foreach($request->cate_remark as $k => $v){
            $coopcate = [
                'plant_id'   => $request->id,
                'category_id'   => $v,
                'flag'      => '0',
                'type'      => '1',
                'created_at' => date("Y-m-d H:i:s"),
            ];
            //if (!in_array($v,$query_cate)) {
            if ($v) {
                array_push($coopcate_arr, $coopcate);
            }
        }
        DB::table('ryh_plant_coopcate')->insert($coopcate_arr);
        //合作品类
        $coopcate_arr = [];
        foreach($request->collaborate as $k => $v){
            $coopcate = [
                'plant_id'   => $request->id,
                'category_id'   => $v,
                'flag'      => '1',
                'type'      => '1',
                'created_at' => date("Y-m-d H:i:s"),
            ];
            //if (!in_array($v,$query_cate)) {
            if ($v) {
                    array_push($coopcate_arr, $coopcate);
            }
        }
        DB::table('ryh_plant_coopcate')->insert($coopcate_arr);
        if($id){
            admin_toastr(trans('admin.save_succeeded'));
        }else{
            admin_toastr(trans('admin.actions_failed'));
        }
    }
}
           
Laravel下拉单选与多选

模型:Pewfactory.php

<?php
/**
 * 印绣洗工厂
 */
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

class Pewfactory extends Model
{
    protected $table = 'pew_factory';

    protected $fillable = [
        'factory_no','name','abbr','locations','company_ied','bank_number',
        'tel','business','boss','boss_call','address','worker_num','asset_ desc',
        'cate_remark','collaborate','remark','picture','status','user_id','created_at','updated_at'
    ];

    /**
     * 所在地
     */
    public function nlocation(){
        return $this->belongsTo(PubNlocation::class,'locations','id');
    }

    public static function getSelectOptions($where = array())
    {
        $options = DB::table('pew_factory')->where($where)->select('id','factory_no','name','abbr')->get();
        $selectOption = [];
        foreach ($options as $option){
            $selectOption[$option->id] = $option->factory_no.'-'. $option->name.'['.$option->abbr.']';
        }
        return $selectOption;
    }
}
           

视图:create.blade.php

<section class="content">
    @if ($errors->any())
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif
    <div class="row">
        <div class="col-md-12">
            <div class="box box-info">
                <!-- 创建表单 -->
                <!-- form start -->
                <form action="/admin/pewfactory" method="post" accept-charset="UTF-8" class="form-horizontal" pjax-container>
                    <div class="box-body">
                        <div class="fields-group">
                            <div class="row" style="padding-bottom: 10px">
                                {{-- 工厂编号 --}}
                                <div class="col-md-3">
                                    <div class="">
                                        <label for="factory_no" class=" control-label  col-sm-3"  style="text-align: left">工厂编号</label>
                                        <div class="col-sm-9">
                                            <input type="text" id="factory_no" name="factory_no" class="form-control factory_no" required="1" placeholder="必填项"  value="@if( old('factory_no') ){{ old('factory_no') }}@elseif(isset($data->factory_no)){{ $data->factory_no }}@endif"/>
                                        </div>
                                    </div>
                                </div>
                                ...
 
                                {{-- 所在地 --}}
                                <div class="col-md-3">
                                    <div class="">
                                        <label for="locations" class="control-label  col-sm-3"  style="text-align: left">所在地</label>
                                        <div class="col-sm-9">
                                            <select class="form-control locations " id="locations" name="locations"  data-value="" required="1" placeholder="必填项" >
                                                <option value="">请选择</option>
                                                @foreach( $nlocation as $k =>$v)
                                                    <option value="{{ $k }}"
                                                        @if( old('locations') && old('locations') == $k )selected @elseif(isset($data->locations) && $data->locations == $k) selected @endif>

                                                        {{ $v }}
                                                    </option>
                                                @endforeach
                                            </select>
                                        </div>
                                    </div>
                                </div>
                            </div>

                             {{-- 生产品类 --}}
                            <div class="row" style="padding-bottom: 10px">
                                <div class="col-sm-12">
                                    <div class="">
                                        <label for="cate_remark" class="col-sm-1  control-label" style="width: 6%;text-align: left;">生产品类</label>
                                        <div class="col-sm-11" style="width: 94%">
                                            <select class="form-control cate_remark " id="cate_remark" name="cate_remark[]" multiple="multiple"  data-value=""  >
                                                @foreach($MaterialCategory as $k => $v)
                                                    <option value="{{ $v->id }}"  @if(isset($data->cate_remark) && in_array($v->id ,explode(',',$data->cate_remark))) selected  @endif > {{ $v->title }}</option>
                                                @endforeach
                                            </select>
                                        </div>
                                    </div>
                                </div>
                            </div>

                            {{-- 合作品类 --}}
                            <div class="row" style="padding-bottom: 10px">
                                <div class="col-sm-12">
                                    <div class="">
                                        <label for="collaborate" class="col-sm-1  control-label" style="width: 6%;text-align: left;">合作品类</label>
                                        <div class="col-sm-11" style="width: 94%">
                                            <select class="form-control collaborate " id="collaborate" name="collaborate[]" multiple="multiple"  data-value=""  >
                                                @foreach($MaterialCategory as $k => $v)
                                                    <option value="{{ $v->id }}"  @if(isset($data->collaborate) && in_array($v->id ,explode(',',$data->collaborate))) selected  @endif > {{ $v->title }}</option>
                                                @endforeach
                                            </select>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                    
                </form>
            </div>

        </div>
    </div>
</section>

<script>
    /**
     * 实例化控件
     **/
    $(function () {
        $(".locations").select2({"allowClear":true,"placeholder":{"id":"","text":"所在地"}});

        $(".cate_remark").select2({"allowClear":true,"placeholder":{"id":"","text":"请选择 生产品类,长按Ctrl键,可连续选择"}});
        $(".collaborate").select2({"allowClear":true,"placeholder":{"id":"","text":"请选择 合作品类,长按Ctrl键,可连续选择"}});
    })

</script>