퇴근지 추가
This commit is contained in:
parent
8dcb69bcb6
commit
dd268c0df6
@ -13,8 +13,10 @@
|
|||||||
|
|
||||||
<div class="col-6 ps-1">
|
<div class="col-6 ps-1">
|
||||||
<button
|
<button
|
||||||
class="btn btn-outline-secondary border-3 w-100 py-0 h-px-50"
|
class="btn border-3 w-100 py-0 h-px-50"
|
||||||
|
:class="!workTime ? 'btn-outline-secondary pe-none disabled' : 'btn-outline-secondary'"
|
||||||
@click="setLeaveTime"
|
@click="setLeaveTime"
|
||||||
|
:disabled="!workTime"
|
||||||
>
|
>
|
||||||
<i v-if="!leaveTime" class='bx bxs-door-open fs-2'></i>
|
<i v-if="!leaveTime" class='bx bxs-door-open fs-2'></i>
|
||||||
<span v-if="leaveTime" class="ql-size-12px">{{ leaveTime }}</span>
|
<span v-if="leaveTime" class="ql-size-12px">{{ leaveTime }}</span>
|
||||||
@ -36,10 +38,14 @@ const props = defineProps({
|
|||||||
checkedInProject: {
|
checkedInProject: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: false
|
required: false
|
||||||
|
},
|
||||||
|
pendingProjectChange: {
|
||||||
|
type: Object,
|
||||||
|
default: null
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['workTimeUpdated', 'leaveTimeUpdated']);
|
const emit = defineEmits(['workTimeUpdated', 'leaveTimeUpdated', 'projectChangeComplete']);
|
||||||
|
|
||||||
const workTime = ref(null);
|
const workTime = ref(null);
|
||||||
const leaveTime = ref(null)
|
const leaveTime = ref(null)
|
||||||
@ -128,7 +134,7 @@ const setWorkTime = async () => {
|
|||||||
$api.post('commuters/insert', {
|
$api.post('commuters/insert', {
|
||||||
memberSeq: props.userId,
|
memberSeq: props.userId,
|
||||||
projctSeq: props.checkedInProject.PROJCTSEQ,
|
projctSeq: props.checkedInProject.PROJCTSEQ,
|
||||||
commutLvt: null,
|
commutLve: null,
|
||||||
commutArr: address,
|
commutArr: address,
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
@ -144,11 +150,11 @@ const setLeaveTime = () => {
|
|||||||
$api.patch('commuters/updateLve', {
|
$api.patch('commuters/updateLve', {
|
||||||
memberSeq: props.userId,
|
memberSeq: props.userId,
|
||||||
commutLve: leaveTime.value || null,
|
commutLve: leaveTime.value || null,
|
||||||
|
projctLve: props.pendingProjectChange ? props.pendingProjectChange.projctSeq : props.checkedInProject.PROJCTSEQ
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
todayCommuterInfo();
|
todayCommuterInfo();
|
||||||
// 부모 컴포넌트에 업데이트 이벤트 발생
|
emit('leaveTimeUpdated');
|
||||||
emit('leaveTimeUpdated', true);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
<CommuterBtn
|
<CommuterBtn
|
||||||
:userId="user.id"
|
:userId="user.id"
|
||||||
:checkedInProject="checkedInProject || {}"
|
:checkedInProject="checkedInProject || {}"
|
||||||
|
:pendingProjectChange="pendingProjectChange"
|
||||||
@workTimeUpdated="handleWorkTimeUpdate"
|
@workTimeUpdated="handleWorkTimeUpdate"
|
||||||
@leaveTimeUpdated="handleLeaveTimeUpdate"
|
@leaveTimeUpdated="handleLeaveTimeUpdate"
|
||||||
ref="workTimeComponentRef"
|
ref="workTimeComponentRef"
|
||||||
@ -116,6 +117,9 @@ const monthlyCommuters = ref([]);
|
|||||||
|
|
||||||
const calendarDatepicker = ref(null);
|
const calendarDatepicker = ref(null);
|
||||||
|
|
||||||
|
const pendingProjectChange = ref(null);
|
||||||
|
|
||||||
|
|
||||||
// 출퇴근 컴포넌트 이벤트 핸들러
|
// 출퇴근 컴포넌트 이벤트 핸들러
|
||||||
const handleWorkTimeUpdate = () => {
|
const handleWorkTimeUpdate = () => {
|
||||||
todaysCommuter();
|
todaysCommuter();
|
||||||
@ -126,32 +130,41 @@ const handleLeaveTimeUpdate = () => {
|
|||||||
todaysCommuter();
|
todaysCommuter();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleResetProjectState = () => {
|
||||||
|
// 이전에 체크인했던 프로젝트로 복귀
|
||||||
|
const storedProject = projectStore.getSelectedProject();
|
||||||
|
if (storedProject) {
|
||||||
|
checkedInProject.value = storedProject;
|
||||||
|
selectedProject.value = storedProject.PROJCTSEQ;
|
||||||
|
projectStore.setSelectedProject(storedProject);
|
||||||
|
pendingProjectChange.value = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// 프로젝트 드롭 이벤트 핸들러 (ProjectList 컴포넌트에서 전달받음)
|
// 프로젝트 드롭 이벤트 핸들러 (ProjectList 컴포넌트에서 전달받음)
|
||||||
const handleProjectDrop = ({ event, targetProject }) => {
|
const handleProjectDrop = ({ event, targetProject }) => {
|
||||||
// 드래그된 프로젝트 데이터 가져오기
|
|
||||||
const draggedProjectData = JSON.parse(event.dataTransfer.getData('application/json'));
|
const draggedProjectData = JSON.parse(event.dataTransfer.getData('application/json'));
|
||||||
|
|
||||||
// 드래그한 프로젝트와 드롭한 프로젝트가 같으면 아무 동작 안 함
|
// 기존 프로젝트와 동일한 경우 변경 안 함
|
||||||
if (draggedProjectData.PROJCTSEQ === targetProject.PROJCTSEQ) {
|
if (draggedProjectData.PROJCTSEQ === targetProject.PROJCTSEQ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 선택된 프로젝트 변경
|
pendingProjectChange.value = {
|
||||||
|
projctSeq: targetProject.PROJCTSEQ,
|
||||||
|
memberSeq: user.value.id
|
||||||
|
};
|
||||||
|
|
||||||
checkedInProject.value = targetProject;
|
checkedInProject.value = targetProject;
|
||||||
|
selectedProject.value = targetProject.PROJCTSEQ;
|
||||||
projectStore.setSelectedProject(targetProject);
|
projectStore.setSelectedProject(targetProject);
|
||||||
|
|
||||||
// select 값도 변경
|
// 기존 UI 업데이트
|
||||||
selectedProject.value = targetProject.PROJCTSEQ;
|
commuters.value = commuters.value.map(commuter =>
|
||||||
|
commuter.MEMBERSEQ === user.value.id
|
||||||
$api.patch('commuters/update', {
|
? { ...commuter, PROJCTNAM: targetProject.PROJCTNAM, PROJCTLVE: targetProject.PROJCTSEQ }
|
||||||
projctSeq: targetProject.PROJCTSEQ,
|
: commuter
|
||||||
memberSeq: user.value.id,
|
);
|
||||||
}).then(res => {
|
|
||||||
if (res.status === 200) {
|
|
||||||
todaysCommuter();
|
|
||||||
loadCommuters();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 오늘 출근 모든 사용자 조회
|
// 오늘 출근 모든 사용자 조회
|
||||||
|
|||||||
@ -13,8 +13,10 @@
|
|||||||
</p>
|
</p>
|
||||||
<div class="row gx-2">
|
<div class="row gx-2">
|
||||||
<div
|
<div
|
||||||
v-for="commuter in commuters.filter(c => c.PROJCTNAM === post.PROJCTNAM)"
|
v-for="commuter in commuters.filter(c =>
|
||||||
:key="commuter.COMMUTCMT"
|
(c.PROJCTLVE ? c.PROJCTLVE === post.PROJCTSEQ : c.PROJCTNAM === post.PROJCTNAM)
|
||||||
|
)"
|
||||||
|
:key="commuter.MEMBERSEQ"
|
||||||
class="col-4"
|
class="col-4"
|
||||||
>
|
>
|
||||||
<div class="ratio ratio-1x1">
|
<div class="ratio ratio-1x1">
|
||||||
@ -77,7 +79,14 @@ const sortedProjects = computed(() => {
|
|||||||
});
|
});
|
||||||
// 현재 사용자 확인
|
// 현재 사용자 확인
|
||||||
const isCurrentUser = (commuter) => {
|
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 드래그 시작 이벤트 핸들러
|
// 드래그 시작 이벤트 핸들러
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user