From e851bd4d611f128547bba8f29ec3eb2cd7ee83c5 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 9 Jan 2022 18:56:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=90=E4=BB=BB=E5=8A=A1=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E5=A4=A7=E4=BA=8E=E4=B8=BB=E4=BB=BB=E5=8A=A1=E6=97=B6=E4=B8=BB?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=87=AA=E5=8A=A8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Models/ProjectTask.php | 31 ++++++----- resources/assets/js/functions/web.js | 54 ++++++++++++++++++ .../js/pages/manage/components/TaskAdd.vue | 54 +----------------- .../js/pages/manage/components/TaskDetail.vue | 55 +------------------ 4 files changed, 75 insertions(+), 119 deletions(-) diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php index 436ce590..40bba87d 100644 --- a/app/Models/ProjectTask.php +++ b/app/Models/ProjectTask.php @@ -609,27 +609,28 @@ class ProjectTask extends AbstractModel $times = $data['times']; list($start, $end) = is_string($times) ? explode(",", $times) : (is_array($times) ? $times : []); if (Base::isDate($start) && Base::isDate($end) && $start != $end) { + $start_at = Carbon::parse($start); + $end_at = Carbon::parse($end); if ($this->parent_id > 0 && $data['skipTimesCheck'] !== true) { - // 子任务时间判断 + // 子任务时间处理 $mainTask = self::find($this->parent_id); - if (empty($mainTask->end_at)) { - // 如果主任务没有时间则自动设置 - $mainTask->start_at = Carbon::parse($start); - $mainTask->end_at = Carbon::parse($end); - $mainTask->save(); - $updateMarking['is_update_maintask'] = true; - } else { - // 限制不能超过主任务时间 - if (Carbon::parse($start)->lt($mainTask->start_at)) { - throw new ApiException('子任务开始时间不能小于主任务开始时间'); + if ($mainTask) { + // 超过主任务时间自动同步主任务 + if (empty($mainTask->start_at) || $start_at->lt($mainTask->start_at)) { + $mainTask->start_at = $start_at; + $updateMarking['is_update_maintask'] = true; } - if (Carbon::parse($end)->gt($mainTask->end_at)) { - throw new ApiException('子任务结束时间不能大于主任务结束时间'); + if (empty($mainTask->end_at) || $end_at->gt($mainTask->end_at)) { + $mainTask->end_at = $end_at; + $updateMarking['is_update_maintask'] = true; } } + if ($updateMarking['is_update_maintask']) { + $mainTask->save(); + } } - $this->start_at = Carbon::parse($start); - $this->end_at = Carbon::parse($end); + $this->start_at = $start_at; + $this->end_at = $end_at; } if ($this->parent_id == 0) { // 如果是主任务,则同步跟主任务相同时间的子任务 diff --git a/resources/assets/js/functions/web.js b/resources/assets/js/functions/web.js index 11552679..8494106c 100755 --- a/resources/assets/js/functions/web.js +++ b/resources/assets/js/functions/web.js @@ -242,6 +242,60 @@ } return $A.formatDate("Y-m-d", parseInt(time / 1000)) }, + + /** + * 获取日期选择器的 shortcuts 模板参数 + * @returns {(*)[]|[{text, value(): [Date,*]},{text, value(): [Date,*]},{text, value(): [*,*]},{text, value(): [*,*]},{text, value(): [Date,*]},null,null]|(Date|*)[]} + */ + timeOptionShortcuts() { + const lastSecond = (e) => { + return $A.Date($A.formatDate("Y-m-d 23:59:29", Math.round(e / 1000))) + }; + return [{ + text: $A.L('今天'), + value() { + return [new Date(), lastSecond(new Date().getTime())]; + } + }, { + text: $A.L('明天'), + value() { + let e = new Date(); + e.setDate(e.getDate() + 1); + return [new Date(), lastSecond(e.getTime())]; + } + }, { + text: $A.L('本周'), + value() { + return [$A.getData('今天', true), lastSecond($A.getData('本周结束2', true))]; + } + }, { + text: $A.L('本月'), + value() { + return [$A.getData('今天', true), lastSecond($A.getData('本月结束', true))]; + } + }, { + text: $A.L('3天'), + value() { + let e = new Date(); + e.setDate(e.getDate() + 2); + return [new Date(), lastSecond(e.getTime())]; + } + }, { + text: $A.L('5天'), + value() { + let e = new Date(); + e.setDate(e.getDate() + 4); + return [new Date(), lastSecond(e.getTime())]; + } + }, { + text: $A.L('7天'), + value() { + let e = new Date(); + e.setDate(e.getDate() + 6); + return [new Date(), lastSecond(e.getTime())]; + } + }]; + } }); /** diff --git a/resources/assets/js/pages/manage/components/TaskAdd.vue b/resources/assets/js/pages/manage/components/TaskAdd.vue index 51c72478..0c007677 100644 --- a/resources/assets/js/pages/manage/components/TaskAdd.vue +++ b/resources/assets/js/pages/manage/components/TaskAdd.vue @@ -211,9 +211,7 @@ export default { taskTimeOpen: false, - timeOptions: { - shortcuts: [] - }, + timeOptions: {shortcuts:$A.timeOptionShortcuts()}, loadIng: 0, @@ -272,55 +270,7 @@ export default { }, methods: { initLanguage() { - const lastSecond = (e) => { - return $A.Date($A.formatDate("Y-m-d 23:59:29", Math.round(e / 1000))) - }; - this.timeOptions = { - shortcuts: [{ - text: this.$L('今天'), - value() { - return [new Date(), lastSecond(new Date().getTime())]; - } - }, { - text: this.$L('明天'), - value() { - let e = new Date(); - e.setDate(e.getDate() + 1); - return [new Date(), lastSecond(e.getTime())]; - } - }, { - text: this.$L('本周'), - value() { - return [$A.getData('今天', true), lastSecond($A.getData('本周结束2', true))]; - } - }, { - text: this.$L('本月'), - value() { - return [$A.getData('今天', true), lastSecond($A.getData('本月结束', true))]; - } - }, { - text: this.$L('3天'), - value() { - let e = new Date(); - e.setDate(e.getDate() + 2); - return [new Date(), lastSecond(e.getTime())]; - } - }, { - text: this.$L('5天'), - value() { - let e = new Date(); - e.setDate(e.getDate() + 4); - return [new Date(), lastSecond(e.getTime())]; - } - }, { - text: this.$L('7天'), - value() { - let e = new Date(); - e.setDate(e.getDate() + 6); - return [new Date(), lastSecond(e.getTime())]; - } - }] - }; + }, initCascaderData() { diff --git a/resources/assets/js/pages/manage/components/TaskDetail.vue b/resources/assets/js/pages/manage/components/TaskDetail.vue index 8fcf8e06..7fa47389 100644 --- a/resources/assets/js/pages/manage/components/TaskDetail.vue +++ b/resources/assets/js/pages/manage/components/TaskDetail.vue @@ -24,6 +24,7 @@ format="yyyy/MM/dd HH:mm" type="datetimerange" class="subtask-time" + placement="bottom-end" @on-open-change="timeChange" @on-clear="timeClear" @on-ok="timeOk" @@ -421,9 +422,7 @@ export default { timeForce: false, timeOpen: false, timeValue: [], - timeOptions: { - shortcuts: [] - }, + timeOptions: {shortcuts:$A.timeOptionShortcuts()}, nowTime: $A.Time(), nowInterval: null, @@ -670,55 +669,7 @@ export default { methods: { initLanguage() { - const lastSecond = (e) => { - return $A.Date($A.formatDate("Y-m-d 23:59:29", Math.round(e / 1000))) - }; - this.timeOptions = { - shortcuts: [{ - text: this.$L('今天'), - value() { - return [new Date(), lastSecond(new Date().getTime())]; - } - }, { - text: this.$L('明天'), - value() { - let e = new Date(); - e.setDate(e.getDate() + 1); - return [new Date(), lastSecond(e.getTime())]; - } - }, { - text: this.$L('本周'), - value() { - return [$A.getData('今天', true), lastSecond($A.getData('本周结束2', true))]; - } - }, { - text: this.$L('本月'), - value() { - return [$A.getData('今天', true), lastSecond($A.getData('本月结束', true))]; - } - }, { - text: this.$L('3天'), - value() { - let e = new Date(); - e.setDate(e.getDate() + 2); - return [new Date(), lastSecond(e.getTime())]; - } - }, { - text: this.$L('5天'), - value() { - let e = new Date(); - e.setDate(e.getDate() + 4); - return [new Date(), lastSecond(e.getTime())]; - } - }, { - text: this.$L('7天'), - value() { - let e = new Date(); - e.setDate(e.getDate() + 6); - return [new Date(), lastSecond(e.getTime())]; - } - }] - }; + }, innerHeightListener() {