request->isAjax()) { $data = $model->order('orders asc')->select(); foreach ($data as $k => $v) { $v['type_text'] = $v->type == 1 ? "权限节点" : "普通节点"; $v['is_display_text'] = $v->is_display == 1 ? "显示在左侧菜单" : "操作节点"; $data[$k] = $v; } return $data; } else { $menus = $model->order('orders asc')->select(); $menus_all = $model->menulist($menus); $this->assign('menus', $menus_all); $this->assign('noInsertRoutes', $this->noInsertRoutes()); return $this->fetch(); } } public function publish() { $id = $this->request->has('id') ? $this->request->param('id', 0, 'intval') : 0; $model = new menuModel(); $post = $this->request->post(); if ($this->request->isPost()) { $validate = new \think\Validate([ ['name', 'require', '菜单名称不能为空'], ['pid', 'require', '请选择上级菜单'], // ['module', 'require', '请填写模块名称'], // ['controller', 'require', '请填写控制器名称'], // ['function', 'require', '请填写方法名称'], ['type', 'require', '请选择菜单类型'], ]); if (!$validate->check($post)) { $this->error('提交失败:' . $validate->getError()); } } if ($id > 0) { if ($this->request->isPost()) { if ($id == $post['pid']) { $this->error('不能选自己当上级分类'); } $menu = $model->where('id', $id)->find(); if (empty($menu)) { $this->error('id不正确'); } //如果关闭默认展开,给默认值0 if (empty($post['is_open'])) { $post['is_open'] = 0; } if (false == $model->allowField(true)->save($post, ['id' => $id])) { $this->error('修改失败'); } else { $this->success('修改菜单信息成功', 'admin/menu/index'); } } else { $menu = $model->where('id', $id)->find(); $menus = $model->order('orders asc')->select(); $menus_all = $model->menulist($menus); $this->assign('menus', $menus_all); if (!empty($menu)) { $this->assign('menu', $menu); return $this->fetch(); } else { $this->error('id不正确'); } } } else { if ($this->request->isPost()) { if (false == $model->allowField(true)->save($post)) { $this->error('添加菜单失败'); } else { $this->success('添加菜单成功', 'admin/menu/index'); } } else { $pid = $this->request->has('pid') ? $this->request->param('pid', null, 'intval') : null; if (!empty($pid)) { $this->assign('pid', $pid); } $menu = $model->order('orders asc')->select(); $menus = $model->menulist($menu); $this->assign('menus', $menus); return $this->fetch(); } } } public function delete() { if ($this->request->isAjax()) { $id = $this->request->has('id') ? $this->request->param('id', 0, 'intval') : 0; if (Db::name('admin_menu')->where('pid', $id)->select() == null) { if (false == Db::name('admin_menu')->where('id', $id)->delete()) { $this->error('删除失败'); } else { $this->success('删除成功', 'admin/menu/index'); } } else { $this->error('该菜单下还有子菜单,不能删除'); } } } public function orders() { if ($this->request->isPost()) { $post = $this->request->post(); $i = 0; foreach ($post['id'] as $k => $val) { $order = Db::name('admin_menu')->where('id', $val)->value('orders'); if ($order != $post['orders'][$k]) { if (false == Db::name('admin_menu')->where('id', $val)->update(['orders' => $post['orders'][$k]])) { $this->error('更新失败'); } else { $i++; } } } $this->success('成功更新' . $i . '个数据', 'admin/menu/index'); } } /** * 未添加的路由 * @return array */ private function noInsertRoutes() { $allRoutes = []; $controllers = getFilenameList(APP_PATH . 'admin' . DS . 'controller' . DS, '*.php'); foreach ($controllers as $controller) { if ($controller != "Permissions") { $actions = getActions("\app\admin\controller\\" . $controller, $base = '\app\admin\controller\base\Permissions'); foreach ($actions as $action) { $allRoutes[] = "admin-$controller-$action"; } } } $allMenus = (new menuModel())->field("concat(module,'-',controller,'-',function) as route")->where('module', '<>', '')->select(); $allMenusLowCase = []; foreach ($allMenus as $menu) { $allMenusLowCase[] = strtolower($menu['route']); } $noInsertRoutes = []; foreach ($allRoutes as $route) { if (!in_array(strtolower($route), $allMenusLowCase)) { $noInsertRoutes[] = explode('-', $route); } } return $noInsertRoutes; } /** * 批量添加 */ public function batchAdd() { $post = $this->request->param(); if (isset($post['name']) && is_array($post['name'])) { $data = []; foreach ($post['name'] as $key => $name) { if (!isset($post['pid'][$key])) { continue;//没有选择上级节点 } $data[] = [ 'name' => $name, 'module' => $post['module'][$key], 'controller' => $post['controller'][$key], 'function' => $post['function'][$key], 'is_display' => $post['is_display'][$key], 'type' => $post['type'][$key], 'pid' => $post['pid'][$key], 'icon' => 'fa-tag', ]; } $model = new menuModel(); if (false == $model->allowField(true)->saveAll($data)) { $this->error('添加菜单失败'); } else { $this->success('添加菜单成功', 'admin/menu/index'); } } $this->error('当前没有路由可添加'); } }