+ {roleType === 'CLUB' && (
+ <>
+
동아리원 관리
+
+
+
+
동아리원 목록
+ {!isEditMode ? (
+
+ ) : (
+
+
+
+
+
+ )}
+
+
+
+ {clubMemberListLoading ? (
+
로딩 중...
+ ) : clubMemberListError ? (
+
오류가 발생했습니다.
+ ) : clubMemberList?.data?.result?.content && clubMemberList.data.result.content.length > 0 ? (
+
+ {clubMemberList.data.result.content.map((member) => {
+ const isSelected = selectedMembers.includes(member.memberId);
+ return (
+
{
+ if (isEditMode) {
+ const memberId = member.memberId;
+ setSelectedMembers(prev => {
+ if (prev.includes(memberId)) {
+ return prev.filter(id => id !== memberId);
+ } else {
+ return [...prev, memberId];
+ }
+ });
+ }
+ }}
+ >
+
+
+

{
+ e.target.src = basicLogoImg;
+ }}
+ onClick={(e) => {
+ if (!isEditMode) {
+ e.stopPropagation();
+ navigate(`/profileDetail/${member.memberId}`);
+ }
+ }}
+ />
+ {member.temperature && (
+
스프 온도 {member.temperature}°C
+ )}
+
+
+
{
+ if (!isEditMode) {
+ e.stopPropagation();
+ navigate(`/profileDetail/${member.memberId}`);
+ }
+ }}
+ >
+ {member.nickname || '익명'}
+
+ {member.intro && (
+
{member.intro}
+ )}
+ {member.categoryDtoList && member.categoryDtoList.length > 0 && (
+
+ {member.categoryDtoList.map((category, index) => {
+ const categoryName = getLastCategoryName(category);
+ return categoryName ? (
+
+ {categoryName}
+
+ ) : null;
+ })}
+
+ )}
+
+
+
+
+ {isEditMode && isSelected && (
+

+ )}
+
+ );
+ })}
+
+ ) : (
+
동아리원이 없습니다.
+ )}
+
+
+
+
+
동아리원 신청
+
+ {clubJoinPendingListLoading ? (
+
로딩 중...
+ ) : clubJoinPendingListError ? (
+
오류가 발생했습니다.
+ ) : clubJoinPendingList?.data?.result?.content && clubJoinPendingList.data.result.content.length > 0 ? (
+
+ {clubJoinPendingList.data.result.content.map((member) => (
+
+
+
+

{
+ e.target.src = basicLogoImg;
+ }}
+ onClick={() => navigate(`/profileDetail/${member.memberId}`)}
+ />
+ {member.temperature && (
+
스프 온도 {member.temperature}°C
+ )}
+
+
+
navigate(`/profileDetail/${member.memberId}`)}
+ >
+ {member.nickname || '익명'}
+
+ {member.intro && (
+
{member.intro}
+ )}
+ {member.categoryDtoList && member.categoryDtoList.length > 0 && (
+
+ {member.categoryDtoList.map((category, index) => {
+ const categoryName = getLastCategoryName(category);
+ return categoryName ? (
+
+ {categoryName}
+
+ ) : null;
+ })}
+
+ )}
+
+
+
+
+
+
+
+ ))
+}
+
) : (
+
신청한 회원이 없습니다.
+ )}
+
+
+
+ >
+ )}
+ {roleType === 'STUDENT' && (
+ <>
+
내 동아리
+
+
+
+ {myClubListLoading ? (
+
로딩 중...
+ ) : myClubListError ? (
+
오류가 발생했습니다.
+ ) : myClubList?.data?.result?.content && myClubList.data.result.content.length > 0 ? (
+ myClubList.data.result.content.map((club) => (
+
+
+

+
+
+
navigate(`/profileDetail/${club.clubId}`)}
+ >{club.clubName}
+
|
+
인원 {club.memberCount}명
+
+
{club.clubIntro}
+
+
+
+
+ ))
+ ) : (
+
내 동아리가 없습니다.
+ )}
+
+
+
+ >
+ )}
+ {modalState.isOpen && (
+
+ )}
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/studentProfile/profileDetail.jsx b/src/components/studentProfile/profileDetail.jsx
index 3145a8c5..192dbd41 100644
--- a/src/components/studentProfile/profileDetail.jsx
+++ b/src/components/studentProfile/profileDetail.jsx
@@ -2,11 +2,13 @@ import { useNavigate, useParams } from "react-router-dom";
import backArrow from "../../assets/images/backArrow.svg";
import starOn from "../../assets/images/starOn.svg";
import starOff from "../../assets/images/starOff.svg";
-import BasicImg4 from "../../assets/images/BasicProfileImg4.png";
+import spoonMark from "../../assets/images/spoonMark.svg";
+import basicLogoImg from "../../assets/images/basiclogoimg.png";
import { useState, useEffect } from "react";
import { useQuery } from "@tanstack/react-query";
import { getProfileDetail } from "../../api/profile";
import { getFavorite, postFavorite, deleteFavorite } from "../../api/favorite";
+import { getClubMemberList, postClubMemberJoin } from "../../api/club";
import { UserStore } from "../../store/userStore";
import AlertModal from "../alertModal";
import SEO from "../seo";
@@ -14,6 +16,244 @@ import DeclareButton from "../declare/declareButton";
import { FAVORITE_ERRORS } from "../../constants/user";
import { handleApiError } from "../../utils/apiErrorHandler";
+// 학생 계정 프로필 UI 컴포넌트
+const StudentProfileUI = ({
+ userData,
+ userWorks,
+ star,
+ isAnimating,
+ showIntroSkeleton,
+ handleFavorite,
+ handleDeclareClick,
+ onWorkClick,
+ S3_BUCKET_URL,
+ basicLogoImg
+}) => {
+ return (
+
+
+ {/* 프로필 이미지 */}
+

{
+ e.target.src = basicLogoImg;
+ }}
+ />
+
+
+
+ {/* 닉네임 */}
+ {userData?.nickname ? (
+
{userData.nickname}
+ ) : (
+
+ )}
+
+
+ {/* 즐겨찾기 버튼 - 로그인한 사용자이고 본인이 아닐 때만 */}
+ {UserStore.getState().memberId && UserStore.getState().memberId !== userData?.id && (
+
+ )}
+
+
+
+
+ {/* 자기소개 */}
+ {userData?.intro ? (
+
{userData.intro}
+ ) : showIntroSkeleton ? (
+
+ ) : (
+
+ )}
+
+ {/* 개인 URL */}
+ {userData?.personalUrl ? (
+
{userData.personalUrl}
+ ) : showIntroSkeleton ? (
+
+ ) : (
+
+ )}
+
+
+
+ {userWorks && userWorks.length > 0 ? (
+
+ {userWorks.map((data) => (
+

onWorkClick(data.feedId)}
+ alt="작품 이미지"
+ />
+ ))}
+
+ ) : (
+
+ )}
+
+ );
+};
+
+// 동아리 계정 프로필 UI 컴포넌트
+const ClubProfileUI = ({
+ userData,
+ userWorks,
+ star,
+ isAnimating,
+ showIntroSkeleton,
+ handleFavorite,
+ handleDeclareClick,
+ onWorkClick,
+ S3_BUCKET_URL,
+ basicLogoImg,
+ handleClubMemberJoin,
+ clubMemberList
+}) => {
+ return (
+
+
목록으로 돌아가기
-
-
-
-
- {/* 프로필 이미지 */}
-

{
- e.target.src = BasicImg4;
- }}
- />
-
-
-
- {/* 닉네임 */}
- {userData?.nickname ? (
-
{userData.nickname}
- ) : (
-
- )}
-
-
-{/* 즐겨찾기 버튼 - 로그인한 사용자이고 본인이 아닐 때만 */}
-{UserStore.getState().memberId && UserStore.getState().memberId !== userData?.id && (
-
- )}
-
-
-
-
-
- {/* 자기소개 */}
- {userData?.intro ? (
-
{userData.intro}
- ) : showIntroSkeleton ? (
-
- ) : (
-
- )}
-
- {/* 개인 URL */}
- {userData?.personalUrl ? (
-
{userData.personalUrl}
- ) : showIntroSkeleton ? (
-
- ) : (
-
- )}
-
-
-
-
- {userWorks && userWorks.length > 0 ? (
-
- {userWorks.map((data) => (
-

onWorkClick(data.feedId)}
- alt="작품 이미지"
- />
- ))}
-
- ) : (
-
- )}
-
+
+ {/* 계정 타입에 따라 다른 UI 렌더링 */}
+ {isStudentAccount && (
+
+ )}
+
+ {isClubAccount && (
+
+ )}
{showLoginModal && (
)}
+ {showSuccessModal && (
+
{
+ setShowSuccessModal(false);
+ }}
+ />
+ )}
>
);
diff --git a/src/pages/mypage.jsx b/src/pages/mypage.jsx
index 84df2e41..8ef61eef 100644
--- a/src/pages/mypage.jsx
+++ b/src/pages/mypage.jsx
@@ -1,16 +1,19 @@
import React, { useState } from 'react';
+import SEO from '../components/seo';
// import { useNavigate } from 'react-router-dom';
import profileIcon from '../assets/images/profileIcon.svg'
import starIcon from '../assets/images/starIcon.svg'
import applyIcon from '../assets/images/applyIcon.svg'
import feedIcon from '../assets/images/feedIcon.svg'
import inquiryIcon from '../assets/images/inquiryIcon.svg'
+import clubIcon from '../assets/images/clubIcon.svg'
import ProfileEditContent from '../components/mypage/ProfileEditContent';
import ApplicationsContent from '../components/mypage/ApplicationsContent';
import FavoritesContent from '../components/mypage/FavoritesContent';
import InquiryContent from '../components/mypage/inquiryContent';
import CompanyApplicants from '../components/companyMyPage/companyApplicants';
+import ClubList from '../components/mypage/clubList';
import { UserStore } from '../store/userStore';
import MyFeed from '../components/mypage/myFeed';
@@ -42,6 +45,8 @@ export default function MyPage() {
return
;
case 'inquiry':
return
;
+ case 'clubList':
+ return
;
default:
return
;
}
@@ -81,6 +86,11 @@ export default function MyPage() {
label: '내 피드',
icon: feedIcon
});
+ roleSpecificMenus.push({
+ id: 'clubList',
+ label: '내 동아리',
+ icon: clubIcon
+ });
}
// MEMBER: 기업 지원 내역 보여줌
@@ -113,12 +123,27 @@ export default function MyPage() {
}
+ if (roleType === 'CLUB') {
+ roleSpecificMenus.push({
+ id: 'myFeed',
+ label: '내 피드',
+ icon: feedIcon
+ });
+ roleSpecificMenus.push({
+ id: 'clubList',
+ label: '동아리 목록',
+ icon: clubIcon
+ });
+ }
+
return [...baseMenus, ...roleSpecificMenus];
};
const menuItems = renderMenuItems();
return (
+ <>
+
{/* 모바일 메뉴 버튼 */}
+ >
);
}
\ No newline at end of file