Merge branch 'sprint/177_zhengruyu_' into 'kanban'

*Finish task.*Finish task.*Finish task.*Finish task.*Finish task.*Finish...

See merge request easycorp/zentaopms!978
This commit is contained in:
孙广明
2021-12-17 01:17:13 +00:00
3 changed files with 56 additions and 41 deletions
+7
View File
@@ -65,6 +65,13 @@ body {background-color: #fff}
.region .kanban-item > .kanban-card > .info > .estimate{margin-left: 10px; color: #999}
.region .kanban-item > .kanban-card > .info > .time {margin-left: 10px; font-size: 12px; background: rgb(242, 242, 242)}
.region .kanban-item > .kanban-card > .info > .user {position: absolute; right: 0; top: 0}
.region .kanban-item > .kanban-card > .info > .user > .avatar {display: inline-block; width: 24px; height: 24px; line-height: 24px; margin-right: 0px;}
.region .kanban-item > .kanban-card > .info > .user > span {display: inline-block; color: transparent; width: 2px; height: 2px; background-color: #8990a2; position: sticky; border-radius: 50%; top: 3px; margin: 0 7px;}
.region .kanban-item > .kanban-card > .info > .user > span:before,
.region .kanban-item > .kanban-card > .info > .user > span:after {content: ''; display: block; position: absolute; width: 2px; height: 2px; background-color: #8990a2; top: 0; border-radius: 50%}
.region .kanban-item > .kanban-card > .info > .user > span:before {left: -4px;}
.region .kanban-item > .kanban-card > .info > .user > span:after {right: -4px;}
.region .kanban-item > .kanban-card > .info > .user > div {display: inline-block; height: 24px; position: sticky; border-radius: 50%; top: 3px; margin: 5px;}
.region .kanban-item > .kanban-card > .actions > a {display: block; float: left; width: 20px; height: 20px; line-height: 20px; text-align: center; border-radius: 4px; opacity: .7;}
.region .kanban-item > .kanban-card > .actions > a:hover {background-color: rgba(0,0,0,.075); opacity: 1;}
.region .kanban-item:hover > .actions {opacity: 1;}
+48 -41
View File
@@ -189,6 +189,48 @@ function renderLaneName($lane, lane, $kanban, columns, kanban)
}
}
/**
* Render avatars of user.
* @param {String|{account: string, avatar: string}} user User account or user object
* @returns {string}
*/
function renderUsersAvatar(users, itemID, size)
{
var avatarSizeClass = 'avatar-' + (size || 'sm');
var link = createLink('kanban', 'assigncard', 'id=' + itemID, '', true);
if(users.length == 0 || (users.length == 1 && users[0] == ''))
{
return $('<a class="avatar has-text ' + avatarSizeClass + ' avatar-circle iframe" title="' + noAssigned + '" style="background: #ccc" href="' + link + '"><i class="icon icon-person"></i></a>');
}
var assignees = [];
for(var user of users)
{
var $noPrivAndNoAssigned = $('<div class="avatar has-text ' + avatarSizeClass + ' avatar-circle" title="' + noAssigned + '" style="background: #ccc"><i class="icon icon-person"></i></div>');
if(!priv.canAssignCard && !user)
{
assignees.push($noPrivAndNoAssigned);
continue;
}
if(!user)
{
assignees.push($('<a class="avatar has-text ' + avatarSizeClass + ' avatar-circle iframe" title="' + noAssigned + '" style="background: #ccc" href="' + link + '"><i class="icon icon-person"></i></a>'));
continue;
}
if(typeof user === 'string') user = {account: user};
if(!user.avatar && window.userList && window.userList[user.account]) user = window.userList[user.account];
assignees.push($('<a class="avatar has-text ' + avatarSizeClass + ' avatar-circle iframe" href="' + link + '"/>').avatar({user: user}));
}
if(assignees.length > 4) assignees.splice(3, assignees.length - 4, '<span>...</span>');
assignees.push('<div>' + kanbanLang.teamSumCount.replace('%s', assignees.length) + '</div>');
return assignees;
}
/**
* The function for rendering kanban item
*/
@@ -239,9 +281,9 @@ function renderKanbanItem(item, $item)
var $time = $info.children('.time');
if(item.end && item.end !== '0000-00-00')
{
var end = $.zui.createDate(item.end);
var today = new Date();
var isExpired = end.getTime() < today.getTime();
var end = $.zui.createDate(item.end);
var today = new Date();
var isExpired = end.getTime() < today.getTime();
var dateFormat = (today.getFullYear() === end.getFullYear() ? 'MM-dd ' : 'yyyy-MM-dd ') + kanbancardLang.deadlineAB;
$time.text($.zui.formatDate(end, dateFormat))
.toggleClass('text-red', isExpired)
@@ -252,45 +294,10 @@ function renderKanbanItem(item, $item)
$time.hide();
}
/* Display avatars of assignedTo. */
var assignedTo = item.assignedTo.split(',');
var $user = $info.children('.user');
if(item.assignedTo)
{
var assignedTo = item.assignedTo.split(',');
if(assignedTo.length != 0)
{
for(var index = 0; index < assignedTo.length; index ++)
{
var user = assignedTo[index];
if(typeof user === 'string') user = {account: user};
if(!user.avatar && window.userList && window.userList[user.account]) user = window.userList[user.account];
var $avatar = $(
priv.canAssignCard ? '<a class="avatar avatar-sm avatar-user avatar-circle iframe"></a>'
: '<div class="avatar avatar-sm avatar-user avatar-circle"></div>'
).attr('data-name', user.realname || user.account)
.attr('data-id', user.id || user.account);
if(user.avatar)
{
$avatar.append('<img src="' + user.avatar + '" />');
}
if(priv.canAssignCard)
{
$avatar.attr('href', createLink('kanban', 'assignCard', 'id=' + item.id, '', 1));
}
$user.empty()
.append($avatar)
.attr('title', user.realname || user.account)
.show();
}
}
}
else
{
$user.hide();
}
$user.html(renderUsersAvatar(assignedTo, item.id));
$item.css('background-color', item.color);
$item.toggleClass('has-color', item.color != '#FFFFFF');
+1
View File
@@ -13,6 +13,7 @@ js::set('kanbancardLang', $lang->kanbancard);
js::set('kanbanID', $kanban->id);
js::set('laneCount', $laneCount);
js::set('userList', $userList);
js::set('noAssigned', $lang->kanbancard->noAssigned);
js::set('priv',
array(