diff --git a/module/programplan/js/create.ui.js b/module/programplan/js/create.ui.js index 5d783acbca..8f6187c3a1 100644 --- a/module/programplan/js/create.ui.js +++ b/module/programplan/js/create.ui.js @@ -154,7 +154,7 @@ window.handleRenderRow = function($row, index, data) if((data != undefined && data.type != undefined && data.type != 'stage') || ($currentType.length && $currentType.val() != 'stage')) { $row.find('input[data-name="percent"]').prop('disabled', true); - $row.find('[data-name="ACTIONS"]').find('[data-type="addSub"]').addClass('disabled').prop('disabled', true); + $row.find('[data-name="ACTIONS"]').find('[data-type="addSub"]').prop('disabled', true).attr('title', addSubTip); } $row.find('[data-name="type"]').find('.picker-box').on('inited', function(e, info) @@ -211,8 +211,8 @@ window.handleRenderRow = function($row, index, data) { if(planID == 0 && level == 0) { - $row.find('[data-name="ACTIONS"]').find('[data-type="sort"]').addClass('disabled').prop('disabled', true); - $row.find('[data-name="ACTIONS"]').find('[data-type="addSibling"]').addClass('disabled').prop('disabled', true); + $row.find('[data-name="ACTIONS"]').find('[data-type="sort"]').prop('disabled', true).attr('title', sortableTip); + $row.find('[data-name="ACTIONS"]').find('[data-type="addSibling"]').prop('disabled', true).attr('title', addSiblingTip); } $row.find('[data-name="attribute"]').find('.picker-box').on('inited', function(e, info){ info[0].render({disabled: true}); }); @@ -414,7 +414,7 @@ window.changeType = function(obj) const $target = $(obj); let $row = $target.closest('tr'); $row.find('input[data-name="percent"]').prop('disabled', type != 'stage'); - $row.find('[data-name="ACTIONS"]').find('[data-type="addSub"]').toggleClass('disabled', type != 'stage').prop('disabled', type != 'stage'); + $row.find('[data-name="ACTIONS"]').find('[data-type="addSub"]').prop('disabled', type != 'stage').attr('title', type != 'stage' ? addSubTip : ''); let $nextRow = $row.next(); let level = $row.attr('data-level'); @@ -443,7 +443,7 @@ window.changeType = function(obj) if($nextRow.attr('data-level') != level) return; //只修改同级的管理方法。 $nextRow.find('input[data-name="percent"]').prop('disabled', type != 'stage'); - $nextRow.find('[data-name="ACTIONS"]').find('[data-type="addSub"]').toggleClass('disabled', type != 'stage').prop('disabled', type != 'stage'); + $nextRow.find('[data-name="ACTIONS"]').find('[data-type="addSub"]').prop('disabled', type != 'stage').attr('title', type != 'stage' ? addSubTip : ''); let $nextTypePicker = $nextRow.find('.picker-box[data-name=type]').zui('picker'); if($nextTypePicker == undefined) return; diff --git a/module/programplan/lang/de.php b/module/programplan/lang/de.php index 464c22e7a0..de5cb4a411 100644 --- a/module/programplan/lang/de.php +++ b/module/programplan/lang/de.php @@ -116,6 +116,8 @@ $lang->programplan->confirmDelete = 'Do you want to delete the current plan? $lang->programplan->confirmChangeAttr = 'The type of the sub-stage will be adjusted to "%s" synchronously according to the type of the parent stage after modification. Do you want to save?'; $lang->programplan->noticeChangeAttr = 'The type of the sub-stage will be adjusted to "%s" synchronously according to the type of the parent stage after modification'; $lang->programplan->workloadTips = 'The proportion of the sub stage workload is divided by 100%.'; +$lang->programplan->attributeTip = 'Except for the comprehensive type, the sub-stage type is consistent with the parent stage type.'; +$lang->programplan->addSubTip = 'Kanban/Iteration cannot be split.'; $lang->programplan->stageCustom['date'] = 'Show Date'; $lang->programplan->stageCustom['task'] = 'Show Task'; diff --git a/module/programplan/lang/en.php b/module/programplan/lang/en.php index 09ef59d4fe..185f8d4701 100644 --- a/module/programplan/lang/en.php +++ b/module/programplan/lang/en.php @@ -116,6 +116,8 @@ $lang->programplan->confirmDelete = 'Do you want to delete the current plan? $lang->programplan->confirmChangeAttr = 'The type of the sub-stage will be adjusted to "%s" synchronously according to the type of the parent stage after modification. Do you want to save?'; $lang->programplan->noticeChangeAttr = 'The type of the sub-stage will be adjusted to "%s" synchronously according to the type of the parent stage after modification.'; $lang->programplan->workloadTips = 'The workload of the sub stage is divided by 100%.'; +$lang->programplan->attributeTip = 'Except for the comprehensive type, the sub-stage type is consistent with the parent stage type.'; +$lang->programplan->addSubTip = 'Kanban/Iteration cannot be split.'; $lang->programplan->stageCustom['date'] = 'Show Date'; $lang->programplan->stageCustom['task'] = 'Show Task'; diff --git a/module/programplan/lang/fr.php b/module/programplan/lang/fr.php index 9ce00e7591..de40fd2ed2 100644 --- a/module/programplan/lang/fr.php +++ b/module/programplan/lang/fr.php @@ -116,6 +116,8 @@ $lang->programplan->confirmDelete = 'Do you want to delete the current plan? $lang->programplan->confirmChangeAttr = 'The type of the sub-stage will be adjusted to "%s" synchronously according to the type of the parent stage after modification. Do you want to save?'; $lang->programplan->noticeChangeAttr = 'The type of the sub-stage will be adjusted to "%s" synchronously according to the type of the parent stage after modification.'; $lang->programplan->workloadTips = 'The proportion of the sub stage workload is divided by 100%.'; +$lang->programplan->attributeTip = 'Except for the comprehensive type, the sub-stage type is consistent with the parent stage type.'; +$lang->programplan->addSubTip = 'Kanban/Iteration cannot be split.'; $lang->programplan->stageCustom['date'] = 'Show Date'; $lang->programplan->stageCustom['task'] = 'Show Task'; diff --git a/module/programplan/lang/zh-cn.php b/module/programplan/lang/zh-cn.php index db29dcdfdf..3c68544cb8 100644 --- a/module/programplan/lang/zh-cn.php +++ b/module/programplan/lang/zh-cn.php @@ -116,6 +116,8 @@ $lang->programplan->confirmDelete = '确定要删除当前计划吗?'; $lang->programplan->confirmChangeAttr = '修改后子阶段的类型将根据父阶段类型同步调整为“%s”,是否保存?'; $lang->programplan->noticeChangeAttr = '修改后子阶段的类型将根据父阶段类型同步调整为“%s”'; $lang->programplan->workloadTips = '子阶段工作量占比按百分百的比例进行拆分'; +$lang->programplan->attributeTip = '除综合类型外,子阶段与父阶段类型保持一致'; +$lang->programplan->addSubTip = '迭代/看板下不能细分'; $lang->programplan->stageCustom['date'] = '显示日期'; $lang->programplan->stageCustom['task'] = '显示任务'; diff --git a/module/programplan/ui/create.html.php b/module/programplan/ui/create.html.php index 4dc7d578c9..c20b3555c8 100644 --- a/module/programplan/ui/create.html.php +++ b/module/programplan/ui/create.html.php @@ -137,9 +137,37 @@ $fnGenerateFields = function() use ($lang, $requiredFields, $showFields, $fields $field['hidden'] = false; $field['items'] = $lang->execution->typeList; } + + if($name == 'attribute' && in_array($project->model, array('waterfall', 'waterfallplus'))) + { + $field['tipIcon'] = 'help'; + $field['tip'] = $lang->programplan->attributeTip; + $field['tipProps'] = array + ( + 'id' => 'tooltipHover', + 'data-toggle' => 'tooltip', + 'data-placement' => 'right', + 'data-type' => 'white', + 'data-class-name' => 'text-gray border border-gray-300' + ); + } + if($name == 'milestone') $field['width'] = '100px'; if($name == 'enabled') $field['width'] = '80px'; - if($name == 'point') $field['width'] = '200px'; + if($name == 'point') + { + $field['width'] = '200px'; + $field['tipIcon'] = 'help'; + $field['tip'] = $lang->programplan->pointTip; + $field['tipProps'] = array + ( + 'id' => 'tooltipHover', + 'data-toggle' => 'tooltip', + 'data-placement' => 'right', + 'data-type' => 'white', + 'data-class-name' => 'text-gray border border-gray-300' + ); + } $items[] = $field; } @@ -233,6 +261,9 @@ jsVar('ipdStagePoint', $project->model == 'ipd' ? $config->review->ipdReviewP jsVar('attributeList', $project->model == 'ipd' ? $lang->stage->ipdTypeList : $lang->stage->typeList); jsVar('reviewedPoints', $project->model == 'ipd' ? $reviewedPoints : array()); jsVar('reviewedPointTip', $project->model == 'ipd' ? $lang->programplan->reviewedPointTip : ''); +jsVar('addSubTip', $lang->programplan->addSubTip); +jsVar('addSiblingTip', $lang->programplan->addSiblingTip); +jsVar('sortableTip', $lang->programplan->sortableTip); featureBar(li (