diff --git a/lib/zin/wg/mainnavbar/v1.php b/lib/zin/wg/mainnavbar/v1.php index 89893da24a..dd7cc14204 100644 --- a/lib/zin/wg/mainnavbar/v1.php +++ b/lib/zin/wg/mainnavbar/v1.php @@ -53,6 +53,7 @@ class mainNavbar extends nav $currentMethod = $app->getMethodName(); if($app->tab == 'admin') $app->control->loadModel('admin')->setMenu(); + \commonModel::replaceMenuLang(); \commonModel::setMainMenu(); $activeMenu = \commonModel::getActiveMainMenu(); if(empty($activeMenu)) return false; diff --git a/module/common/model.php b/module/common/model.php index 212f5f44fc..b156a20753 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -2433,6 +2433,65 @@ class commonModel extends model return false; } + /** + * Replace menu lang. + * + * @static + * @access public + * @return void + */ + public static function replaceMenuLang() + { + global $lang; + if(empty($lang->db->custom)) return; + foreach($lang->db->custom as $moduleName => $sectionMenus) + { + if(strpos($moduleName, 'Menu') === false) continue; + + $isSecondMenu = strpos($moduleName, 'SubMenu') === false; + $moduleName = str_replace($isSecondMenu ? 'Menu' : 'SubMenu', '', $moduleName); + + foreach($sectionMenus as $section => $menus) + { + foreach($menus as $key => $value) + { + /* Get second menu. */ + if($isSecondMenu) + { + $isDropMenu = strpos($section, 'DropMenu') !== false; + if(!$isDropMenu) + { + if(!isset($lang->{$moduleName}->{$section})) break; + if(is_object($lang->{$moduleName}->{$section}) and isset($lang->{$moduleName}->{$section}->{$key})) $settingMenu = &$lang->{$moduleName}->{$section}->{$key}; + if(is_array($lang->{$moduleName}->{$section}) and isset($lang->{$moduleName}->{$section}[$key])) $settingMenu = &$lang->{$moduleName}->{$section}[$key]; + } + else + { + /* Get drop menu in second menu. */ + $dropMenuKey = str_replace('DropMenu', '', $section); + if(!isset($lang->{$moduleName}->menu->{$dropMenuKey}['dropMenu']->{$key})) break; + $settingMenu = &$lang->{$moduleName}->menu->{$dropMenuKey}['dropMenu']->{$key}; + } + } + /* Get third menu. */ + elseif(isset($lang->{$moduleName}->menu->{$section}['subMenu'])) + { + $subMenu = $lang->{$moduleName}->menu->{$section}['subMenu']; + if(is_object($subMenu) and isset($subMenu->{$key})) $settingMenu = &$lang->{$moduleName}->menu->{$section}['subMenu']->{$key}; + if(is_array($subMenu) and isset($subMenu[$key])) $settingMenu = &$lang->{$moduleName}->menu->{$section}['subMenu'][$key]; + } + + /* Set custom menu lang. */ + if(!empty($settingMenu)) + { + if(is_string($settingMenu)) $settingMenu = $value . substr($settingMenu, strpos($settingMenu, '|')); + if(is_array($settingMenu) and isset($settingMenu['link'])) $settingMenu['link'] = $value . substr($settingMenu['link'], strpos($settingMenu['link'], '|')); + unset($settingMenu); + } + } + } + } + } } class common extends commonModel diff --git a/module/common/test/model/replacemenulang.php b/module/common/test/model/replacemenulang.php new file mode 100644 index 0000000000..3d72a7aecb --- /dev/null +++ b/module/common/test/model/replacemenulang.php @@ -0,0 +1,31 @@ +#!/usr/bin/env php +replaceMenuLang(); +cid=0 + +- 没有 db->custom 数据。 @0 +- 替换二级导航语言项。属性link @执行1|my|execution|type=undone +- 替换三级导航语言项。属性link @任务1|my|work|mode=task +- 替换二级导航下拉的语言项。属性link @需求1|execution|story|executionID=%s + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +su('admin'); + +global $tester; +$tester->loadModel('common'); + +$tester->common->lang->db->custom = array(); +r($tester->common->replaceMenuLang()) && p() && e('0'); //没有 db->custom 数据。 + +$tester->common->lang->db->custom['myMenu']['menu']['execution'] = '执行1'; +$tester->common->lang->db->custom['mySubMenu']['work']['task'] = '任务1'; +$tester->common->lang->db->custom['executionMenu']['storyGroupDropMenu']['story'] = '需求1'; +$tester->common->replaceMenuLang(); + +r($tester->common->lang->my->menu->execution) && p('link') && e("执行1|my|execution|type=undone"); // 替换二级导航语言项。 +r($tester->common->lang->my->menu->work['subMenu']->task) && p('link') && e("任务1|my|work|mode=task"); // 替换三级导航语言项。 +r($tester->common->lang->execution->menu->storyGroup['dropMenu']->story) && p('link') && e("需求1|execution|story|executionID=%s"); // 替换二级导航下拉的语言项。 diff --git a/module/dev/css/langitem.ui.css b/module/dev/css/langitem.ui.css index e8f8a5db8a..0cd4f9176e 100644 --- a/module/dev/css/langitem.ui.css +++ b/module/dev/css/langitem.ui.css @@ -22,15 +22,12 @@ .form-item-content {padding-left: 44px;} .form-item-content .form-item {gap: 64px; height: 56px; align-items: center; position: relative; width: 500px;} .form-item-content .form-item.w-expand {width: 700px;} -.form-item-content .form-item .item-label {flex: 0 0 180px; padding-left: 40px; background: #F8F8F8; display: flex; align-items: center; color: currentColor; font-size: 13px; overflow: hidden;} -.form-item-content .form-item .item-label.lg {flex: 0 0 180px;} -.form-item-content .form-item .input-group {margin-left: 20px; width:180px; height:32px;} -.form-item-content .form-item .input-group > .input-group-addon {flex: 1 1 30%; overflow: hidden;} -.form-item-content .form-item .input-control > input {margin-left: 40px;} +.form-item-content .form-item .item-label {flex: 0 0 180px; padding-left: 40px; background: #F8F8F8; display: flex; align-items: center; color: currentColor; font-size: 13px; overflow: hidden;} +.form-item-content .form-item .item-label.lg {flex: 0 0 180px;} +.form-item-content .form-item .input-group {margin-left: 20px; width:180px; height:32px;} +.form-item-content .form-item .input-group > .input-group-addon {flex: 1 1 30%; overflow: hidden;} +.form-item-content .form-item .input-control > input {margin-left: 40px;} .form-item-content .form-item .icon {display: none; position: absolute; left: 200px; top: 16px; font-size: 25px;} -.form-item-content .form-item.active .icon {display: unset;} -.form-item-content.hover-color-primary > .form-item.active > .label {color: blue;} -.form-item-content.hover-color-primary > .form-item.active .form-control {border-color: blue;} .form-item-content.border-color-primary > .form-item .form-control {border: 1px solid blue;} #menuTree > li > a, #menuTree > li > ul > li > a {white-space: nowrap; text-overflow: clip; overflow: hidden;} diff --git a/module/dev/js/langitem.ui.js b/module/dev/js/langitem.ui.js index b6024c54e1..e58717ff3f 100644 --- a/module/dev/js/langitem.ui.js +++ b/module/dev/js/langitem.ui.js @@ -7,7 +7,7 @@ */ function addActive(id) { - $('[data-id=' + id + ']').addClass('active'); + $('[data-id=' + id + ']').addClass('selected'); } /** @@ -19,7 +19,7 @@ function addActive(id) */ function removeActive(id) { - $('[data-id=' + id + ']').removeClass('active'); + $('[data-id=' + id + ']').removeClass('selected'); } /** @@ -31,7 +31,7 @@ function removeActive(id) */ function handleClickItem(clickId) { - var clearId = $('.form-item.active').attr('data-id'); + var clearId = $('.form-item.selected').attr('data-id'); if(clearId !== clickId) { if(clearId) removeActive(clearId); diff --git a/module/dev/ui/langitem.html.php b/module/dev/ui/langitem.html.php index 2c6495126e..0478f606f4 100644 --- a/module/dev/ui/langitem.html.php +++ b/module/dev/ui/langitem.html.php @@ -109,8 +109,9 @@ if(in_array($type, $config->dev->navTypes)) } if($menu->active) { + $menu->selected = $menu->active; $active[$level] = $menu->id; - if($parent) $parent->active = 1; + if($parent) $parent->selected = 1; } unset($menu->children); }