* Add item drop down menu.

This commit is contained in:
leiyong
2020-09-22 08:54:03 +08:00
parent 9b7d53c4c7
commit 85d698582c
7 changed files with 256 additions and 139 deletions
+1
View File
@@ -546,6 +546,7 @@ class commonModel extends model
$recentProjects = $this->dao->select('id,code')->from(TABLE_PROJECT)
->where('type')->eq('project')
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
->andWhere('status')->ne('close')
->andWhere('deleted')->eq('0')
->orderBy('id_desc')
+157 -126
View File
@@ -587,41 +587,6 @@ class program extends control
$this->display();
}
/**
* Start project.
*
* @param int $projectID
* @access public
* @return void
*/
public function PRJStart($projectID)
{
$project = $this->program->getPGMByID($projectID);
$projectID = $project->id;
if(!empty($_POST))
{
$this->loadModel('action');
$changes = $this->project->start($projectID);
if(dao::isError()) die(js::error(dao::getError()));
if($this->post->comment != '' or !empty($changes))
{
$actionID = $this->action->create('program', $projectID, 'Started', $this->post->comment);
$this->action->logHistory($actionID, $changes);
}
$this->executeHooks($projectID);
die(js::reload('parent.parent'));
}
$this->view->title = $this->lang->project->start;
$this->view->position[] = $this->lang->project->start;
$this->view->project = $project;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->actions = $this->loadModel('action')->getList('project', $projectID);
$this->display();
}
/**
* Delete a program.
*
@@ -644,40 +609,6 @@ class program extends control
die(js::reload('parent'));
}
/**
* Suspend a project.
*
* @param int $projectID
* @access public
* @return void
*/
public function PRJSuspend($projectID)
{
$project = $this->program->getPGMByID($projectID);
if(!empty($_POST))
{
$this->loadModel('action');
$changes = $this->project->suspend($projectID);
if(dao::isError()) die(js::error(dao::getError()));
if($this->post->comment != '' or !empty($changes))
{
$actionID = $this->action->create('program', $projectID, 'Suspended', $this->post->comment);
$this->action->logHistory($actionID, $changes);
}
$this->executeHooks($projectID);
die(js::reload('parent.parent'));
}
$this->view->title = $this->lang->project->suspend;
$this->view->position[] = $this->lang->project->suspend;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->actions = $this->loadModel('action')->getList('project', $projectID);
$this->view->project = $project;
$this->display('project', 'suspend');
}
/**
* Activate a program.
*
@@ -719,40 +650,6 @@ class program extends control
$this->display('project', 'activate');
}
/**
* Close a project.
*
* @param int $projectID
* @access public
* @return void
*/
public function PRJClose($projectID)
{
$project = $this->program->getPGMByID($projectID);
if(!empty($_POST))
{
$this->loadModel('action');
$changes = $this->project->close($projectID);
if(dao::isError()) die(js::error(dao::getError()));
if($this->post->comment != '' or !empty($changes))
{
$actionID = $this->action->create('program', $projectID, 'Closed', $this->post->comment);
$this->action->logHistory($actionID, $changes);
}
$this->executeHooks($projectID);
die(js::reload('parent.parent'));
}
$this->view->title = $this->lang->project->close;
$this->view->position[] = $this->lang->project->close;
$this->view->project = $project;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->actions = $this->loadModel('action')->getList('project', $projectID);
$this->display('project', 'close');
}
/**
* Export program.
*
@@ -826,7 +723,7 @@ class program extends control
*
* @param int $programID
* @param string $module
* @param string $module
* @param string $method
* @access public
* @return void
*/
@@ -839,6 +736,35 @@ class program extends control
$this->display();
}
/**
* Ajax get project drop menu.
*
* @param int $projectID
* @param string $module
* @param string $method
* @access public
* @return void
*/
public function ajaxGetPRJDropMenu($projectID, $module, $method)
{
$closedProjects = $this->program->getPRJList(0, 'closed', 0, 'id_desc', null, 0, 0);
$closedProjectNames = array();
foreach($closedProjects as $project) $closedProjectNames = common::convert2Pinyin($closedProjectNames);
$closedProjectsHtml = '';
foreach($closedProjects as $project) $closedProjectsHtml .= html::a(inLink('index'), '<i class="icon icon-menu-doc"></i>' . $project->name);
$this->view->projectID = $projectID;
$this->view->module = $module;
$this->view->method = $method;
$this->view->normalProjectsHtml = $this->program->getPRJTreeMenu(0, array('programmodel', 'createPRJManageLink'));
$this->view->closedProjectsHtml = $closedProjectsHtml;
$this->display();
}
/**
* Ajax get program drop menu.
*
@@ -888,6 +814,21 @@ class program extends control
die($link);
}
/**
* Gets the most recently created project.
*
* @access public
* @return string
*/
public function ajaxGetRecentProjects()
{
$recentProjects = $this->program->getPRJParams(0, 15);
if(!empty($recentProjects))
{
foreach($recentProjects as $project) echo html::a(helper::createLink('project', 'view', 'projectID=' . $project->id), '<i class="icon icon-menu-doc"></i>' . $project->name);
}
}
/**
* Project index view.
*
@@ -1104,7 +1045,7 @@ class program extends control
public function PRJGroup($projectID = 0, $programID = 0)
{
$this->lang->navGroup->program = 'project';
$this->session->set('project', $projectID);
$this->session->set('PRJ', $projectID);
$title = $this->lang->company->orgView . $this->lang->colon . $this->lang->group->browse;
$position[] = $this->lang->group->browse;
@@ -1133,7 +1074,7 @@ class program extends control
public function PRJCreateGroup($projectID = 0, $programID = 0)
{
$this->lang->navGroup->program = 'project';
$this->session->set('project', $projectID);
$this->session->set('PRJ', $projectID);
if(!empty($_POST))
{
@@ -1160,7 +1101,7 @@ class program extends control
public function PRJManageView($groupID, $projectID, $programID)
{
$this->lang->navGroup->program = 'project';
$this->session->set('project', $projectID);
$this->session->set('PRJ', $projectID);
if($_POST)
{
@@ -1192,11 +1133,14 @@ class program extends control
*/
public function PRJManagePriv($type = 'byGroup', $param = 0, $menu = '', $version = '')
{
$this->lang->navGroup->program = 'project';
if($type == 'byGroup')
{
$groupID = $param;
$group = $this->group->getById($groupID);
}
$this->view->type = $type;
foreach($this->lang->resource as $moduleName => $action)
{
@@ -1257,7 +1201,7 @@ class program extends control
public function PRJManageMembers($projectID, $dept = '')
{
$this->lang->navGroup->program = 'project';
$this->session->set('project', $projectID);
$this->session->set('PRJ', $projectID);
if(!empty($_POST))
{
@@ -1299,19 +1243,19 @@ class program extends control
*/
public function PRJCopyGroup($groupID)
{
if(!empty($_POST))
{
$group = $this->group->getByID($groupID);
$_POST['PRJ'] = $group->PRJ;
$this->group->copy($groupID);
if(dao::isError()) die(js::error(dao::getError()));
die(js::closeModal('parent.parent', 'this'));
}
if(!empty($_POST))
{
$group = $this->group->getByID($groupID);
$_POST['PRJ'] = $group->PRJ;
$this->group->copy($groupID);
if(dao::isError()) die(js::error(dao::getError()));
die(js::closeModal('parent.parent', 'this'));
}
$this->view->title = $this->lang->company->orgView . $this->lang->colon . $this->lang->group->copy;
$this->view->position[] = $this->lang->group->copy;
$this->view->group = $this->group->getById($groupID);
$this->display('group', 'copy');
$this->view->title = $this->lang->company->orgView . $this->lang->colon . $this->lang->group->copy;
$this->view->position[] = $this->lang->group->copy;
$this->view->group = $this->group->getById($groupID);
$this->display('group', 'copy');
}
/**
@@ -1339,18 +1283,105 @@ class program extends control
}
/**
* Gets the most recently created project.
* Start project.
*
* @param int $projectID
* @access public
* @return string
* @return void
*/
public function ajaxGetRecentProjects()
public function PRJStart($projectID)
{
$recentProjects = $this->program->getPRJParams(0, 15);
if(!empty($recentProjects))
$project = $this->program->getPGMByID($projectID);
$projectID = $project->id;
if(!empty($_POST))
{
foreach($recentProjects as $project) echo html::a(helper::createLink('project', 'view', 'projectID=' . $project->id), '<i class="icon icon-menu-doc"></i>' . $project->name);
$this->loadModel('action');
$changes = $this->project->start($projectID);
if(dao::isError()) die(js::error(dao::getError()));
if($this->post->comment != '' or !empty($changes))
{
$actionID = $this->action->create('program', $projectID, 'Started', $this->post->comment);
$this->action->logHistory($actionID, $changes);
}
$this->executeHooks($projectID);
die(js::reload('parent.parent'));
}
$this->view->title = $this->lang->project->start;
$this->view->position[] = $this->lang->project->start;
$this->view->project = $project;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->actions = $this->loadModel('action')->getList('project', $projectID);
$this->display();
}
/**
* Suspend a project.
*
* @param int $projectID
* @access public
* @return void
*/
public function PRJSuspend($projectID)
{
$project = $this->program->getPGMByID($projectID);
if(!empty($_POST))
{
$this->loadModel('action');
$changes = $this->project->suspend($projectID);
if(dao::isError()) die(js::error(dao::getError()));
if($this->post->comment != '' or !empty($changes))
{
$actionID = $this->action->create('program', $projectID, 'Suspended', $this->post->comment);
$this->action->logHistory($actionID, $changes);
}
$this->executeHooks($projectID);
die(js::reload('parent.parent'));
}
$this->view->title = $this->lang->project->suspend;
$this->view->position[] = $this->lang->project->suspend;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->actions = $this->loadModel('action')->getList('project', $projectID);
$this->view->project = $project;
$this->display('project', 'suspend');
}
/**
* Close a project.
*
* @param int $projectID
* @access public
* @return void
*/
public function PRJClose($projectID)
{
$project = $this->program->getPGMByID($projectID);
if(!empty($_POST))
{
$this->loadModel('action');
$changes = $this->project->close($projectID);
if(dao::isError()) die(js::error(dao::getError()));
if($this->post->comment != '' or !empty($changes))
{
$actionID = $this->action->create('program', $projectID, 'Closed', $this->post->comment);
$this->action->logHistory($actionID, $changes);
}
$this->executeHooks($projectID);
die(js::reload('parent.parent'));
}
$this->view->title = $this->lang->project->close;
$this->view->position[] = $this->lang->project->close;
$this->view->project = $project;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->actions = $this->loadModel('action')->getList('project', $projectID);
$this->display('project', 'close');
}
}
-2
View File
@@ -1,3 +1 @@
#whitelistBox .checkbox-inline, #whitelistBox .radio-inline { margin-left: 10px; display: inline-block; padding-left: 0px; padding-right: 10px; }
#pgmCommonAction>.btn { height: 50px; padding: 10px 15px; margin: 0; font-size: 14px; font-weight: 700; line-height: 30px; color: #fff; background: 0 0; border: none; }
#pgmCommonAction>.btn>.icon{ position: relative; top: -4px; display: inline-block; font-size: 18px; font-weight: 400; vertical-align: middle; }
+1
View File
@@ -1,6 +1,7 @@
<?php
/* Actions. */
$lang->program->PRJIndex = '仪表盘';
$lang->program->PRJHome = '项目主页';
$lang->program->PRJCreate = '创建项目';
$lang->program->PRJCreateGuide = '选择项目模板';
$lang->program->PRJEdit = '编辑项目';
+35 -11
View File
@@ -759,27 +759,50 @@ class programModel extends model
* Get project swapper.
*
* @param object $programs
* @param int $programID
* @param int $projectID
* @param varchar $currentModule
* @param varchar $currentMethod
* @param varchar $extra
* @access private
* @return void
*/
public function getPRJSwitcher($programID, $currentModule, $currentMethod)
public function getPRJCommonAction($projectID = 0)
{
$output = "<div class='btn-group' id='pgmCommonAction'><button data-toggle='dropdown' type='button' class='btn btn-limit' id='currentItem' title='{$this->lang->program->common}'>{$this->lang->program->common} <i class='icon icon-sort-down'></i></button>";
$output .= '<ul class="dropdown-menu">';
$output .= '<li>' . html::a(helper::createLink('program', 'index'), "<i class='icon icon-home'></i> " . $this->lang->program->PRJHome) . '</li>';
$output .= '<li>' . html::a(helper::createLink('program', 'prjbrowse'), "<i class='icon icon-cards-view'></i> " . $this->lang->program->PRJBrowse) . '</li>';
$output .= '<li>' . html::a(helper::createLink('program', 'prjcreate'), "<i class='icon icon-plus'></i> " . $this->lang->program->PRJCreate) . '</li>';
$output .= '</ul>';
$output .= "</div>";
echo $output;
}
/*
* Get project swapper.
*
* @param object $programs
* @param int $projectID
* @param varchar $currentModule
* @param varchar $currentMethod
* @param varchar $extra
* @access private
* @return void
*/
public function getPRJSwitcher($projectID, $currentModule, $currentMethod)
{
$this->getPRJCommonAction($projectID);
$this->loadModel('project');
$currentProgramName = '';
if($programID)
$currentProjectName = $this->lang->program->common;
if($projectID)
{
setCookie("lastProgram", $programID, $this->config->cookieLife, $this->config->webRoot, '', false, true);
$currentProgram = $this->project->getById($programID);
$currentProgramName = $currentProgram->name;
setCookie("lastproject", $projectID, $this->config->cookieLife, $this->config->webRoot, '', false, true);
$currentProject = $this->project->getById($projectID);
$currentProjectName = $currentProject->name;
}
if($currentModule == 'program' && $currentMethod == 'browse') $currentProgramName = $this->lang->program->all;
$dropMenuLink = helper::createLink('program', 'ajaxGetDropMenu', "objectID=$programID&module=$currentModule&method=$currentMethod");
$output = "<div class='btn-group' id='swapper'><button data-toggle='dropdown' type='button' class='btn btn-limit' id='currentItem' title='{$currentProgramName}'>{$currentProgramName} <i class='icon icon-swap'></i></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
$dropMenuLink = helper::createLink('program', 'ajaxGetPRJDropMenu', "objectID=$projectID&module=$currentModule&method=$currentMethod");
$output = "<div class='btn-group' id='swapper'><button data-toggle='dropdown' type='button' class='btn btn-limit' id='currentItem' title='{$currentProjectName}'>{$currentProjectName} <i class='icon icon-swap'></i></button><div id='dropMenu' class='dropdown-menu search-list' data-ride='searchList' data-url='$dropMenuLink'>";
$output .= '<div class="input-control search-box has-icon-left has-icon-right search-example"><input type="search" class="form-control search-input" /><label class="input-control-icon-left search-icon"><i class="icon icon-search"></i></label><a class="input-control-icon-right search-clear-btn"><i class="icon icon-close icon-sm"></i></a></div>';
$output .= "</div></div>";
@@ -968,7 +991,7 @@ class programModel extends model
* @access public
* @return bool
*/
public function getPRJList($programID = 0, $browseType = 'all', $queryID = 0, $orderBy = 'order_desc', $pager = null, $programTitle = 0, $PRJMine = 0)
public function getPRJList($programID = 0, $browseType = 'all', $queryID = 0, $orderBy = 'id_desc', $pager = null, $programTitle = 0, $PRJMine = 0)
{
$path = '';
if($programID)
@@ -1085,6 +1108,7 @@ class programModel extends model
{
$projectMenu = array();
$stmt = $this->dbh->query($this->buildPRJMenuQuery($projectID));
while($project = $stmt->fetch())
{
$linkHtml = call_user_func($userFunc, $project, $param);
@@ -1124,7 +1148,7 @@ class programModel extends model
*/
public function createPRJManageLink($project)
{
$link = $project->type == 'program' ? helper::createLink('program', 'PRJbrowse', "programID={$project->id}") : helper::createLink('project', 'browse', "projectID={$project->id}");
$link = $project->type == 'program' ? helper::createLink('program', 'PRJbrowse', "programID={$project->id}") : helper::createLink('program', 'index', "projectID={$project->id}");
$icon = $project->type == 'program' ? '<i class="icon icon-stack"></i> ' : '<i class="icon icon-menu-doc"></i> ';
return html::a($link, $icon . $project->name, '_self', "id=project{$project->id} title='{$project->name}' class='text-ellipsis'");
}
@@ -0,0 +1,59 @@
<?php js::set('programID', $projectID);?>
<?php js::set('module', $module);?>
<?php js::set('method', $method);?>
<div class="table-row">
<div class="table-col col-left">
<div class='list-group'>
<?php
echo $normalProjectsHtml;
?>
</div>
<div class="col-footer">
<?php echo html::a(helper::createLink('program', 'PRJBrowse', 'programID=0&status=all'), '<i class="icon icon-cards-view muted"></i> ' . $lang->project->all, '', 'class="not-list-item"'); ?>
<a class='pull-right toggle-right-col not-list-item'><?php echo $lang->project->doneProjects?><i class='icon icon-angle-right'></i></a>
</div>
</div>
<div class="table-col col-right">
<div class='list-group'>
<?php echo $closedProjectsHtml;?>
</div>
</div>
</div>
<style>
.tree li.has-list.open:before {border-left: none;}
#programTree li {padding: 0 0 0 8px;}
#programTree li.has-list {padding-left: 20px;}
#programTree li > a {display: block; padding: 5px 0; border-radius: 2px; padding-left: 6px; height: 30px;}
#programTree li > a > span {display: inline-block;}
#programTree li > a > span + span {margin-left: 8px;}
#programTree li.selected > a {background-color: #E8F3FC;}
#programTree li.selected > a > span.title {color: #006AF1;}
#programTree .label-id {border-color: #cbd0db; color: #7d8599}
#programTree .label.label-type {background: #fff; border: 1px solid #7d8599; color:#7d8599}
#programTree li > a > span.title {color: #3C4353; white-space: nowrap; max-width: 60%; overflow: hidden; text-overflow: ellipsis; vertical-align: middle;}
#programTree li > a > span.user {color: #838a9d;}
#programTree li > a > span.user > .icon-person {font-size: 14px; position: relative; top: -1px; color: #a6aab8}
#programTree li > .list-toggle {transform: rotate(0deg); width: 16px; height: 16px; border: 4px solid #a6aab8; border-radius: 2px; top: 7px;}
#programTree li > .list-toggle:before {content: ' '; display: block; position: absolute; border: 1px solid #a6aab8; top: 2px; left: -3px; right: -3px; bottom: 2px; min-width: 0; transition: all .2s;}
#programTree li > .list-toggle:hover:before,
#programTree li > .list-toggle:hover {border-color: #006AF1;}
#programTree li.open > .list-toggle {width: 12px; height: 12px; top: 9px; background-color: #a6aab8; border-width: 3px; left: 3px;}
#programTree li.open > .list-toggle:before {border: none; height: 2px; width: 6px; left: 0; top: 2px; background: #fff;}
#programTree li.open > .list-toggle:hover {background: #006AF1;}
#programTree ul > li:after {display: block; position: absolute; content: ' '; border-top: 2px solid #cbd0db; top: 14px; left: -12px; z-index: 1; width: 10px;}
#programTree ul > li:before,
#programTree ul > li.has-list:before {background: none; content: ' '; display: block; position: absolute; width: auto; height: auto; border: none; border-left: 2px solid #cbd0db; top: -13px; bottom: 12px; left: -12px;}
#programTree ul > li:last-child:before {bottom: auto; height: 29px;}
#programTree ul > li:first-child:before {top: -9px;}
#programTree ul > li.has-list:first-child:before {top: -13px;}
#programTree ul > li.tree-single-item:before {height: 23px;}
#programTree ul > li.has-list:after {width: 14px;}
#programTree ul > li.item-meas a.selected{color: #0c64eb;}
#showClosed1 + label{color: #3c4353}
</style>
<script>
$('#projectTree').tree();
</script>
+3
View File
@@ -54,3 +54,6 @@ a.showMoreImage:hover {opacity: 1;}
#menuNav> .nav > li > span {padding: 8px; line-height: 20px; cursor: pointer; color: #fff; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; -khtml-user-select: none; user-select:none;}
#morePRJ {display:none; max-height: 420px; position: fixed; bottom: 0; left: 100px; z-index: 999; background: white; padding: 20px 10px; height: 420px; margin-bottom: 40px; border: 1px solid #efefef}
#morePRJ > .list-group {height: 400px; min-width: 150px; max-width:200px;}
#pgmCommonAction>.btn { height: 50px; padding: 10px 15px; margin: 0; font-size: 14px; font-weight: 700; line-height: 30px; color: #fff; background: 0 0; border: none; }
#pgmCommonAction>.btn>.icon{ position: relative; top: -4px; display: inline-block; font-size: 18px; font-weight: 400; vertical-align: middle; }