首先在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()