* Add qd overview page.

This commit is contained in:
liugang
2018-05-14 18:09:45 +08:00
parent d14b518163
commit 75c9ebecc4
8 changed files with 101 additions and 58 deletions
+16 -16
View File
@@ -244,6 +244,11 @@ class block extends control
{
if($module == 'product' && common::hasPriv('product', 'create')) $block->actionLink = html::a($this->createLink('product', 'create'), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->product->create, '', "class='btn btn-sm'");
if($module == 'project' && common::hasPriv('project', 'create')) $block->actionLink = html::a($this->createLink('project', 'create'), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->project->create, '', "class='btn btn-sm'");
if($module == 'qa' && common::hasPriv('testcase', 'create'))
{
$this->app->loadLang('testcase');
$block->actionLink = html::a($this->createLink('testcase', 'create', 'productID='), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->testcase->create, '', "class='btn btn-sm'");
}
}
if($this->block->isLongBlock($block))
@@ -1075,29 +1080,24 @@ class block extends control
*/
public function printQaOverviewBlock()
{
$projects = $this->loadModel('project')->getList();
$casePairs = $this->dao->select('lastRunResult, COUNT(*) AS count')->from(TABLE_CASE)->groupBy('lastRunResult')->fetchPairs();
$total = array_sum($casePairs);
$total = 0;
foreach($projects as $project)
$this->app->loadLang('testcase');
foreach($this->lang->testcase->resultList as $result => $label)
{
if(!$this->project->checkPriv($project)) continue;
if(!isset($overview[$project->status])) $overview[$project->status] = 0;
$overview[$project->status]++;
$total++;
if(!isset($casePairs[$result])) $casePairs[$result] = 0;
}
$overviewPercent = array();
foreach($this->lang->project->statusList as $statusKey => $statusName)
$casePercents = array();
foreach($casePairs as $result => $count)
{
if(!isset($overview[$statusKey])) $overview[$statusKey] = 0;
$overviewPercent[$statusKey] = round($overview[$statusKey] / $total, 2) * 100 . '%';
$casePercents[$result] = $total ? round($count / $total * 100, 2) : 0;
}
$this->view->total = $total;
$this->view->overview = $overview;
$this->view->overviewPercent = $overviewPercent;
$this->view->total = $total;
$this->view->casePairs = $casePairs;
$this->view->casePercents = $casePercents;
}
/**
+24 -2
View File
@@ -403,6 +403,7 @@ class blockModel extends model
{
if($module == 'product') return $this->getProductStatisticParams($module);
if($module == 'project') return $this->getProjectStatisticParams($module);
if($module == 'qa') return $this->getQaStatisticParams($module);
$params = new stdclass();
$params = $this->onlyNumParams($params);
@@ -427,7 +428,7 @@ class blockModel extends model
$params->orderBy['options'] = $this->lang->block->orderByList->product;
$params->orderBy['control'] = 'select';
return json_encode($this->onlyNumParams($params));
return json_encode($params);
}
/**
@@ -448,7 +449,28 @@ class blockModel extends model
$params->orderBy['options'] = $this->lang->block->orderByList->project;
$params->orderBy['control'] = 'select';
return json_encode($this->onlyNumParams($params));
return json_encode($params);
}
/**
* Get qa statistic params.
*
* @access public
* @return void
*/
public function getQaStatisticParams()
{
$params = new stdclass();
$params->type['name'] = $this->lang->block->type;
$params->type['options'] = $this->lang->block->typeList->product;
$params->type['control'] = 'select';
$params->orderBy['name'] = $this->lang->block->orderBy;
$params->orderBy['default'] = 'id_desc';
$params->orderBy['options'] = $this->lang->block->orderByList->product;
$params->orderBy['control'] = 'select';
return json_encode($params);
}
/**
+9 -11
View File
@@ -14,21 +14,19 @@
.block-overview .tile-amount {font-size: 48px; margin-bottom: 10px;}
</style>
<div class="panel-body table-row">
<div class="col-4 text-middle text-center">
<div class="col-6 text-middle text-center">
<div class="tile">
<div class="tile-title"><?php echo $lang->project->allProject;?></div>
<div class="tile-title"><?php echo $lang->testcase->allTestcases;?></div>
<div class="tile-amount"><?php echo $total;?></div>
<a class="btn btn-primary btn-circle btn-icon-right btn-sm" href="<?php echo $this->createLink('project', 'all');?>"><?php echo $lang->project->viewAll;?> <span class="label label-badge label-icon"><i class="icon icon-arrow-right"></i></span></a>
<?php if(common::hasPriv('testcase', 'browse')):?>
<a href='<?php echo $this->createLink('testcase', 'browse');?>' class="btn btn-primary btn-circle btn-icon-right btn-sm"><?php echo $lang->testcase->viewAll;?><span class="label label-badge label-icon"><i class="icon icon-arrow-right"></i></span></a>
<?php endif;?>
</div>
</div>
<div class="col-8 text-middle">
<ul class="status-bars">
<?php foreach($lang->project->statusList as $statusKey => $statusName):?>
<li>
<span class="value"><?php echo $overview[$statusKey];?></span>
<span class="bar" style="height: <?php echo $overviewPercent[$statusKey];?>"></span>
<span class="title"><?php echo $statusName;?></span>
</li>
<div class="col-6 text-middle">
<ul class="status-bars-h">
<?php foreach(array('pass', 'fail', 'blocked') as $result):?>
<li><span class="bar" style="width: <?php echo $casePercents[$result];?>%"><span class="title"><?php echo $lang->testcase->resultList[$result];?></span><span class="value"><?php echo $casePairs[$result];?></span></span></li>
<?php endforeach;?>
</ul>
</div>
+1
View File
@@ -129,6 +129,7 @@ $lang->bug->resolvedByMeAB = '由我解決';
$lang->bug->ditto = '同上';
$lang->bug->dittoNotice = '該bug與上一bug不屬於同一產品!';
$lang->bug->noAssigned = '未指派';
$lang->bug->noBug = '暫時沒有BUG,您現在可以';
/* 頁面標籤。*/
$lang->bug->lblAssignedTo = '當前指派';
+30 -12
View File
@@ -279,20 +279,39 @@ $lang->bug->menu->caselib = array('link' => '用例庫|testsuite|library');
$lang->testcase = new stdclass();
$lang->testcase->menu = new stdclass();
$lang->testcase->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testcase->menu->testcase = array('link' => '用例|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,batchedit,showimport,groupcase,importfromlib', 'subModule' => 'tree');
$lang->testcase->menu->testtask = array('link' => '測試單|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase,report');
$lang->testcase->menu->testsuite = array('link' => '套件|testsuite|browse|productID=%s', 'alias' => 'view,create,edit,linkcase');
$lang->testcase->menu->report = array('link' => '報告|testreport|browse|productID=%s', 'alias' => 'view,create,edit');
$lang->testcase->menu->testtask = array('link' => '測試單|testtask|browse|productID=%s');
$lang->testcase->menu->testsuite = array('link' => '套件|testsuite|browse|productID=%s');
$lang->testcase->menu->report = array('link' => '報告|testreport|browse|productID=%s');
$lang->testcase->menu->caselib = array('link' => '用例庫|testsuite|library');
$lang->testtask = new stdclass();
$lang->testtask->menu = $lang->testcase->menu;
$lang->testtask->menu = new stdclass();
$lang->testtask->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testtask->menu->testcase = array('link' => '用例|testcase|browse|productID=%s');
$lang->testtask->menu->testtask = array('link' => '測試單|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase,report');
$lang->testtask->menu->testsuite = array('link' => '套件|testsuite|browse|productID=%s');
$lang->testtask->menu->report = array('link' => '報告|testreport|browse|productID=%s');
$lang->testtask->menu->caselib = array('link' => '用例庫|testsuite|library');
$lang->testsuite = new stdclass();
$lang->testsuite->menu = $lang->testcase->menu;
$lang->testsuite->menu = new stdclass();
$lang->testsuite->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testsuite->menu->testcase = array('link' => '用例|testcase|browse|productID=%s');
$lang->testsuite->menu->testtask = array('link' => '測試單|testtask|browse|productID=%s');
$lang->testsuite->menu->testsuite = array('link' => '套件|testsuite|browse|productID=%s', 'alias' => 'view,create,edit,linkcase');
$lang->testsuite->menu->report = array('link' => '報告|testreport|browse|productID=%s');
$lang->testsuite->menu->caselib = array('link' => '用例庫|testsuite|library');
$lang->testreport = new stdclass();
$lang->testreport->menu = $lang->testcase->menu;
$lang->testreport->menu = new stdclass();
$lang->testreport->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testreport->menu->testcase = array('link' => '用例|testcase|browse|productID=%s');
$lang->testreport->menu->testtask = array('link' => '測試單|testtask|browse|productID=%s');
$lang->testreport->menu->testsuite = array('link' => '套件|testsuite|browse|productID=%s');
$lang->testreport->menu->report = array('link' => '報告|testreport|browse|productID=%s', 'alias' => 'view,create,edit');
$lang->testreport->menu->caselib = array('link' => '用例庫|testsuite|library');
$lang->caselib = new stdclass();
$lang->caselib->menu = new stdclass();
@@ -765,11 +784,10 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of caselib module. */
$lang->caselib->menu = new stdclass();
$lang->caselib->menu->lib = array('link' => '%s', 'fixed' => true);
$lang->caselib->menu->all = '所有|testsuite|library|libID=%s&browseType=all';
$lang->caselib->menu->wait = '待評審|testsuite|library|libID=%s&browseType=wait';
$lang->caselib->menu->view = '概況|testsuite|libview|libID=%s';
$lang->caselib->menu->create = array('link' => "<i class='icon-plus'></i> 創建庫|testsuite|createLib", 'float' => 'right');
$lang->caselib->menu->lib = array('link' => '%s', 'fixed' => true);
$lang->caselib->menu->all = '所有|testsuite|library|libID=%s&browseType=all';
$lang->caselib->menu->wait = '待評審|testsuite|library|libID=%s&browseType=wait';
$lang->caselib->menu->view = '概況|testsuite|libview|libID=%s';
$lang->caselib->menuOrder[5] = 'lib';
$lang->caselib->menuOrder[10] = 'all';
+7 -5
View File
@@ -102,6 +102,7 @@ $lang->testcase->group = 'Group';
$lang->testcase->groupName = 'Group Name';
$lang->testcase->step = 'Step';
$lang->testcase->stepChild = 'Child';
$lang->testcase->viewAll = 'View All';
$lang->testcase->new = 'New';
@@ -111,11 +112,12 @@ $lang->testcase->deleteStep = 'Delete';
$lang->testcase->insertBefore = 'Inserted Before';
$lang->testcase->insertAfter = 'Inserted After';
$lang->testcase->assignToMe = 'AssignedToMe';
$lang->testcase->openedByMe = 'CreatedByMe';
$lang->testcase->allCases = 'All';
$lang->testcase->needConfirm = 'StoryChanged';
$lang->testcase->bySearch = 'Search';
$lang->testcase->assignToMe = 'AssignedToMe';
$lang->testcase->openedByMe = 'CreatedByMe';
$lang->testcase->allCases = 'All';
$lang->testcase->allTestcases = 'All Cases';
$lang->testcase->needConfirm = 'StoryChanged';
$lang->testcase->bySearch = 'Search';
$lang->testcase->lblStory = 'Story';
$lang->testcase->lblLastEdited = 'Last Edit';
+7 -6
View File
@@ -102,6 +102,7 @@ $lang->testcase->group = '分组';
$lang->testcase->groupName = '分组名称';
$lang->testcase->step = '步骤';
$lang->testcase->stepChild = '子步骤';
$lang->testcase->viewAll = '查看所有';
$lang->testcase->new = '新增';
@@ -111,11 +112,12 @@ $lang->testcase->deleteStep = '删除';
$lang->testcase->insertBefore = '之前添加';
$lang->testcase->insertAfter = '之后添加';
$lang->testcase->assignToMe = '给我的用例';
$lang->testcase->openedByMe = '我建的用例';
$lang->testcase->allCases = '所有';
$lang->testcase->needConfirm = '需求变动';
$lang->testcase->bySearch = '搜索';
$lang->testcase->assignToMe = '给我的用例';
$lang->testcase->openedByMe = '我建的用例';
$lang->testcase->allCases = '所有';
$lang->testcase->allTestcases = '所有用例';
$lang->testcase->needConfirm = '需求变动';
$lang->testcase->bySearch = '搜索';
$lang->testcase->lblStory = '相关需求';
$lang->testcase->lblLastEdited = '最后编辑';
@@ -201,4 +203,3 @@ $lang->testcase->featureBar['browse']['group'] = '分组查看';
$lang->testcase->featureBar['browse']['suite'] = '套件';
$lang->testcase->featureBar['browse']['zerocase'] = '零用例需求';
$lang->testcase->featureBar['groupcase'] = $lang->testcase->featureBar['browse'];
+7 -6
View File
@@ -102,6 +102,7 @@ $lang->testcase->group = '分組';
$lang->testcase->groupName = '分組名稱';
$lang->testcase->step = '步驟';
$lang->testcase->stepChild = '子步驟';
$lang->testcase->viewAll = '查看所有';
$lang->testcase->new = '新增';
@@ -111,11 +112,12 @@ $lang->testcase->deleteStep = '刪除';
$lang->testcase->insertBefore = '之前添加';
$lang->testcase->insertAfter = '之後添加';
$lang->testcase->assignToMe = '給我的用例';
$lang->testcase->openedByMe = '我建的用例';
$lang->testcase->allCases = '所有';
$lang->testcase->needConfirm = '需求變動';
$lang->testcase->bySearch = '搜索';
$lang->testcase->assignToMe = '給我的用例';
$lang->testcase->openedByMe = '我建的用例';
$lang->testcase->allCases = '所有';
$lang->testcase->allTestcases = '所有用例';
$lang->testcase->needConfirm = '需求變動';
$lang->testcase->bySearch = '搜索';
$lang->testcase->lblStory = '相關需求';
$lang->testcase->lblLastEdited = '最後編輯';
@@ -201,4 +203,3 @@ $lang->testcase->featureBar['browse']['group'] = '分組查看';
$lang->testcase->featureBar['browse']['suite'] = '套件';
$lang->testcase->featureBar['browse']['zerocase'] = '零用例需求';
$lang->testcase->featureBar['groupcase'] = $lang->testcase->featureBar['browse'];