From e9d7d3f90379d560cb75abd7821763d70be5d167 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 13 Aug 2026 15:51:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B5=81=E5=BC=8F=E6=97=A5?= =?UTF-8?q?=E5=8E=86=E5=A4=9A=E5=A4=A9=E6=97=A5=E7=A8=8B=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=EF=BC=9A=E8=AE=B0=E5=BD=95=E6=8A=93=E5=8F=96=E5=81=8F=E7=A7=BB?= =?UTF-8?q?=EF=BC=8C=E8=A2=AB=E6=8A=93=E4=BD=8F=E7=9A=84=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E5=AF=B9=E9=BD=90=E8=90=BD=E7=82=B9=E8=80=8C=E9=9D=9E=E9=A6=96?= =?UTF-8?q?=E6=97=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/calendar/CalendarStream.vue | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/frontend/ops_vue_js/src/views/calendar/CalendarStream.vue b/frontend/ops_vue_js/src/views/calendar/CalendarStream.vue index fc7689e..7412e63 100644 --- a/frontend/ops_vue_js/src/views/calendar/CalendarStream.vue +++ b/frontend/ops_vue_js/src/views/calendar/CalendarStream.vue @@ -750,17 +750,27 @@ function handleKeyDown(e) { } } -function handleDragStart(event, e) { +function handleDragStart(seg, e) { + const event = seg.event if (!event.canEdit) { e.preventDefault() return } e.dataTransfer.effectAllowed = 'move' e.dataTransfer.setData('text/plain', String(event.id)) + + const barRect = e.currentTarget.getBoundingClientRect() + const spanDays = seg.endCol - seg.startCol + 1 + const grabDay = Math.max(0, Math.min(spanDays - 1, + Math.floor(((e.clientX - barRect.left) / barRect.width) * spanDays))) + const grabDate = addDays(strToDate(seg.segStart), grabDay) + const grabOffset = Math.round((grabDate - strToDate(event.startDate)) / 86400000) + dragState.value = { eventId: event.id, originalStart: event.startDate, originalEnd: event.endDate, + grabOffset, dragging: true, } } @@ -800,9 +810,10 @@ function handleDrop(dateStr) { const origStart = strToDate(event.startDate) const targetDate = strToDate(dateStr) const diff = Math.round((targetDate - origStart) / 86400000) + const grabOffset = dragState.value.grabOffset ?? 0 - const newStart = dateToStr(targetDate) - const newEnd = dateToStr(addDays(strToDate(event.endDate), diff)) + const newStart = dateToStr(addDays(targetDate, -grabOffset)) + const newEnd = dateToStr(addDays(strToDate(event.endDate), diff - grabOffset)) calendarApi.updateEvent({ id: event.id, @@ -1324,7 +1335,7 @@ watch(locale, () => { draggable="true" @click.stop="handleEventClick(seg.event)" @contextmenu.prevent.stop="handleEventContextMenu($event, seg.event)" - @dragstart="handleDragStart(seg.event, $event)" + @dragstart="handleDragStart(seg, $event)" @dragend="handleDragEnd" > «