* Merge table cell of the build list.

This commit is contained in:
tianshujie
2023-07-31 13:44:45 +08:00
parent 93a56dc9c9
commit 690e28136b
7 changed files with 178 additions and 37 deletions
+18 -2
View File
@@ -3,7 +3,7 @@ window.renderCell = function(result, {col, row})
if(col.name == 'path')
{
result[0] = '';
if(row.data.scmPath)
if(row.data.pathType == 'scmPath' && row.data.scmPath)
{
const colorStyle = row.data.scmPath.indexOf('http') === 0 ? "style='color:#2463c7;'" : '';
let scmPathHtml = '';
@@ -15,7 +15,7 @@ window.renderCell = function(result, {col, row})
result[result.length] = {html: scmPathHtml};
}
if(row.data.filePath)
if(row.data.pathType == 'filePath' && row.data.filePath)
{
const colorStyle = row.data.filePath.indexOf('http') === 0 ? "style='color:#2463c7;'" : '';
let filePathHtml = '';
@@ -42,3 +42,19 @@ window.changeProduct = function()
const link = changeProductLink.replace('{productID}', $(this).val());
loadPage(link);
}
/**
* 合并单元格。
* cell span in the column.
*
* @param object cell
* @access public
* @return object
*/
window.getCellSpan = function(cell)
{
if(['id', 'name', 'productName', 'branchName', 'builder', 'date', 'actions'].includes(cell.col.name) && cell.row.data.rowspan)
{
return {rowSpan: cell.row.data.rowspan};
}
}
+5 -3
View File
@@ -47,14 +47,16 @@ jsVar('confirmDelete', $lang->build->confirmDelete);
dtable
(
set::userMap($users),
set::cols(array_values($config->build->dtable->fieldList)),
set::data(array_values($builds)),
set::cols($config->build->dtable->fieldList),
set::data($builds),
set::plugins(array('cellspan')),
set::sortLink(jsRaw('createSortLink')),
set::onRenderCell(jsRaw('window.renderCell')),
set::getCellSpan(jsRaw('window.getCellSpan')),
set::footPager(
usePager
(
array('linkCreator' => helper::createLink('execution', 'build', "executionID={$execution->id}&type={$type}&param={$param}&orderBy={$orderBy}&recTotal={recTotal}&recPerPage={page}")),
array('linkCreator' => helper::createLink('execution', 'build', "executionID={$execution->id}&type={$type}&param={$param}&orderBy={$orderBy}&recTotal={recTotal}&recPerPage={page}"), 'recTotal' => $pager->recTotal, 'recPerPage' => $pager->recPerPage),
),
),
);
+24 -1
View File
@@ -30,6 +30,7 @@ class executionZen extends execution
/* Get branch name. */
$showBranch = false;
$branchGroups = $this->loadModel('branch')->getByProducts($productIdList);
$builds = array();
foreach($buildList as $build)
{
$build->branchName = '';
@@ -44,12 +45,34 @@ class executionZen extends execution
$build->branchName = trim($build->branchName, ',');
}
$build->actions = $this->build->buildActionList($build, $executionID, 'execution');
if($build->scmPath && $build->filePath)
{
$build->rowspan = 2;
$buildInfo = clone $build;
$buildInfo->pathType = 'scmPath';
$buildInfo->path = $build->scmPath;
$builds[] = $buildInfo;
$buildInfo = clone $build;
$buildInfo->pathType = 'filePath';
$buildInfo->path = $build->filePath;
$builds[] = $buildInfo;
}
else
{
$build->pathType = empty($build->scmPath) ? 'filePath' : 'scmPath';
$build->path = empty($build->scmPath) ? $build->filePath : $build->scmPath;
$builds[] = $build;
}
}
if(!$showBranch) unset($this->config->build->dtable->fieldList['branch']);
unset($this->config->build->dtable->fieldList['execution']);
return array_values($buildList);
return $builds;
}
/**
+31 -21
View File
@@ -3,7 +3,7 @@ window.renderCell = function(result, {col, row})
if(col.name == 'path')
{
result[0] = '';
if(row.data.scmPath)
if(row.data.pathType == 'scmPath' && row.data.scmPath)
{
const colorStyle = row.data.scmPath.indexOf('http') === 0 ? "style='color:#2463c7;'" : '';
let scmPathHtml = '';
@@ -15,7 +15,7 @@ window.renderCell = function(result, {col, row})
result[result.length] = {html: scmPathHtml};
}
if(row.data.filePath)
if(row.data.pathType == 'filePath' && row.data.filePath)
{
const colorStyle = row.data.filePath.indexOf('http') === 0 ? "style='color:#2463c7;'" : '';
let filePathHtml = '';
@@ -37,25 +37,9 @@ window.renderCell = function(result, {col, row})
if(col.name == 'execution')
{
if(row.data.execution == 0)
{
result[0] = '';
let executionIdList = [];
for(key in row.data.builds)
{
const build = row.data.builds[key];
if(executionIdList.indexOf(build.execution) !== -1) continue;
result[result.length] = {html: "<span title='" + build.executionName + "'>" + build.executionName + "</span>"};
executionIdList.push(build.execution);
}
}
else
{
let executionHtml = "<span title='" + row.data.executionName + "'>" + row.data.executionName + '</span>';
if(row.data.executionDeleted == 1) executionHtml += " <span class='label label-danger'>" + deletedTip + '</span>';
result[0] = {html: executionHtml};
}
let executionHtml = "<span title='" + row.data.executionName + "'>" + row.data.executionName + '</span>';
if(row.data.executionDeleted == 1) executionHtml += " <span class='label label-danger'>" + deletedTip + '</span>';
result[0] = {html: executionHtml};
return result;
}
@@ -73,3 +57,29 @@ window.changeProduct = function()
const link = changeProductLink.replace('{productID}', $(this).val());
loadPage(link);
}
/**
* 合并单元格。
* cell span in the column.
*
* @param object cell
* @access public
* @return object
*/
window.getCellSpan = function(cell)
{
if(['id', 'name', 'productName', 'branchName', 'builder', 'date', 'actions'].includes(cell.col.name) && cell.row.data.rowspan)
{
return {rowSpan: cell.row.data.rowspan};
}
if(cell.col.name == 'path' && cell.row.data.pathRowspan)
{
return {rowSpan: cell.row.data.pathRowspan};
}
if(cell.col.name == 'execution' && cell.row.data.executionRowspan)
{
return {rowSpan: cell.row.data.executionRowspan};
}
}
+5 -3
View File
@@ -54,14 +54,16 @@ jsVar('deletedTip', $lang->build->deleted);
dtable
(
set::userMap($users),
set::cols(array_values($config->build->dtable->fieldList)),
set::data(array_values($builds)),
set::cols($config->build->dtable->fieldList),
set::data($builds),
set::plugins(array('cellspan')),
set::sortLink(jsRaw('createSortLink')),
set::onRenderCell(jsRaw('window.renderCell')),
set::getCellSpan(jsRaw('window.getCellSpan')),
set::footPager(
usePager
(
array('linkCreator' => helper::createLink($app->rawModule, $app->rawMethod, "projectID={$project->id}&type={$type}&param={$param}&orderBy={$orderBy}&recTotal={recTotal}&recPerPage={recPerPage}&pageID={pageID}")),
array('linkCreator' => helper::createLink($app->rawModule, $app->rawMethod, "projectID={$project->id}&type={$type}&param={$param}&orderBy={$orderBy}&recTotal={recTotal}&recPerPage={recPerPage}&pageID={page}"), 'recTotal' => $pager->recTotal, 'recPerPage' => $pager->recPerPage),
),
),
);
+95 -6
View File
@@ -989,23 +989,25 @@ class projectZen extends project
* 处理版本列表展示数据。
* Process build list display data.
*
* @param array $builds
* @param array $buildList
* @param int $projectID
* @access protected
* @return object[]
*/
protected function processBuildListData(array $builds, int $projectID): array
protected function processBuildListData(array $buildList, int $projectID): array
{
$this->loadModel('build');
$this->loadModel('branch');
$showBranch = false;
$productIdList = array();
foreach($builds as $build) $productIdList[$build->product] = $build->product;
foreach($buildList as $build) $productIdList[$build->product] = $build->product;
/* Get branch name. */
$branchGroups = $this->branch->getByProducts($productIdList);
foreach($builds as $build)
$builds = array();
$project = $this->project->getByID($projectID);
foreach($buildList as $build)
{
$build->branchName = '';
if(isset($branchGroups[$build->product]))
@@ -1021,17 +1023,104 @@ class projectZen extends project
if(empty($build->branchName) and empty($build->builds)) $build->branchName = $this->lang->branch->main;
}
$build->actions = $this->build->buildActionList($build, 0, 'projectbuild');
if($project->multiple && empty($build->execution))
{
$rowspan = $build->scmPath && $build->filePath ? 2 : 1;
$buildCount = count($build->builds);
$rowspan = $buildCount > $rowspan ? $buildCount : $rowspan;
$pathRowspan = $build->scmPath && $build->filePath ? floor($rowspan/2) : $rowspan;
if($buildCount >= 2)
{
$i = 1;
foreach($build->builds as $childBuild)
{
$buildInfo = clone $build;
$buildInfo->executionName = $childBuild->executionName;
$buildInfo->rowspan = $rowspan;
if($i <= $pathRowspan)
{
$buildInfo->pathRowspan = $pathRowspan;
$buildInfo->pathType = empty($build->scmPath) ? 'filePath' : 'scmPath';
$buildInfo->path = empty($build->scmPath) ? $build->filePath : $build->scmPath;
}
elseif($i > $pathRowspan)
{
$buildInfo->pathRowspan = $rowspan - $pathRowspan;
$buildInfo->pathType = 'filePath';
$buildInfo->path = $build->filePath;
}
$builds[] = $buildInfo;
$i ++;
}
}
else
{
$childBuild = !empty($build->builds) ? current($build->builds) : array();
$build->executionName = !empty($childBuild) ? $childBuild->executionName : '';
if($build->scmPath && $build->filePath)
{
$build->rowspan = 2;
$build->executionRowspan = 2;
$buildInfo = clone $build;
$buildInfo->pathType = 'scmPath';
$buildInfo->path = $build->scmPath;
$builds[] = $buildInfo;
$buildInfo = clone $build;
$buildInfo->pathType = 'filePath';
$buildInfo->path = $build->filePath;
$builds[] = $buildInfo;
}
else
{
$build->pathType = empty($build->scmPath) ? 'filePath' : 'scmPath';
$build->path = empty($build->scmPath) ? $build->filePath : $build->scmPath;
$builds[] = $build;
}
}
}
else
{
if($build->scmPath && $build->filePath)
{
$build->rowspan = 2;
$build->executionRowspan = 2;
$buildInfo = clone $build;
$buildInfo->pathType = 'scmPath';
$buildInfo->path = $build->scmPath;
$builds[] = $buildInfo;
$buildInfo = clone $build;
$buildInfo->pathType = 'filePath';
$buildInfo->path = $build->filePath;
$builds[] = $buildInfo;
}
else
{
$build->pathType = empty($build->scmPath) ? 'filePath' : 'scmPath';
$build->path = empty($build->scmPath) ? $build->filePath : $build->scmPath;
$builds[] = $build;
}
}
}
/* Set data table column. */
$project = $this->project->getByID($projectID);
if(!$project->hasProduct) unset($this->config->build->dtable->fieldList['product']);
if(!$showBranch || !$project->hasProduct) unset($this->config->build->dtable->fieldList['branch']);
if(!$project->multiple) unset($this->config->build->dtable->fieldList['execution']);
$this->config->build->dtable->fieldList['name']['link'] = helper::createLink('projectbuild', 'view', 'buildID={id}');
$this->config->build->dtable->fieldList['execution']['title'] = zget($this->lang->project->executionList, $project->model);
return array_values($builds);
return $builds;
}
/**
-1
View File
@@ -69,7 +69,6 @@ window.setStatistics = function()
return {html: summary};
}
/**
* 合并单元格。
* cell span in the column.