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)}}
+
+ +
+

{{ $L('任务相关') }}

+
{{$L('保持')}} @@ -86,6 +91,15 @@
{{$L('保持:任务详情页可见性选项保持显示。')}}
{{$L('自动:默认值情况下显示在合并项目,设置时保持显示。')}}
+ + +
{{$L('添加任务计划时间默认时分。')}}
+
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) + }); + }, + /** *****************************************************************************************/ /** ************************************** 会话 **********************************************/ /** *****************************************************************************************/