diff --git a/module/block/config.php b/module/block/config.php
index b556b792c4..0034b9261a 100644
--- a/module/block/config.php
+++ b/module/block/config.php
@@ -267,7 +267,8 @@ $config->block->params['productDoc'] = $config->block->params['default']->count;
$config->block->params['projectDoc'] = $config->block->params['default']->count;
-$config->block->params['singlestory'] = $config->block->params['story'];
+$config->block->params['singlestory'] = $config->block->params['story'];
+$config->block->params['singlerelease'] = $config->block->params['release'];
$config->block->modules['project'] = new stdclass();
$config->block->modules['project']->moreLinkList = new stdclass();
diff --git a/module/block/config/releaseblock.php b/module/block/config/releaseblock.php
index f17bbcbc53..0ef47f9416 100644
--- a/module/block/config/releaseblock.php
+++ b/module/block/config/releaseblock.php
@@ -6,8 +6,8 @@ $config->block->release = new stdclass();
$config->block->release->dtable = new stdclass();
$config->block->release->dtable->fieldList = array();
$config->block->release->dtable->fieldList['id'] = array('name' => 'id', 'title' => $lang->idAB, 'type' => 'id', 'sortType' => true);
-$config->block->release->dtable->fieldList['name'] = array('name' => 'name', 'title' => $lang->release->name, 'type' => 'title', 'sortType' => true, 'flex' => 1);
-$config->block->release->dtable->fieldList['productName'] = array('name' => 'productName', 'title' => $lang->release->product, 'type' => 'text', 'sortType' => true, 'minWidth' => '100');
+$config->block->release->dtable->fieldList['name'] = array('name' => 'name', 'title' => $lang->release->name, 'type' => 'title', 'sortType' => true, 'flex' => 1, 'link' => array('module' => 'release', 'method' => 'view', 'params' => 'release={id}'));
+$config->block->release->dtable->fieldList['productName'] = array('name' => 'productName', 'title' => $lang->release->product, 'type' => 'text', 'sortType' => true, 'minWidth' => '100', 'link' => array('module' => 'product', 'method' => 'browse', 'params' => 'productID={product}'));
$config->block->release->dtable->fieldList['buildName'] = array('name' => 'buildName', 'title' => $lang->release->build, 'type' => 'text', 'sortType' => true, 'minWidth' => '100');
$config->block->release->dtable->fieldList['date'] = array('name' => 'date', 'title' => $lang->release->date, 'type' => 'date', 'sortType' => true);
$config->block->release->dtable->fieldList['status'] = array('name' => 'status', 'title' => $lang->release->status, 'type' => 'status', 'sortType' => true, 'statusMap' => $lang->release->statusList);
diff --git a/module/block/js/releaseblock.ui.js b/module/block/js/releaseblock.ui.js
new file mode 100644
index 0000000000..fb031080cf
--- /dev/null
+++ b/module/block/js/releaseblock.ui.js
@@ -0,0 +1,10 @@
+window.onRenderReleaseNameCell = function(result, info)
+{
+ if(info.col.name === 'name' && info.row.data.marker == '1')
+ {
+ result[result.length] = {html: ""};
+ return result;
+
+ }
+ return result;
+}
diff --git a/module/block/js/singlereleaseblock.ui.js b/module/block/js/singlereleaseblock.ui.js
new file mode 100644
index 0000000000..cfd31487d6
--- /dev/null
+++ b/module/block/js/singlereleaseblock.ui.js
@@ -0,0 +1,9 @@
+window.onRenderReleaseNameCell = function(result, info)
+{
+ if(info.col.name === 'name' && info.row.data.marker == '1')
+ {
+ result[result.length] = {html: ""};
+ return result;
+ }
+ return result;
+}
diff --git a/module/block/ui/releaseblock.html.php b/module/block/ui/releaseblock.html.php
index 590b4c02aa..4a2ac380f0 100644
--- a/module/block/ui/releaseblock.html.php
+++ b/module/block/ui/releaseblock.html.php
@@ -11,6 +11,8 @@ declare(strict_types=1);
namespace zin;
+jsVar('markerTitle', $lang->release->marker);
+
if(!$longBlock)
{
unset($config->block->release->dtable->fieldList['id']);
@@ -27,6 +29,7 @@ panel
(
set::height(318),
set::fixedLeftWidth($longBlock ? '0.33' : '0.5'),
+ set::onRenderCell(jsRaw('window.onRenderReleaseNameCell')),
set::cols(array_values($config->block->release->dtable->fieldList)),
set::data(array_values($releases))
)
diff --git a/module/block/ui/singlereleaseblock.html.php b/module/block/ui/singlereleaseblock.html.php
index 539c3659db..4a2ac380f0 100644
--- a/module/block/ui/singlereleaseblock.html.php
+++ b/module/block/ui/singlereleaseblock.html.php
@@ -11,13 +11,27 @@ declare(strict_types=1);
namespace zin;
+jsVar('markerTitle', $lang->release->marker);
+
+if(!$longBlock)
+{
+ unset($config->block->release->dtable->fieldList['id']);
+ unset($config->block->release->dtable->fieldList['productName']);
+ unset($config->block->release->dtable->fieldList['buildName']);
+}
+
panel
(
- set('headingClass', 'border-b'),
+ setClass('p-0'),
set::title($block->title),
- div
+ set::bodyClass('p-0 no-shadow border-t'),
+ dtable
(
- '正在开发中...'
+ set::height(318),
+ set::fixedLeftWidth($longBlock ? '0.33' : '0.5'),
+ set::onRenderCell(jsRaw('window.onRenderReleaseNameCell')),
+ set::cols(array_values($config->block->release->dtable->fieldList)),
+ set::data(array_values($releases))
)
);
diff --git a/module/block/zen.php b/module/block/zen.php
index 44c73a14fd..051cd1695b 100644
--- a/module/block/zen.php
+++ b/module/block/zen.php
@@ -2620,6 +2620,35 @@ class blockZen extends block
$this->view->stories = $this->loadModel('story')->getUserStories($this->app->user->account, $type, $orderBy, $this->viewType != 'json' ? $pager : '', 'story', true, 0, $productID);
}
+ /**
+ * 打印单个产品发布列表区块数据。
+ * Print releases block.
+ *
+ * @param object $block
+ * @access protected
+ * @return void
+ */
+ protected function printSingleReleaseBlock(object $block): void
+ {
+ $uri = $this->createLink('product', 'dashboard');
+ $this->session->set('releaseList', $uri, 'product');
+ $this->session->set('buildList', $uri, 'execution');
+
+ $productID = $this->session->product;
+
+ $this->app->loadLang('release');
+ $this->view->releases = $this->dao->select('t1.*,t2.name as productName,t3.name as buildName')->from(TABLE_RELEASE)->alias('t1')
+ ->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id')
+ ->leftJoin(TABLE_BUILD)->alias('t3')->on('t1.build=t3.id')
+ ->where('t1.deleted')->eq('0')
+ ->andWhere('t2.shadow')->eq(0)
+ ->andWhere('t1.product')->eq($productID)
+ ->beginIF(!$this->app->user->admin)->andWhere('t1.product')->in($this->app->user->view->products)->fi()
+ ->orderBy('t1.id desc')
+ ->beginIF($this->viewType != 'json')->limit((int)$block->params->count)->fi()
+ ->fetchAll();
+ }
+
/**
* 判断是否为内部调用。
* Check request client is chandao or not.