@@ -262,28 +262,28 @@
const user = ref(null);
const selectedProject = ref(null);
- // 내가 참여하고 있는 프로젝트 목록
- const myProjects = computed(() => {
- return projectStore.memberProjectList || [];
+ // 내가 참여하고 있는 진행 중인 프로젝트 목록
+ const myActiveProjects = computed(() => {
+ return projectStore.activeMemberProjectList || [];
});
- // 내가 참여하고 있지 않은 프로젝트 목록
- const otherProjects = computed(() => {
- if (!projectStore.projectList || !projectStore.memberProjectList) return [];
+ // 내가 참여하고 있지 않은 진행 중인 프로젝트 목록
+ const otherActiveProjects = computed(() => {
+ if (!projectStore.activeProjectList) return [];
- // 내 프로젝트 ID 목록
- const myProjectIds = projectStore.memberProjectList.map(p => p.PROJCTSEQ);
+ // 내 프로젝트 ID 목록
+ const myProjectIds = myActiveProjects.value.map(p => p.PROJCTSEQ);
- // 내 프로젝트가 아닌 프로젝트만 필터링
- return projectStore.projectList.filter(p => !myProjectIds.includes(p.PROJCTSEQ));
+ // 내 프로젝트가 아닌 프로젝트만 필터링
+ return projectStore.activeProjectList.filter(p => !myProjectIds.includes(p.PROJCTSEQ));
});
// 프로젝트 선택 변경 시 스토어에 저장
const updateSelectedProject = () => {
if (!selectedProject.value) return;
- // 전체 프로젝트 리스트에서 선택된 프로젝트 찾기
- const selected = projectStore.projectList.find(
+ // 모든 진행 중인 프로젝트 리스트에서 선택된 프로젝트 찾기
+ let selected = projectStore.activeProjectList.find(
project => project.PROJCTSEQ === selectedProject.value
);
@@ -312,21 +312,21 @@
await userStore.userInfo();
user.value = userStore.user;
- if (authStore.isAuthenticated) {
- await projectStore.getProjectList('', '', 'true');
- }
+
+ await projectStore.loadAllProjectLists();
// 사용자가 참여하고 있는 프로젝트 목록
await projectStore.getMemberProjects();
+
// 저장된 선택 프로젝트
const storedProject = projectStore.getSelectedProject();
if (storedProject) {
selectedProject.value = storedProject.PROJCTSEQ;
- } else if (projectStore.memberProjectList.length > 0) {
+ } else if (projectStore.activeMemberProjectList.length > 0) {
// 저장된 선택 프로젝트가 없으면 첫 번째 참여 프로젝트 선택
- selectedProject.value = projectStore.memberProjectList[0].PROJCTSEQ;
- projectStore.setSelectedProject(projectStore.memberProjectList[0]);
+ selectedProject.value = projectStore.activeMemberProjectList[0].PROJCTSEQ;
+ projectStore.setSelectedProject(projectStore.activeMemberProjectList[0]);
}
});
diff --git a/src/stores/useProjectStore.js b/src/stores/useProjectStore.js
index ad5bc31..152e35e 100644
--- a/src/stores/useProjectStore.js
+++ b/src/stores/useProjectStore.js
@@ -9,15 +9,20 @@ import { defineStore } from 'pinia';
import { ref, watch } from 'vue';
import $api from '@api';
import { useUserInfoStore } from '@/stores/useUserInfoStore';
+import { useAuthStore } from '@/stores/useAuthStore';
export const useProjectStore = defineStore('project', () => {
- const projectList = ref([]);
- const memberProjectList = ref([]);
+ const projectList = ref([]); // 모든 프로젝트 (종료된 프로젝트 포함)
+ const activeProjectList = ref([]); // 진행 중인 프로젝트만 (종료된 프로젝트 제외)
+ const memberProjectList = ref([]); // 사용자가 속한 프로젝트
+ const activeMemberProjectList = ref([]); // 사용자가 속한 진행 중인 프로젝트
const selectedProject = ref(null);
const userStore = useUserInfoStore();
+ const authStore = useAuthStore();
- // 전체 프로젝트 가져오기
- const getProjectList = async (searchText = '', selectedYear = '', excludeEnded = '') => {
+ // 전체 프로젝트 가져오기 (종료된 프로젝트 포함 여부에 따라 다른 배열에 저장)
+ const getProjectList = async (searchText = '', selectedYear = '', excludeEnded = 'false') => {
+ if (!userStore.user) return;
const res = await $api.get('project/select', {
params: {
searchKeyword: searchText || '',
@@ -25,7 +30,22 @@ export const useProjectStore = defineStore('project', () => {
excludeEnded: excludeEnded
},
});
- projectList.value = res.data.data.projectList;
+
+ if (excludeEnded === 'true') {
+ // 종료되지 않은 프로젝트만 저장
+ activeProjectList.value = res.data.data.projectList;
+ } else {
+ // 모든 프로젝트 저장 (종료된 프로젝트 포함)
+ projectList.value = res.data.data.projectList;
+ }
+ };
+
+ // 모든 프로젝트 목록 로드 (종료 여부 구분하여 모두 로드)
+ const loadAllProjectLists = async (searchText = '', selectedYear = '') => {
+ // 진행 중인 프로젝트 로드
+ await getProjectList(searchText, selectedYear, 'true');
+ // 모든 프로젝트 로드 (종료된 프로젝트 포함)
+ await getProjectList(searchText, selectedYear, 'false');
};
// 사용자가 속한 프로젝트 목록 가져오기
@@ -33,10 +53,16 @@ export const useProjectStore = defineStore('project', () => {
if (!userStore.user) return; // 로그인한 사용자 확인
const res = await $api.get(`project/${userStore.user.id}`);
- memberProjectList.value = res.data.data;
+ const allMemberProjects = res.data.data;
+ memberProjectList.value = allMemberProjects;
- if (memberProjectList.value.length > 0 && !selectedProject.value) {
- setSelectedProject(memberProjectList.value[0]);
+ // 사용자가 속한 프로젝트 중 진행 중인 프로젝트만 필터링
+ activeMemberProjectList.value = allMemberProjects.filter(project =>
+ !project.ENDYN || project.ENDYN === 'N'
+ );
+
+ if (activeMemberProjectList.value.length > 0 && !selectedProject.value) {
+ setSelectedProject(activeMemberProjectList.value[0]);
}
};
@@ -60,19 +86,19 @@ export const useProjectStore = defineStore('project', () => {
};
// 프로젝트 리스트가 변경될 때 자동으로 반응
- watch(projectList, (newList) => {
+ watch(activeProjectList, (newList) => {
// 선택된 프로젝트가 없고 목록이 있는 경우
if (!selectedProject.value && newList.length > 0) {
// 사용자가 속한 프로젝트가 있는지 먼저 확인
- if (memberProjectList.value.length > 0) {
- setSelectedProject(memberProjectList.value[0]);
+ if (activeMemberProjectList.value.length > 0) {
+ setSelectedProject(activeMemberProjectList.value[0]);
} else {
setSelectedProject(newList[0]);
}
}
});
- watch(memberProjectList, (newList) => {
+ watch(activeMemberProjectList, (newList) => {
if (newList.length > 0) {
// 현재 선택된 프로젝트가 없는 경우 첫 번째 항목 선택
if (!selectedProject.value) {
@@ -88,14 +114,16 @@ export const useProjectStore = defineStore('project', () => {
}
});
-
return {
- projectList,
+ projectList, // 종료된 프로젝트 포함한 모든 프로젝트
+ activeProjectList, // 진행 중인 프로젝트만
+ memberProjectList, // 사용자가 속한 모든 프로젝트
+ activeMemberProjectList, // 사용자가 속한 진행 중인 프로젝트
selectedProject,
getProjectList,
- memberProjectList,
+ loadAllProjectLists, // 모든 프로젝트 목록 한번에 로드
getMemberProjects,
setSelectedProject,
- getSelectedProject
+ getSelectedProject,
};
});