From c969e7216dc533100b8749adfe52ec1db9c3dd5a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 13 Jun 2023 15:45:47 +0800 Subject: [PATCH] * Rewrite user task page. --- module/user/config.php | 4 ++- module/user/css/common.ui.css | 2 ++ module/user/js/common.ui.js | 2 +- module/user/js/task.ui.js | 32 +++++++++++++++++++ module/user/model.php | 1 + module/user/ui/task.html.php | 59 +++++++++++++++++++++++++++++++++++ module/user/ui/todo.html.php | 2 ++ 7 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 module/user/css/common.ui.css create mode 100644 module/user/js/task.ui.js create mode 100644 module/user/ui/task.html.php diff --git a/module/user/config.php b/module/user/config.php index 74d88e9ae7..b1836fe594 100644 --- a/module/user/config.php +++ b/module/user/config.php @@ -22,4 +22,6 @@ $config->user->resetPasswordTimeout = 3; /* User detail fields for API against JIHU GitLab. */ $config->user->detailFields = 'id,account,realname,avatar'; -$config->user->defaultFields['todo'] = array('id', 'name', 'pri', 'date', 'status', 'type', 'begin', 'end'); +$config->user->defaultFields['todo'] = array('id', 'name', 'pri', 'date', 'status', 'type', 'begin', 'end'); +$config->user->defaultFields['task'] = array('id', 'name', 'pri', 'status', 'execution', 'deadline', 'estimate', 'consumed', 'left'); +$config->user->defaultFields['story'] = array('id', 'title', 'pri', 'status', 'product', 'plan', 'openedBy', 'estimate', 'stage'); diff --git a/module/user/css/common.ui.css b/module/user/css/common.ui.css new file mode 100644 index 0000000000..48dd05e085 --- /dev/null +++ b/module/user/css/common.ui.css @@ -0,0 +1,2 @@ +.panel.list .panel-heading {padding-left :0px;} +.panel.list .panel-body {padding :0px;} diff --git a/module/user/js/common.ui.js b/module/user/js/common.ui.js index 5d6db645c3..e916ef05ef 100644 --- a/module/user/js/common.ui.js +++ b/module/user/js/common.ui.js @@ -6,4 +6,4 @@ window.switchAccount = function(account) if(method == 'story') link = $.createLink('user', method, 'account=' + account + '&storyType=' + pageParams.storyType); loadPage(link); -} +}; diff --git a/module/user/js/task.ui.js b/module/user/js/task.ui.js new file mode 100644 index 0000000000..9d8844e4da --- /dev/null +++ b/module/user/js/task.ui.js @@ -0,0 +1,32 @@ +window.renderCell = function(result, info) +{ + const task = info.row.data; + if(info.col.name == 'name' && result) + { + let html = ''; + if(task.team) html += "" + multipleAB + ""; + if(task.parent) html += "" + childrenAB + ""; + if(html) result.unshift({html}); + } + if(info.col.name == 'status' && result) return [task.statusLabel]; + if(info.col.name == 'deadline' && result[0]) + { + if(result[0] == '0000-00-00') return ['']; + + const delay = typeof(task.delay) != 'undefined' ? 'delay' : ''; + const today = zui.formatDate(zui.createDate(), 'yyyy-MM-dd'); + const yesterday = zui.formatDate(convertStringToDate(today) - 24 * 60 * 60 * 1000, 'yyyy-MM-dd'); + if(result[0] == today) result[0] = {'html': '' + todayLabel + ''}; + if(result[0] == yesterday) result[0] = {'html': '' + yesterdayLabel + ''}; + if(result[0] < yesterday) result[0] = {'html': '' + result + ''}; + } + return result; +}; + +function convertStringToDate(dateString) +{ + dateString = dateString.split('-'); + dateString = dateString[1] + '/' + dateString[2] + '/' + dateString[0]; + + return Date.parse(dateString); +} diff --git a/module/user/model.php b/module/user/model.php index 70932e31e7..a4f0abaaa2 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -3049,6 +3049,7 @@ class userModel extends model $featureBarMenus = array(); $featureBarMenus['todo'] = array('type' => 'link', 'url' => helper::createLink($moduleName, 'todo', "userID={$user->id}&type=all"), 'text' => $this->lang->user->schedule); + $featureBarMenus['task'] = array('type' => 'link', 'url' => helper::createLink($moduleName, 'task', "userID={$user->id}"), 'text' => $this->lang->user->task); if($this->config->URAndSR) $featureBarMenus['requirement'] = array('type' => 'link', 'url' => helper::createLink($moduleName, 'story', "userID={$user->id}&storyType=requirement"), 'text' => $this->lang->URCommon); diff --git a/module/user/ui/task.html.php b/module/user/ui/task.html.php new file mode 100644 index 0000000000..fe10328b5f --- /dev/null +++ b/module/user/ui/task.html.php @@ -0,0 +1,59 @@ + + * @package user + * @link https://www.zentao.net + */ +namespace zin; +include './featurebar.html.php'; + +jsVar('todayLabel', $lang->today); +jsVar('yesterdayLabel', $lang->yesterday); +jsVar('childrenAB', $lang->task->childrenAB); +jsVar('multipleAB', $lang->task->multipleAB); + +$todoNavs = array(); +$that = zget($lang->user->thirdPerson, $user->gender); +$taskNavs['assignedTo'] = array('text' => sprintf($lang->user->assignedTo, $that), 'url' => inlink('task', "userID={$user->id}&type=assignedTo")); +$taskNavs['openedBy'] = array('text' => sprintf($lang->user->openedBy, $that), 'url' => inlink('task', "userID={$user->id}&type=openedBy")); +$taskNavs['finishedBy'] = array('text' => sprintf($lang->user->finishedBy, $that), 'url' => inlink('task', "userID={$user->id}&type=finishedBy")); +$taskNavs['closedBy'] = array('text' => sprintf($lang->user->closedBy, $that), 'url' => inlink('task', "userID={$user->id}&type=closedBy")); +$taskNavs['canceledBy'] = array('text' => sprintf($lang->user->canceledBy, $that), 'url' => inlink('task', "userID={$user->id}&type=canceledBy")); +if(isset($taskNavs[$type])) $taskNavs[$type]['active'] = true; + +$this->loadModel('my'); +$cols = array(); +foreach($config->user->defaultFields['task'] as $field) $cols[$field] = $config->my->task->dtable->fieldList[$field]; +$cols['id']['checkbox'] = false; +$cols['name']['nestedToggle'] = false; + +$tasks = initTableData($tasks, $cols, $this->task); +foreach($tasks as $task) +{ + $task->statusLabel = $this->processStatus('task', $task); + $task->estimateLabel = $task->estimate . $lang->execution->workHourUnit; + $task->consumedLabel = $task->consumed . $lang->execution->workHourUnit; + $task->leftLabel = $task->left . $lang->execution->workHourUnit; +} + +panel +( + setClass('list'), + set::title(null), + set::headingActions(array(nav(set::items($taskNavs)))), + dtable + ( + set::userMap($users), + set::bordered(true), + set::cols($cols), + set::data(array_values($tasks)), + set::onRenderCell(jsRaw('window.renderCell')), + set::footPager(usePager()), + ) +); + +render(); diff --git a/module/user/ui/todo.html.php b/module/user/ui/todo.html.php index fe8d71cabe..c6951b8d9f 100644 --- a/module/user/ui/todo.html.php +++ b/module/user/ui/todo.html.php @@ -37,10 +37,12 @@ $summary = sprintf($lang->todo->summary, count($todos), $waitCount, $doingCount) panel ( + setClass('list'), set::title(null), set::headingActions(array(nav(set::items($todoNavs)))), dtable ( + set::bordered(true), set::cols($cols), set::data(array_values($todos)), set::footer(array(array('html' => $summary, 'className' => "text-dark"), 'flex', 'pager')),