diff --git a/app/Http/Controllers/Api/SystemController.php b/app/Http/Controllers/Api/SystemController.php
index acedc6dff..7df41d783 100755
--- a/app/Http/Controllers/Api/SystemController.php
+++ b/app/Http/Controllers/Api/SystemController.php
@@ -38,7 +38,7 @@ class SystemController extends AbstractController
* @apiParam {String} type
* - get: 获取(默认)
* - all: 获取所有(需要管理员权限)
- * - save: 保存设置(参数:['reg', 'reg_identity', 'reg_invite', 'login_code', 'password_policy', 'project_invite', 'chat_information', 'anon_message', 'auto_archived', 'archived_day', 'task_visible', 'all_group_mute', 'all_group_autoin', 'image_compress', 'image_save_local', 'start_home'])
+ * - save: 保存设置(参数:['reg', 'reg_identity', 'reg_invite', 'login_code', 'password_policy', 'project_invite', 'chat_information', 'anon_message', 'auto_archived', 'archived_day', 'task_visible', 'task_default_time', 'all_group_mute', 'all_group_autoin', 'image_compress', 'image_save_local', 'start_home'])
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
* @apiSuccess {String} msg 返回信息(错误描述)
@@ -66,6 +66,7 @@ class SystemController extends AbstractController
'auto_archived',
'archived_day',
'task_visible',
+ 'task_default_time',
'all_group_mute',
'all_group_autoin',
'image_compress',
@@ -105,6 +106,7 @@ class SystemController extends AbstractController
$setting['auto_archived'] = $setting['auto_archived'] ?: 'close';
$setting['archived_day'] = floatval($setting['archived_day']) ?: 7;
$setting['task_visible'] = $setting['task_visible'] ?: 'close';
+ $setting['task_default_time'] = $setting['task_default_time'] ? Base::json2array($setting['task_default_time']) : ['09:00', '18:00'];
$setting['all_group_mute'] = $setting['all_group_mute'] ?: 'open';
$setting['all_group_autoin'] = $setting['all_group_autoin'] ?: 'yes';
$setting['image_compress'] = $setting['image_compress'] ?: 'open';
diff --git a/language/original-web.txt b/language/original-web.txt
index 1102fc970..824fd439e 100644
--- a/language/original-web.txt
+++ b/language/original-web.txt
@@ -1253,3 +1253,14 @@ Markdown 格式发送
计划时间冲突提示
忽略并继续
你确定要清除缓存吗?
+
+可见性选项
+保持
+保持:任务详情页可见性选项保持显示。
+自动:默认值情况下显示在合并项目,设置时保持显示。
+修改子任务时间
+请输入修改备注
+
+任务默认时间
+请选择默认时间
+添加任务计划时间默认时分。
diff --git a/resources/assets/js/functions/web.js b/resources/assets/js/functions/web.js
index 43607f3d8..b04fe85a9 100755
--- a/resources/assets/js/functions/web.js
+++ b/resources/assets/js/functions/web.js
@@ -540,51 +540,52 @@
* @returns {(*)[]|[{text, value(): [Date,*]},{text, value(): [Date,*]},{text, value(): [*,*]},{text, value(): [*,*]},{text, value(): [Date,*]},null,null]|(Date|*)[]}
*/
timeOptionShortcuts() {
+ const startSecond = $A.Date($A.formatDate("Y-m-d 00:00:00", Math.round(new Date().getTime() / 1000)));
const lastSecond = (e) => {
- return $A.Date($A.formatDate("Y-m-d 23:59:29", Math.round(e / 1000)))
+ return $A.Date($A.formatDate("Y-m-d 00:00:00", Math.round(e / 1000)))
};
return [{
text: $A.L('今天'),
value() {
- return [new Date(), lastSecond(new Date().getTime())];
+ return [startSecond, lastSecond(new Date().getTime())];
}
}, {
text: $A.L('明天'),
value() {
let e = new Date();
e.setDate(e.getDate() + 1);
- return [new Date(), lastSecond(e.getTime())];
+ return [startSecond, lastSecond(e.getTime())];
}
}, {
text: $A.L('本周'),
value() {
- return [new Date(), lastSecond($A.getSpecifyDate('本周结束', true).getTime())];
+ return [startSecond, lastSecond($A.getSpecifyDate('本周结束', true).getTime())];
}
}, {
text: $A.L('本月'),
value() {
- return [new Date(), lastSecond($A.getSpecifyDate('本月结束', true).getTime())];
+ return [startSecond, lastSecond($A.getSpecifyDate('本月结束', true).getTime())];
}
}, {
text: $A.L('3天'),
value() {
let e = new Date();
e.setDate(e.getDate() + 2);
- return [new Date(), lastSecond(e.getTime())];
+ return [startSecond, lastSecond(e.getTime())];
}
}, {
text: $A.L('5天'),
value() {
let e = new Date();
e.setDate(e.getDate() + 4);
- return [new Date(), lastSecond(e.getTime())];
+ return [startSecond, lastSecond(e.getTime())];
}
}, {
text: $A.L('7天'),
value() {
let e = new Date();
e.setDate(e.getDate() + 6);
- return [new Date(), lastSecond(e.getTime())];
+ return [startSecond, lastSecond(e.getTime())];
}
}];
},
diff --git a/resources/assets/js/pages/manage/components/TaskAdd.vue b/resources/assets/js/pages/manage/components/TaskAdd.vue
index 09d4b99ff..248dbc0e8 100644
--- a/resources/assets/js/pages/manage/components/TaskAdd.vue
+++ b/resources/assets/js/pages/manage/components/TaskAdd.vue
@@ -57,7 +57,7 @@
format="yyyy/MM/dd HH:mm"
type="datetimerange"
placement="bottom"
- @on-change="taskTimeChange(addData.times)"
+ @on-change="taskTimeChange(addData)"
@on-open-change="taskTimeOpenChange">
@@ -76,7 +76,7 @@
:placeholder="$L('选择计划范围')"
format="yyyy/MM/dd HH:mm"
type="datetimerange"
- @on-change="taskTimeChange(addData.times)"/>
+ @on-change="taskTimeChange(addData)"/>
-
+
+ @on-change="taskTimeChange(item)"/>
0) {
- this.choosePriority(this.taskPriority[0]);
+ await this.choosePriority(this.taskPriority[0]);
}
},
- taskTimeChange(times) {
- let tempc = $A.date2string(times, "Y-m-d H:i");
- if (tempc[0] && tempc[1]) {
- if ($A.rightExists(tempc[0], '00:00') && $A.rightExists(tempc[1], '00:00')) {
- this.$set(this.addData, 'times', [
- tempc[0],
- tempc[1].replace("00:00", "23:59")
- ])
- }
+ async taskTimeChange(data) {
+ const times = $A.date2string(data.times, "Y-m-d H:i");
+ if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
+ this.$set(data, 'times', await this.$store.dispatch("taskDefaultTime", times))
}
},
@@ -424,6 +419,10 @@ export default {
this.taskTimeOpen = val;
},
+ formatDate(value) {
+ return value ? $A.date2string(value) : null
+ },
+
onKeydown(e) {
if (e.keyCode === 13) {
if (e.shiftKey) {
@@ -446,19 +445,19 @@ export default {
},
taskPriorityContent(item) {
- let days = $A.runNum(item.days);
+ const days = $A.runNum(item.days);
if (days <= 0) {
return item.name + ' (' + this.$L('无时间限制') + ')';
}
return item.name + ' (' + days + this.$L('天') + ')';
},
- choosePriority(item) {
- let start = new Date();
- let days = $A.runNum(item.days);
+ async choosePriority(item) {
+ const start = new Date();
+ const days = $A.runNum(item.days);
if (days > 0) {
- let end = new Date(new Date().setDate(start.getDate() + days));
- this.$set(this.addData, 'times', $A.date2string([start, end]))
+ const end = new Date(new Date().setDate(start.getDate() + days));
+ this.$set(this.addData, 'times', await this.$store.dispatch("taskDefaultTime", $A.date2string([start, end])))
} else {
this.$set(this.addData, 'times', [])
}
@@ -533,7 +532,7 @@ export default {
$A.messageError("任务描述不能为空");
return;
}
-
+
this.loadIng++;
// 存在任务提示
diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue
index 4ea0f471d..e540fb845 100644
--- a/resources/assets/js/pages/manage/components/TaskDetail.vue
+++ b/resources/assets/js/pages/manage/components/TaskDetail.vue
@@ -34,6 +34,7 @@
class="subtask-time"
placement="bottom-end"
@on-open-change="timeChange"
+ @on-change="taskTimeChange"
@on-clear="timeClear"
@on-ok="timeOk"
transfer>
@@ -96,7 +97,8 @@
type="datetimerange"
:placeholder="$L('请设置计划时间')"
:clearable="false"
- :editable="false"/>
+ :editable="false"
+ @on-change="taskTimeChange"/>
@@ -260,6 +262,7 @@
format="yyyy/MM/dd HH:mm"
type="datetimerange"
@on-open-change="timeChange"
+ @on-change="taskTimeChange"
@on-clear="timeClear"
@on-ok="timeOk"
transfer>
@@ -532,7 +535,7 @@ export default {
timeForce: false,
timeOpen: false,
timeValue: [],
- timeOptions: {shortcuts:$A.timeOptionShortcuts()},
+ timeOptions: {shortcuts: $A.timeOptionShortcuts()},
loopForce: false,
@@ -1097,7 +1100,14 @@ export default {
});
},
- onOwner(pick) {
+ async taskTimeChange() {
+ const times = $A.date2string(this.timeValue, "Y-m-d H:i");
+ if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
+ this.timeValue = await this.$store.dispatch("taskDefaultTime", times)
+ }
+ },
+
+ async onOwner(pick) {
let data = {
task_id: this.taskDetail.id,
owner: this.ownerData.owner_userid
@@ -1109,12 +1119,8 @@ export default {
$A.messageError("任务已被领取");
return;
}
- let times = $A.date2string(this.timeValue, "Y-m-d H:i");
- if (times[0] && times[1]) {
- if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
- times[1] = times[1].replace("00:00", "23:59");
- }
- } else {
+ const times = $A.date2string(this.timeValue, "Y-m-d H:i");
+ if (!(times[0] && times[1])) {
$A.messageError("请设置计划时间");
return;
}
@@ -1211,12 +1217,7 @@ export default {
},
timeOk() {
- let times = $A.date2string(this.timeValue, "Y-m-d H:i");
- if (times[0] && times[1]) {
- if ($A.rightExists(times[0], '00:00') && $A.rightExists(times[1], '00:00')) {
- times[1] = times[1].replace("00:00", "23:59");
- }
- }
+ const times = $A.date2string(this.timeValue, "Y-m-d H:i");
this.updateData('times', {
start_at: times[0],
end_at: times[1],
diff --git a/resources/assets/js/pages/manage/setting/components/SystemSetting.vue b/resources/assets/js/pages/manage/setting/components/SystemSetting.vue
index 44f66ffe5..0e3edd5bf 100644
--- a/resources/assets/js/pages/manage/setting/components/SystemSetting.vue
+++ b/resources/assets/js/pages/manage/setting/components/SystemSetting.vue
@@ -78,6 +78,11 @@
{{$L('任务完成 (*) 天后自动归档。', formDatum.archived_day)}}
+
+
+
diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js
index f55277b9f..04744eebc 100644
--- a/resources/assets/js/store/actions.js
+++ b/resources/assets/js/store/actions.js
@@ -2184,6 +2184,53 @@ export default {
$A.IDBSave("cacheTaskBrowse", state.cacheTaskBrowse);
},
+ /**
+ * 任务默认时间
+ * @param state
+ * @param dispatch
+ * @param array
+ * @returns {Promise}
+ */
+ taskDefaultTime({state, dispatch}, array) {
+ return new Promise(async resolve => {
+ if ($A.isArray(array)) {
+ array[0] = await dispatch("taskDefaultStartTime", array[0])
+ array[1] = await dispatch("taskDefaultEndTime", array[1])
+ }
+ resolve(array)
+ });
+ },
+
+ /**
+ * 任务默认开始时间
+ * @param state
+ * @param value
+ * @returns {Promise}
+ */
+ taskDefaultStartTime({state}, value) {
+ return new Promise(resolve => {
+ if (/(\s|^)([0-2]\d):([0-5]\d)(:\d{1,2})*$/.test(value)) {
+ value = value.replace(/(\s|^)([0-2]\d):([0-5]\d)(:\d{1,2})*$/, "$1" + state.systemConfig.task_default_time[0])
+ }
+ resolve(value)
+ });
+ },
+
+ /**
+ * 任务默认结束时间
+ * @param state
+ * @param value
+ * @returns {Promise}
+ */
+ taskDefaultEndTime({state}, value) {
+ return new Promise(resolve => {
+ if (/(\s|^)([0-2]\d):([0-5]\d)(:\d{1,2})*$/.test(value)) {
+ value = value.replace(/(\s|^)([0-2]\d):([0-5]\d)(:\d{1,2})*$/, "$1" + state.systemConfig.task_default_time[1])
+ }
+ resolve(value)
+ });
+ },
+
/** *****************************************************************************************/
/** ************************************** 会话 **********************************************/
/** *****************************************************************************************/