mirror of https://gitee.com/karson/fastadmin.git
parent
3f42ab8b6c
commit
725782cf7b
|
|
@ -3,7 +3,6 @@
|
||||||
namespace app\admin\controller;
|
namespace app\admin\controller;
|
||||||
|
|
||||||
use app\common\controller\Backend;
|
use app\common\controller\Backend;
|
||||||
use fast\Menu;
|
|
||||||
use think\Validate;
|
use think\Validate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -28,7 +27,7 @@ class Index extends Backend
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
$menulist = Menu::instance()->sidebar([
|
$menulist = $this->auth->getSidebar([
|
||||||
'dashboard' => 'hot',
|
'dashboard' => 'hot',
|
||||||
'auth' => ['new', 'red', 'badge'],
|
'auth' => ['new', 'red', 'badge'],
|
||||||
'auth/admin' => 12,
|
'auth/admin' => 12,
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ return [
|
||||||
'Max output:%s' => '最大返回%s条',
|
'Max output:%s' => '最大返回%s条',
|
||||||
'Total:%s' => '共有%s条记录! ',
|
'Total:%s' => '共有%s条记录! ',
|
||||||
'Row:%s' => '记录:%s',
|
'Row:%s' => '记录:%s',
|
||||||
'Executes one or multiple queries which are concatenated by a semicolon' => '请输入SQL语句,支持批量查询,多条SQL以分号(,)分格',
|
'Executes one or multiple queries which are concatenated by a semicolon' => '请输入SQL语句,支持批量查询,多条SQL以分号(;)分格',
|
||||||
'Query affected %s rows and took %s seconds' => '共影响%s条记录! 耗时:%s秒!',
|
'Query affected %s rows and took %s seconds' => '共影响%s条记录! 耗时:%s秒!',
|
||||||
'Query returned an empty result' => '返回结果为空!',
|
'Query returned an empty result' => '返回结果为空!',
|
||||||
'Query took %s seconds' => '耗时%s秒!',
|
'Query took %s seconds' => '耗时%s秒!',
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ namespace app\admin\library;
|
||||||
|
|
||||||
use app\admin\model\Admin;
|
use app\admin\model\Admin;
|
||||||
use fast\Random;
|
use fast\Random;
|
||||||
|
use fast\Tree;
|
||||||
use think\Cookie;
|
use think\Cookie;
|
||||||
use think\Request;
|
use think\Request;
|
||||||
use think\Session;
|
use think\Session;
|
||||||
|
|
@ -202,4 +203,67 @@ class Auth extends \fast\Auth
|
||||||
return in_array('*', $this->getRuleIds()) ? TRUE : FALSE;
|
return in_array('*', $this->getRuleIds()) ? TRUE : FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取左侧菜单栏
|
||||||
|
*
|
||||||
|
* @param array $params URL对应的badge数据
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getSidebar($params = [])
|
||||||
|
{
|
||||||
|
$colorArr = ['red', 'green', 'yellow', 'blue', 'teal', 'orange', 'purple'];
|
||||||
|
$colorNums = count($colorArr);
|
||||||
|
$badgeList = [];
|
||||||
|
// 生成菜单的badge
|
||||||
|
foreach ($params as $k => $v)
|
||||||
|
{
|
||||||
|
if (stripos($k, '/') === false)
|
||||||
|
{
|
||||||
|
$url = '/admin/' . $k;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$url = url($k);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_array($v))
|
||||||
|
{
|
||||||
|
$nums = isset($v[0]) ? $v[0] : 0;
|
||||||
|
$color = isset($v[1]) ? $v[1] : $colorArr[(is_numeric($nums) ? $nums : strlen($nums)) % $colorNums];
|
||||||
|
$class = isset($v[2]) ? $v[2] : 'label';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$nums = $v;
|
||||||
|
$color = $colorArr[(is_numeric($nums) ? $nums : strlen($nums)) % $colorNums];
|
||||||
|
$class = 'label';
|
||||||
|
}
|
||||||
|
//必须nums大于0才显示
|
||||||
|
if ($nums)
|
||||||
|
{
|
||||||
|
$badgeList[$url] = '<small class="' . $class . ' pull-right bg-' . $color . '">' . $nums . '</small>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取管理员当前拥有的权限节点
|
||||||
|
$userRule = $this->getRuleList();
|
||||||
|
|
||||||
|
$select_id = 0;
|
||||||
|
$dashboard = rtrim(url('dashboard/'), '/');
|
||||||
|
// 必须将结果集转换为数组
|
||||||
|
$ruleList = collection(model('AuthRule')->where('ismenu', 1)->order('weigh', 'desc')->cache("__menu__")->select())->toArray();
|
||||||
|
foreach ($ruleList as $k => &$v)
|
||||||
|
{
|
||||||
|
if (!in_array($v['name'], $userRule))
|
||||||
|
continue;
|
||||||
|
$select_id = $v['name'] == $dashboard ? $v['id'] : $select_id;
|
||||||
|
$v['url'] = $v['name'];
|
||||||
|
$v['badge'] = isset($badgeList[$v['name']]) ? $badgeList[$v['name']] : '';
|
||||||
|
}
|
||||||
|
// 构造菜单数据
|
||||||
|
Tree::instance()->init($ruleList);
|
||||||
|
$menu = Tree::instance()->getTreeMenu(0, '<li class="@class"><a href="@url" addtabs="@id" url="@url"><i class="@icon"></i> <span>@title</span> <span class="pull-right-container">@caret @badge</span></a> @childlist</li>', $select_id, '', 'ul', 'class="treeview-menu"');
|
||||||
|
return $menu;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,166 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace fast;
|
|
||||||
|
|
||||||
use app\admin\library\Auth;
|
|
||||||
use fast\Tree;
|
|
||||||
use think\Config;
|
|
||||||
use think\Db;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 菜单
|
|
||||||
*/
|
|
||||||
class Menu
|
|
||||||
{
|
|
||||||
|
|
||||||
protected static $instance;
|
|
||||||
//默认配置
|
|
||||||
protected $config = [];
|
|
||||||
|
|
||||||
public function __construct($options = [])
|
|
||||||
{
|
|
||||||
if ($config = Config::get('menu'))
|
|
||||||
{
|
|
||||||
$this->config = array_merge($this->config, $config);
|
|
||||||
}
|
|
||||||
$this->config = array_merge($this->config, is_array($options) ? $options : []);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 单例
|
|
||||||
* @param array $options 参数
|
|
||||||
* @return Menu
|
|
||||||
*/
|
|
||||||
public static function instance($options = [])
|
|
||||||
{
|
|
||||||
if (is_null(self::$instance))
|
|
||||||
{
|
|
||||||
self::$instance = new static($options);
|
|
||||||
}
|
|
||||||
|
|
||||||
return self::$instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 导入节点数据
|
|
||||||
* @param array $treearr
|
|
||||||
* @param int $pid
|
|
||||||
* @param string $module
|
|
||||||
*/
|
|
||||||
public function import($treearr, $pid = 0, $module = NULL)
|
|
||||||
{
|
|
||||||
$module = is_null($module) ? Config::user('request.modulename') : $module;
|
|
||||||
foreach ($treearr as $key => & $v)
|
|
||||||
{
|
|
||||||
$controller = strtolower($v['controller']) . ($v['childlist'] ? "_folder" : '');
|
|
||||||
$icon = isset($v['icon']) ? $v['icon'] : (stripos($v['name'], '_') !== FALSE ? $v['childlist'] ? 'folder' : 'circle-o' : strtolower($v['name']));
|
|
||||||
$actionkeys = array_keys($v['actionlist']);
|
|
||||||
$action = '-' . ($v['actionlist'] ? reset($actionkeys) : '');
|
|
||||||
$values = array(
|
|
||||||
'name' => $v['name'],
|
|
||||||
'weigh' => $key,
|
|
||||||
'pid' => $pid,
|
|
||||||
'module' => $module,
|
|
||||||
'controller' => $controller,
|
|
||||||
'action' => $action,
|
|
||||||
'icon' => $icon,
|
|
||||||
'type' => 'menu',
|
|
||||||
'status' => 'normal'
|
|
||||||
);
|
|
||||||
$id = Db::table("node")->data($values)->insert();
|
|
||||||
$v['id'] = $id;
|
|
||||||
}
|
|
||||||
unset($v);
|
|
||||||
foreach ($treearr as $k => $v)
|
|
||||||
{
|
|
||||||
if ($v['childlist'])
|
|
||||||
{
|
|
||||||
$this->import($v['childlist'], $v['id'], $module);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$i = 0;
|
|
||||||
foreach ($v['actionlist'] as $m => $n)
|
|
||||||
{
|
|
||||||
$values = array(
|
|
||||||
'name' => $n ? $n : $m,
|
|
||||||
'weigh' => $i,
|
|
||||||
'pid' => $v['id'],
|
|
||||||
'module' => $module,
|
|
||||||
'controller' => strtolower($v['controller']),
|
|
||||||
'action' => $m,
|
|
||||||
'icon' => 'circle-o',
|
|
||||||
'type' => 'file',
|
|
||||||
'status' => 'normal'
|
|
||||||
);
|
|
||||||
Db::table("node")->data($values)->insert();
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取左侧菜单栏
|
|
||||||
*
|
|
||||||
* @param array $params URL对应的badge数据
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function sidebar($params = [])
|
|
||||||
{
|
|
||||||
$colorArr = ['red', 'green', 'yellow', 'blue', 'teal', 'orange', 'purple'];
|
|
||||||
$colorNums = count($colorArr);
|
|
||||||
$badgeList = [];
|
|
||||||
// 生成菜单的badge
|
|
||||||
foreach ($params as $k => $v)
|
|
||||||
{
|
|
||||||
if (stripos($k, '/') === false)
|
|
||||||
{
|
|
||||||
$url = '/admin/' . $k;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$url = url($k);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_array($v))
|
|
||||||
{
|
|
||||||
$nums = isset($v[0]) ? $v[0] : 0;
|
|
||||||
$color = isset($v[1]) ? $v[1] : $colorArr[(is_numeric($nums) ? $nums : strlen($nums)) % $colorNums];
|
|
||||||
$class = isset($v[2]) ? $v[2] : 'label';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$nums = $v;
|
|
||||||
$color = $colorArr[(is_numeric($nums) ? $nums : strlen($nums)) % $colorNums];
|
|
||||||
$class = 'label';
|
|
||||||
}
|
|
||||||
//必须nums大于0才显示
|
|
||||||
if ($nums)
|
|
||||||
{
|
|
||||||
$badgeList[$url] = '<small class="' . $class . ' pull-right bg-' . $color . '">' . $nums . '</small>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 读取管理员当前拥有的权限节点
|
|
||||||
$userRule = Auth::instance()->getRuleList();
|
|
||||||
|
|
||||||
$select_id = 0;
|
|
||||||
$dashboard = rtrim(url('dashboard/'), '/');
|
|
||||||
// 必须将结果集转换为数组
|
|
||||||
$ruleList = collection(model('AuthRule')->where('ismenu', 1)->order('weigh', 'desc')->cache("__menu__")->select())->toArray();
|
|
||||||
foreach ($ruleList as $k => &$v)
|
|
||||||
{
|
|
||||||
if (!in_array($v['name'], $userRule))
|
|
||||||
continue;
|
|
||||||
$select_id = $v['name'] == $dashboard ? $v['id'] : $select_id;
|
|
||||||
$v['url'] = $v['name'];
|
|
||||||
$v['badge'] = isset($badgeList[$v['name']]) ? $badgeList[$v['name']] : '';
|
|
||||||
}
|
|
||||||
// 构造菜单数据
|
|
||||||
Tree::instance()->init($ruleList);
|
|
||||||
$menu = Tree::instance()->getTreeMenu(0, '<li class="@class"><a href="@url" addtabs="@id" url="@url"><i class="@icon"></i> <span>@title</span> <span class="pull-right-container">@caret @badge</span></a> @childlist</li>', $select_id, '', 'ul', 'class="treeview-menu"');
|
|
||||||
return $menu;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue