|
@@ -19,6 +19,18 @@ class Menu
|
|
|
*/
|
|
|
private $data = array();
|
|
|
|
|
|
+ private $default = array
|
|
|
+ (
|
|
|
+ 'value' => -1,
|
|
|
+ 'name' => '不选择',
|
|
|
+ );
|
|
|
+
|
|
|
+ private $search_default = array
|
|
|
+ (
|
|
|
+ 'value' => -1,
|
|
|
+ 'name' => '菜单',
|
|
|
+ );
|
|
|
+
|
|
|
|
|
|
* __construct
|
|
|
*
|
|
@@ -53,6 +65,61 @@ class Menu
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ public function getCate()
|
|
|
+ {
|
|
|
+
|
|
|
+ $level_total = 100;
|
|
|
+
|
|
|
+
|
|
|
+ $level_num = Dever::input('level_num', 1);
|
|
|
+
|
|
|
+
|
|
|
+ $level_id = Dever::input('level_id');
|
|
|
+
|
|
|
+
|
|
|
+ $level_param = Dever::input('level_param');
|
|
|
+ if ($level_param) {
|
|
|
+ parse_str($level_param, $param);
|
|
|
+ $where['id'] = $param['id'];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $level_search = Dever::input('level_search');
|
|
|
+ if ($level_search) {
|
|
|
+ $default = $this->search_default;
|
|
|
+ $default['name'] = $level_num . '级' . $default['name'];
|
|
|
+ } else {
|
|
|
+ $default = $this->default;
|
|
|
+ }
|
|
|
+
|
|
|
+ $data = array();
|
|
|
+
|
|
|
+
|
|
|
+ if ($level_num == 1) {
|
|
|
+ $where['menu_id'] = -1;
|
|
|
+ } elseif($level_id > 0) {
|
|
|
+ $where['menu_id'] = $level_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isset($where['menu_id'])) {
|
|
|
+ $data = Dever::db('manage/menu')->getAll($where);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($data || $level_num == 1) {
|
|
|
+ array_unshift($data, $default);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!$data) {
|
|
|
+ Dever::alert('error');
|
|
|
+ }
|
|
|
+
|
|
|
+ $result['level_total'] = $level_total;
|
|
|
+ $result['list'] = $data;
|
|
|
+
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
* menu 从数据库中得到所有菜单,如果为空,则从项目中读取一次
|
|
|
*
|
|
@@ -99,26 +166,10 @@ class Menu
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (isset($child[$v['id']])) {
|
|
|
- foreach ($child[$v['id']] as $i => $j) {
|
|
|
- if ($auth && strpos($auth, $i) === false) {
|
|
|
-
|
|
|
-
|
|
|
- } else {
|
|
|
- if ($j['link'] && $i != 'console.index') {
|
|
|
- $j['link'] = Dever::url($j['link'] . '&menu_id=' . $j['id']);
|
|
|
- }
|
|
|
- $menu[$k]['child'][$i] = $j;
|
|
|
+ $menu[$k] = $this->getChild($menu[$k], $child, $v, $auth);
|
|
|
|
|
|
- if ($j['fast'] == 1) {
|
|
|
- $this->fast[$i] = $j;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!isset($menu[$k]['child'])) {
|
|
|
- unset($menu[$k]);
|
|
|
- }
|
|
|
+ if (!isset($menu[$k]['child'])) {
|
|
|
+ unset($menu[$k]);
|
|
|
}
|
|
|
}
|
|
|
} elseif (!$ms && $state == 2) {
|
|
@@ -131,6 +182,31 @@ class Menu
|
|
|
return $menu;
|
|
|
}
|
|
|
|
|
|
+ public function getChild($menu, $child, $v, $auth)
|
|
|
+ {
|
|
|
+ if (isset($child[$v['id']])) {
|
|
|
+ foreach ($child[$v['id']] as $i => $j) {
|
|
|
+ if ($auth && strpos($auth, $i) === false) {
|
|
|
+
|
|
|
+
|
|
|
+ } else {
|
|
|
+ if ($j['link'] && $i != 'console.index') {
|
|
|
+ $j['link'] = Dever::url($j['link'] . '&menu_id=' . $j['id']);
|
|
|
+ }
|
|
|
+ $menu['child'][$i] = $j;
|
|
|
+
|
|
|
+ $menu['child'][$i] = $this->getChild($menu['child'][$i], $child, $j, $auth);
|
|
|
+
|
|
|
+ if ($j['fast'] == 1) {
|
|
|
+ $this->fast[$i] = $j;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $menu;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
* 清空所有菜单
|
|
|
*
|
|
@@ -157,6 +233,23 @@ class Menu
|
|
|
Dever::out('yes');
|
|
|
}
|
|
|
|
|
|
+ private function getKey($k, $i, $j)
|
|
|
+ {
|
|
|
+ if (is_string($j['menu'])) {
|
|
|
+ $m = $j['menu'];
|
|
|
+ } else {
|
|
|
+ $m = $k;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($m == $k) {
|
|
|
+ $key = $k . '.' . $i;
|
|
|
+ } else {
|
|
|
+ $key = $m . '.' . $k . '.' . $i;
|
|
|
+ }
|
|
|
+
|
|
|
+ return array($m, $key);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
* 载入从项目中定义好的菜单
|
|
|
*
|
|
@@ -189,6 +282,7 @@ class Menu
|
|
|
$top = Dever::load('manage/top');
|
|
|
$auth = Dever::load('manage/auth');
|
|
|
|
|
|
+ $child = array();
|
|
|
foreach ($project as $k => $v) {
|
|
|
|
|
|
if (!isset($v['url'])) {
|
|
@@ -209,22 +303,27 @@ class Menu
|
|
|
$j['menu'] = true;
|
|
|
}
|
|
|
if (isset($j['manage']) && $j['menu'] != false) {
|
|
|
- if (is_string($j['menu'])) {
|
|
|
- $m = $j['menu'];
|
|
|
- } else {
|
|
|
- $m = $k;
|
|
|
- }
|
|
|
+ list($m, $key) = $this->getKey($k, $i, $j);
|
|
|
|
|
|
- if ($m == $k) {
|
|
|
- $key = $k . '.' . $i;
|
|
|
- } else {
|
|
|
- $key = $m . '.' . $k . '.' . $i;
|
|
|
- }
|
|
|
$project[$m]['child'][$i]['key'] = $key;
|
|
|
$project[$m]['child'][$i]['name'] = $j['lang'];
|
|
|
$project[$m]['child'][$i]['link'] = 'project/database/list?project=' . $k . '&table=' . $i . '&menu=' . $m . '&search_option_state=1';
|
|
|
$project[$m]['child'][$i]['order'] = isset($j['order']) ? $j['order'] : 1;
|
|
|
$project[$m]['child'][$i]['fast'] = isset($j['fast']) ? $j['fast'] : 2;
|
|
|
+
|
|
|
+ if (isset($j['parent'])) {
|
|
|
+ $parent = $j['parent'];
|
|
|
+ $parent['menu'] = $parent['key'];
|
|
|
+ list($parent_menu, $parent_key) = $this->getKey($k, $parent['name'], $parent);
|
|
|
+
|
|
|
+ $project[$m]['child'][$i]['parent'] = array();
|
|
|
+ $project[$m]['child'][$i]['parent']['key'] = $parent_key;
|
|
|
+ $project[$m]['child'][$i]['parent']['name'] = $parent['name'];
|
|
|
+ $project[$m]['child'][$i]['parent']['link'] = '';
|
|
|
+ $project[$m]['child'][$i]['parent']['order'] = isset($parent['order']) ? $parent['order'] : 1;
|
|
|
+ $project[$m]['child'][$i]['parent']['fast'] = isset($parent['fast']) ? $parent['fast'] : 2;
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
@@ -236,6 +335,33 @@ class Menu
|
|
|
|
|
|
|
|
|
if ($project) {
|
|
|
+ $menu = Dever::config('base', 'manage')->menu;
|
|
|
+
|
|
|
+ if ($menu) {
|
|
|
+ $old = $project;
|
|
|
+ $project = array();
|
|
|
+ if (!isset($menu['console']) && isset($old['console'])) {
|
|
|
+ $project['console'] = $old['console'];
|
|
|
+ }
|
|
|
+ foreach ($menu as $k => $v) {
|
|
|
+ $project[$k] = $v;
|
|
|
+ $project[$k]['key'] = $v['project'];
|
|
|
+ $project[$k]['lang'] = $v['name'];
|
|
|
+ $project[$k]['path'] = $k;
|
|
|
+ $project[$k]['icon'] = $old[$v['icon']]['icon'];
|
|
|
+ $child = explode(',', $v['project']);
|
|
|
+ foreach ($child as $k1 => $v1) {
|
|
|
+ $project[$k]['child'][$v1] = $old[$v1];
|
|
|
+ $project[$k]['child'][$v1]['key'] = $v1;
|
|
|
+ $project[$k]['child'][$v1]['link'] = $old[$v1]['url'];
|
|
|
+ $project[$k]['child'][$v1]['fast'] = 2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!isset($project['manage']) && isset($old['manage'])) {
|
|
|
+ $project['manage'] = $old['manage'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
foreach ($project as $k => $v) {
|
|
|
if (!isset($v['child'])) {
|
|
|
unset($project[$k]);
|
|
@@ -246,7 +372,20 @@ class Menu
|
|
|
$id = $this->updateMenu($k, $v['lang'], $v['path'] . ':' . $v['name'], -1, $v['order'], 2, (isset($v['icon']) ? $v['icon'] : ''));
|
|
|
if ($id > 0) {
|
|
|
foreach ($v['child'] as $i => $j) {
|
|
|
- $this->updateMenu($j['key'], $j['name'], $j['link'], $id, $j['order'], $j['fast']);
|
|
|
+ if (isset($j['child']) && $j['child']) {
|
|
|
+ $parent = $this->updateMenu($j['key'], $j['name'], $j['link'], $id, $j['order'], $j['fast']);
|
|
|
+ foreach ($j['child'] as $i1 => $j1) {
|
|
|
+ $this->updateMenu($j1['key'], $j1['name'], $j1['link'], $parent, $j1['order'], $j1['fast']);
|
|
|
+ }
|
|
|
+ } elseif (isset($j['parent']) && $j['parent']) {
|
|
|
+ $p = $j['parent'];
|
|
|
+ $parent = $this->updateMenu($p['key'], $p['name'], $p['link'], $id, $p['order'], $p['fast']);
|
|
|
+ if ($parent) {
|
|
|
+ $this->updateMenu($j['key'], $j['name'], $j['link'], $parent, $j['order'], $j['fast']);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $this->updateMenu($j['key'], $j['name'], $j['link'], $id, $j['order'], $j['fast']);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -354,6 +493,7 @@ class Menu
|
|
|
$update['add_name'] = $name;
|
|
|
$update['add_link'] = $link;
|
|
|
$update['add_menu_id'] = $menu;
|
|
|
+ $update['add_menu'] = $menu;
|
|
|
$update['add_reorder'] = $order;
|
|
|
$update['add_fast'] = $fast;
|
|
|
$update['add_state'] = 1;
|
|
@@ -375,6 +515,65 @@ class Menu
|
|
|
return $info['id'];
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * menu 生成左侧的菜单 此处应加上权限来显示是否管理员有该菜单的权限
|
|
|
+ *
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function getHtml($state = false)
|
|
|
+ {
|
|
|
+ $data = $this->all();
|
|
|
+
|
|
|
+ $html = '';
|
|
|
+ if (layadmin()) {
|
|
|
+ foreach ($data as $k => $v) {
|
|
|
+ $v['icon'] = $v['icon'] ? "layui-icon " . $v['icon'] : "layui-icon layui-icon-home";
|
|
|
+ $html .= '<li data-name="'.$v['key'].'" class="layui-nav-item">';
|
|
|
+
|
|
|
+ if (isset($v['child']) && $v['child']) {
|
|
|
+ $link = 'href="javascript:;"';
|
|
|
+ } else {
|
|
|
+ $link = 'lay-href="'.$v1['link'].'"';
|
|
|
+ }
|
|
|
+ $html .= '<a '.$link.' lay-tips="'.$v['name'].'" lay-direction="2">';
|
|
|
+ $html .= '<i class="'.$v['icon'].'"></i><cite>'.$v['name'].'</cite></a>';
|
|
|
+
|
|
|
+ $html .= $this->getHtmlChild($v);
|
|
|
+
|
|
|
+ $html .= '</li>';
|
|
|
+ }
|
|
|
+ $html .= '';
|
|
|
+ }
|
|
|
+
|
|
|
+ return $html;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function getHtmlChild($v)
|
|
|
+ {
|
|
|
+ $html = '';
|
|
|
+
|
|
|
+ if (isset($v['child']) && $v['child']) {
|
|
|
+ $html .= '<dl class="layui-nav-child">';
|
|
|
+ foreach ($v['child'] as $k1 => $v1) {
|
|
|
+ $html .= '<dd data-name="'.$v1['key'].'">';
|
|
|
+ if (isset($v1['child']) && $v1['child']) {
|
|
|
+ $html .= '<a href="javascript:;">'.$v1['name'].'</a><dl class="layui-nav-child">';
|
|
|
+ foreach ($v1['child'] as $k2 => $v2) {
|
|
|
+ $html .= '<dd data-name="'.$v2['key'].'"><a lay-href="'.$v2['link'].'">'.$v2['name'].'</a></dd>';
|
|
|
+ }
|
|
|
+ $html .= '</dl>';
|
|
|
+ } else {
|
|
|
+ $html .= '<a lay-href="'.$v1['link'].'">'.$v1['name'].'</a>';
|
|
|
+ }
|
|
|
+
|
|
|
+ $html .= '</dd>';
|
|
|
+ }
|
|
|
+ $html .= '</dl>';
|
|
|
+ }
|
|
|
+
|
|
|
+ return $html;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
* menu 生成左侧的菜单 此处应加上权限来显示是否管理员有该菜单的权限
|
|
|
*
|