where(['type' => 1, 'del' => 0, 'disable' => 0]) ->order(['sort' => 'desc']) ->withAttr('uri', function ($value) { return self::uri($value); })->select(); // 处理返回数据 $none_auth = AuthServer::getRoleNoneAuthIds($role_id); $lists = self::setRoleMenu($none_auth, $lists); return linear_to_tree($lists); } catch (\Exception $e) { return []; } } /** * 设置角色菜单 * @param $none_auth * @param $lists * @return mixed */ private static function setRoleMenu(&$none_auth, $lists) { foreach ($lists as $k => $v) { if (in_array($v['id'], $none_auth)) { unset($lists[$k]); } } return array_values($lists); } /** * 设置uri * @param $uri * @return string */ private static function uri($uri) { if ($uri) { return Url::build($uri); } return ''; } /** * 判断菜单配置是否更改 * @param $menu * @param $role_id * @return bool */ public static function menuIsUpdate($menu, $role_id) { $new_meu_md5 = md5($menu); $menu_md5 = Cache::get('menu_md5_role_id' . $role_id); if ($menu_md5 == $new_meu_md5) { return false; } Cache::set('menu_md5', $new_meu_md5); return true; } /** * Notes: 创建菜单 * @param $menu * @param bool $max * @author 竹 * @return string */ protected static function createHtml($menu, $max = false) { //一级菜单 if ($max) { $html = ''; $choose_class = 'layui-this'; foreach ($menu as $k => $v) { $sub = isset($v['sub']) ? $v['sub'] : []; if ($sub) { $html .= '
  • ' . $v['name'] . '
    '; $html .= self::createHtml($sub); $html .= '
  • '; } else { $html .= '
  • ' . $v['name'] . ''; $html .= '
  • '; } $choose_class = ''; } return $html; } //二三级菜单无子菜单 $html = ''; foreach ($menu as $k => $v) { $sub = isset($v['sub']) ? $v['sub'] : []; if ($sub) { $html .= '
    ' . $v['name'] . '
    '; $html .= self::createHtml($sub); $html .= '
    '; } else { $html .= '
    ' . $v['name'] . '
    '; } } return $html; } }