* Finish task #99082.

This commit is contained in:
sunguangming
2023-08-01 09:33:27 +08:00
parent b51f9666ba
commit 295d86aabe
7 changed files with 506 additions and 4 deletions
+1 -1
View File
@@ -240,7 +240,7 @@ class deptModel extends model
*/
public function createManageProjectAdminLink($dept, $groupID)
{
return html::a(helper::createLink('group', 'manageProjectAdmin', "groupID=$groupID&deptID={$dept->id}"), $dept->name, '_self', "id='dept{$dept->id}'");
return helper::createLink('group', 'manageProjectAdmin', "groupID=$groupID&deptID={$dept->id}");
}
/**
-1
View File
@@ -58,7 +58,6 @@ $config->group->actionList['manageProjectAdmin']['icon'] = 'persons';
$config->group->actionList['manageProjectAdmin']['text'] = $lang->group->manageProjectAdmin;
$config->group->actionList['manageProjectAdmin']['hint'] = $lang->group->manageProjectAdmin;
$config->group->actionList['manageProjectAdmin']['url'] = helper::createLink('group', 'manageProjectAdmin', 'groupID={id}');
$config->group->actionList['manageProjectAdmin']['data-toggle'] = 'modal';
$config->group->actionList['manageMember']['icon'] = 'persons';
$config->group->actionList['manageMember']['text'] = $lang->group->manageMember;
+1 -1
View File
@@ -424,7 +424,7 @@ class group extends control
if(!empty($_POST))
{
$this->group->updateProjectAdmin($groupID);
return print(js::locate(inlink('manageProjectAdmin', "group=$groupID"), 'parent'));
return print($this->sendSuccess(array('load' => true)));
}
list($programs, $projects, $products, $executions) = $this->group->getObject4AdminGroup();
@@ -0,0 +1,3 @@
.text-center th {text-align: center;}
.text-center div {justify-content: center;}
.projectTd .input-group-addon, .productTd .input-group-addon, .executionTd .input-group-addon {padding: 0px 14px}
+87
View File
@@ -0,0 +1,87 @@
function addItem(e)
{
let maxNum = 0;
$(e.target).closest('table').find("tr[class^='line']").each(function()
{
let trname = $(this).attr('class');
let index = trname.match(/\d+/g);
index = parseInt(index);
maxNum = index > maxNum ? index : maxNum;
})
maxNum = parseInt(maxNum);
maxNum += 1;
let className = $(e.target).closest('tr').attr('class');
let lastTr = $('table tr.' + className).last();
$($('table tr.' + className).get().reverse()).each(function()
{
let $newRow = $(this).clone();
$newRow.attr('class', className.replace(/\d+/g, maxNum));
$newRow.find("input[type='checkbox']").each(function()
{
let name = $(this).attr('name');
let id = $(this).attr('id');
$(this).prop('name', name.replace(/\d+/g, maxNum));
$(this).prop('id', id.replace(/\d+/g, maxNum));
$(this).prop('checked', false);
})
let optionArr = [];
$newRow.find('select').each(function()
{
let name = $(this).attr('name');
let options = zui.Picker.query(`[name='${name}']`).options;
let newName = name.replace(/\d+/g, maxNum);
let newID = newName.replace(/\[|\]/g, '');
options.name = newName;
options.defaultValue = '';
optionArr[newID] = options;
$(this).closest('td').find('div[data-zui-picker]').parent().append(`<div id='${newID}' style='width: 100%'></div>`);
$(this).closest('td').find('div[data-zui-picker]').remove();
});
/* Append btn-delete. */
$newRow.find('.btn-group .btn').length == 1 ? $newRow.find('.btn-group').append('<button class="btn ghost btn-delete square" type="button"><i class="icon icon-trash"></i></button>') : '';
$(lastTr).after($newRow);
for(let key in optionArr)
{
let options = optionArr[key];
let newID = key;
new zui.Picker(`#${newID}`, options);
$(`#${newID}`).zui('picker').render({disabled: false});
}
})
}
function deleteItem(e)
{
let currentClass = $(e.target).closest('tr').attr('class');
$(e.target).closest('table').find('tr.' + currentClass).remove();
}
function toggleDisabled(e)
{
let name = e.target.name;
let checked = e.target.checked;
let $picker = $(e.target).closest('tr').find('.input-group select').zui('picker');
if(checked)
{
$picker.render({disabled: true});
}
else
{
$picker.render({disabled: false});
}
}
+1 -1
View File
@@ -703,7 +703,7 @@ class groupModel extends model
}
}
if($executionAll[$lineID] or $projectAll[$lineID]) $products[$lineID] = array_merge($products[$lineID], $shadowProductIDList);
if(isset($executionAll[$lineID]) or isset($projectAll[$lineID])) $products[$lineID] = array_merge($products[$lineID], $shadowProductIDList);
if(empty($accounts)) continue;
foreach($accounts as $account)
+413
View File
@@ -0,0 +1,413 @@
<?php
declare(strict_types=1);
/**
* The manage project admin view file of group module of ZenTaoPMS.
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
* @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
* @author Sun Guangming<sunguangming@easycorp.ltd>
* @package group
* @link https://www.zentao.net
*/
namespace zin;
sidebar
(
moduleMenu(set(array(
'modules' => $deptTree,
'activeKey' => $deptID,
'closeLink' => $this->createLink('group', 'manageProjectAdmin', "groupID={$groupID}"),
'showDisplay' => false,
)))
);
$tbody = array();
$hiddenProgram = in_array($config->systemMode, array('ALM', 'PLM')) ? '' : 'hidden';
$rowspan = in_array($config->systemMode, array('ALM', 'PLM')) ? 4 : 3;
if($projectAdmins)
{
$i = 1;
foreach($projectAdmins as $account => $group)
{
$tbody[] = h::tr
(
setClass("line{$group->group}"),
h::td
(
set::rowspan($rowspan),
picker
(
set::name("members[$group->group][]"),
set::items($allUsers),
set::value($account),
set::multiple(true),
)
),
h::td
(
setClass($hiddenProgram),
inputGroup
(
$lang->group->manageProgram,
picker
(
set::disabled($group->programs == 'all'),
set::name("program[$group->group][]"),
set::items($programs),
set::value($group->programs == 'all' ? '' : $group->programs),
set::multiple(true),
)
)
),
h::td
(
setClass("$hiddenProgram text-center"),
checkbox
(
set::name("programAll[$group->group]"),
set::items(array(1 => '')),
set::checked($group->programs == 'all'),
)
),
$hiddenProgram ? h::td
(
setClass('projectTd'),
inputGroup
(
$lang->group->manageProject,
picker
(
set::disabled($group->projects == 'all'),
set::name("project[$group->group][]"),
set::items($projects),
set::checked($group->projects == 'all'),
set::multiple(true),
)
)
) : null,
$hiddenProgram ? h::td
(
setClass('text-center'),
checkbox
(
set::name("projectAll[$group->group]"),
set::items(array(1 => '')),
set::checked($group->projects == 'all'),
)
) : null,
h::td
(
setClass('text-center'),
set::rowspan($rowspan),
btnGroup
(
$i > 1 ? set::items
(
array
(
array('icon' => 'plus', 'class' => 'btn ghost btn-add'),
array('icon' => 'trash', 'class' => 'btn ghost btn-delete')
)
)
:
set::items(array(array('icon' => 'plus', 'class' => 'btn ghost btn-add'))),
)
)
);
if(empty($hiddenProgram))
{
$tbody[] = h::tr
(
setClass("line{$group->group}"),
h::td
(
setClass('projectTd'),
inputGroup
(
$lang->group->manageProject,
picker
(
set::disabled($group->projects == 'all'),
set::name("project[$group->group][]"),
set::value($group->projects == 'all' ? '' : $group->projects),
set::items($projects),
set::multiple(true),
)
)
),
h::td
(
setClass('text-center'),
checkbox
(
set::name("projectAll[$group->group]"),
set::items(array(1 => '')),
set::checked($group->projects == 'all'),
)
),
);
}
$tbody[] = h::tr
(
setClass("line{$group->group}"),
h::td
(
setClass('productTd'),
inputGroup
(
$lang->group->manageProduct,
picker
(
set::disabled($group->products == 'all'),
set::name("product[$group->group][]"),
set::items($products),
set::value($group->products == 'all' ? '' : $group->products),
set::multiple(true),
)
)
),
h::td
(
setClass('text-center'),
checkbox
(
set::name("productAll[$group->group]"),
set::items(array(1 => '')),
set::checked($group->products == 'all'),
)
),
);
$tbody[] = h::tr
(
setClass("line{$group->group}"),
h::td
(
setClass('executionTd'),
inputGroup
(
$lang->group->manageExecution,
picker
(
set::disabled($group->executions == 'all'),
set::name("execution[$group->group][]"),
set::value($group->executions == 'all' ? '' : $group->executions),
set::items($executions),
set::multiple(true),
)
)
),
h::td
(
setClass('text-center'),
checkbox
(
set::name("executionAll[$group->group]]"),
set::items(array(1 => '')),
set::checked($group->executions == 'all'),
)
),
);
$i ++;
}
}
else
{
$tbody[] = h::tr
(
setClass('line1'),
h::td
(
set::rowspan($rowspan),
picker
(
set::name('members[1][]'),
set::items($allUsers),
set::multiple(true),
)
),
h::td
(
setClass($hiddenProgram),
inputGroup
(
$lang->group->manageProgram,
picker
(
set::name('program[1][]'),
set::items($programs),
set::multiple(true),
)
)
),
h::td
(
setClass("$hiddenProgram text-center"),
checkbox
(
set::name('programAll[1]'),
set::items(array(1 => '')),
)
),
$hiddenProgram ? h::td
(
setClass('projectTd'),
inputGroup
(
$lang->group->manageProject,
picker
(
set::name('project[1][]'),
set::items($projects),
set::multiple(true),
)
)
) : null,
$hiddenProgram ? h::td
(
setClass('text-center'),
checkbox
(
set::name('projectAll[1]'),
set::items(array(1 => '')),
)
) : null,
h::td
(
setClass('text-center'),
set::rowspan($rowspan),
btnGroup
(
set::items(array(array('icon' => 'plus', 'class' => 'btn ghost btn-add')))
)
)
);
if(empty($hiddenProgram))
{
$tbody[] = h::tr
(
setClass('line1'),
h::td
(
setClass('projectTd'),
inputGroup
(
$lang->group->manageProject,
picker
(
set::name('project[1][]'),
set::items($projects),
set::multiple(true),
)
)
),
h::td
(
setClass('text-center'),
checkbox
(
set::name('projectAll[1]'),
set::items(array(1 => '')),
)
),
);
}
$tbody[] = h::tr
(
setClass('line1'),
h::td
(
setClass('productTd'),
inputGroup
(
$lang->group->manageProduct,
picker
(
set::name('product[1][]'),
set::items($products),
set::multiple(true),
)
)
),
h::td
(
setClass('text-center'),
checkbox
(
set::name('productAll[1]'),
set::items(array(1 => '')),
)
),
);
$tbody[] = h::tr
(
setClass('line1'),
h::td
(
setClass('executionTd'),
inputGroup
(
$lang->group->manageExecution,
picker
(
set::name('execution[1][]'),
set::items($executions),
set::multiple(true),
)
)
),
h::td
(
setClass('text-center'),
checkbox
(
set::name('executionAll[1]'),
set::items(array(1 => '')),
)
),
);
}
panel
(
form
(
on::click('.btn-add', 'addItem'),
on::click('.btn-delete', 'deleteItem'),
on::change('[name^=programAll]', 'toggleDisabled'),
on::change('[name^=productAll]', 'toggleDisabled'),
on::change('[name^=projectAll]', 'toggleDisabled'),
on::change('[name^=executionAll]', 'toggleDisabled'),
h::table
(
setClass('table condensed bordered'),
h::tr
(
setClass('text-center'),
h::th
(
width('220px'),
$lang->group->inside
),
h::th($lang->group->object),
h::th
(
width('100px'),
$lang->group->allCheck
),
h::th
(
width('120px'),
$lang->actions
),
),
$tbody
)
)
);