request->param('pid')?$this->request->param('pid'):0; $params = Util::getMore([ ['is_show',''], // ['access',''], ['keyword',''], ['pid',$pid] ],$this->request); $this->assign(MenusModel::getAdminPage($params)); $addurl = Url::build('create',['cid'=>input('pid')]); $this->assign(compact('params','addurl')); return $this->fetch(); } /** * 显示创建资源表单页. * * @return \think\Response */ public function create($cid = 0) { $field = []; $field[] = Form::input('menu_name','按钮名称')->required('按钮名称必填'); $field[] = Form::select('pid','父级id',$cid)->setOptions(function(){ $list = (Util::sortListTier(MenusModel::all(function($m){ $m->order('sort DESC,id ASC'); })->toArray(),'顶级','pid','menu_name')); $menus = [['value'=>0,'label'=>'顶级按钮']]; foreach ($list as $menu){ $menus[] = ['value'=>$menu['id'],'label'=>$menu['html'].$menu['menu_name']]; } return $menus; })->filterable(1); $field[] = Form::select('module','模块名')->options([['label'=>'总后台','value'=>'admin']]); if($cid)$controller = MenusModel::where('id',$cid)->value('controller')?:''; else $controller = ''; $field[] = Form::input('controller','控制器名',$controller); if (!empty($controller)) { $controller = preg_replace_callback('/([.]+([a-z]{1}))/i', function ($matches) { return '\\' . strtoupper($matches[2]); }, $controller); if(class_exists('\app\admin\controller\\' . $controller)) { $list = get_this_class_methods('\app\admin\controller\\' . $controller); $field[] = Form::select('action','方法名')->setOptions(function()use($list){ $menus = [['value'=>0,'label'=>'默认函数']]; foreach ($list as $menu){ $menus[] = ['value'=>$menu,'label'=>$menu]; } return $menus; })->filterable(1); }else{ $field[] = Form::input('action','方法名'); } }else{ $field[] = Form::input('action','方法名'); } $field[] = Form::input('params','参数')->placeholder('举例:a/123/b/234'); $field[] = Form::frameInputOne('icon','图标',Url::build('admin/widget.widgets/icon',array('fodder'=>'icon')))->icon('ionic'); $field[] = Form::number('sort','排序',0); $field[] = Form::radio('is_show','是否菜单',0)->options([['value'=>0,'label'=>'隐藏'],['value'=>1,'label'=>'显示(菜单只显示三级)']]); $form = Form::make_post_form('添加权限',$field,Url::build('save'),3); $this->assign(compact('form')); return $this->fetch('public/form-builder'); } /** * 保存新建的资源 * * @param \think\Request $request * @return \think\Response */ public function save(Request $request) { $data = Util::postMore([ 'menu_name', 'controller', ['module','admin'], ['action',''], 'icon', 'params', ['pid',0], ['sort',0], ['is_show',0], ['access',1]],$request); if(!$data['menu_name']) return Json::fail('请输入按钮名称'); MenusModel::set($data); return Json::successful('添加菜单成功!'); } /** * 显示编辑资源表单页. * * @param int $id * @return \think\Response */ public function edit($id) { $menu = MenusModel::get($id); if (!$menu) return Json::fail('数据不存在!'); $field = array(); $field[] = Form::input('menu_name','按钮名称',$menu['menu_name']); $field[] = Form::select('pid','父级id',(string)$menu->getData('pid'))->setOptions(function()use($id){ $list = (Util::sortListTier(MenusModel::all(function($m){ $m->order('sort DESC,id ASC'); })->toArray(),'顶级','pid','menu_name')); $menus = [['value'=>0,'label'=>'顶级按钮']]; foreach ($list as $menu){ $menus[] = ['value'=>$menu['id'],'label'=>$menu['html'].$menu['menu_name']]; } return $menus; })->filterable(1); $field[] = Form::select('module','模块名',$menu['module'])->options([['label'=>'总后台','value'=>'admin']]); $field[] = Form::input('controller','控制器名',$menu['controller']); if (!empty($menu['controller'])) { $controller = preg_replace_callback('/([.]+([a-z]{1}))/i', function ($matches) { return '\\' . strtoupper($matches[2]); }, $menu['controller']); if(class_exists('\app\admin\controller\\' . $controller)) { $list = get_this_class_methods('\app\admin\controller\\' . $controller); $field[] = Form::select('action','方法名',(string)$menu->getData('action'))->setOptions(function()use($list){ $menus = [['value'=>0,'label'=>'默认函数']]; foreach ($list as $menu){ $menus[] = ['value'=>$menu,'label'=>$menu]; } return $menus; })->filterable(1); }else{ $field[] = Form::input('action','方法名',$menu['action']); } }else{ $field[] = Form::input('action','方法名'); } $field[] = Form::input('params','参数',MenusModel::paramStr($menu['params']))->placeholder('举例:a/123/b/234'); $field[] = Form::frameInputOne('icon','图标',Url::build('admin/widget.widgets/icon',array('fodder'=>'icon')),$menu['icon'])->icon('ionic'); $field[] = Form::number('sort','排序',$menu['sort']); $field[] = Form::radio('is_show','是否菜单',$menu['is_show'])->options([['value'=>0,'label'=>'隐藏'],['value'=>1,'label'=>'显示(菜单只显示三级)']]); $form = Form::make_post_form('添加权限',$field,Url::build('update',array('id'=>$id)),3); $this->assign(compact('form')); return $this->fetch('public/form-builder'); } /** * 保存更新的资源 * * @param \think\Request $request * @param int $id * @return \think\Response */ public function update(Request $request, $id) { $data = Util::postMore([ 'menu_name', 'controller', ['module','admin'], 'action', 'params', 'icon', ['sort',0], ['pid',0], ['is_show',0], ['access',1]],$request); if(!$data['menu_name']) return Json::fail('请输入按钮名称'); if(!MenusModel::get($id)) return Json::fail('编辑的记录不存在!'); MenusModel::edit($data,$id); return Json::successful('修改成功!'); } /** * 删除指定资源 * * @param int $id * @return \think\Response */ public function delete($id) { if(!$id) return $this->failed('参数错误,请重新打开'); $res = MenusModel::delMenu($id); if(!$res) return Json::fail(MenusModel::getErrorInfo('删除失败,请稍候再试!')); else return Json::successful('删除成功!'); } }