* Rewrite roadmap page of product.

This commit is contained in:
daitingting
2018-04-23 14:11:01 +08:00
parent 78243e7443
commit d8f448e1bf
5 changed files with 96 additions and 52 deletions
+1 -1
View File
@@ -455,7 +455,7 @@ class product extends control
$this->view->position[] = $this->lang->product->roadmap;
$this->view->product = $product;
$this->view->roadmaps = $this->product->getRoadmap($productID, $branch);
$this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($productID);
$this->view->branches = $product->type == 'normal' ? array(0 => '') : $this->loadModel('branch')->getPairs($productID);
$this->display();
}
+8 -6
View File
@@ -1,6 +1,8 @@
.roadmap {width:180px; margin:10px auto 10px auto; padding:15px 10px; font-weight:bold}
.roadmap a{color:#ccc;}
.roadmap p{margin:2px}
.release {background:#006400; color:#ccc}
.plan {background:#ffcc00;}
.plan a{color:#006400}
.branch-nav {margin: -10px 0 25px;}
.release-paths {position: relative;}
.release-path {margin-left: 160px; position: relative; overflow: visible;}
.release-head {position: absolute; left: -150px; bottom: 105px; width: 120px; border: 2px solid #EEEEEE; border-radius: 4px; font-size: 20px; padding: 5px 10px; text-align: center;}
.release-head .subtitle {font-size: 12px; color: #7B8599;}
.release-line {margin: 0; padding-bottom: 40px;}
.release-line > li > a:before {border-color: #00da88;}
.release-link-line {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+YAAADiCAMAAAD0xy2eAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABOUExURUdwTOXl5eXl5ebm5ufn5+rq6u7u7unp6eXl5f///+Xl5eXl5efn5+Xl5eXl5eXl5ebm5uXl5eXl5ebm5ubm5ubm5uXl5ebm5uXl5eXl5Uh6G7kAAAAZdFJOUwDuuVQtFQwg1gXH+Dpzoq1CmIV7aEuOX+MTWsN0AAAGrUlEQVQYGe3ACbaYOHRF0SuQkETfw5v/RPNdLpMZZKWez5buVQBcu8zmJACO1WOwcAqAZ7kx66MAeNa+ZncnAI51t1kvAK7F/hEAAAAAAACA/xP93gmAZ6tZOKsAODb2ZuUSAM/aYtZEAXCsTsFs7gTAse4eigD4lqMAAAAAAMD/D09/CYBrvVl/CYBjdXrN+lUAHOumYNavAuBYNwWzTQA866ZwCYBvnQAAAAD8V7RHEgDParHhzgLg2NqYDXMUAMfiPJg1qwA4lu/BbBMAz7rjvQTAtyoAAOBG1wmAb1O4swB4NptZcwmAY3EbzN4pCYBfaSpmwywAnl2NNQLgW44CAABuZAHwLQ1lSgLg2BjMhuUSAL9q25jZu2cB8CsfxcweAfBsnYcsAL51AgAAboxL2wmAZ5vZMF9VANxKZ29mYRsFwK98FDN7swA4Fvc3VAHwLQsAALgxlSMKgGeNmZU9CoBb9dqCmb33KABu1XV7zSwJgGfjPQsAALixHlEAXJvN3u3qBMCtdXvNbGjOLABuxaO3H1EAHEvPUgQAANwYlycLgGe7mZX76gTAq3wuwcyGZsoC4FUd997MLgHwLLVbJwB/j7UTANeyDf2+dgLgVuwHMxv6fa0C4FR37b39WATAse66+0kA/h45CYBvjZX5yQLg1xLsR1imsQqATzVOy2s/kgA4lp+tEYC/R9rOsRMAx1r7UebjygLgU57mMtgvswC4VeNzN++hT0oC4FDVZ7ehLPe55ioAPu3BfhseAXCqi+2xNa9d+rTnFTsB8KLqH7Xq09iPoTTzngXApXNrSrBfRn1i7ATAlS5e5570KWbD2y/b8XQC4NJSgv2W9RljrgLgR5fH9tznqk8ws1D6ZTs6AXCp6d/B/lH1Oc52jakKgBcpj+156FPtt1B6AXCp27elKcHMgj5d6Zdtn55rzALgRcpRn2x/vPrUMaYqAP9hVZ8a1/Y87rnpG32y/Qhv38y7ALiU+xIG+6Xok5r5Ps52jbkTABe6PF5Pq89ofxR9upg7AXAiXc+0b0tT3kaf0cyGtzTLdgqAS2N5B/tHo09ctn162jGmKgAedDmu7Xnp09ofjT5dTFUAnEjtedzz0pd30+cxs/D2zXy3AuBSW4L9tumzzvdxtmvMnQC40OXxes5Vn8n+2PTpkgC4EZ9p35amvMOuz2QWSr/M9zQKgEtTsH/t+qzH2a4xVQFwoaY4Xs+0r/rs9lsopwC4tO7b0pcwmJ367KVftn16rjEJgBddTvrM9sejT46pCoATKY7tedxz06/6zGYWSr9sexQAl+4S7LdLn3Z6rpirAHiR4tieR9ansX+E0o8C4NJzz015BzMb9bmX7TjbMXcC4EaXx06fYv8aogC4NLbnvi19CZb06Usz38dzjVkA/Kj6X8H+SPpUAfAjxfWZ9rnp36pPCKWZ7+m5ogC4VAf7o+rTCYAjKa7PdM9Nr0+1UJr5ntoxC4BLebB/BQFwKsX1me6lb/RJ89HGKgB+jfZLae5zFACX0nk3xX5pBMCvGttjnvRJWQB8myw0e5sFwK0p2C+h2aMAOJXbvQlm1gqAZ/k6sgD8PfpmXzsB8KuzX8rWZgFwKrV3P9iPIgB+1fFoQi8AziV9qgA4d4bljALg2GY/3vnJAuBVfubXfryrAPgVzyVYFgDfogD8Per8JAHwbDWzfh+rAHiVpmYws7CcWQC8qtddzOwWAM/yuawCAABu9HPbCYBj2cyG5swC4FacevtR9lEA3ErPEswWAfCsrncrAADgxraPAuBZN5i921oFwK31fs0szG0nAG7FvZhZLwCe5ak/BAAA3FizAPj2WjmyAPjVzcHMyhEFwK16zcHMyiQAftVrCzYLgGt1jQIAAG7MRxYAz7KZ9VMWALfqNQcz66ckAG7VdhnM7BYAx2q7DKcA+NZ1AgAAXtSyjQLg2WVm7x4FwK94v2ZWpiwAfo1bMLNJAByr1zyMAuBbJwAA4EYsUxYAzw4za55OANyq1zKYDctVBcCt7mnMLIwC4Fg+ytAJgG9ZAADAjWuPAuBaY9afSQD8GrdgNixXFQC3atuYWbirAPiVpmJFAHyLqwAAgBtjEgDX6jssVxUAv9IymIU7CoBfaSpm1p9JAPwat2A2C4BntW1WAQAAAPiPyGVKAuDZYTYslwD4VdvGzN49C4Bf6Shm1kQBcGydhyEJgGvdJQAA4EZOAuDbMiyrAHi2mNl7ZAHwKx2vmTVXFQC/1mUw6wXAszSVQwCcqwIAAG4cSQBcW4ckAK7lU/8D/a9fSZZlwxkAAAAASUVORK5CYII=); height: 218px; position: absolute; left: 10px; right: 100px; top: 97px; background-size: 100% 100%; background-repeat: no-repeat;}
+32
View File
@@ -0,0 +1,32 @@
$(function()
{
// 修复连接曲线位置
var fixReleasePathLine = function()
{
$('.release-paths.active').each(function()
{
var $lines = $(this).find('.release-line');
var linesCount = $lines.length;
if (linesCount < 2) return;
$lines.each(function(idx)
{
if (idx >= (linesCount - 1)) return;
var $prev = $(this);
var $next = $lines.eq(idx + 1);
var $line = $prev.next('.release-link-line');
if(!$line.length)
{
$line = $('<div class="release-link-line" />').insertAfter($prev);
}
$line.css(
{
top: $prev.position().top + 97,
right: $next.find('li:last-child').width() - 4
});
});
});
};
fixReleasePathLine();
$(window).on('resize shown.zui.tab', fixReleasePathLine);
});
+2 -3
View File
@@ -590,17 +590,16 @@ class productModel extends model
$plans = $this->loadModel('productplan')->getList($productID, $branch);
$releases = $this->loadModel('release')->getList($productID, $branch);
$roadmap = array();
if(is_array($releases)) $releases = array_reverse($releases);
if(is_array($plans)) $plans = array_reverse($plans);
foreach($releases as $release)
{
$year = substr($release->date, 0, 4);
$roadmap[$year][$release->branch][] = $release;
}
foreach($plans as $plan)
{
if($plan->end != '0000-00-00' and strtotime($plan->end) - time() <= 0) continue;
$year = substr($plan->end, 0, 4);
$year = $plan->end == '2030-01-01' ? $this->lang->productplan->future : substr($plan->end, 0, 4);
$roadmap[$year][$plan->branch][] = $plan;
}
+53 -42
View File
@@ -11,48 +11,59 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<div>
<div id='titlebar'><div class='heading'><i class='icon-code-fork'></i> <?php echo $lang->product->roadmap;?></div></div>
<div id='roadmapBox' style='overflow-x:auto'>
<table class='table table-grid active-disabled'>
<?php
$years = array_keys($roadmaps);
echo '<tr class="text-center">';
foreach($years as $year)
{
$colspans = count($roadmaps[$year]);
$year = $year == '0000' ? $lang->future : $year . $lang->year;
echo "<th" . (empty($branches) ? '' : " colspan='$colspans'") . " style='border-right:1px solid #ddd'><h4>$year</h4></th>";
}
echo '</tr>';
echo '<tr class="text-center text-top">';
foreach($years as $year)
{
foreach($roadmaps[$year] as $branch => $roadmapData)
{
echo "<td>";
if(!empty($branches)) echo "<div class='roadmap branch'>{$branches[$branch]}</div>";
foreach($roadmapData as $key => $roadmap)
{
if(isset($roadmap->build))
{
echo "<div class='roadmap release'>";
echo "<h5>" . html::a($this->createLink('release', 'view', "releaseID=$roadmap->id"), $roadmap->name, '_blank') . '</h5>' . $roadmap->date;
}
else
{
echo "<div class='roadmap plan'>";
echo "<h5>" . html::a($this->createLink('productplan', 'view', "planID=$roadmap->id"), $roadmap->title, '_blank') . '</h5>' . $roadmap->begin . ' ~ ' . $roadmap->end;
}
echo "</div>";
if(isset($roadmaps[$year][$branch][$key + 1])) echo "<h5>{$lang->downArrow}</h5>";
}
echo '</td>';
}
}
echo '</tr>';
?>
</table>
<div class='main-content' id='mainContent'>
<h2><?php echo $lang->product->iteration;?> <span class="label label-badge label-light"><?php echo sprintf($lang->product->iterationInfo, count($roadmaps, 1) - count($roadmaps));?></span></h2>
<?php if($product->type != 'normal'):?>
<div class="text-center branch-nav">
<ul class="nav nav-secondary inline-block">
<li class="nav-heading"><?php echo zget($lang->product->branchName, $product->type);?></li>
<?php foreach($branches as $branchKey => $branchName):?>
<li <?php if($branchKey == 0) echo "class='active'";?>><a data-target="#tabContent<?php echo $branchKey;?>" data-toggle="tab"><?php echo $branchName;?></a></li>
<?php endforeach;?>
</ul>
</div>
<?php endif;?>
<div class="tab-content">
<?php foreach($branches as $branchKey => $branchName):?>
<div class="tab-pane fade release-paths <?php if($branchKey == 0) echo 'active in';?>" id="tabContent<?php echo $branchKey;?>">
<?php foreach($roadmaps as $year => $yearRoadmaps):?>
<?php if(!isset($yearRoadmaps[$branchKey])) continue;?>
<div class="release-path">
<div class="release-head">
<div class="title text-primary"><?php echo $year . (is_numeric($year) ? $lang->year : '');?></div>
<div class="subtitle"><?php echo sprintf($lang->product->iterationInfo, count($yearRoadmaps, 1) - count($yearRoadmaps));?></div>
</div>
<?php $roadmapData = zget($yearRoadmaps, $branchKey, array());?>
<?php $i = 0;?>
<?php foreach($roadmapData as $roadmap):?>
<?php $totalData = count($roadmapData);?>
<?php $rows = ceil($totalData / 8);?>
<?php $maxPerRow = ceil($totalData / $rows);?>
<?php if($i == 0 || $i % $maxPerRow == 0):?>
<ul class="release-line">
<?php endif;?>
<?php $i++;?>
<li <?php if(isset($roadmap->build) && date('Y-m-d') < $roadmap->date) echo "class='active'";?>>
<?php $viewLink = isset($roadmap->build) ? $this->createLink('release', 'view', "releaseID=$roadmap->id") : $this->createLink('productplan', 'view', "planID=$roadmap->id");?>
<a href="<?php echo $viewLink;?>">
<?php if(!empty($roadmap->marker)):?>
<i class="icon icon-flag text-primary"></i>
<?php endif;?>
<div class="block">
<span class="title"><?php echo isset($roadmap->build) ? $roadmap->name : $roadmap->title;?></span>
<span class="date"><?php echo isset($roadmap->build) ? $roadmap->date : ($roadmap->end == '2030-01-01' ? $lang->productplan->future : $roadmap->begin . '~' . $roadmap->end);?></span>
<span class="info"><?php echo $roadmap->desc;?></span>
</div>
</a>
</li>
<?php if($i % $maxPerRow == 0):?>
</ul>
<?php endif;?>
<?php endforeach;?>
</div>
<?php endforeach;?>
</div>
<?php endforeach;?>
</div>
</div>
<?php include '../../common/view/footer.html.php';?>