From eb7d93af8738354bdec9b2c92839dedad86b9961 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sat, 1 Jun 2024 10:19:35 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=94=98=E7=89=B9=E5=9B=BE=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E7=A7=BB=E5=8A=A8=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/components/GanttView.vue | 93 +++++++++++-------- .../pages/manage/components/ProjectGantt.vue | 10 +- .../sass/pages/components/project-gantt.scss | 2 + 3 files changed, 63 insertions(+), 42 deletions(-) diff --git a/resources/assets/js/components/GanttView.vue b/resources/assets/js/components/GanttView.vue index f7a6f1b24..f5e5a5fce 100644 --- a/resources/assets/js/components/GanttView.vue +++ b/resources/assets/js/components/GanttView.vue @@ -21,17 +21,18 @@ -
+
  • {{monthFormat(key)}}
-
    +
    • {{dateFormat(key, 'day')}}
      @@ -43,7 +44,7 @@ class="gantt-timeline" @scroll="timelineScrollListener" @mouseenter="mouseType='timeline'"> -
    • +
    • itemId == id) + } + } + parent = parent.parentNode + } + if (!item) { + this.onDateMove(e.touches[0].clientX); return } - if (this.dateMove != null) { - let moveX = (this.dateMove.clientX - e.touches[0].clientX) * 5; - this.dateMove.clientX = e.touches[0].clientX; - this.mouseWidth+= moveX; - this.mouseScaleWidth+= moveX * (100 / this.dateWidth); - } + this.onItemMove(item, e.target, e.touches[0].clientX); + }, + dateTouchmove(e) { + this.onMoving(e.touches[0].clientX) }, dateTouchend() { - if (this.dateMove != null) { - this.dateMove = null; - } + this.onMoveOver(null); }, dateMouseDown(e) { e.preventDefault(); - this.mouseItem = null; - this.dateMove = { - clientX: e.clientX - }; + this.onDateMove(e.clientX); }, itemMouseDown(e, item) { e.preventDefault(); + this.onItemMove(item, e.target, e.clientX); + }, + itemMouseMove(e) { + if (this.mouseItem != null || this.dateMove != null) { + e.preventDefault(); + this.onMoving(e.clientX); + } + }, + itemMouseUp(e) { + this.onMoveOver(e.target); + }, + onDateMove(clientX) { + this.mouseItem = null; + this.dateMove = { + clientX + }; + }, + onItemMove(item, target, clientX) { let type = 'moveX'; - if (e.target.className == 'timeline-resizer') { + if (target.classList.contains('timeline-resizer')) { type = 'moveW'; } if (typeof item[type] !== "number") { @@ -338,16 +359,15 @@ export default { } this.mouseBak = { type: type, - clientX: e.clientX, + clientX: clientX, value: item[type], }; this.mouseItem = item; this.dateMove = null; }, - itemMouseMove(e) { + onMoving(clientX) { if (this.mouseItem != null) { - e.preventDefault(); - const diff = this.mouseBak.value + (e.clientX - this.mouseBak.clientX); + const diff = this.mouseBak.value + (clientX - this.mouseBak.clientX); if (this.mouseBak.type === 'moveW') { const oneWidthTime = 86400000 / this.dateWidth; const {start, end} = this.mouseItem.time; @@ -360,14 +380,13 @@ export default { return; } if (this.dateMove != null) { - e.preventDefault(); - let moveX = (this.dateMove.clientX - e.clientX) * 5; - this.dateMove.clientX = e.clientX; + let moveX = (this.dateMove.clientX - clientX) * 5; + this.dateMove.clientX = clientX; this.mouseWidth+= moveX; this.mouseScaleWidth+= moveX * (100 / this.dateWidth); } }, - itemMouseUp(e) { + onMoveOver(target) { if (this.mouseItem != null) { const {start, end} = this.mouseItem.time; let isM = false; @@ -391,7 +410,7 @@ export default { // if (isM) { this.$emit("on-change", this.mouseItem) - } else if (e.target.className == 'timeline-title') { + } else if (target && target.className == 'timeline-title') { this.clickItem(this.mouseItem); } this.mouseItem = null; diff --git a/resources/assets/js/pages/manage/components/ProjectGantt.vue b/resources/assets/js/pages/manage/components/ProjectGantt.vue index a92f7b00d..c3f00023b 100644 --- a/resources/assets/js/pages/manage/components/ProjectGantt.vue +++ b/resources/assets/js/pages/manage/components/ProjectGantt.vue @@ -27,8 +27,8 @@
      - - + +
      @@ -67,11 +67,11 @@ export default { { title: this.$L('任务名称'), key: 'label', - minWidth: 150, + minWidth: 100, ellipsis: true, }, { title: this.$L('原计划时间'), - minWidth: 135, + width: 140, align: 'center', render: (h, {row}) => { if (row.notime === true) { @@ -86,7 +86,7 @@ export default { } }, { title: this.$L('新计划时间'), - minWidth: 135, + width: 140, align: 'center', render: (h, {row}) => { return h('div', { diff --git a/resources/assets/sass/pages/components/project-gantt.scss b/resources/assets/sass/pages/components/project-gantt.scss index 149afe22d..72d7337ce 100644 --- a/resources/assets/sass/pages/components/project-gantt.scss +++ b/resources/assets/sass/pages/components/project-gantt.scss @@ -48,6 +48,7 @@ position: absolute; bottom: 6px; right: 6px; + max-width: calc(100% - 6px); background: #ffffff; border-radius: 4px; opacity: 0; @@ -76,6 +77,7 @@ padding: 6px; border-radius: 4px; width: 500px; + max-width: 100%; .project-gstc-edit-btns { margin: 12px 6px 4px;