Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into release/zentaopms_18.3
This commit is contained in:
File diff suppressed because one or more lines are too long
+7
-7
File diff suppressed because one or more lines are too long
@@ -296,7 +296,6 @@ class router extends baseRouter
|
||||
$productProject = $productProject->value;
|
||||
list($productCommon, $projectCommon) = explode('_', $productProject);
|
||||
$lang->productCommon = isset($this->config->productCommonList[$this->clientLang][(int)$productCommon]) ? $this->config->productCommonList[$this->clientLang][(int)$productCommon] : $this->config->productCommonList['en'][0];
|
||||
$lang->projectCommon = isset($this->config->projectCommonList[$this->clientLang][(int)$projectCommon]) ? $this->config->projectCommonList[$this->clientLang][(int)$projectCommon] : $this->config->projectCommonList['en'][0];
|
||||
}
|
||||
if(!defined('IN_UPGRADE'))
|
||||
{
|
||||
|
||||
@@ -30,6 +30,8 @@ $lang->company->guest = 'Gast Login';
|
||||
$lang->company->admins = 'Administratoren';
|
||||
$lang->company->deleted = 'Deleted';
|
||||
|
||||
$lang->company->manageRole = 'Role setting';
|
||||
|
||||
$lang->company->product = $lang->productCommon;
|
||||
$lang->company->project = $lang->projectCommon;
|
||||
$lang->company->execution = 'Execution';
|
||||
|
||||
@@ -30,6 +30,8 @@ $lang->company->guest = 'Guest Login';
|
||||
$lang->company->admins = 'Administrator';
|
||||
$lang->company->deleted = 'Deleted';
|
||||
|
||||
$lang->company->manageRole = 'Role setting';
|
||||
|
||||
$lang->company->product = $lang->productCommon;
|
||||
$lang->company->project = $lang->projectCommon;
|
||||
$lang->company->execution = $lang->executionCommon;
|
||||
|
||||
@@ -30,6 +30,8 @@ $lang->company->guest = 'Connexion Invités';
|
||||
$lang->company->admins = 'Administrateur';
|
||||
$lang->company->deleted = 'Deleted';
|
||||
|
||||
$lang->company->manageRole = 'Role setting';
|
||||
|
||||
$lang->company->product = $lang->productCommon;
|
||||
$lang->company->project = $lang->projectCommon;
|
||||
$lang->company->execution = $lang->executionCommon;
|
||||
|
||||
@@ -30,6 +30,8 @@ $lang->company->guest = '匿名登录';
|
||||
$lang->company->admins = '管理员';
|
||||
$lang->company->deleted = '已删除';
|
||||
|
||||
$lang->company->manageRole = '维护职位';
|
||||
|
||||
$lang->company->product = $lang->productCommon;
|
||||
$lang->company->project = $lang->projectCommon;
|
||||
$lang->company->execution = $lang->executionCommon;
|
||||
|
||||
@@ -36,6 +36,9 @@ js::set('confirmDelete', $lang->user->confirmDelete);
|
||||
echo html::a($link, "<i class='icon icon-plus'></i> {$lang->user->create}", '', "class='btn btn-primary create-user-btn'");
|
||||
?>
|
||||
<?php else:?>
|
||||
<?php if(common::hasPriv('custom', 'set')):?>
|
||||
<?php common::printLink('custom', 'set', "module=user&field=roleList", "<i class='icon icon-cog-outline'></i> " . $lang->company->manageRole, '', "class='btn btn-link'");?>
|
||||
<?php endif;?>
|
||||
<?php if(common::hasPriv('user', 'create') and common::hasPriv('user', 'batchCreate')):?>
|
||||
<?php
|
||||
$createUserLink = $this->createLink('user', 'create', "dept={$deptID}");
|
||||
|
||||
@@ -1374,6 +1374,7 @@ class kanban extends control
|
||||
|
||||
$this->loadModel('project');
|
||||
$this->loadModel('execution');
|
||||
$this->loadModel('programplan');
|
||||
|
||||
/* Load pager. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
|
||||
@@ -370,7 +370,7 @@ function renderKanbanItem(item, $item)
|
||||
$item.data('card', item);
|
||||
|
||||
$info.children('.estimate').text(item.estimate + kanbancardLang.lblHour);
|
||||
if(item.estimate == 0) $info.children('.estimate').hide();
|
||||
item.estimate > 0 ? $info.children('.estimate').show() : $info.children('.estimate').hide();
|
||||
|
||||
$info.children('.pri')
|
||||
.attr('class', 'pri' + (item.pri ? ' label-pri label-pri-' + item.pri : ''))
|
||||
|
||||
@@ -3119,8 +3119,8 @@ class kanbanModel extends model
|
||||
->add('lastEditedBy', $this->app->user->account)
|
||||
->add('lastEditedDate', $now)
|
||||
->trim('name')
|
||||
->setDefault('estimate', $oldCard->estimate)
|
||||
->setIF(!empty($this->post->assignedTo) and $oldCard->assignedTo != $this->post->assignedTo, 'assignedDate', $now)
|
||||
->setIF(!isset($_POST['estimate']), 'estimate', $oldCard->estimate)
|
||||
->setIF(is_numeric($this->post->estimate), 'estimate', (float)$this->post->estimate)
|
||||
->stripTags($this->config->kanban->editor->editcard['id'], $this->config->allowedTags)
|
||||
->join('assignedTo', ',')
|
||||
|
||||
@@ -62,8 +62,12 @@
|
||||
<?php printf('%03d', $execution->id);?>
|
||||
</td>
|
||||
<?php if(common::hasPriv('execution', 'view')):?>
|
||||
<?php
|
||||
$isClickable = true;
|
||||
if($execution->type == 'stage') $isClickable = $this->programplan->checkLeafStage($execution->id) ? true : false;
|
||||
?>
|
||||
<td title='<?php echo $execution->title;?>'>
|
||||
<a href='javascript:void(0);' onclick="locateView('execution', <?php echo $execution->id;?>)"><?php echo $execution->name;?></a>
|
||||
<a href='javascript:void(0);' <?php echo $isClickable ? "onclick='locateView(\"execution\", $execution->id)'" : '';?>><?php echo $execution->name;?></a>
|
||||
</td>
|
||||
<?php else:?>
|
||||
<td title='<?php echo $execution->title;?>'><?php echo $execution->name;?></td>
|
||||
|
||||
@@ -77,6 +77,7 @@ class personnel extends control
|
||||
public function invest($programID = 0)
|
||||
{
|
||||
$this->loadModel('program')->setMenu($programID);
|
||||
$this->app->loadLang('user');
|
||||
|
||||
$this->view->title = $this->lang->personnel->invest;
|
||||
$this->view->position[] = $this->lang->personnel->invest;
|
||||
|
||||
@@ -148,6 +148,7 @@ class reportModel extends model
|
||||
->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id')
|
||||
->where('t1.deleted')->eq(0)
|
||||
->andWhere('t1.shadow')->eq(0)
|
||||
->andWhere('t1.vision')->eq('rnd')
|
||||
->beginIF(strpos($conditions, 'closedProduct') === false)->andWhere('t1.status')->ne('closed')->fi()
|
||||
->beginIF(!$permission)->andWhere('t1.id')->in($this->app->user->view->products)->fi()
|
||||
->orderBy('t2.order_asc, t1.line_desc, t1.order_asc')
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
.row a:hover {color: #3c4353;}
|
||||
|
||||
.screen {border-radius: 4px; border: solid 1px #ddd; margin-bottom: 20px; position: relative;}
|
||||
.screen {border-radius: 4px; border: solid 1px #ddd; position: relative;}
|
||||
.screen .top {text-align: center; min-height:182px; position:relative;}
|
||||
.screen .top.img {height: 182px; text-align: center;}
|
||||
.screen .top.img img {height:100%; overflow: hidden; object-fit: cover; object-position: top;}
|
||||
@@ -28,4 +28,6 @@
|
||||
.bg6 {background:#0abbad;}
|
||||
|
||||
.main-col {background-color: white;}
|
||||
.main-col .row {margin:10px 0px;}
|
||||
.main-col .row {margin:10px 0px; padding: 12px;}
|
||||
.main-col .row .col-md-3 {padding: 8px;}
|
||||
.main-col .row .col-md-3 a {min-width: 297px;}
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
.header {display:flex; justify-content:center; }
|
||||
.img-header {width:1300px; height:120px; background-image:url("static/images/screen_header.png"); background-repeat:no-repeat;}
|
||||
.title {padding-top:39px; padding-left:525px; white-space:nowrap; color:#B2D5E5; font-family: "Helvetica Neue",Helvetica,Tahoma,Arial,'PingFang SC','Source Han Sans CN','Source Han Sans','Source Han Serif','Hiragino Sans GB','WenQuanYi Micro Hei','Microsoft YaHei',sans-serif; letter-spacing:5px;}
|
||||
.img-header {width:1342px; height: 129px; background-image:url("static/images/screen_header.png"); background-repeat:no-repeat;}
|
||||
.title {padding-top:39px; padding-left: 615px; white-space:nowrap; color:#B2D5E5; font-family: "Helvetica Neue",Helvetica,Tahoma,Arial,'PingFang SC','Source Han Sans CN','Source Han Sans','Source Han Serif','Hiragino Sans GB','WenQuanYi Micro Hei','Microsoft YaHei',sans-serif; letter-spacing:5px;}
|
||||
.time {position:absolute; right:10px; top:30px; color:#eee}
|
||||
|
||||
body {background:rgb(0,16,40);}
|
||||
.content {display:flex; justify-content:center; margin-top: 20px;}
|
||||
.burn {width: 1300px; display: flex; flex-wrap: wrap; justify-content: space-around; padding: 10px 0;}
|
||||
.burn > .container {flex: 0 0 33%; margin-top: 40px; height: 370px; width: 370px; background-image:url("static/images/burn_bg.png"); background-repeat:no-repeat; background-size: 100% 100%}
|
||||
.content {display: flex; justify-content: center;}
|
||||
.burn {width: 1300px; display: flex; flex-wrap: wrap; justify-content: space-around; padding: 20px 0;}
|
||||
.burn > .container {flex: 0 0 33%; margin-top: 20px; height: 370px; width: 370px; background-image:url("static/images/burn_bg.png"); background-repeat:no-repeat; background-size: calc(100% - 14px) calc(100%); left: 7px;}
|
||||
.burn > .container canvas{max-width: calc(100% - 15px); max-height: calc(100% - 15px);}
|
||||
|
||||
.content .table-empty-tip {background: transparent; padding-right: 75px;}
|
||||
|
||||
@@ -841,8 +841,8 @@ class screenModel extends model
|
||||
|
||||
$deadline = $execution->status == 'closed' ? substr($execution->closedDate, 0, 10) : $execution->suspendedDate;
|
||||
$deadline = strpos('closed,suspended', $execution->status) === false ? helper::today() : $deadline;
|
||||
$endDate = strpos($type, 'withdelay') !== false ? $deadline : $execution->end;
|
||||
list($dateList, $interval) = $this->execution->getDateList($execution->begin, $endDate, $type, 0, 'Y-m-d', $execution->end);
|
||||
$endDate = (strpos($type, 'withdelay') !== false and $deadline > $execution->end) ? $deadline : $execution->end;
|
||||
list($dateList, $interval) = $this->execution->getDateList($execution->begin, $endDate, $type, 0, 'Y-m-d', $deadline);
|
||||
|
||||
$executionEnd = strpos($type, 'withdelay') !== false ? $execution->end : '';
|
||||
$chartData = $this->execution->buildBurnData($executionID, $dateList, $type, 'left', $executionEnd);
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
<?php include $app->getModuleRoot() . 'common/view/header.lite.html.php';?>
|
||||
<?php include $app->getModuleRoot() . 'common/view/chart.html.php';?>
|
||||
<?php js::import($jsRoot . 'echarts/echarts.common.min.js');?>
|
||||
<?php js::import($jsRoot . 'echarts/timeline.min.js');?>
|
||||
<?php js::set('executions', $executions);?>
|
||||
<?php js::set('burnXUnit', $lang->execution->burnXUnit);?>
|
||||
<?php js::set('burnYUnit', $lang->execution->burnYUnit);?>
|
||||
<?php js::set('workHour', $lang->execution->workHour);?>
|
||||
<?php js::set('workHourUnit', $lang->execution->workHourUnit);?>
|
||||
<div class='header'>
|
||||
<div class='img-header'>
|
||||
<h2 class='title'>迭代燃尽图大屏</h2>
|
||||
<h2 class='title'><?php echo $screen->name;?></h2>
|
||||
<span class='time'><?php echo '更新时间:' . $date;?></span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -34,13 +39,15 @@ function initBurnChar()
|
||||
var option = {
|
||||
title: {
|
||||
text: execution.name,
|
||||
top: 10,
|
||||
textStyle: {
|
||||
color: '#a1c4e9',
|
||||
fontSize: 15
|
||||
}
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
trigger: 'axis',
|
||||
valueFormatter: (value) => (value == undefined ? 0 : value) + ' ' + workHour + '/' + workHourUnit
|
||||
},
|
||||
legend: {
|
||||
data: ["<?php echo $lang->execution->charts->burn->graph->actuality;?>","<?php echo $lang->execution->charts->burn->graph->reference;?>"],
|
||||
@@ -48,12 +55,14 @@ function initBurnChar()
|
||||
color: '#dee0e4',
|
||||
fontSize: 14
|
||||
},
|
||||
top: 10,
|
||||
right: 0
|
||||
},
|
||||
color: ['#42526a', '#2567cf', 'red'],
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
top: 65,
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
@@ -64,6 +73,11 @@ function initBurnChar()
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
name: burnXUnit,
|
||||
nameTextStyle:{
|
||||
padding: [20, 0, 0, -40],
|
||||
verticalAlign: "top"
|
||||
},
|
||||
boundaryGap: false,
|
||||
axisLabel: {
|
||||
show: true,
|
||||
@@ -75,12 +89,19 @@ function initBurnChar()
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
name: burnYUnit,
|
||||
nameTextStyle:{
|
||||
padding: [0, 0, -40, -45]
|
||||
},
|
||||
axisLabel: {
|
||||
show: true,
|
||||
textStyle: {
|
||||
color: '#dee0e4'
|
||||
}
|
||||
},
|
||||
axisLine: {
|
||||
show: true
|
||||
},
|
||||
splitLine: {
|
||||
show: true,
|
||||
lineStyle:{
|
||||
|
||||
@@ -1552,7 +1552,7 @@ class story extends control
|
||||
if($story->parent > 0)
|
||||
{
|
||||
$this->story->updateParentStatus($story->id);
|
||||
$this->loadModel('action')->create('story', $task->parent, 'deleteChildrenStory', '', $storyID);
|
||||
$this->action->create('story', $story->parent, 'deleteChildrenStory', '', $storyID);
|
||||
}
|
||||
|
||||
$this->executeHooks($storyID);
|
||||
@@ -2200,8 +2200,8 @@ class story extends control
|
||||
*/
|
||||
public function batchChangeBranch($branchID, $confirm = '', $storyIdList = '', $storyType = 'story')
|
||||
{
|
||||
if(empty($_POST['storyIdList'])) return print(js::locate($this->session->storyList, 'parent'));
|
||||
$storyIdList = $this->post->storyIdList;
|
||||
if(empty($storyIdList) and empty($_POST['storyIdList'])) return print(js::locate($this->session->storyList, 'parent'));
|
||||
if(!empty($_POST['storyIdList'])) $storyIdList = $this->post->storyIdList;
|
||||
$plans = $this->loadModel('productplan')->getPlansByStories($storyIdList);
|
||||
if(empty($confirm))
|
||||
{
|
||||
@@ -2466,7 +2466,6 @@ class story extends control
|
||||
/* Get story, product, products, and queryID. */
|
||||
$story = $this->story->getById($storyID);
|
||||
$products = $this->product->getPairs('', 0, '', 'all');
|
||||
$queryID = 0;
|
||||
$product = $this->product->getByID($story->product);
|
||||
|
||||
/* Change for requirement story title. */
|
||||
|
||||
@@ -9,8 +9,6 @@
|
||||
* @version $Id: model.php 5149 2013-07-16 01:47:01Z zhujinyonging@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php
|
||||
class treeModel extends model
|
||||
{
|
||||
/**
|
||||
@@ -204,7 +202,7 @@ class treeModel extends model
|
||||
}
|
||||
|
||||
ksort($treeMenu);
|
||||
$topMenu = @array_shift($treeMenu);
|
||||
$topMenu = array_shift($treeMenu);
|
||||
$topMenu = explode("\n", trim((string)$topMenu));
|
||||
$lastMenu[] = '/';
|
||||
foreach($topMenu as $menu)
|
||||
@@ -348,7 +346,7 @@ class treeModel extends model
|
||||
}
|
||||
|
||||
ksort($treeMenu);
|
||||
$topMenu = @array_shift($treeMenu);
|
||||
$topMenu = array_shift($treeMenu);
|
||||
$topMenu = explode("\n", trim((string)$topMenu));
|
||||
foreach($topMenu as $menu)
|
||||
{
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 3.8 KiB |
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 268 KiB After Width: | Height: | Size: 268 KiB |
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user