diff --git a/module/block/ui/productstatisticblock.html.php b/module/block/ui/productstatisticblock.html.php index 5c10fccbdc..e86d31e425 100644 --- a/module/block/ui/productstatisticblock.html.php +++ b/module/block/ui/productstatisticblock.html.php @@ -16,7 +16,6 @@ $app->loadLang('execution'); $active = isset($params['active']) ? $params['active'] : key($products); // 当前产品 ID。 $product = null; // 当前产品。 Current active product. $items = array(); // 产品导航列表。 Product nav list. - foreach($products as $productItem) { $projectID = isset($params['projectID']) ? $params['projectID'] : 0; @@ -33,23 +32,26 @@ foreach($products as $productItem) $doneData = array(); $openedData = array(); -foreach($product->monthFinish as $date => $count) +if($product) { - if($date == date('Y-m')) + foreach($product->monthFinish as $date => $count) { - $product->monthFinish[$lang->datepicker->dpText->TEXT_THIS_MONTH] = $count; - unset($product->monthFinish[$date]); + if($date == date('Y-m')) + { + $product->monthFinish[$lang->datepicker->dpText->TEXT_THIS_MONTH] = $count; + unset($product->monthFinish[$date]); + } + $doneData[] = $count; } - $doneData[] = $count; -} -foreach($product->monthCreated as $date => $count) -{ - if($date == date('Y-m')) + foreach($product->monthCreated as $date => $count) { - $product->monthCreated[$lang->datepicker->dpText->TEXT_THIS_MONTH] = $count; - unset($product->monthCreated[$date]); + if($date == date('Y-m')) + { + $product->monthCreated[$lang->datepicker->dpText->TEXT_THIS_MONTH] = $count; + unset($product->monthCreated[$date]); + } + $openedData[] = $count; } - $openedData[] = $count; } $monthFinish = !empty($product) ? $product->monthFinish : array(); @@ -61,7 +63,7 @@ statisticBlock set::active($active), set::moreLink(createLink('product', 'all', 'browseType=' . $block->params->type)), set::items($items), - div + $product ? div ( setClass($longBlock ? 'row' : 'col gap-3', 'h-full overflow-hidden items-stretch p-2'), center @@ -279,5 +281,5 @@ statisticBlock ) ) : null ) : null - ) + ) : null ); diff --git a/module/block/ui/projectstatisticblock.html.php b/module/block/ui/projectstatisticblock.html.php index 0145513096..bed71513c9 100644 --- a/module/block/ui/projectstatisticblock.html.php +++ b/module/block/ui/projectstatisticblock.html.php @@ -13,8 +13,7 @@ namespace zin; $active = isset($params['active']) ? $params['active'] : key($projects); $project = null; - -$items = array(); +$items = array(); foreach($projects as $projectItem) { $params = helper::safe64Encode("module={$block->module}&active={$projectItem->id}"); @@ -30,385 +29,386 @@ foreach($projects as $projectItem) $remainingDays = !empty($project->remainingDays) ? $project->remainingDays : 0; $projectOverview = array(); -$projectOverview[] = cell -( - setClass('text-left'), - $project->status != 'closed' && $project->end != LONG_TIME ? span +if($project) +{ + $projectOverview[] = cell ( - setClass('text-gray'), - $remainingDays >= 0 ? $lang->block->projectstatistic->leftDaysPre : $lang->block->projectstatistic->delayDaysPre, - span + setClass('text-left'), + $project->status != 'closed' && $project->end != LONG_TIME ? span ( - setClass('font-bold text-black px-1'), - abs($remainingDays) - ), - $lang->block->projectstatistic->day - ) : span - ( - setClass('text-gray'), - $project->status == 'closed' ? $lang->block->projectstatistic->projectClosed : $lang->block->projectstatistic->longTimeProject - ) -); -$projectOverview[] = $config->edition != 'open' ? cell -( - setClass('flex-1 text-left' . (!$longBlock ? ' w-full' : '')), - icon('bullhorn text-warning'), - span - ( - setClass('text-gray mr-5'), - $lang->block->projectstatistic->existRisks, - span - ( - setClass('font-bold text-warning'), - $project->risks - ) - ), - span - ( - setClass('text-gray'), - $lang->block->projectstatistic->existIssues, - span - ( - setClass('font-bold text-warning'), - $project->issues - ) - ) -) : ''; - -$width = $config->edition != 'open' ? '33%' : '50%'; - -$lastestExecution = !empty($project->executions) && $project->multiple ? cell -( - setClass('flex flex-1 overflow-hidden whitespace-nowrap clip w-full' . (!$longBlock ? ' text-left w-full' : '')), - span - ( - setClass('text-gray'), - $lang->block->projectstatistic->lastestExecution, - hasPriv('execution', 'task') ? a - ( - setClass('pl-2'), - set::href(helper::createLink('execution', 'task', "executionID={$project->executions[0]->id}")), - set('title', $project->executions[0]->name), - $project->executions[0]->name + setClass('text-gray'), + $remainingDays >= 0 ? $lang->block->projectstatistic->leftDaysPre : $lang->block->projectstatistic->delayDaysPre, + span + ( + setClass('font-bold text-black px-1'), + abs($remainingDays) + ), + $lang->block->projectstatistic->day ) : span ( - setClass('pl-2'), - $project->executions[0]->name + setClass('text-gray'), + $project->status == 'closed' ? $lang->block->projectstatistic->projectClosed : $lang->block->projectstatistic->longTimeProject ) - ) -) : null; - -$cells = array(); -if(in_array($project->model, array('scrum', 'kanban', 'agileplus'))) -{ - foreach($config->block->projectstatistic->items as $module => $moduleItems) - { - $cellItems = array(); - foreach($moduleItems as $item) - { - $field = $item['field']; - $unit = $item['unit']; - - $cellItems[] = item + ); + $projectOverview[] = $config->edition != 'open' ? cell + ( + setClass('flex-1 text-left' . (!$longBlock ? ' w-full' : '')), + icon('bullhorn text-warning'), + span + ( + setClass('text-gray mr-5'), + $lang->block->projectstatistic->existRisks, + span ( - set::name + setClass('font-bold text-warning'), + $project->risks + ) + ), + span + ( + setClass('text-gray'), + $lang->block->projectstatistic->existIssues, + span + ( + setClass('font-bold text-warning'), + $project->issues + ) + ) + ) : ''; + + $lastestExecution = !empty($project->executions) && $project->multiple ? cell + ( + setClass('flex flex-1 overflow-hidden whitespace-nowrap clip w-full' . (!$longBlock ? ' text-left w-full' : '')), + span + ( + setClass('text-gray'), + $lang->block->projectstatistic->lastestExecution, + hasPriv('execution', 'task') ? a + ( + setClass('pl-2'), + set::href(helper::createLink('execution', 'task', "executionID={$project->executions[0]->id}")), + set('title', $project->executions[0]->name), + $project->executions[0]->name + ) : span + ( + setClass('pl-2'), + $project->executions[0]->name + ) + ) + ) : null; + + $cells = array(); + if(in_array($project->model, array('scrum', 'kanban', 'agileplus'))) + { + foreach($config->block->projectstatistic->items as $module => $moduleItems) + { + $cellItems = array(); + foreach($moduleItems as $item) + { + $field = $item['field']; + $unit = $item['unit']; + + $cellItems[] = item ( - $lang->block->projectstatistic->{$field}, - !isset($lang->block->tooltips[$field]) ? ':' : null - ), - to::suffixName - ( - isset($lang->block->tooltips[$field]) ? icon + set::name ( - setClass('text-light text-sm'), - toggle::tooltip + $lang->block->projectstatistic->{$field}, + !isset($lang->block->tooltips[$field]) ? ':' : null + ), + to::suffixName + ( + isset($lang->block->tooltips[$field]) ? icon ( - array + setClass('text-light text-sm'), + toggle::tooltip ( - 'title' => $lang->block->tooltips[$field], - 'placement' => 'bottom', - 'type' => 'white', - 'className' => 'text-dark border border-light leading-5' - ) - ), - 'help', - ':' - ) : null - ), - span + array + ( + 'title' => $lang->block->tooltips[$field], + 'placement' => 'bottom', + 'type' => 'white', + 'className' => 'text-dark border border-light leading-5' + ) + ), + 'help', + ':' + ) : null + ), + span + ( + setClass('font-bold text-black mr-0.5'), + round(zget($project, $field, 0), 2) + ), + span + ( + setClass('text-gray'), + $field == 'storyPoints' ? $config->block->storyUnitList[$config->custom->hourPoint] : $lang->block->projectstatistic->{$unit} + ) + ); + } + $cells[] = cell + ( + setClass('flex-1 overflow-hidden whitespace-nowrap project-statistic-table scrum' . (($module != 'cost' && $longBlock) || ($module != 'task' && $module != 'cost' && !$longBlock) ? ' border-l pl-4 ' : ' ml-4') . (!$longBlock && $module != 'cost' && $module != 'story'? ' border-t' : '')), + set::width($longBlock ? ($module == 'cost' ? 'calc(25% - 1rem)' : '25%') : 'calc(50% - 1rem)'), + div ( - setClass('font-bold text-black mr-0.5'), - round(zget($project, $field, 0), 2) + setClass('pt-1'), + span + ( + setClass('font-bold'), + $lang->block->projectstatistic->{$module} + ) ), - span + tableData ( - setClass('text-gray'), - $field == 'storyPoints' ? $config->block->storyUnitList[$config->custom->hourPoint] : $lang->block->projectstatistic->{$unit} + set::width('100%'), + $cellItems ) ); } + } + else + { $cells[] = cell ( - setClass('flex-1 overflow-hidden whitespace-nowrap project-statistic-table scrum' . (($module != 'cost' && $longBlock) || ($module != 'task' && $module != 'cost' && !$longBlock) ? ' border-l pl-4 ' : ' ml-4') . (!$longBlock && $module != 'cost' && $module != 'story'? ' border-t' : '')), - set::width($longBlock ? ($module == 'cost' ? 'calc(25% - 1rem)' : '25%') : 'calc(50% - 1rem)'), + setClass('flex flex-wrap items-center progress-circle pt-2 mb-2'), + set::width($longBlock ? '36%' : '100%'), div ( - setClass('pt-1'), + setClass('flex justify-center w-full'), + progressCircle + ( + set::percent($project->progress), + set::size(112), + set::text(false), + set::circleWidth(0.06), + div(span(setClass('text-2xl font-bold'), $project->progress), '%'), + div + ( + setClass('row text-sm text-gray items-center gap-1'), + $lang->block->projectstatistic->totalProgress, + icon + ( + setClass('pl-0.5 text-light text-sm'), + toggle::tooltip + ( + array + ( + 'content' => array('html' => $lang->block->projectstatistic->totalProgressTip), + 'placement' => 'bottom', + 'type' => 'white', + 'className' => 'text-dark border border-light leading-5' + ) + ), + 'help' + ) + ) + ) + ) + ); + $cells[] = cell + ( + setClass('project-statistic-table waterfall pl-4' . ($longBlock ? ' border-l' : ' mt-4')), + set::width($longBlock ? '32%' : '50%'), + div + ( + setClass('w-full'), span ( setClass('font-bold'), - $lang->block->projectstatistic->{$module} + $lang->project->progress ) ), tableData ( - set::width('100%'), - $cellItems - ) - ); - } -} -else -{ - $cells[] = cell - ( - setClass('flex flex-wrap items-center progress-circle pt-2 mb-2'), - set::width($longBlock ? '36%' : '100%'), - div - ( - setClass('flex justify-center w-full'), - progressCircle - ( - set::percent($project->progress), - set::size(112), - set::text(false), - set::circleWidth(0.06), - div(span(setClass('text-2xl font-bold'), $project->progress), '%'), - div + item ( - setClass('row text-sm text-gray items-center gap-1'), - $lang->block->projectstatistic->totalProgress, - icon + set::name($lang->block->projectstatistic->sv), + to::suffixName ( - setClass('pl-0.5 text-light text-sm'), - toggle::tooltip + icon ( - array + setClass('text-light text-sm'), + toggle::tooltip ( - 'content' => array('html' => $lang->block->projectstatistic->totalProgressTip), - 'placement' => 'bottom', - 'type' => 'white', - 'className' => 'text-dark border border-light leading-5' - ) + array + ( + 'title' => $lang->block->tooltips['sv'], + 'placement' => 'bottom', + 'type' => 'white', + 'className' => 'text-dark border border-light leading-5' + ) + ), + 'help' ), - 'help' + ':' + ), + span + ( + setClass('font-bold text-black mr-1'), + (!empty($project->sv) ? $project->sv : 0) . $lang->percent + ) + ), + item + ( + set::name($lang->block->projectstatistic->pv), + to::suffixName + ( + icon + ( + setClass('text-light text-sm'), + toggle::tooltip + ( + array + ( + 'title' => $lang->block->tooltips['pv'], + 'placement' => 'bottom', + 'type' => 'white', + 'className' => 'text-dark border border-light leading-5' + ) + ), + 'help' + ), + ':' + ), + span + ( + setClass('font-bold text-black mr-1'), + (!empty($project->pv) ? $project->pv : 0) . $lang->percent + ) + ), + item + ( + set::name($lang->block->projectstatistic->ev), + to::suffixName + ( + icon + ( + setClass('text-light text-sm'), + toggle::tooltip + ( + array + ( + 'content' => array('html' => $lang->block->tooltips['ev']), + 'placement' => 'bottom', + 'type' => 'white', + 'className' => 'text-dark border border-light leading-5' + ) + ), + 'help' + ), + ':' + ), + span + ( + setClass('font-bold text-black mr-1'), + (!empty($project->ev) ? $project->ev : 0) . $lang->percent ) ) ) - ) - ); - $cells[] = cell - ( - setClass('project-statistic-table waterfall pl-4' . ($longBlock ? ' border-l' : ' mt-4')), - set::width($longBlock ? '32%' : '50%'), - div + ); + $cells[] = cell ( - setClass('w-full'), - span + setClass('project-statistic-table waterfall pl-4 border-l' . (!$longBlock ? ' mt-3' : '')), + set::width($longBlock ? '32%' : '50%'), + div ( - setClass('font-bold'), - $lang->project->progress - ) - ), - tableData - ( - item - ( - set::name($lang->block->projectstatistic->sv), - to::suffixName - ( - icon - ( - setClass('text-light text-sm'), - toggle::tooltip - ( - array - ( - 'title' => $lang->block->tooltips['sv'], - 'placement' => 'bottom', - 'type' => 'white', - 'className' => 'text-dark border border-light leading-5' - ) - ), - 'help' - ), - ':' - ), + setClass('w-full'), span ( - setClass('font-bold text-black mr-1'), - (!empty($project->sv) ? $project->sv : 0) . $lang->percent + setClass('font-bold'), + $lang->block->projectstatistic->currentCost ) ), - item + tableData ( - set::name($lang->block->projectstatistic->pv), - to::suffixName + item ( - icon + set::name($lang->block->projectstatistic->cv), + to::suffixName ( - setClass('text-light text-sm'), - toggle::tooltip + icon ( - array + setClass('text-light text-sm'), + toggle::tooltip ( - 'title' => $lang->block->tooltips['pv'], - 'placement' => 'bottom', - 'type' => 'white', - 'className' => 'text-dark border border-light leading-5' - ) + array + ( + 'title' => $lang->block->tooltips['cv'], + 'placement' => 'bottom', + 'type' => 'white', + 'className' => 'text-dark border border-light leading-5' + ) + ), + 'help' ), - 'help' + ':' ), - ':' - ), - span - ( - setClass('font-bold text-black mr-1'), - (!empty($project->pv) ? $project->pv : 0) . $lang->percent - ) - ), - item - ( - set::name($lang->block->projectstatistic->ev), - to::suffixName - ( - icon + span ( - setClass('text-light text-sm'), - toggle::tooltip - ( - array - ( - 'content' => array('html' => $lang->block->tooltips['ev']), - 'placement' => 'bottom', - 'type' => 'white', - 'className' => 'text-dark border border-light leading-5' - ) - ), - 'help' + setClass('font-bold text-black mr-1'), + (!empty($project->cv) ? $project->cv : 0) . $lang->percent ), - ':' ), - span + item ( - setClass('font-bold text-black mr-1'), - (!empty($project->ev) ? $project->ev : 0) . $lang->percent + set::name($lang->block->projectstatistic->ev), + to::suffixName + ( + icon + ( + setClass('text-light text-sm'), + toggle::tooltip + ( + array + ( + 'content' => array('html' => $lang->block->tooltips['ev']), + 'placement' => 'bottom', + 'type' => 'white', + 'className' => 'text-dark border border-light leading-5' + ) + ), + 'help' + ), + ':' + ), + span + ( + setClass('font-bold text-black mr-1'), + (!empty($project->ev) ? $project->ev : 0) . $lang->percent + ) + ), + item + ( + set::name($lang->block->projectstatistic->ac), + to::suffixName + ( + icon + ( + setClass('text-light text-sm'), + toggle::tooltip + ( + array + ( + 'title' => $lang->block->tooltips['ac'], + 'placement' => 'bottom', + 'type' => 'white', + 'className' => 'text-dark border border-light leading-5' + ) + ), + 'help' + ), + ':' + ), + span + ( + setClass('font-bold text-black mr-1'), + (!empty($project->ac) ? $project->ac : 0) . $lang->percent + ) ) ) - ) - ); - $cells[] = cell - ( - setClass('project-statistic-table waterfall pl-4 border-l' . (!$longBlock ? ' mt-3' : '')), - set::width($longBlock ? '32%' : '50%'), - div - ( - setClass('w-full'), - span - ( - setClass('font-bold'), - $lang->block->projectstatistic->currentCost - ) - ), - tableData - ( - item - ( - set::name($lang->block->projectstatistic->cv), - to::suffixName - ( - icon - ( - setClass('text-light text-sm'), - toggle::tooltip - ( - array - ( - 'title' => $lang->block->tooltips['cv'], - 'placement' => 'bottom', - 'type' => 'white', - 'className' => 'text-dark border border-light leading-5' - ) - ), - 'help' - ), - ':' - ), - span - ( - setClass('font-bold text-black mr-1'), - (!empty($project->cv) ? $project->cv : 0) . $lang->percent - ), - ), - item - ( - set::name($lang->block->projectstatistic->ev), - to::suffixName - ( - icon - ( - setClass('text-light text-sm'), - toggle::tooltip - ( - array - ( - 'content' => array('html' => $lang->block->tooltips['ev']), - 'placement' => 'bottom', - 'type' => 'white', - 'className' => 'text-dark border border-light leading-5' - ) - ), - 'help' - ), - ':' - ), - span - ( - setClass('font-bold text-black mr-1'), - (!empty($project->ev) ? $project->ev : 0) . $lang->percent - ) - ), - item - ( - set::name($lang->block->projectstatistic->ac), - to::suffixName - ( - icon - ( - setClass('text-light text-sm'), - toggle::tooltip - ( - array - ( - 'title' => $lang->block->tooltips['ac'], - 'placement' => 'bottom', - 'type' => 'white', - 'className' => 'text-dark border border-light leading-5' - ) - ), - 'help' - ), - ':' - ), - span - ( - setClass('font-bold text-black mr-1'), - (!empty($project->ac) ? $project->ac : 0) . $lang->percent - ) - ) - ) - ); + ); + } } statisticBlock @@ -418,7 +418,7 @@ statisticBlock set::moreLink(createLink('project', 'browse', 'programID=0&browseType=' . zget($block->params, 'type', ''))), set::items($items), set::className('projectstatistic-block'), - div + $project ? div ( div ( @@ -431,5 +431,5 @@ statisticBlock setClass('flex' . (!$longBlock ? ' flex-wrap' : '')), $cells ) - ) + ) : null ); diff --git a/module/block/ui/qastatisticblock.html.php b/module/block/ui/qastatisticblock.html.php index 8712504ffe..0e6c408247 100644 --- a/module/block/ui/qastatisticblock.html.php +++ b/module/block/ui/qastatisticblock.html.php @@ -151,7 +151,7 @@ statisticBlock set::block($block), set::active($active), set::items($items), - div + $product ? div ( setClass($longBlock ? 'row' : 'col gap-3', 'h-full overflow-hidden items-stretch px-2 py-3'), center @@ -213,5 +213,5 @@ statisticBlock ), $testTasksView ) - ) + ) : null );