diff --git a/module/release/js/browse.ui.js b/module/release/js/browse.ui.js index 49620ccf59..5d1d41538f 100644 --- a/module/release/js/browse.ui.js +++ b/module/release/js/browse.ui.js @@ -12,12 +12,8 @@ window.renderCell = function(result, {col, row}) if(col.name == 'build') { result[0] = ''; - for(key in row.data.builds) - { - let moduleName = row.data.builds[key].execution > 0 ? 'build' : 'projectbuild'; - let branchLabel = showBranch ? "" + row.data.builds[key].branchName + ' ' : ''; - result[result.length] = {html: branchLabel + "" + row.data.builds[key].name + ''} - } + let branchLabel = showBranch ? "" + row.data.build.branchName + ' ' : ''; + result[result.length] = {html: branchLabel + "" + row.data.build.name + ''} return result; } @@ -25,10 +21,8 @@ window.renderCell = function(result, {col, row}) { result[0] = ''; if(row.data.builds.length == 0) return result; - for(key in row.data.builds) - { - result[result.length] = {html: row.data.builds[key].projectName}; - } + + result[result.length] = {html: row.data.build.projectName}; return result; } @@ -74,3 +68,20 @@ window.setStatistics = function() return {html: summary}; } + + +/** + * 合并单元格。 + * cell span in the column. + * + * @param object cell + * @access public + * @return object + */ +window.getCellSpan = function(cell) +{ + if(['id', 'name', 'branch', 'status', 'date', 'actions'].includes(cell.col.name) && cell.row.data.rowspan) + { + return {rowSpan: cell.row.data.rowspan}; + } +} diff --git a/module/release/ui/browse.html.php b/module/release/ui/browse.html.php index 899954c360..f7fc8d3e58 100644 --- a/module/release/ui/browse.html.php +++ b/module/release/ui/browse.html.php @@ -41,7 +41,9 @@ dtable ( set::cols(array_values($config->release->dtable->fieldList)), set::data(array_values($releases)), + set::plugins(array('cellspan')), set::onRenderCell(jsRaw('window.renderCell')), + set::getCellSpan(jsRaw('window.getCellSpan')), set::sortLink(jsRaw('createSortLink')), set::footer([jsRaw('function(){return window.setStatistics.call(this);}'), 'flex', 'pager']), set::footPager( diff --git a/module/release/zen.php b/module/release/zen.php index 827c8bdebd..9c570657e3 100644 --- a/module/release/zen.php +++ b/module/release/zen.php @@ -21,12 +21,40 @@ class releaseZen extends release */ protected function processReleaseListData(array $releaseList): array { + $releases = array(); + $this->loadModel('project'); + $this->loadModel('execution'); foreach($releaseList as $release) { + $buildCount = count($release->builds); + + $release->rowspan = $buildCount; $release->actions = $this->release->buildActionList($release); + + if(!empty($release->builds)) + { + foreach($release->builds as $build) + { + $releaseInfo = clone $release; + $moduleName = $build->execution ? 'build' : 'projectbuild'; + $canClickable = false; + if($moduleName == 'projectbuild' && $this->project->checkPriv($build->project)) $canClickable = true; + if($moduleName == 'build' && $this->execution->checkPriv($build->execution)) $canClickable = true; + $build->link = $canClickable ? $this->createLink($moduleName, 'view', "buildID={$build->id}") : ''; + + $releaseInfo->build = $build; + + $releases[] = $releaseInfo; + } + } + else + { + $releases[] = $release; + } + } - return array_values($releaseList); + return $releases; } }