/* 작성자 : 박지윤 작성일 : 2025-02-25 수정자 : 수정일 : 설명 : 프로젝트 목록 */ 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: { searchKeyword: searchText || '', category: selectedYear || '', excludeEnded: excludeEnded }, }); 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 ? { ...project } : null; if (project) { localStorage.setItem('selectedProject', JSON.stringify(project)); } else { localStorage.removeItem('selectedProject'); } }; const getSelectedProject = () => { if (!selectedProject.value) { const storedProject = localStorage.getItem('selectedProject'); if (storedProject) { selectedProject.value = JSON.parse(storedProject); } } return selectedProject.value; }; // 프로젝트 리스트가 변경될 때 자동으로 반응 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 }; });