* [task#130373,done,5h] finish task.

This commit is contained in:
sunguangming
2024-10-12 14:19:38 +08:00
committed by 王怡栋
parent bbbb0a82f4
commit 0ea5fd7c98
6 changed files with 75 additions and 37 deletions
+8 -7
View File
@@ -39,12 +39,13 @@ function getCurrentMainNavbarItems()
{
const $elm = $(element);
$a = $elm.find('a');
items.push(
{
name: $a.attr('data-id'),
order: index * 5
}
);
const menuItem = {};
menuItem.name = $a.attr('data-id'),
menuItem.order = index * 5;
if(typeof $elm.data('hidden') != 'undefined') menuItem.hidden = true;
items.push(menuItem);
}
);
return items;
@@ -157,7 +158,7 @@ $(document).on(
onClick: hideDisabled
? null
: () => {
$li.remove();
$li.hide().attr('data-hidden', '1');
saveMainNavbarToServer($item);
}
},
+10 -9
View File
@@ -42,16 +42,17 @@ function getCurrentNavbarItems()
$nav.children().each(
function(index, element)
{
const $elm = $(element)
const $a = $elm.find('a');
items.push(
{
name: $elm.is('.nav-divider') ? 'divider' : ($a.attr('data-id') || $a.attr('id')),
order: index * 5
}
);
const $elm = $(element)
const $a = $elm.find('a');
const menuItem = {};
menuItem.name = $elm.is('.nav-divider') ? 'divider' : ($a.attr('data-id') || $a.attr('id'));
menuItem.order = index * 5;
if(typeof $elm.data('hidden') != 'undefined') menuItem.hidden = true;
items.push(menuItem);
}
);
console.log(items);
return items;
}
@@ -198,7 +199,7 @@ $(document).on(
onClick: hideDisabled
? null
: () => {
$li.remove();
$li.hasClass('nav-divider') ? $li.remove() : $li.hide().attr('data-hidden', '1');
saveNavbarToServer();
}
},
+26 -7
View File
@@ -621,18 +621,37 @@ class commonModel extends model
/* Ensure user has latest rights set. */
$app->user->rights = $app->control->loadModel('user')->authorize($app->user->account);
$menuOrder = array();
$menuOrder = $lang->mainNav->menuOrder;
$hasCustomMenu = false;
if(isset($config->customMenu->nav) && !$useDefault && !commonModel::isTutorialMode())
{
$items = json_decode($config->customMenu->nav);
foreach($items as $item) $menuOrder[$item->order] = $item->name;
$customMenuOrder = array();
$items = json_decode($config->customMenu->nav);
$hiddenItems = array();
foreach($items as $item)
{
if(!empty($item->hidden))
{
$hiddenItems[] = $item->name;
continue;
}
$customMenuOrder[$item->order] = $item->name;
}
$customMenuItems = array_values($customMenuOrder);
foreach($menuOrder as $order => $name)
{
if(in_array($name, $customMenuItems) || in_array($name, $hiddenItems)) continue;
while(isset($customMenuOrder[$order])) $order ++;
$customMenuOrder[$order] = $name;
}
$menuOrder = $customMenuOrder;
$hasCustomMenu = true;
}
else
{
$menuOrder = $lang->mainNav->menuOrder;
}
ksort($menuOrder);
$items = array();
+18
View File
@@ -566,6 +566,24 @@ class custom extends control
$menu = $this->post->menu; // 导航类型,nav(左侧主导航)|$app(顶部一级导航)|$app-home(项目集、项目的首页导航)|$app-$subMenu(顶部二级导航)|admin-$menuKey(后台导航)
$items = $this->post->items; // 导航项
$account = $this->app->user->account;
$oldMenu = isset($this->config->customMenu->{$menu}) ? $this->config->customMenu->{$menu} : '';
/* 之前隐藏的导航若没开启继续保持隐藏。 */
if($oldMenu)
{
$oldMenus = json_decode($oldMenu);
$menus = json_decode($items);
$menuNames = array();
foreach($menus as $key => $item) $menuNames[] = $item->name;
foreach($oldMenus as $key => $item)
{
if(!empty($item->hidden) && !in_array($item->name, $menuNames)) $menus[] = $item;
}
$items = json_encode($menus);
}
if($menu && $items) $this->loadModel('setting')->setItem("$account.common.customMenu.$menu@{$this->config->vision}", $items);
}
+3 -2
View File
@@ -180,7 +180,7 @@ class customModel extends model
*/
public static function setMenuByConfig(object|array $allMenu, string|array $customMenu, string $module = ''): array
{
global $app, $lang, $config;
global $app, $lang;
$tab = $app->tab;
list($customMenuMap, $order) = static::buildCustomMenuMap($allMenu, $customMenu, $module);
@@ -193,6 +193,7 @@ class customModel extends model
}
$menu = static::buildMenuItems($allMenu, $customMenuMap, $module, $order);
ksort($menu, SORT_NUMERIC);
if(!isset($lang->{$tab})) return array();
@@ -364,7 +365,7 @@ class customModel extends model
/* Process menu item's order and hidden attirbute. */
$menuItem = static::buildMenuItem($item, $customMenuMap, $name, $label, $itemLink, $isTutorialMode, $subMenu);
$menuItem->order = (isset($customMenuMap[$name]) && isset($customMenuMap[$name]->order) ? $customMenuMap[$name]->order : $order ++);
if(!empty($customMenuMap) && !isset($customMenuMap[$name])) $menuItem->hidden = true; // 自定义过滤掉的菜单不显示。
if(!empty($customMenuMap) && !empty($customMenuMap[$name]->hidden)) $menuItem->hidden = true; // 自定义过滤掉的菜单不显示。
if(isset($customMenuMap[$name]) && isset($customMenuMap[$name]->divider)) $menuItem->divider = true;
if($app->viewType == 'mhtml' && isset($config->custom->moblieHidden[$menuModuleName]) && in_array($name, $config->custom->moblieHidden[$menuModuleName])) $menuItem->hidden = 1; // Hidden menu by config in mobile.
while(isset($menu[$menuItem->order])) $menuItem->order ++;
+10 -12
View File
@@ -836,14 +836,15 @@ function getMenuNavData()
const data = [];
const $nav = $('#menuMainNav');
$nav.children().each(function(index, element) {
const $elm = $(element);
data.push(
{
name: $elm.is('.divider') ? 'divider' : $elm.data('app'),
order: index * 5
}
);
const $elm = $(element);
const menuItem = {};
menuItem.name = $elm.is('.divider') ? 'divider' : $elm.data('app');
menuItem.order = index * 5;
if(typeof $elm.data('hidden') != 'undefined') menuItem.hidden = true;
data.push(menuItem);
});
return data;
}
@@ -864,6 +865,7 @@ function restoreMenuNavToServer()
{
const url = $.createLink('custom', 'ajaxRestoreMenu');
$.ajaxSubmit({url, data: {menu: 'nav'}});
top.location.reload();
}
/**
@@ -979,8 +981,6 @@ $(document).on('contextmenu', '#menuMainNav .divider', function(event)
{
text: langData.restore,
onClick: () => {
initAppsMenu(allAppsItems);
refreshMenu();
restoreMenuNavToServer();
}
}
@@ -1070,7 +1070,7 @@ $(document).on('click', '.open-in-app,.show-in-app', function(e)
: () => {
closeApp(code);
const $li = $btn.closest('li');
$li.remove();
$li.hide().attr('data-hidden', '1');
refreshMenu();
saveMenuNavToServer();
},
@@ -1096,8 +1096,6 @@ $(document).on('click', '.open-in-app,.show-in-app', function(e)
{
text: langData.restore,
onClick: () => {
initAppsMenu(allAppsItems);
refreshMenu();
restoreMenuNavToServer();
}
}