diff --git a/module/execution/config/dtable.php b/module/execution/config/dtable.php
index ce7a87a57a..b2a3008b0b 100644
--- a/module/execution/config/dtable.php
+++ b/module/execution/config/dtable.php
@@ -168,3 +168,56 @@ $config->execution->team->dtable->fieldList['limited']['sortType'] = false;
$config->execution->team->dtable->fieldList['actions']['type'] = 'actions';
$config->execution->team->dtable->fieldList['actions']['minWidth'] = 60;
$config->execution->team->dtable->fieldList['actions']['actionsMap'] = $config->execution->team->actionList;
+
+global $app;
+$app->loadLang('bug');
+$app->loadLang('task');
+$config->execution->importBug = new stdclass();
+$config->execution->importBug->dtable = new stdclass();
+$config->execution->importBug->dtable->fieldList['id']['title'] = $lang->idAB;
+$config->execution->importBug->dtable->fieldList['id']['type'] = 'checkID';
+$config->execution->importBug->dtable->fieldList['id']['sortType'] = false;
+
+$config->execution->importBug->dtable->fieldList['severity']['title'] = $lang->bug->abbr->severity;
+$config->execution->importBug->dtable->fieldList['severity']['type'] = 'severity';
+$config->execution->importBug->dtable->fieldList['severity']['sortType'] = false;
+$config->execution->importBug->dtable->fieldList['severity']['fixed'] = 'left';
+
+$config->execution->importBug->dtable->fieldList['pri']['title'] = $lang->execution->pri;
+$config->execution->importBug->dtable->fieldList['pri']['type'] = 'pri';
+$config->execution->importBug->dtable->fieldList['pri']['sortType'] = false;
+$config->execution->importBug->dtable->fieldList['pri']['fixed'] = 'left';
+
+$config->execution->importBug->dtable->fieldList['title']['title'] = $lang->bug->title;
+$config->execution->importBug->dtable->fieldList['title']['type'] = 'shortNestedTitle';
+$config->execution->importBug->dtable->fieldList['title']['sortType'] = false;
+$config->execution->importBug->dtable->fieldList['title']['data-toggle'] = 'modal';
+$config->execution->importBug->dtable->fieldList['title']['link'] = array('module' => 'bug', 'method' => 'view', 'params' => 'bugID={id}');
+
+$config->execution->importBug->dtable->fieldList['status']['title'] = $lang->bug->status;
+$config->execution->importBug->dtable->fieldList['status']['type'] = 'status';
+$config->execution->importBug->dtable->fieldList['status']['sortType'] = false;
+$config->execution->importBug->dtable->fieldList['status']['statusMap'] = $lang->bug->statusList;
+
+$config->execution->importBug->dtable->fieldList['taskPri']['title'] = $lang->bug->pri;
+$config->execution->importBug->dtable->fieldList['taskPri']['name'] = 'pri';
+$config->execution->importBug->dtable->fieldList['taskPri']['type'] = 'html';
+$config->execution->importBug->dtable->fieldList['taskPri']['width'] = 68;
+$config->execution->importBug->dtable->fieldList['taskPri']['sortType'] = false;
+
+$config->execution->importBug->dtable->fieldList['assignedTo']['title'] = $lang->bug->assignedTo;
+$config->execution->importBug->dtable->fieldList['assignedTo']['type'] = 'html';
+$config->execution->importBug->dtable->fieldList['assignedTo']['width'] = 108;
+$config->execution->importBug->dtable->fieldList['assignedTo']['sortType'] = false;
+
+$config->execution->importBug->dtable->fieldList['estimate']['title'] = $lang->task->estimate;
+$config->execution->importBug->dtable->fieldList['estimate']['type'] = 'number';
+$config->execution->importBug->dtable->fieldList['estimate']['sortType'] = false;
+
+$config->execution->importBug->dtable->fieldList['estStarted']['title'] = $lang->task->estStarted;
+$config->execution->importBug->dtable->fieldList['estStarted']['type'] = 'datetime';
+$config->execution->importBug->dtable->fieldList['estStarted']['sortType'] = false;
+
+$config->execution->importBug->dtable->fieldList['deadline']['title'] = $lang->task->deadline;
+$config->execution->importBug->dtable->fieldList['deadline']['type'] = 'datetime';
+$config->execution->importBug->dtable->fieldList['deadline']['sortType'] = false;
diff --git a/module/execution/js/importbug.ui.js b/module/execution/js/importbug.ui.js
index 94f36679d7..f9175f8153 100644
--- a/module/execution/js/importbug.ui.js
+++ b/module/execution/js/importbug.ui.js
@@ -1,22 +1,65 @@
-window.handleImportBug = function(element, config, data)
+window.handleImportBug = function(result, data)
{
- if(config.name == 'severity')
+ const {col, row, value} = data;
+
+ if(col.name == 'pri' && col.type == 'html')
{
- $(element).html(``);
+ $('#priSelect .select-pri').attr('name', `pri[${row.data.id}]`);
+
+ result[0] = null;
+ result[result.length] = {html: $('#priSelect').html()};
}
- else if(config.name == 'title')
+ else if(col.name == 'assignedTo')
{
- const bugLink = $.createLink('bug', 'view', `bugID=${data.id}`);
- $(element).html(`${data.title}`);
+ $('#userSelect .select-user').attr('name', `user[${row.data.id}]`);
+
+ result[0] = null;
+ result[result.length] = {html: $('#userSelect').html()};
}
- else if(config.name == 'status')
+ else if(col.name == 'estimate')
{
- $(element).html(`${statusList[data.status]}`);
+ $('#numInput .input-num').attr('name', `estimate[${row.data.id}]`);
+
+ result[0] = null;
+ result[result.length] = {html: $('#numInput').html()};
+ }
+ else if(col.name == 'estStarted' || col.name == 'deadline')
+ {
+ $('#dateInput .input-date').attr('name', `${col.name}[${row.data.id}]`);
+
+ result[0] = null;
+ result[result.length] = {html: $('#dateInput').html()};
+ }
+
+ return result;
+}
+
+
+/**
+ * 设置优先级,指派给和截止日期的默认值。
+ * Set defaults for pri, assign and deadline.
+ */
+const today = zui.formatDate(new Date(), 'yyyy-MM-dd');
+window.onRenderRow = function({row})
+{
+ $(`.dtable-row[data-id="${row.id}"]`).find('.select-pri').val(row.data.pri);
+ $(`.dtable-row[data-id="${row.id}"]`).find('.select-user').val(row.data.assignedTo);
+
+ if(row.data.deadline > executionBegin && row.data.deadline > today)
+ {
+ $(`.dtable-row[data-id="${row.id}"]`).find('input[name^=deadline]').val(row.data.deadline);
}
}
-window.importBug = function()
+$(document).off('click', '.import-bug-btn').on('click', '.import-bug-btn', function()
{
+ const dtable = zui.DTable.query($(this).target);
+ const checkedList = dtable.$.getChecks();
+ if(!checkedList.length) return false;
+
const formData = new FormData($("#importForm")[0]);
+ checkedList.forEach((id) => formData.append(`id[${id}]`, id));
+
$.ajaxSubmit({url: $('#importForm').attr('action'), data: formData});
-}
+ return false;
+});
diff --git a/module/execution/ui/importbug.html.php b/module/execution/ui/importbug.html.php
index a07cbcce71..0c61429340 100644
--- a/module/execution/ui/importbug.html.php
+++ b/module/execution/ui/importbug.html.php
@@ -15,111 +15,98 @@ namespace zin;
featureBar
(
set::current('all'),
- set::linkParams("toExecution={$execution->id}"),
+ set::linkParams("executionID={$execution->id}"),
li
(
searchToggle(set::module('bug'))
)
);
-jsVar('statusList', $lang->bug->statusList);
-formBatchPanel
+formBase
(
- set::mode('edit'),
setID('importForm'),
- set::data(array_values($bugs)),
- set::onRenderRowCol(jsRaw('window.handleImportBug')),
- formBatchItem
- (
- set::name('id'),
- set::label(''),
- set::control('checkbox'),
- set::width('20px'),
- ),
- formBatchItem
- (
- set::name('id'),
- set::label('ID'),
- set::control('index'),
- set::width('60px'),
- ),
- formBatchItem
- (
- set::name('severity'),
- set::label($lang->bug->abbr->severity),
- set::control('static'),
- set::width('48px'),
- ),
- formBatchItem
- (
- set::name('title'),
- set::label($lang->bug->title),
- set::control('static'),
- ),
- formBatchItem
- (
- set::name('status'),
- set::label($lang->bug->status),
- set::control('static'),
- set::width('80px')
- ),
- formBatchItem
- (
- set::name('pri'),
- set::label($lang->execution->pri),
- set::control('select'),
- set::required(in_array('pri', $requiredFields)),
- set::width('68px'),
- set::value('3'),
- set::items($lang->bug->priList),
- ),
- formBatchItem
- (
- set::name('assignedTo'),
- set::label($lang->task->assignedTo),
- set::control('picker'),
- set::required(in_array('assignedTo', $requiredFields)),
- set::width('108px'),
- set::items($users),
- ),
- formBatchItem
- (
- set::name('estimate'),
- set::label($lang->task->estimate),
- set::control('number'),
- set::required(in_array('estimate', $requiredFields)),
- set::width('64px'),
- ),
- formBatchItem
- (
- set::name('estStarted'),
- set::label($lang->task->estStarted),
- set::control('date'),
- set::required(in_array('estStarted', $requiredFields)),
- set::width('110px'),
- ),
- formBatchItem
- (
- set::name('deadline'),
- set::label($lang->task->deadline),
- set::control('date'),
- set::required(in_array('deadline', $requiredFields)),
- set::width('110px'),
- ),
+ set::action(createLink('execution', 'importBug', "executionID={$execution->id}&browseType={$browseType}¶m={$param}")),
set::actions(array()),
- set::footerActions(array(
- array(
- 'text' => $lang->import,
- 'icon' => 'import',
- 'class' => 'btn secondary toolbar-item batch-btn size-sm',
- 'onClick' => 'window.importBug()'
- ),
- array(
- 'text' => $lang->goback,
- 'class' => 'btn toolbar-item size-sm text-gray ml-2',
- 'url' => createLink('execution', 'task', "executionID={$execution->id}")
+ dtable
+ (
+ set::userMap($users),
+ set::cols($config->execution->importBug->dtable->fieldList),
+ set::data($bugs),
+ set::checkable(true),
+ set::showToolbarOnChecked(false),
+ set::onRenderCell(jsRaw('window.handleImportBug')),
+ set::onRenderRow(jsRaw('window.onRenderRow')),
+ set::footToolbar(array(
+ 'items' => array(
+ array(
+ 'text' => $lang->import,
+ 'class' => 'btn secondary import-bug-btn size-sm',
+ ),
+ array(
+ 'text' => $lang->goback,
+ 'class' => 'btn size-sm text-gray',
+ 'url' => createLink('execution', 'task', "executionID={$execution->id}")
+ )
+ )
+ )),
+ set::footPager(
+ usePager(),
+ set::recPerPage($recPerPage),
+ set::recTotal($recTotal),
+ set::linkCreator(helper::createLink('execution', 'importBug', "executionID={$execution->id}&browseType={$browseType}¶m=$param&recTotal={$pager->recTotal}&recPerPage={recPerPage}&page={page}"))
)
- )),
+ )
+);
+
+jsVar('executionBegin', $execution->begin);
+div
+(
+ setClass('hidden'),
+ setID('priSelect'),
+ select
+ (
+ setClass('select-pri w-12'),
+ set::name('pri[]'),
+ set::items($lang->task->priList),
+ set::value(3)
+ )
+);
+
+div
+(
+ setClass('hidden'),
+ setID('userSelect'),
+ select
+ (
+ setClass('select-user w-24'),
+ set::name('assignedTo[]'),
+ set::items($users)
+ )
+);
+
+div
+(
+ setClass('hidden'),
+ setID('numInput'),
+ control
+ (
+ set::type('number'),
+ set::min('0'),
+ setClass('input-num w-12'),
+ set::name('estimate[]'),
+ )
+);
+
+div
+(
+ setClass('hidden'),
+ setID('dateInput'),
+ control
+ (
+ set::type('date'),
+ setClass('input-date w-26'),
+ set::name('deadline[]'),
+ )
);
render();