Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into release/zentaopms_18.3

This commit is contained in:
tianshujie
2023-03-28 08:52:00 +08:00
26 changed files with 83 additions and 33 deletions
+11
View File
File diff suppressed because one or more lines are too long
+7 -7
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -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'))
{
+2
View File
@@ -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';
+2
View File
@@ -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;
+2
View File
@@ -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;
+2
View File
@@ -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;
+3
View File
@@ -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}");
+1
View File
@@ -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);
+1 -1
View File
@@ -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 : ''))
+1 -1
View File
@@ -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', ',')
+5 -1
View File
@@ -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>
+1
View File
@@ -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;
+1
View File
@@ -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')
+4 -2
View File
@@ -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;}
+6 -5
View File
@@ -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;}
+2 -2
View File
@@ -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);
+23 -2
View File
@@ -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:{
+3 -4
View File
@@ -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. */
+2 -4
View File
@@ -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.