+
+
+
+ {{ eventDate }}
+
+
+
+
+
+
![]()
+
{{ commuter.memberName }}
+
+
+ {{ commuter.COMMUTCMT }} ~ {{ commuter.COMMUTLVE || "00:00:00" }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/commuters/CommuterProjectList.vue b/src/components/commuters/CommuterProjectList.vue
new file mode 100644
index 0000000..8bbe329
--- /dev/null
+++ b/src/components/commuters/CommuterProjectList.vue
@@ -0,0 +1,82 @@
+
+
+
+
+ {{ post.PROJCTNAM }}
+
+
+
+
+
![User Profile]()
+
+
+
+
+
+
+
+
diff --git a/src/components/list/ProjectCard.vue b/src/components/list/ProjectCard.vue
index f91e608..c78d716 100644
--- a/src/components/list/ProjectCard.vue
+++ b/src/components/list/ProjectCard.vue
@@ -177,10 +177,12 @@ import ArrInput from '@c/input/ArrInput.vue';
import { useToastStore } from '@s/toastStore';
import { useUserInfoStore } from '@/stores/useUserInfoStore';
import commonApi from '@/common/commonApi';
+import { useProjectStore } from '@/stores/useProjectStore';
// 스토어
const toastStore = useToastStore();
const userStore = useUserInfoStore();
+const projectStore = useProjectStore();
// Props 정의
const props = defineProps({
@@ -448,7 +450,8 @@ const handleDelete = () => {
.then(res => {
if (res.status === 200) {
toastStore.onToast('삭제가 완료되었습니다.', 's');
- location.reload()
+ projectStore.getProjectList();
+ projectStore.getMemberProjects();
}
})
};
diff --git a/src/components/projectlist/ProjectList.vue b/src/components/projectlist/ProjectList.vue
index 2b28b22..ffededa 100644
--- a/src/components/projectlist/ProjectList.vue
+++ b/src/components/projectlist/ProjectList.vue
@@ -247,6 +247,8 @@
toastStore.onToast('프로젝트가 등록되었습니다.', 's');
closeCreateModal();
getProjectList();
+ projectStore.getMemberProjects();
+ formReset();
}
});
};
diff --git a/src/layouts/TheTop.vue b/src/layouts/TheTop.vue
index ba87094..fd4b95c 100644
--- a/src/layouts/TheTop.vue
+++ b/src/layouts/TheTop.vue
@@ -9,7 +9,7 @@
@@ -254,14 +254,13 @@
const router = useRouter();
const user = ref(null);
- const memberProject = ref({});
const selectedProject = ref(null);
// 프로젝트 선택 변경 시 스토어에 저장
const updateSelectedProject = () => {
if (!selectedProject.value) return;
- const selected = memberProject.value.find(
+ const selected = projectStore.memberProjectList.find(
project => project.PROJCTSEQ === selectedProject.value
);
@@ -270,23 +269,6 @@
}
};
- const getMemberProjects = async () => {
- const res = await $api.get(`project/${user.value.id}`);
- memberProject.value = res.data.data;
- projectStore.projectList = memberProject.value; // 스토어에도 저장
-
- // 이전에 선택된 프로젝트가 있으면 불러오기
- const storedProject = projectStore.getSelectedProject();
- if (storedProject) {
- selectedProject.value = storedProject.PROJCTSEQ;
- } else if (memberProject.value.length > 0) {
- // 없으면 첫 번째 프로젝트 선택
- selectedProject.value = memberProject.value[0].PROJCTSEQ;
- updateSelectedProject();
- }
-
- console.log(memberProject.value);
- };
// const { isDarkMode, switchToDarkMode, switchToLightMode } = useThemeStore();
@@ -300,16 +282,26 @@
await userStore.userInfo();
user.value = userStore.user;
- await getMemberProjects();
+ await projectStore.getMemberProjects();
+
+ // memberProjectList가 로드된 후 selectedProject 업데이트
+ if (projectStore.selectedProject) {
+ selectedProject.value = projectStore.selectedProject.PROJCTSEQ;
+ } else if (projectStore.memberProjectList.length > 0) {
+ selectedProject.value = projectStore.memberProjectList[0].PROJCTSEQ;
+ projectStore.setSelectedProject(projectStore.memberProjectList[0]);
+ }
});
+ // projectStore.selectedProject 변경 감지
watch(() => projectStore.selectedProject, (newProject) => {
if (newProject) {
- selectedProject.value = newProject.PROJCTSEQ; // select 값 강제 변경
+ selectedProject.value = newProject.PROJCTSEQ;
}
});
+
const handleLogout = async () => {
await authStore.logout();
router.push('/login');
diff --git a/src/stores/useProjectStore.js b/src/stores/useProjectStore.js
index dcba259..ce60232 100644
--- a/src/stores/useProjectStore.js
+++ b/src/stores/useProjectStore.js
@@ -8,11 +8,15 @@
import { defineStore } from 'pinia';
import { ref, watch } from 'vue';
import $api from '@api';
+import { useUserInfoStore } from '@/stores/useUserInfoStore';
export const useProjectStore = defineStore('project', () => {
const projectList = ref([]);
+ const memberProjectList = ref([]);
const selectedProject = ref(null);
+ const userStore = useUserInfoStore();
+ // 전체 프로젝트 가져오기
const getProjectList = async (searchText = '', selectedYear = '', excludeEnded = '') => {
const res = await $api.get('project/select', {
params: {
@@ -24,12 +28,25 @@ export const useProjectStore = defineStore('project', () => {
projectList.value = res.data.data.projectList;
};
+ // 사용자가 속한 프로젝트 목록 가져오기
+ const getMemberProjects = async () => {
+ if (!userStore.user) return; // 로그인한 사용자 확인
+
+ const res = await $api.get(`project/${userStore.user.id}`);
+ memberProjectList.value = res.data.data;
+
+ // 로그인 직후 자동으로 프로젝트 선택 (watch와 별개로 직접 처리)
+ if (memberProjectList.value.length > 0 && !selectedProject.value) {
+ setSelectedProject(memberProjectList.value[0]);
+ }
+ };
const setSelectedProject = (project) => {
- selectedProject.value = { ...project };
-
+ selectedProject.value = project ? { ...project } : null;
if (project) {
localStorage.setItem('selectedProject', JSON.stringify(project));
+ } else {
+ localStorage.removeItem('selectedProject');
}
};
@@ -45,15 +62,38 @@ export const useProjectStore = defineStore('project', () => {
// 프로젝트 리스트가 변경될 때 자동으로 반응
watch(projectList, (newList) => {
+
if (!selectedProject.value && newList.length > 0) {
setSelectedProject(newList[0]);
}
});
+ watch(memberProjectList, (newList) => {
+ if (newList.length > 0) {
+ // 현재 선택된 프로젝트가 없거나 목록에 없는 경우 첫 번째 항목 선택
+ if (!selectedProject.value) {
+ setSelectedProject(newList[0]);
+ } else {
+ // 선택된 프로젝트가 있는 경우 목록에 있는지 확인
+ const exists = newList.some(project =>
+ project.PROJCTSEQ === selectedProject.value.PROJCTSEQ);
+
+ if (!exists) {
+ setSelectedProject(newList[0]);
+ }
+ }
+ } else {
+ // 목록이 비어있으면 선택된 프로젝트를 null로 설정
+ setSelectedProject(null);
+ }
+ });
+
return {
projectList,
selectedProject,
getProjectList,
+ memberProjectList,
+ getMemberProjects,
setSelectedProject,
getSelectedProject
};
diff --git a/src/views/commuters/TheCommuters.vue b/src/views/commuters/TheCommuters.vue
index 4690967..5cef4b3 100644
--- a/src/views/commuters/TheCommuters.vue
+++ b/src/views/commuters/TheCommuters.vue
@@ -3,5 +3,5 @@