Files
EasySoft-ZenTaoPMS/lib/zin/wg/heading/v1.php
T

108 lines
3.0 KiB
PHP

<?php
declare(strict_types=1);
namespace zin;
require_once dirname(__DIR__) . DS . 'toolbar' . DS . 'v1.php';
require_once dirname(__DIR__) . DS . 'dropmenu' . DS . 'v1.php';
class heading extends wg
{
protected static array $defineProps = array
(
'items?: array', // 标题上显示的按钮。
'showAppName?: bool=true', // 是否自动显示当前应用名称。
'dropmenu?: array' // 1.5 级导航配置。
);
protected static array $defineBlocks = array
(
'toolbar' => array('map' => 'toolbar'),
'dropmenu' => array('map' => 'dropmenu')
);
protected function buildAppName()
{
list($tab, $lang) = data(array('app.tab', 'lang'));
$icon = zget($lang->navIconNames, $tab, '');
if(!in_array($tab, array('program', 'product', 'project')))
{
$nav = $lang->mainNav->$tab;
list($title, $currentModule, $currentMethod, $vars) = explode('|', $nav);
if($tab == 'execution') $currentMethod = 'all';
}
else
{
$currentModule = $tab;
if($tab == 'program' or $tab == 'project') $currentMethod = 'browse';
if($tab == 'product') $currentMethod = 'all';
}
$url = createLink($currentModule, $currentMethod);
return item
(
set::url($url),
set::hint($lang->$tab->common),
$tab == 'devops' ? setClass('num') : null,
set::icon($icon),
set::text($lang->$tab->common)
);
}
/**
* Build dropmenu.
*
* @access protected
* @return dropmenu
*/
protected function buildDropmenu(): dropmenu|array|null
{
global $app, $config;
if($this->hasBlock('dropmenu')) return $this->block('dropmenu');
$moduleName = $app->rawModule;
$methodName = $app->rawMethod;
if(in_array("$moduleName-$methodName", $config->excludeDropmenuList)) return null;
if(in_array($app->tab, $config->hasDropmenuApps))
{
$module = $app->tab;
if($app->tab == 'qa') $module = 'product';
if($app->tab == 'bi') $module = 'dimension';
if($app->tab == 'qa' && $moduleName == 'caselib') $module = 'caselib';
return new dropmenu(set::tab($module));
}
return null;
}
protected function buildToolbar()
{
$showAppName = $this->prop('showAppName');
if($this->hasBlock('toolbar')) $this->prop('toolbar');
return new toolbar
(
$showAppName ? $this->buildAppName() : null,
set::btnClass('ghost'),
set::items($this->prop('items')),
$this->children()
);
}
/**
* Build.
*
* @access protected
*/
protected function build(): wg
{
return div
(
set::id('heading'),
$this->buildToolbar(),
$this->buildDropmenu()
);
}
}