v1.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. namespace zin;
  3. require_once dirname(__DIR__) . DS . 'toolbar' . DS . 'v1.php';
  4. require_once dirname(__DIR__) . DS . 'dropmenu' . DS . 'v1.php';
  5. class heading extends wg
  6. {
  7. /**
  8. * @var mixed[]
  9. */
  10. protected static $defineProps = array
  11. (
  12. 'items?: array', // 标题上显示的按钮。
  13. 'showAppName?: bool=true', // 是否自动显示当前应用名称。
  14. 'dropmenu?: array' // 1.5 级导航配置。
  15. );
  16. /**
  17. * @var mixed[]
  18. */
  19. protected static $defineBlocks = array
  20. (
  21. 'toolbar' => array('map' => 'toolbar'),
  22. 'dropmenu' => array('map' => 'dropmenu')
  23. );
  24. public static function getPageCSS()
  25. {
  26. return <<<CSS
  27. #heading>[data-zui-dropmenu]+div .dropmenu-btn>.text,#heading>[data-zui-dropmenu]+div+div .dropmenu-btn>.text{max-width:120px}
  28. CSS;
  29. }
  30. protected function buildAppName()
  31. {
  32. list($tab, $lang) = data(array('app.tab', 'lang'));
  33. $icon = zget($lang->navIconNames, $tab, '');
  34. if(!in_array($tab, array('program', 'product', 'project')))
  35. {
  36. $nav = zget($lang->mainNav, $tab, null);
  37. if($nav)
  38. {
  39. list($title, $currentModule, $currentMethod, $vars) = explode('|', $nav);
  40. if($tab == 'execution') $currentMethod = 'all';
  41. }
  42. }
  43. else
  44. {
  45. $currentModule = $tab;
  46. if($tab == 'program' or $tab == 'project') $currentMethod = 'browse';
  47. if($tab == 'product') $currentMethod = 'all';
  48. }
  49. /* 项目模板appName点击后跳转到项目模板列表页面。 */
  50. if($lang->$tab->common == $lang->project->template) $currentMethod = 'template';
  51. if(empty($currentModule) || empty($currentMethod)) return null;
  52. $url = createLink($currentModule, $currentMethod);
  53. return item
  54. (
  55. set::url($url),
  56. set::hint($lang->$tab->common),
  57. ($tab == 'devops' || $tab == 'bi' || $tab == 'safe') ? setClass('font-brand') : null,
  58. set::icon($icon),
  59. set::text($lang->$tab->common)
  60. );
  61. }
  62. /**
  63. * Build dropmenu.
  64. *
  65. * @access protected
  66. * @return dropmenu
  67. */
  68. protected function buildDropmenu()
  69. {
  70. global $app, $config;
  71. if($this->hasBlock('dropmenu')) return $this->block('dropmenu');
  72. $moduleName = $app->rawModule;
  73. $methodName = $app->rawMethod;
  74. if(in_array("$moduleName-$methodName", $config->excludeDropmenuList) || in_array($moduleName, $config->excludeDropmenuModules)) return null;
  75. if(in_array($app->tab, $config->hasDropmenuApps))
  76. {
  77. $module = $app->tab;
  78. if($app->tab == 'qa') $module = 'product';
  79. if($app->tab == 'bi') $module = 'dimension';
  80. if($app->tab == 'feedback' && $moduleName == 'ticket') $module = 'product';
  81. if($app->tab == 'qa' && ($moduleName == 'caselib' || data('isLibCase'))) $module = 'caselib';
  82. return new dropmenu(set::tab($module));
  83. }
  84. return null;
  85. }
  86. protected function buildToolbar()
  87. {
  88. $showAppName = $this->prop('showAppName');
  89. if($this->hasBlock('toolbar')) $this->prop('toolbar');
  90. return new toolbar
  91. (
  92. $showAppName ? $this->buildAppName() : null,
  93. set::btnClass('ghost'),
  94. set::items($this->prop('items')),
  95. $this->children()
  96. );
  97. }
  98. /**
  99. * Build.
  100. *
  101. * @access protected
  102. */
  103. protected function build()
  104. {
  105. global $app, $config;
  106. if($config->edition != 'open' && $app->isServing()) $app->control->loadModel('common')->mergeFlowMenuLang();
  107. return div
  108. (
  109. set::id('heading'),
  110. $this->buildToolbar(),
  111. $this->buildDropmenu()
  112. );
  113. }
  114. }