diff --git a/lib/zin/wg/gantt/js/v1.js b/lib/zin/wg/gantt/js/v1.js index 624bcf66fa..496db8f4c1 100644 --- a/lib/zin/wg/gantt/js/v1.js +++ b/lib/zin/wg/gantt/js/v1.js @@ -243,12 +243,30 @@ function exitHandler() } } +/* 父级的开始结束跟着子级变动。 */ +function changeParentTask(child, id) +{ + let task = gantt.getTask(id); + if(task.type != 'task') return false; + + if(child.start_date < task.start_date) task.start_date = child.start_date; + if(child.end_date > task.end_date) task.end_date = child.end_date; + + let from = new Date(task.start_date); + let to = new Date(task.end_date); + task.begin = from; + task.deadline = (new Date(to.valueOf() - 1)); + + gantt.updateTask(task.id, task); + if(task.parent) changeParentTask(task, task.parent); +} + /* Validate task drag. */ function validateResources(id) { - let task = gantt.getTask(id); - let from = new Date(task.start_date); - let to = new Date(task.end_date); + let task = gantt.getTask(id); + let from = new Date(task.start_date); + let to = new Date(task.end_date); let status = task.status; let type = task.type; let statusLang = ganttLang.taskStatusList['wait']; @@ -266,9 +284,8 @@ function validateResources(id) } task.begin = from; - task.deadline = (new Date(to.valueOf() - 1));; + task.deadline = (new Date(to.valueOf() - 1)); - gantt.updateTask(task.id); let itemID; if(type == 'task') itemID = task.id.split("-")[1]; if(type == 'plan') itemID = task.id; @@ -294,6 +311,11 @@ function validateResources(id) zui.Messager.show({content: response.message, type: 'danger-outline', icon: 'exclamation-sign'}); flag = false; } + else + { + gantt.updateTask(task.id, task); + if(task.parent) changeParentTask(task, task.parent); + } } }); @@ -415,7 +437,6 @@ function initGantt() gantt.config.static_background = true; gantt.config.show_task_cells = false; gantt.config.row_height = 32; - gantt.config.min_column_width = 40; gantt.config.details_on_create = false; gantt.config.duration_unit = "day"; setScalesByZoom(zooming); @@ -665,7 +686,7 @@ function initGantt() }); /* Link attachEvent onAfterTaskDrag */ - gantt.attachEvent("onBeforeTaskChanged", function(id, mode, task){return validateResources(id)}); + gantt.attachEvent("onBeforeTaskChanged", function(id, mode, task){return validateResources(id);}); gantt.attachEvent("onRowDragStart", function(id, target, e) { diff --git a/module/programplan/tao.php b/module/programplan/tao.php index abec6aee24..95488bf033 100644 --- a/module/programplan/tao.php +++ b/module/programplan/tao.php @@ -664,7 +664,7 @@ class programplanTao extends programplanModel $data->progress = $plan->progress / 100; $data->taskProgress = $plan->progress . '%'; - if($data->endDate > $data->start_date) $data->duration = $this->getDuration($data->start_date, $data->endDate); + if($data->endDate > $data->start_date) $data->duration = helper::diffDate($data->endDate, $data->start_date) + 1; if(empty($data->start_date) || empty($data->endDate)) $data->duration = 1; if(!empty($this->config->setPercent)) $data->percent = $plan->percent; @@ -805,7 +805,7 @@ class programplanTao extends programplanModel $data->textColor = zget($this->lang->execution->gantt->textColor, $task->pri, $this->lang->execution->gantt->defaultTextColor); $data->bar_height = $this->lang->execution->gantt->bar_height; - if($data->endDate > $data->start_date) $data->duration = $this->getDuration($data->start_date, $data->endDate); + if($data->endDate > $data->start_date) $data->duration = helper::diffDate($data->endDate, $data->start_date) + 1; if(empty($data->start_date) or empty($data->endDate)) $data->duration = 1; if($data->start_date) $data->start_date = date('d-m-Y', strtotime($data->start_date)); diff --git a/module/task/model.php b/module/task/model.php index c754db98b0..ac9fb0d6d9 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -3231,13 +3231,19 @@ class taskModel extends model { $this->app->loadLang('project'); - $changeTable = $postData->type == 'task' ? TABLE_TASK : TABLE_PROJECT; - $actionType = $postData->type == 'task' ? 'task' : 'execution'; - $oldObject = $this->dao->select('*')->from($changeTable)->where('id')->eq($postData->id)->fetch(); + $postData->endDate = date('Y-m-d', strtotime('-1 day', strtotime($postData->endDate))); + $changeTable = $postData->type == 'task' ? TABLE_TASK : TABLE_PROJECT; + $actionType = $postData->type == 'task' ? 'task' : 'execution'; + $oldObject = $this->dao->select('*')->from($changeTable)->where('id')->eq($postData->id)->fetch(); if($postData->type == 'task') { - $this->taskTao->updateTaskEsDateByGantt($postData); + $oldObject->estStarted = $postData->startDate; + $oldObject->deadline = $postData->endDate; + unset($oldObject->canceledDate); + unset($oldObject->finishedDate); + unset($oldObject->closedDate); + $this->loadModel('task')->update($oldObject); } elseif($postData->type == 'plan') {