From dd268c0df6301af63cafb285984ed6401de6e925 Mon Sep 17 00:00:00 2001 From: yoon Date: Thu, 27 Mar 2025 18:12:11 +0900 Subject: [PATCH] =?UTF-8?q?=ED=87=B4=EA=B7=BC=EC=A7=80=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/commuters/CommuterBtn.vue | 20 ++++++--- src/components/commuters/CommuterCalendar.vue | 43 ++++++++++++------- .../commuters/CommuterProjectList.vue | 15 +++++-- 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/src/components/commuters/CommuterBtn.vue b/src/components/commuters/CommuterBtn.vue index bd852b0..6cc5f68 100644 --- a/src/components/commuters/CommuterBtn.vue +++ b/src/components/commuters/CommuterBtn.vue @@ -13,11 +13,13 @@
@@ -36,10 +38,14 @@ const props = defineProps({ checkedInProject: { type: Object, required: false + }, + pendingProjectChange: { + type: Object, + default: null } }); -const emit = defineEmits(['workTimeUpdated', 'leaveTimeUpdated']); +const emit = defineEmits(['workTimeUpdated', 'leaveTimeUpdated', 'projectChangeComplete']); const workTime = ref(null); const leaveTime = ref(null) @@ -128,7 +134,7 @@ const setWorkTime = async () => { $api.post('commuters/insert', { memberSeq: props.userId, projctSeq: props.checkedInProject.PROJCTSEQ, - commutLvt: null, + commutLve: null, commutArr: address, }).then(res => { if (res.status === 200) { @@ -144,11 +150,11 @@ const setLeaveTime = () => { $api.patch('commuters/updateLve', { memberSeq: props.userId, commutLve: leaveTime.value || null, + projctLve: props.pendingProjectChange ? props.pendingProjectChange.projctSeq : props.checkedInProject.PROJCTSEQ }).then(res => { if (res.status === 200) { todayCommuterInfo(); - // 부모 컴포넌트에 업데이트 이벤트 발생 - emit('leaveTimeUpdated', true); + emit('leaveTimeUpdated'); } }); }; diff --git a/src/components/commuters/CommuterCalendar.vue b/src/components/commuters/CommuterCalendar.vue index c0300a7..eb0d116 100644 --- a/src/components/commuters/CommuterCalendar.vue +++ b/src/components/commuters/CommuterCalendar.vue @@ -12,6 +12,7 @@ { todaysCommuter(); @@ -126,32 +130,41 @@ const handleLeaveTimeUpdate = () => { todaysCommuter(); }; +const handleResetProjectState = () => { + // 이전에 체크인했던 프로젝트로 복귀 + const storedProject = projectStore.getSelectedProject(); + if (storedProject) { + checkedInProject.value = storedProject; + selectedProject.value = storedProject.PROJCTSEQ; + projectStore.setSelectedProject(storedProject); + pendingProjectChange.value = null; + } +}; + // 프로젝트 드롭 이벤트 핸들러 (ProjectList 컴포넌트에서 전달받음) const handleProjectDrop = ({ event, targetProject }) => { - // 드래그된 프로젝트 데이터 가져오기 const draggedProjectData = JSON.parse(event.dataTransfer.getData('application/json')); - // 드래그한 프로젝트와 드롭한 프로젝트가 같으면 아무 동작 안 함 + // 기존 프로젝트와 동일한 경우 변경 안 함 if (draggedProjectData.PROJCTSEQ === targetProject.PROJCTSEQ) { return; } - // 선택된 프로젝트 변경 + pendingProjectChange.value = { + projctSeq: targetProject.PROJCTSEQ, + memberSeq: user.value.id + }; + checkedInProject.value = targetProject; + selectedProject.value = targetProject.PROJCTSEQ; projectStore.setSelectedProject(targetProject); - // select 값도 변경 - selectedProject.value = targetProject.PROJCTSEQ; - - $api.patch('commuters/update', { - projctSeq: targetProject.PROJCTSEQ, - memberSeq: user.value.id, - }).then(res => { - if (res.status === 200) { - todaysCommuter(); - loadCommuters(); - } - }); + // 기존 UI 업데이트 + commuters.value = commuters.value.map(commuter => + commuter.MEMBERSEQ === user.value.id + ? { ...commuter, PROJCTNAM: targetProject.PROJCTNAM, PROJCTLVE: targetProject.PROJCTSEQ } + : commuter + ); }; // 오늘 출근 모든 사용자 조회 diff --git a/src/components/commuters/CommuterProjectList.vue b/src/components/commuters/CommuterProjectList.vue index 83fbcd2..c61abd5 100644 --- a/src/components/commuters/CommuterProjectList.vue +++ b/src/components/commuters/CommuterProjectList.vue @@ -13,8 +13,10 @@

@@ -77,7 +79,14 @@ const sortedProjects = computed(() => { }); // 현재 사용자 확인 const isCurrentUser = (commuter) => { - return props.user && commuter && commuter.MEMBERSEQ === props.user.id; + // 현재 사용자인지 확인 + const isCurrentUserCheck = props.user && commuter && commuter.MEMBERSEQ === props.user.id; + + // 퇴근 기록이 없는지 확인 + const hasNoCheckRecord = !commuter.COMMUTLVE; + + // 현재 사용자이면서 퇴근 기록이 없는 경우에만 true 반환 + return isCurrentUserCheck && hasNoCheckRecord; }; // 드래그 시작 이벤트 핸들러