diff --git a/module/block/css/executionstatisticblock.ui.css b/module/block/css/executionstatisticblock.ui.css new file mode 100644 index 0000000000..087caf13d5 --- /dev/null +++ b/module/block/css/executionstatisticblock.ui.css @@ -0,0 +1,28 @@ +.executionstatistic-block {background: #FCFDFE; height: 256px;} +.executionstatistic-block .panel-body {padding: 0;} +.executionstatistic-block.block-sm {height: auto;} + +.executionstatistic-block .tab-content {width: 100%;} +.executionstatistic-block .tab-pane {padding: 0;} +.executionstatistic-block .bg-secondary-pale {background: #F3F6FA;} +.executionstatistic-block .chart {margin: auto;} +.executionstatistic-block .story-num {margin: auto;} + +.executionstatistic-block.block-long .nav-tabs .nav-item {height:36px; line-height: 36px;} +.executionstatistic-block.block-long .nav-tabs .nav-item:hover {border-left: 2px solid #2E7FFF; background-color: #FCFDFE;} +.executionstatistic-block.block-long .nav-tabs .nav-item.active {border-left: 2px solid #2E7FFF; background-color: #FCFDFE;} +.executionstatistic-block.block-long .nav-tabs .nav-item > a {color: #5E626D;} +.executionstatistic-block.block-long .nav-tabs .nav-item > a:before {background: transparent;} +.executionstatistic-block.block-long .nav-tabs .nav-item.active > a {color: #0B0F18;} +.executionstatistic-block.block-long .nav-tabs .nav-item:hover > a {color: #0B0F18;} +.executionstatistic-block.block-long .nav-tabs .nav-item:hover > a.link {display: flex!important;} +.executionstatistic-block.block-long .nav-tabs .nav-item.nav-prev {display: none} +.executionstatistic-block.block-long .nav-tabs .nav-item.nav-next {display: none} + +.executionstatistic-block.block-sm .nav-tabs .nav-item.active {display: flex!important;} +.executionstatistic-block.block-sm .nav-tabs .nav-item > a {width: 100%;} +.executionstatistic-block.block-sm .nav-tabs .nav-item {display: none} +.executionstatistic-block.block-sm .nav-tabs .nav-item.nav-prev {display: flex} +.executionstatistic-block.block-sm .nav-tabs .nav-item.nav-prev > a {padding: 0;} +.executionstatistic-block.block-sm .nav-tabs .nav-item.nav-next {display: flex} +.executionstatistic-block.block-sm .nav-tabs .nav-item.nav-next > a {padding: 0;} diff --git a/module/block/css/guideblock.ui.css b/module/block/css/guideblock.ui.css index b9103d1705..82900f3b20 100644 --- a/module/block/css/guideblock.ui.css +++ b/module/block/css/guideblock.ui.css @@ -1,5 +1,4 @@ .guide-block .panel-body {padding: 0} -.guide-block .border-top {border-top: 1px solid #EEE} .guide-block .tab-content {width: 100%;} .guide-block .tab-pane {padding: 0;} diff --git a/module/block/css/productstatisticblock.ui.css b/module/block/css/productstatisticblock.ui.css index 2da6482f38..aa04c5d83c 100644 --- a/module/block/css/productstatisticblock.ui.css +++ b/module/block/css/productstatisticblock.ui.css @@ -1,4 +1,5 @@ .productstatistic-block {background: #FCFDFE; height: 256px;} +.productstatistic-block .panel-body {padding: 0;} .productstatistic-block.block-sm {height: auto;} .productstatistic-block .tab-content {width: 100%;} diff --git a/module/block/css/projectstatisticblock.ui.css b/module/block/css/projectstatisticblock.ui.css index adc751fc7d..373893daf0 100644 --- a/module/block/css/projectstatisticblock.ui.css +++ b/module/block/css/projectstatisticblock.ui.css @@ -1,4 +1,5 @@ .projectstatistic-block {background: #FCFDFE;} +.projectstatistic-block .panel-body {padding: 0;} .projectstatistic-block .tab-content {width: 100%;} .projectstatistic-block .bg-secondary-pale {background: #F3F6FA;} .projectstatistic-block .nav-tabs .nav-item:hover {border-left: 2px solid #2E7FFF; background-color: #FCFDFE;} diff --git a/module/block/css/qastatisticblock.ui.css b/module/block/css/qastatisticblock.ui.css new file mode 100644 index 0000000000..ba21bf9761 --- /dev/null +++ b/module/block/css/qastatisticblock.ui.css @@ -0,0 +1,28 @@ +.qastatistic-block {background: #FCFDFE; height: 256px;} +.qastatistic-block .panel-body {padding: 0;} +.qastatistic-block.block-sm {height: auto;} + +.qastatistic-block .tab-content {width: 100%;} +.qastatistic-block .tab-pane {padding: 0;} +.qastatistic-block .bg-secondary-pale {background: #F3F6FA;} +.qastatistic-block .chart {margin: auto;} +.qastatistic-block .story-num {margin: auto;} + +.qastatistic-block.block-long .nav-tabs .nav-item {height:36px; line-height: 36px;} +.qastatistic-block.block-long .nav-tabs .nav-item:hover {border-left: 2px solid #2E7FFF; background-color: #FCFDFE;} +.qastatistic-block.block-long .nav-tabs .nav-item.active {border-left: 2px solid #2E7FFF; background-color: #FCFDFE;} +.qastatistic-block.block-long .nav-tabs .nav-item > a {color: #5E626D;} +.qastatistic-block.block-long .nav-tabs .nav-item > a:before {background: transparent;} +.qastatistic-block.block-long .nav-tabs .nav-item.active > a {color: #0B0F18;} +.qastatistic-block.block-long .nav-tabs .nav-item:hover > a {color: #0B0F18;} +.qastatistic-block.block-long .nav-tabs .nav-item:hover > a.link {display: flex!important;} +.qastatistic-block.block-long .nav-tabs .nav-item.nav-prev {display: none} +.qastatistic-block.block-long .nav-tabs .nav-item.nav-next {display: none} + +.qastatistic-block.block-sm .nav-tabs .nav-item.active {display: flex!important;} +.qastatistic-block.block-sm .nav-tabs .nav-item > a {width: 100%;} +.qastatistic-block.block-sm .nav-tabs .nav-item {display: none} +.qastatistic-block.block-sm .nav-tabs .nav-item.nav-prev {display: flex} +.qastatistic-block.block-sm .nav-tabs .nav-item.nav-prev > a {padding: 0;} +.qastatistic-block.block-sm .nav-tabs .nav-item.nav-next {display: flex} +.qastatistic-block.block-sm .nav-tabs .nav-item.nav-next > a {padding: 0;} diff --git a/module/block/css/recentprojectblock.ui.css b/module/block/css/recentprojectblock.ui.css index d208d404ac..e69de29bb2 100644 --- a/module/block/css/recentprojectblock.ui.css +++ b/module/block/css/recentprojectblock.ui.css @@ -1,2 +0,0 @@ -.recentproject-block .panel-heading {border-bottom: 1px solid #EEE;} -.recentproject-block .panel-body {} diff --git a/module/block/ui/executionstatisticblock.html.php b/module/block/ui/executionstatisticblock.html.php index 9f5fdb9491..6a38367ae4 100644 --- a/module/block/ui/executionstatisticblock.html.php +++ b/module/block/ui/executionstatisticblock.html.php @@ -1,7 +1,7 @@ @@ -11,13 +11,106 @@ declare(strict_types=1); namespace zin; +/** + * 获取区块左侧的执行列表. + * Get execution tabs on the left side. + * + * @param array $executions + * @param string $blockNavCode + * @access public + * @return array + */ +function getExecutionTabs($executions, $blockNavCode): array +{ + $navTabs = array(); + $selected = key($executions); + foreach($executions as $execution) + { + $navTabs[] = li + ( + set('class', 'nav-item' . ($execution->id == $selected ? ' active' : '')), + a + ( + set('class', 'ellipsis'), + set('data-toggle', 'tab'), + set('href', "#tab3{$blockNavCode}Content{$execution->id}"), + $execution->name + + ), + a + ( + set('class', 'link flex-1 text-right hidden'), + set('href', helper::createLink('execution', 'task', "executionID={$execution->id}")), + icon + ( + set('class', 'rotate-90 text-primary'), + 'export' + ) + ) + ); + } + return $navTabs; +} + +/** + * 获取区块右侧显示的执行信息. + * Get execution statistical information. + * + * @param object $executions + * @param string $blockNavID + * @access public + * @return array + */ +function getExecutionInfo($executions, $blockNavID): array +{ + global $lang; + + $selected = key($executions); + $tabItems = array(); + foreach($executions as $execution) + { + $tabItems[] = div + ( + set('class', 'tab-pane' . ($execution->id == $selected ? ' active' : '')), + set('id', "tab3{$blockNavID}Content{$execution->id}"), + div() + ); + } + return $tabItems; +} + +$blockNavCode = 'nav-' . uniqid(); panel ( - set('class', 'executionstatistic-block'), + set('class', 'executionstatistic-block ' . ($longBlock ? 'block-long' : 'block-sm')), + set('headingClass', 'border-b'), + to::heading + ( + div + ( + set('class', 'panel-title'), + span($block->title), + ) + ), div ( - '执行统计', - '正在开发中...' + set('class', 'flex h-full of-hidden'), + cell + ( + set('width', '25%'), + set('class', 'bg-secondary-pale of-y-auto of-x-hidden'), + ul + ( + set('class', 'nav nav-tabs nav-stacked'), + getExecutionTabs($executions, $blockNavCode) + ), + ), + cell + ( + set('class', 'tab-content'), + set('width', '75%'), + getExecutionInfo($executions, $blockNavCode) + ) ) ); diff --git a/module/block/ui/guideblock.html.php b/module/block/ui/guideblock.html.php index bdee52968c..6cd7b67612 100644 --- a/module/block/ui/guideblock.html.php +++ b/module/block/ui/guideblock.html.php @@ -100,26 +100,27 @@ $usedMode = zget($config->global, 'mode', 'light'); jsVar('changeModeTips', sprintf($lang->custom->changeModeTips, $lang->custom->modeList[$usedMode == 'light' ? 'ALM' : 'light'])); panel ( - set('class', 'guide-block of-hidden'), + set('class', 'guide-block'), + set('headingClass', 'border-b'), to::heading ( div ( set('class', 'panel-title w-full justify-between'), - $lang->block->guide, + $block->title, a(set('href', createLink('tutorial', 'start')), set('class', 'btn warning'), $lang->block->tutorial) ) ), div ( - set('class', 'flex h-full border-top'), + set('class', 'flex h-full of-hidden'), cell ( set('width', '18%'), - set('class', 'bg-secondary-pale of-hidden'), + set('class', 'bg-secondary-pale of-y-auto'), ul ( - set('class', 'nav nav-tabs nav-stacked h-full of-y-auto of-x-hidden'), + set('class', 'nav nav-tabs nav-stacked'), getGuideTabs($blockNavCode) ), ), diff --git a/module/block/ui/productstatisticblock.html.php b/module/block/ui/productstatisticblock.html.php index de9f8baa72..d31abd8cc2 100644 --- a/module/block/ui/productstatisticblock.html.php +++ b/module/block/ui/productstatisticblock.html.php @@ -311,20 +311,29 @@ function getProductInfo(array $products, string $blockNavID, bool $longBlock): a } $blockNavCode = 'nav-' . uniqid(); -div +panel ( on::click('.nav-prev,.nav-next', 'switchNav'), - set('class', 'productstatistic-block of-hidden ' . ($longBlock ? 'block-long' : 'block-sm')), + set('class', 'productstatistic-block ' . ($longBlock ? 'block-long' : 'block-sm')), + set('headingClass', 'border-b'), + to::heading + ( + div + ( + set('class', 'panel-title'), + span($block->title), + ) + ), div ( - set('class', "flex h-full " . ($longBlock ? '' : 'col')), + set('class', "flex h-full of-hidden " . ($longBlock ? '' : 'col')), cell ( - set('width', '22%'), - set('class', $longBlock ? 'bg-secondary-pale' : ''), + set('width', '25%'), + set('class', $longBlock ? 'bg-secondary-pale of-y-auto of-x-hidden' : ''), ul ( - set('class', 'nav nav-tabs ' . ($longBlock ? 'nav-stacked h-full of-y-auto of-x-hidden' : 'pt-4 px-4')), + set('class', 'nav nav-tabs ' . ($longBlock ? 'nav-stacked' : 'pt-4 px-4')), getProductTabs($products, $blockNavCode, $longBlock) ), ), diff --git a/module/block/ui/projectstatisticblock.html.php b/module/block/ui/projectstatisticblock.html.php index 8f5a0043b2..c9f9caf4ce 100644 --- a/module/block/ui/projectstatisticblock.html.php +++ b/module/block/ui/projectstatisticblock.html.php @@ -345,16 +345,25 @@ function getWaterfallProjectInfo($project) } $blockNavCode = 'nav-' . uniqid(); -div +panel ( - set('class', 'projectstatistic-block'), + set('class', 'projectstatistic-block ' . ($longBlock ? 'block-long' : 'block-sm')), + set('headingClass', 'border-b'), + to::heading + ( + div + ( + set('class', 'panel-title'), + span($block->title), + ) + ), div ( - set('class', 'flex'), + set('class', 'flex h-full of-hidden'), cell ( set('width', '25%'), - set('class', 'of-hidden bg-secondary-pale'), + set('class', 'bg-secondary-pale of-y-auto of-x-hidden'), ul ( set('class', 'nav nav-tabs nav-stacked'), diff --git a/module/block/ui/qastatisticblock.html.php b/module/block/ui/qastatisticblock.html.php index 1c750a941d..4e223515c2 100644 --- a/module/block/ui/qastatisticblock.html.php +++ b/module/block/ui/qastatisticblock.html.php @@ -89,7 +89,7 @@ function getProductInfo($products, $blockNavID): array div ( set('class', 'mx-6 my-4 bg-primary aspect-square text-center align-middle'), - span('需求交付率') + span('BUG修复率') ), div ( @@ -266,16 +266,25 @@ function getProductInfo($products, $blockNavID): array } $blockNavCode = 'nav-' . uniqid(); -div +panel ( - set('class', 'productstatistic-block'), + set('class', 'qastatistic-block ' . ($longBlock ? 'block-long' : 'block-sm')), + set('headingClass', 'border-b'), + to::heading + ( + div + ( + set('class', 'panel-title'), + span($block->title), + ) + ), div ( - set('class', 'flex'), + set('class', 'flex h-full of-hidden'), cell ( set('width', '25%'), - set('class', 'of-hidden bg-secondary-pale'), + set('class', 'bg-secondary-pale of-y-auto of-x-hidden'), ul ( set('class', 'nav nav-tabs nav-stacked'), diff --git a/module/block/ui/recentprojectblock.html.php b/module/block/ui/recentprojectblock.html.php index f52a9b0100..31ef19714b 100644 --- a/module/block/ui/recentprojectblock.html.php +++ b/module/block/ui/recentprojectblock.html.php @@ -60,6 +60,7 @@ foreach($projects as $projectID => $project) panel ( set('class', 'recentproject-block'), + set('headingClass', 'border-b'), to::heading ( div