퇴근지 추가

This commit is contained in:
yoon 2025-03-27 18:12:11 +09:00
parent 8dcb69bcb6
commit dd268c0df6
3 changed files with 53 additions and 25 deletions

View File

@ -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);
} }
}); });
}; };

View File

@ -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();
}
});
}; };
// //

View File

@ -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;
}; };
// //