diff --git a/module/task/css/activate.ui.css b/module/task/css/activate.ui.css
index 692dc9aa13..f8c1dea291 100644
--- a/module/task/css/activate.ui.css
+++ b/module/task/css/activate.ui.css
@@ -3,4 +3,5 @@
#teamForm tr td:first-child {width: 40px; position: relative;}
#teamForm tr td:first-child .icon{position:absolute; top: 40px; right: 19px;display: block; font-size: 8px; color: #9ea3bd;}
#teamForm tr:nth-last-child(1) td:first-child .icon {display: none;}
+#teamTable .form-label {left: auto; padding-left: 0; padding-right: 0;}
div.input-control-suffix {height: 2rem;}
diff --git a/module/task/js/activate.ui.js b/module/task/js/activate.ui.js
index 50eaba08a3..51ebc8ec99 100644
--- a/module/task/js/activate.ui.js
+++ b/module/task/js/activate.ui.js
@@ -211,3 +211,31 @@ window.clickSubmit = function()
$('#assignedTo').val('');
}
}
+
+window.renderRowData = function($row, index, row)
+{
+ $row.addClass('member member-' + (row ? row.status : 'wait'));
+ $row.data('estimate', row ? row.teamEstimate : 0);
+ $row.data('consumed', row ? row.teamConsumed : 0);
+ $row.data('left', row ? row.teamLeft : 0);
+
+ if(row && row.memberDisabled)
+ {
+ $row.find('[data-name=team]').find('.picker-box').on('inited', function(e, info)
+ {
+ const $team = info[0];
+ $team.render({disabled: true});
+ })
+ }
+ if(row && row.hourDisabled)
+ {
+ $row.find('[name^=teamEstimate]').attr('readonly', 'readonly');
+ $row.find('[name^=teamLeft]').attr('readonly', 'readonly');
+ }
+ if(row)
+ {
+ $row.find('[name^=teamConsumed]').attr('readonly', 'readonly');
+ }
+
+ if(taskMode == 'linear') $row.find('[data-name=id]').addClass('center').html("" + $row.find('[data-name=id]').text() + "");
+}
diff --git a/module/task/js/create.ui.js b/module/task/js/create.ui.js
index 8d972d24a3..e575d8e04d 100644
--- a/module/task/js/create.ui.js
+++ b/module/task/js/create.ui.js
@@ -607,3 +607,9 @@ window.changeTeamMember = function(e)
{
$(e.target).closest('td').next().toggleClass('required', $(e.target).val() != '');
}
+
+window.renderRowData = function($row, index, row)
+{
+ const mode = $('[name=mode]').val();
+ if(mode == 'linear') $row.find('[data-name=id]').addClass('center').html("" + $row.find('[data-name=id]').text() + "");
+}
diff --git a/module/task/js/edit.ui.js b/module/task/js/edit.ui.js
index 176a6eee75..163c591a15 100644
--- a/module/task/js/edit.ui.js
+++ b/module/task/js/edit.ui.js
@@ -110,7 +110,7 @@ window.loadAllModule = function()
*/
window.changeMode = function()
{
- let mode = $('[name=mode]').val();
+ const mode = $('[name=mode]').val();
if(mode != 'single')
{
if(mode != 'multi')
@@ -285,4 +285,11 @@ window.renderRowData = function($row, index, row)
$row.find('[name^=teamEstimate]').attr('readonly', 'readonly');
$row.find('[name^=teamLeft]').attr('readonly', 'readonly');
}
+ if(row)
+ {
+ $row.find('[name^=teamConsumed]').attr('readonly', 'readonly');
+ }
+
+ const mode = $('[name=mode]').val();
+ if(mode == 'linear') $row.find('[data-name=id]').addClass('center').html("" + $row.find('[data-name=id]').text() + "");
}
diff --git a/module/task/ui/activate.html.php b/module/task/ui/activate.html.php
index 7c6e3a8122..b705a95c5a 100644
--- a/module/task/ui/activate.html.php
+++ b/module/task/ui/activate.html.php
@@ -49,6 +49,18 @@ $memberItems = array();
foreach($members as $key => $value) $memberItems[] = array('text' => $value, 'value' => $key);
jsVar('memberItems', $memberItems);
+if(!empty($task->team))
+{
+ foreach($task->team as $member)
+ {
+ $member->memberDisabled = false;
+ if($member->status == 'done') $member->memberDisabled = true;
+
+ $member->hourDisabled = $memberDisabled;
+ if($task->mode == 'multi') $member->hourDisabled = false;
+ }
+}
+
/* zin: Set variables to define control for form. */
modalHeader();
$taskModeBox = '';
@@ -115,214 +127,6 @@ if($isMultiple)
);
}
-$rowCount = 0;
-if(!empty($task->team)) $rowCount = count($task->team) < 6 ? 6 : 1 + count($task->team);
-$teamForm = array();
-$i = 1;
-if(!empty($task->team))
-{
- foreach($task->team as $member)
- {
- $memberDisabled = false;
- if($member->status == 'done') $memberDisabled = true;
-
- $hourDisabled = $memberDisabled;
- if($task->mode == 'multi') $hourDisabled = false;
-
- $teamForm[] = h::tr
- (
- setClass("member member-{$member->status}"),
- set
- (
- array
- (
- 'estimate' => (float)$member->estimate,
- 'consumed' => (float)$member->consumed,
- 'left' => (float)$member->left
- )
- ),
- h::td
- (
- setClass('team-index'),
- set::width('32px'),
- span
- (
- setClass('team-number'),
- $i
- ),
- $task->mode == 'linear' ? icon("angle-down") : null
- ),
- h::td
- (
- set::width('240px'),
- picker
- (
- set::name('team[]'),
- set::value($member->account),
- set::items($members),
- set::placeholder($lang->task->assignedTo),
- set::disabled($memberDisabled)
- ),
- input
- (
- set::type('hidden'),
- set::name('teamSource[]'),
- set::value($member->account)
- ),
- $memberDisabled ? input(
- set::type('hidden'),
- set::name('team[]'),
- set::value($member->account)
- ) : null
- ),
- h::td
- (
- inputControl
- (
- input
- (
- set::name('teamEstimate[]'),
- set::value((float)$member->estimate),
- set::placeholder($lang->task->estimateAB),
- set::readonly($hourDisabled),
- ),
- to::suffix($lang->task->suffixHour),
- set::suffixWidth(20)
- )
- ),
- h::td
- (
- inputControl
- (
- input
- (
- set::name('teamConsumed[]'),
- set::value((float)$member->consumed),
- set::placeholder($lang->task->consumed),
- set::readonly($hourDisabled)
- ),
- to::suffix($lang->task->suffixHour),
- set::suffixWidth(20)
- )
- ),
- h::td
- (
- setClass('required'),
- inputControl
- (
- input
- (
- set::name('teamLeft[]'),
- set::value((float)$member->left),
- set::placeholder($lang->task->left),
- set::readonly($hourDisabled)
- ),
- to::suffix($lang->task->suffixHour),
- set::suffixWidth(20)
- )
- ),
- h::td
- (
- set::width('100px'),
- setClass('center'),
- btnGroup
- (
- set::items(array(
- array('icon' => 'plus', 'class' => 'btn ghost btn-add text-gray', 'disabled' => $memberDisabled ? 'disabled' : ''),
- array('icon' => 'trash', 'class' => 'btn ghost btn-delete text-gray', 'disabled' => $memberDisabled ? 'disabled' : '')
- ))
- )
- )
- );
- $i ++;
- }
-}
-
-for($i; $i <= $rowCount; $i ++)
-{
- $teamForm[] = h::tr
- (
- setClass('member-wait'),
- h::td
- (
- setClass('team-index'),
- span
- (
- setClass("team-number"),
- $i
- ),
- $task->mode == 'linear' ? icon("angle-down") : null
- ),
- h::td
- (
- set::width('240px'),
- picker
- (
- set::name('team[]'),
- set::items($members),
- set::placeholder($lang->task->assignedTo)
- ),
- input
- (
- set::type('hidden'),
- set::name('teamSource[]'),
- set::value('')
- )
- ),
- h::td
- (
- inputControl
- (
- input
- (
- set::name('teamEstimate[]'),
- set::placeholder($lang->task->estimateAB)
- ),
- to::suffix($lang->task->suffixHour),
- set::suffixWidth(20)
- )
- ),
- h::td
- (
- inputControl
- (
- input
- (
- set::name('teamConsumed[]'),
- set::placeholder($lang->task->consumed)
- ),
- to::suffix($lang->task->suffixHour),
- set::suffixWidth(20)
- )
- ),
- h::td
- (
- inputControl
- (
- input
- (
- set::name('teamLeft[]'),
- set::placeholder($lang->task->left)
- ),
- to::suffix($lang->task->suffixHour),
- set::suffixWidth(20)
- )
- ),
- h::td
- (
- set::width('100px'),
- setClass('center'),
- btnGroup
- (
- set::items(array(
- array('icon' => 'plus', 'class' => 'btn ghost btn-add text-gray'),
- array('icon' => 'trash', 'class' => 'btn ghost btn-delete text-gray')
- ))
- )
- )
- );
-}
-
/* ====== Define the page structure with zin widgets ====== */
formPanel
(
@@ -366,22 +170,77 @@ formPanel
setID('modalTeam'),
setData(array('backdrop' => false)),
set::title($lang->task->team),
- set::footerClass('flex-center'),
- to::footer
- (
- div(setClass('multi-append')),
- btn
- (
- setID('confirmButton'),
- setClass('primary btn-wide'),
- set::text($lang->confirm)
- )
- ),
- h::table
+ formBatch
(
+ set::tagName('div'),
setID('teamTable'),
- setClass('table table-form'),
- $teamForm
+ set::mode('add'),
+ !empty($task->team) ? set::data(array_values($task->team)) : null,
+ set::sortable(true),
+ set::size('sm'),
+ set::minRows(3),
+ set::onRenderRow(jsRaw('renderRowData')),
+ formBatchItem
+ (
+ set::name('id'),
+ set::width('32px'),
+ set::control('index')
+ ),
+ formBatchItem
+ (
+ set::name('team'),
+ set::label($lang->task->teamMember),
+ set::width('160px'),
+ set::control('picker'),
+ set::items($members)
+ ),
+ formBatchItem
+ (
+ set::name('estimateBox'),
+ set::label($lang->task->estimateAB),
+ set::width('135px'),
+ set::control('inputGroup'),
+ inputControl
+ (
+ input(set::name("teamEstimate")),
+ to::suffix($lang->task->suffixHour),
+ set::suffixWidth(20)
+ )
+ ),
+ !empty($task->team) ? formBatchItem
+ (
+ set::name('consumedBox'),
+ set::label($lang->task->consumedAB),
+ set::width('135px'),
+ set::control('inputGroup'),
+ inputControl
+ (
+ input(set::name("teamConsumed")),
+ to::suffix($lang->task->suffixHour),
+ set::suffixWidth(20)
+ )
+ ) : null,
+ !empty($task->team) ? formBatchItem
+ (
+ set::name('leftBox'),
+ set::label($lang->task->left),
+ set::width('135px'),
+ set::control('inputGroup'),
+ set::required(true),
+ inputControl
+ (
+ input(set::name("teamLeft")),
+ to::suffix($lang->task->suffixHour),
+ set::suffixWidth(20)
+ )
+ ) : null,
+ formBatchItem
+ (
+ set::name('teamSource'),
+ set::control('input'),
+ set::hidden(true)
+ ),
+ set::actions(array(array('text' => $lang->save, 'class' => 'primary team-saveBtn', 'id' => 'confirmButton')))
)
)
)
diff --git a/module/task/ui/create.html.php b/module/task/ui/create.html.php
index 30402dffc9..f72bb20109 100644
--- a/module/task/ui/create.html.php
+++ b/module/task/ui/create.html.php
@@ -87,10 +87,10 @@ formGridPanel
set::sortable(true),
set::size('sm'),
set::minRows(3),
+ set::onRenderRow(jsRaw('renderRowData')),
formBatchItem
(
set::name('id'),
- set::label($lang->idAB),
set::width('32px'),
set::control('index')
),
diff --git a/module/task/ui/edit.html.php b/module/task/ui/edit.html.php
index e1152fa6fc..0f6c23ba73 100644
--- a/module/task/ui/edit.html.php
+++ b/module/task/ui/edit.html.php
@@ -363,7 +363,6 @@ detailBody
formBatchItem
(
set::name('id'),
- set::label($lang->idAB),
set::width('32px'),
set::control('index')
),
@@ -396,7 +395,7 @@ detailBody
set::control('inputGroup'),
inputControl
(
- input(set::name("teamConsumed"), set::readonly(true)),
+ input(set::name("teamConsumed")),
to::suffix($lang->task->suffixHour),
set::suffixWidth(20)
)