diff --git a/module/design/control.php b/module/design/control.php index c146425c80..af43bd08ae 100755 --- a/module/design/control.php +++ b/module/design/control.php @@ -222,12 +222,13 @@ class design extends control * View a design. * * @param int $designID + * @param int $version * @access public * @return void */ - public function view(int $designID = 0) + public function view(int $designID = 0, int $version = 0) { - $design = $this->design->getByID($designID); + $design = $this->design->getByID($designID, $version); $this->commonAction($design->project, $design->product, $designID, $design->type); $this->session->set('revisionList', $this->app->getURI(true)); @@ -244,6 +245,7 @@ class design extends control $this->view->actions = $this->loadModel('action')->getList('design', $design->id); $this->view->repos = $this->loadModel('repo')->getRepoPairs('project', $design->project); $this->view->project = $project; + $this->view->version = $version == 0 ? $design->version : $version; $this->view->typeList = $project->model == 'waterfall' ? $this->lang->design->typeList : $this->lang->design->plusTypeList; $this->display(); diff --git a/module/design/model.php b/module/design/model.php index 47e53c9fa3..2ddba7137a 100755 --- a/module/design/model.php +++ b/module/design/model.php @@ -254,15 +254,22 @@ class designModel extends model * @access public * @return object|bool */ - public function getByID(int $designID = 0): object|bool + public function getByID(int $designID = 0, int $version = 0): object|bool { if(common::isTutorialMode()) return $this->loadModel('tutorial')->getDesign(); $design = $this->dao->select('*')->from(TABLE_DESIGN)->where('id')->eq($designID)->fetch(); if(!$design) return false; + if($version == 0) $version = $design->version; + $this->app->loadLang('product'); - $design->files = $this->loadModel('file')->getByObject('design', $designID); + $this->loadModel('file'); + $spec = $this->dao->select('name,`desc`,files')->from(TABLE_DESIGNSPEC)->where('design')->eq($designID)->andWhere('version')->eq($version)->fetch(); + $design->name = !empty($spec->name) ? $spec->name : ''; + $design->desc = !empty($spec->desc) ? $spec->desc : ''; + $design->files = !empty($spec->files) ? $this->file->getByIdList($spec->files) : array(); + $design->productName = $design->product ? $this->dao->findByID($design->product)->from(TABLE_PRODUCT)->fetch('name') : $this->lang->product->all; $design->project = (int)$design->project; $design->product = (int)$design->product; diff --git a/module/design/ui/view.html.php b/module/design/ui/view.html.php index 11b662c166..329a90ac07 100644 --- a/module/design/ui/view.html.php +++ b/module/design/ui/view.html.php @@ -11,10 +11,30 @@ declare(strict_types=1); namespace zin; jsVar('type', strtolower($design->type)); + +/* 版本列表。Version list. */ +$versions = array(); +for($i = $design->version; $i >= 1; $i--) +{ + $versionItem = setting() + ->text("#{$i}") + ->url(inlink('view', "designID={$design->id}&version=$i")); + + $versionItem->selected($version == $i); + $versions[] = $versionItem; +} + +$versionBtn = count($versions) > 1 ? to::title(dropdown +( + btn(set::type('ghost'), setClass('text-link font-normal text-base'), "#{$version}"), + set::items($versions) +)) : null; + detailHeader ( set::backUrl(createLink('design', 'browse', "projectID={$design->project}")), to::title(entityLabel(set(array('entityID' => $design->id, 'level' => 1, 'text' => $design->name))), $design->deleted ? span(setClass('label danger'), $lang->deleted) : null), + $versionBtn ); $canModify = common::canModify('project', $project); @@ -75,6 +95,7 @@ if($this->design->isClickable($design, 'confirmStoryChange')) detailBody ( + $versionBtn, sectionList ( section