laravel-admin 【联动3】select联动自定义div的展示

首先在AgentgoodController中做了一个三级联动菜单 实现要点有:

1、三个$form->select,前两个后面都有load()用于加载子级select

2、要在admin/routes.php中添加load()中对应的路由:$router->get('subcateList','AgentgoodController@subcateList');
    $router->get('goodsList','AgentgoodController@goodsList');

        $form->select('supid', __('大类名称'))->options(
            function (){
                $topcates = Topcate::all()->where('state','=','1');
                $arr = array();
                foreach($topcates as $topcate){
                    $arr = $arr + [$topcate->id => $topcate->name];
                }
                return $arr;

            })->load('subid','/admin/subcateList');

        $form->select('subid','小类名称')->options(
            function (){
                $subcates = Subcate::all()->where('supid',$this->supid);
                if($subcates){
                    $arr = array();
                    foreach($subcates as $subcate){
                        $arr = $arr + [$subcate->id => $subcate->name];
                    }
                    return $arr;
                }
            })->load('goodsid','/admin/goodsList');

        $form->select('goodsid','商品名称')->options(
            function (){
                $subcates = Good::all()->where('subid',$this->supid)->where('state','=',1);
                if($subcates){
                    $arr = array();
                    foreach($subcates as $subcate){
                        $arr = $arr + [$subcate->id => $subcate->name];
                    }
                    return $arr;
                }
            });

其次,实现第三级select菜单选择后,展示自定义的div信息,这里需要展示的是商品价格详情

实现效果:当选中某个商品时,需要在当前位置后面展示出该商品的多个字段信息,格式需要与其他input元素保持一致

实现思路:1、要获取到select选中的商品id值;2、要通过该id值查询到当前商品具体信息并展示

因此,这里需要用到laravel-admin的CSS/JavaScript方法 具体代码如下

protected function form()
    {
        $form = new Form(new Agentgood());

        …………

        $form->select('supid', __('大类名称'))->options(
            function (){
                $topcates = Topcate::all()->where('state','=','1');
                $arr = array();
                foreach($topcates as $topcate){
                    $arr = $arr + [$topcate->id => $topcate->name];
                }
                return $arr;

            })->load('subid','/admin/subcateList');

        $form->select('subid','小类名称')->options(
            function (){
                $subcates = Subcate::all()->where('supid',$this->supid);
                if($subcates){
                    $arr = array();
                    foreach($subcates as $subcate){
                        $arr = $arr + [$subcate->id => $subcate->name];
                    }
                    return $arr;
                }
            })->load('goodsid','/admin/goodsList');

        $form->select('goodsid','商品名称')->options(
            function (){
                $subcates = Good::all()->where('subid',$this->supid)->where('state','=',1);

                if($subcates){
                    $arr = array();
                    foreach($subcates as $subcate){
                        $arr = $arr + [$subcate->id => $subcate->name];
                    }
                    return $arr;
                }
            });


         // 使用laravel-admin的JavaScript方法,在指定位置插入div内容
        Admin::script('$(".goodsid").change(function(){
            var goodid = this.value;
            var obj = $(".goodsid").parent().parent();
            // 如果当前select有选中值,则开始获取内容
            if(goodid){
                // div内容通过ajax的get方法获取,需要在admin/router.php中定义路由
                $.get("/admin/setgoodattr",{goodid : this.value},function(data){
                    $("#denomination").val(data["denomination"]);
                    $("#price").val(data["price"]);
                    $("#discount").val(data["discount"]);
                    $("#disprice").val(data["disprice"]);
                    $("#costprice").val(data["costprice"]);
                });
            }
        })');

        …………


        // 在表单提交前调用
        $form->saving(function (Form $form) {
            // dd($form->goodsid);
        });

        return $form;
    }

    // 获取小类控制器方法
    public function subcateList(Request $request){
        $projectId = $request->get('q');
        return Subcate::where('supid',$projectId)->get(['id', DB::raw('name as text')]);
    }

    // 获取商品控制器方法
    public function goodsList(Request $request){
        $projectId = $request->get('q');
        return Good::where('subid',$projectId)->get(['id', DB::raw('name as text')]);
    }

    // 获取插入div数据的控制器方法
    public function setgoodAttr(Request $request){
        // 获取ajax的get参数 goodid
        $projectId = $request->get('goodid');
        $goodmsg = Good::find($projectId,['denomination','price','discount','disprice','costprice']);
        $form = new Form(new Agentgood());
        return $form->display('denomination', __('面值'))->default($goodmsg['denomination']).
        $form->display('price', __('价格'))->default($goodmsg['price']).
        $form->display('discount', __('折扣率'))->default($goodmsg['discount']).
        $form->display('disprice', __('折扣价'))->default($goodmsg['disprice']).
        $form->display('costprice', __('成本价'))->default($goodmsg['costprice']);
    }

 

有一个情况需要说明一下:

$form->currency('agentprofitsdisc', __('分润比例(占毛利润比例)'))->symbol("比例 < 1");

这里用到了symbol()的方法,用于设置默认input标签前面的icon图标,这里设置成提示内容

开始直接用的符号来表示:->symbol("比例 < 1");  结果出现了bug,首次进入该页面或出现页面错乱,刷新后才能正常显示

由此可见,symbol()中不能出现html标签,需要用转义符

当然,如果不需要提示内容,也可以直接用$form->rate()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值