From 1df899d77df9bf2543e5acfc662ebed48eb9f1b5 Mon Sep 17 00:00:00 2001 From: begojara99 Date: Fri, 20 Jun 2025 22:37:13 +0900 Subject: [PATCH 01/62] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=B3=B4=EC=83=81=20?= =?UTF-8?q?=ED=8D=BC=EB=B8=94=EB=A6=AC=EC=8B=B1=20=EC=9E=91=EC=97=85=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mypage.mypage.challenge.compensation.jsx | 3 + .../Mypage/Mypage.mypage.challenge.table.jsx | 232 +++++++++++++++++ .../Mypage/Mypage.mypage.challenge.tuple.jsx | 40 +++ .../user-pages/Mypage/Mypage.mypage.main.jsx | 8 + .../Mypage/Mypage.mypage.myinfo.jsx | 6 + .../Mypage.mypage.challenge.table.styles.js | 236 ++++++++++++++++++ .../Mypage.mypage.challenge.tuple.styles.js | 88 +++++++ .../Mypage.mypage.myboard.tuple.styles.js | 61 +++-- .../Styled/Mypage.mypage.myinfo.styles.js | 3 +- 9 files changed, 643 insertions(+), 34 deletions(-) create mode 100644 src/APP/user-pages/Mypage/Mypage.mypage.challenge.compensation.jsx create mode 100644 src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx create mode 100644 src/APP/user-pages/Mypage/Mypage.mypage.challenge.tuple.jsx create mode 100644 src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js create mode 100644 src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.tuple.styles.js diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.compensation.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.compensation.jsx new file mode 100644 index 0000000..fb756bc --- /dev/null +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.compensation.jsx @@ -0,0 +1,3 @@ +export default function Compensation() { + return
Hello
; +} diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx new file mode 100644 index 0000000..8fae035 --- /dev/null +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx @@ -0,0 +1,232 @@ +import React, { useState, useRef, useContext } from "react"; +import { useNavigate } from "react-router-dom"; +import ChallengeTuple from "./Mypage.mypage.challenge.tuple"; +import Compensation from "./Mypage.mypage.challenge.compensation"; +import * as itemS from "./Styled/Mypage.mypage.challenge.table.styles"; +import request from "../../Api/request"; +import { AlertContext } from "../../Common/Alert/AlertContext"; + +export default function ChallengeTable({ + items, + inquiryCount, + isMemberMatch, + fetchinquiry = { fetchinquiry }, +}) { + const navigate = useNavigate(); + const { alert } = useContext(AlertContext); + + const [checkedItems, setCheckedItems] = useState({ + inquiry: {}, // 게시한 글의 체크 상태 + }); + const [isAllChecked, setIsAllChecked] = useState({ + inquiry: false, // 게시한 글의 전체 선택 상태 + }); + + const [count, setCount] = useState(inquiryCount); //TODO - - 임시로 10 넣음 + + // 게시글, 임시저장글 탭 변경 + const [selectedTab, setSelectedTab] = useState("inquiry"); + + // 스크롤 동기화를 위한 참조 + const contentRef = useRef(null); + const scrollRef = useRef(null); + const [thumbTop, setThumbTop] = useState(0); + + // 스크롤 동기화 함수 + const handleScrollSync = (e) => { + const scrollable = e.target; + const syncScroll = + scrollable === contentRef.current + ? scrollRef.current + : contentRef.current; + + if (syncScroll) { + const scrollRatio = + scrollable.scrollTop / + (scrollable.scrollHeight - scrollable.clientHeight); + + if (scrollable === contentRef.current) { + setThumbTop(scrollRatio * (scrollRef.current.clientHeight - 96)); // Thumb 위치 업데이트 + } + syncScroll.scrollTop = scrollable.scrollTop; + } + }; + + // Thumb 위치 클릭으로 콘텐츠 스크롤 제어 + const handleThumbDrag = (e) => { + const containerHeight = contentRef.current.clientHeight; + const scrollableHeight = contentRef.current.scrollHeight; + const thumbHeight = scrollRef.current.clientHeight - 96; + + const newTop = Math.min( + Math.max(0, e.clientY - scrollRef.current.getBoundingClientRect().top), + thumbHeight + ); + + setThumbTop(newTop); + contentRef.current.scrollTop = + (newTop / thumbHeight) * (scrollableHeight - containerHeight); + }; + + const handleCheckChange = (inquiryId) => { + setCheckedItems((prev) => ({ + ...prev, + [selectedTab]: { + ...prev[selectedTab], + [inquiryId]: !prev[selectedTab][inquiryId], + }, + })); + }; + + const handleAllCheckChange = () => { + const newIsAllChecked = !isAllChecked[selectedTab]; + setIsAllChecked((prev) => ({ + ...prev, + [selectedTab]: newIsAllChecked, + })); + + const newCheckedItems = {}; + items.forEach((item) => { + newCheckedItems[item.inquiryId] = newIsAllChecked; + }); + + setCheckedItems((prev) => ({ + ...prev, + [selectedTab]: newCheckedItems, + })); + }; + + const handleDelete = async (items) => { + const idsToDelete = Object.keys(items[selectedTab]).filter( + (id) => items[selectedTab][id] === true + ); + + if (idsToDelete.length === 0) { + alert("삭제할 게시글을 선택해주세요."); + return; + } + + try { + for (let id of idsToDelete) { + const response = await request.delete(`/inquiry/${id}`); + if (response.isSuccess) { + console.log(`게시글 ${id} 삭제 성공:`, response); + } else { + console.error(`게시글 ${id} 삭제 실패:`, response); + } + } + + fetchinquiry(); + setCheckedItems((prev) => ({ + ...prev, + [selectedTab]: {}, + })); + setIsAllChecked((prev) => ({ + ...prev, + [selectedTab]: false, + })); + } catch (error) { + console.error("삭제 처리 중 오류 발생:", error); + } + }; + + const handleWriteClick = () => { + navigate("/writeinquiry"); + }; + + return ( + + + + + 챌린지 보상 현황 + + 참여 중인 정규스터디 출석부에서 획득한 챌린지 보상을 사용할 수 + 있습니다. + + + + + + + + 획득/사용 + 제목 + 획득/사용일 + 총합 + + + + {items.length === 0 ? ( + + 등록한 문의가 없습니다. + + ) : ( + items.map((item) => ( + handleCheckChange(item.inquiryId)} + // isMemberMatch={isMemberMatch} + /> + )) + )} + + + + + {count > 8 && ( + + + + + + + + )} + + + + {isMemberMatch && ( + + + 전체 선택 + + )} + {isMemberMatch && ( + + handleDelete(checkedItems)}> + 삭제 + + + 글쓰기 + + + )} + + + ); +} diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.tuple.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.tuple.jsx new file mode 100644 index 0000000..7f82ae3 --- /dev/null +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.tuple.jsx @@ -0,0 +1,40 @@ +// import React, { useEffect, useContext } from "react"; +// import { useNavigate } from "react-router-dom"; +import * as itemS from "./Styled/Mypage.mypage.challenge.tuple.styles"; + +export default function ChallengeTuple({ item }) { + // const navigate = useNavigate(); + + const formatDate = (createdTime) => { + const date = new Date(createdTime); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, "0"); + const day = String(date.getDate()).padStart(2, "0"); + return `${year}.${month}.${day}`; + }; + + const truncateTitle = (name) => { + if (name.length > 30) { + return name.slice(0, 29) + "..."; + } + return name; + }; + + const moveToDetail = (id) => { + // navigate(`/inquiryboard/${id}`); + }; + + return ( + + {/* */} + {item.categoryName} + moveToDetail(item.inquiryId)}> + + {truncateTitle(item.title)} + + + {formatDate(item.createdTime)} + {item.viewCount}회 + + ); +} diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.main.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.main.jsx index 7858541..a8d7ff2 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.main.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.main.jsx @@ -5,6 +5,7 @@ import ParticipatedStudyList from "./Mypage.mypage.participatedstudylist"; import AppliedStudyList from "./Mypage.mypage.appliedstudylist"; import MyBoardTable from "./Mypage.mypage.myboard.table"; import MyInquiryTable from "./Mypage.mypage.myinquiry.table"; +import ChallengeTable from "./Mypage.mypage.challenge.table"; import * as itemS from "./Styled/Mypage.mypage.main.styles"; import request from "../../Api/request"; @@ -198,6 +199,13 @@ export default function MyPage() { isMemberMatch={isMemberMatch} fetchinquiry={fetchinquiry} /> + ) : selectedTab === "challenge" ? ( + ) : null} diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.myinfo.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.myinfo.jsx index 8a35137..8fd1353 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.myinfo.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.myinfo.jsx @@ -44,6 +44,12 @@ export default function MyInfo({ + handleTabClick("challenge")} + active={activeTab === "challenge"} + > + 챌린지 보상 + handleTabClick("study")} active={activeTab === "study"} diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js new file mode 100644 index 0000000..443d481 --- /dev/null +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js @@ -0,0 +1,236 @@ +import styled from "styled-components"; +import * as tokens from "../../../../tokens"; + +export const Container = styled.div` + @media (max-width: 600px) { + width: 32rem; + } +`; + +export const Table = styled.div` + display: flex; + flex-direction: column; +`; + +export const TableContainerWrapper = styled.div` + display: flex; + flex-direction: row; +`; + +export const TabBtnContainer = styled.div` + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + width: 100%; + border-bottom: 0.04rem solid ${tokens.colors.B_Grey_2}; + padding-bottom: 0.5rem; + margin-top: 4rem; + margin-bottom: 1.83rem; +`; + +export const TabBox = styled.div` + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; +`; + +export const TabHead = styled.div` + ${tokens.typography.T3_B_24}; + text-decoration: underline; +`; + +export const TabBody = styled.div` + ${tokens.typography.B2_M_16}; +`; + +// 카테고리 파트 시작 +export const TableContainer = styled.div` + display: flex; + position: relative; + flex-direction: column; + box-shadow: 0 0.17rem 0.42rem 0 rgba(77, 114, 158, 0.25); + border-radius: 0 0 0.32rem 0.32rem; +`; + +export const CategoryContainer = styled.div` + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + background-color: #dfe8f1; + width: 50rem; + height: 2.292rem; + border-bottom: 0.04rem solid ${tokens.colors.B_Grey_4}; + border-radius: 0.32rem 0.32rem 0 0; + @media (max-width: 600px) { + width: 100%; + } +`; + +export const CategoryStatus = styled.div` + ${tokens.typography.T5_SB_16}; + color: ${tokens.colors.Black}; + text-align: center; + width: 8.2rem; +`; + +export const CategoryTitle = styled.div` + ${tokens.typography.T5_SB_16}; + color: ${tokens.colors.Black}; + text-align: center; + width: 21rem; +`; + +export const CategoryDate = styled.div` + ${tokens.typography.T5_SB_16}; + color: ${tokens.colors.Black}; + text-align: center; + width: 3.5rem; + margin-left: 10rem; +`; + +export const CategoryView = styled.div` + ${tokens.typography.T5_SB_16}; + color: ${tokens.colors.Black}; + width: 1.4rem; + margin-left: 3.333rem; + margin-right: 1.25rem; +`; + +// 카테고리 파트 끝 + +export const TupleContainerWrapper = styled.div` + display: flex; +`; + +export const TupleContainer = styled.div` + flex: 1; + overflow: auto; + max-height: 19rem; + display: flex; + flex-direction: column; + scrollbar-width: none; +`; + +export const ScrollbarContainer = styled.div` + display: flex; + flex-direction: column; + margin-left: 0.833rem; +`; + +export const ScrollTopArrow = styled.img` + margin-top: 2.292rem; +`; + +export const ScrollBottomArrow = styled.img``; + +export const ScrollbarWrapper = styled.div` + overflow-y: auto; + height: 18.417rem; + width: 0.25rem; + background-color: ${tokens.colors.B_Grey_3}; + border-radius: 0.125rem; + margin: 0.042rem 0; +`; + +export const ScrollbarThumb = styled.div` + width: 100%; + height: 96px; + background: ${tokens.colors.B_Grey_6}; + border-radius: 0.125rem; + position: relative; + top: 0; + cursor: pointer; +`; + +export const ButtonContainer = styled.div` + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 50rem; + margin-top: 1.458rem; +`; + +export const AllCheckBox = styled.div` + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 6.416rem; + height: 2rem; +`; + +export const AllCheck = styled.input` + width: 0.875rem; + height: 0.875rem; + display: flex; + justify-content: center; + align-items: center; + appearance: none; + border: 0.08rem solid #ccc; + border-radius: 0.16rem; + background-color: #fff; + margin-left: 1.05rem; + + cursor: pointer; + + &:checked { + background-color: #007bff; + border-color: #007bff; + } + + &:checked::before { + content: "✔"; + color: #fff; + font-size: 0.583rem; + display: flex; + align-items: center; + justify-content: center; + } +`; + +export const AllCheckText = styled.div` + ${tokens.typography.Sub_B_16}; + color: ${tokens.colors.Black}; +`; + +export const ButtonBox = styled.div` + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 15rem; +`; + +export const DeleteButton = styled.button` + background-color: ${tokens.colors.Red}; + color: ${tokens.colors.White}; + border: none; + width: 6.67rem; + height: 2rem; + border-radius: 0.16rem; + cursor: pointer; +`; + +export const WriteButton = styled.button` + background-color: ${tokens.colors.B_Grey_7}; + color: ${tokens.colors.White}; + border: none; + width: 6.67rem; + height: 2rem; + border-radius: 0.16rem; + cursor: pointer; +`; + +export const NoItemsContainer = styled.div` + display: flex; + justify-content: center; + align-items: center; + ${tokens.typography.B2_M_16}; + color: ${tokens.colors.B_Grey_5}; + min-height: 2.333rem; +`; diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.tuple.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.tuple.styles.js new file mode 100644 index 0000000..7c89d0f --- /dev/null +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.tuple.styles.js @@ -0,0 +1,88 @@ +import styled from "styled-components"; +import * as tokens from "../../../../tokens"; + +export const Container = styled.div``; + +// 튜플 파트 시작 +export const TupleContainer = styled.div` + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 50rem; + min-height: 2.333rem; + border-bottom: 0.04rem solid ${tokens.colors.B_Grey_3}; + + /* &:hover { + background-color: ${(props) => + props.temp === "true" ? "inherit" : tokens.colors.B_Grey_2}; + cursor: ${(props) => + props.temp === "true" + ? "default" + : props["data-delete-yn"] + ? "not-allowed" + : "pointer"}; + } */ + @media (max-width: 600px) { + width: 100%; + } +`; + +// export const Blank = styled.div` +// width: 0.875rem; +// `; + +export const TupleStatus = styled.div` + display: flex; + justify-content: center; + align-items: center; + ${tokens.typography.B2_M_16}; + color: ${tokens.colors.Black}; + width: 8.2rem; + /* min-height: 2.333rem; */ +`; + +export const TupleTitleBox = styled.div` + display: flex; + justify-content: flex-start; + align-items: center; + /* min-height: 2.333rem; */ + width: 21rem; + /* margin-left: 3.3rem; + margin-right: 8.117rem; */ +`; + +export const TupleTitle = styled.span` + ${tokens.typography.B2_M_16}; + color: ${(props) => + props["data-delete-yn"] ? tokens.colors.Sub_3 : tokens.colors.Black}; +`; + +export const TupleDate = styled.div` + display: flex; + justify-content: center; + align-items: center; + ${tokens.typography.B2_M_16}; + color: ${tokens.colors.Black}; + /* width: 5.25rem; */ + width: 3.5rem; + margin-left: 10rem; + /* min-height: 2.333rem; */ +`; + +export const TupleView = styled.div` + display: flex; + justify-content: center; + align-items: center; + ${tokens.typography.B2_M_16}; + color: ${tokens.colors.Black}; + /* width: 3rem; + margin-left: 0.833rem; + margin-right: 2.43rem; */ + width: 1.4rem; + margin-left: 3.333rem; + margin-right: 1.25rem; + /* min-height: 2.333rem; */ +`; + +// 튜플 파트 끝 diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myboard.tuple.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myboard.tuple.styles.js index e9a0f73..e2adfdf 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myboard.tuple.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myboard.tuple.styles.js @@ -1,11 +1,7 @@ -import styled from 'styled-components'; -import * as tokens from "../../../../tokens" - - -export const Container = styled.div` - -`; +import styled from "styled-components"; +import * as tokens from "../../../../tokens"; +export const Container = styled.div``; // 튜플 파트 시작 export const TupleContainer = styled.div` @@ -16,17 +12,18 @@ export const TupleContainer = styled.div` width: 50rem; border-bottom: 0.04rem solid ${tokens.colors.B_Grey_3}; - // &:hover { - // background-color: ${tokens.colors.B_Grey_2}; - // cursor: ${(props) => (props['data-delete-yn'] ? 'not-allowed' : 'pointer')}; - // } &:hover { - background-color: ${(props) => (props.temp === 'true' ? 'inherit' : tokens.colors.B_Grey_2)}; - cursor: ${(props) => (props.temp === 'true' ? 'default' : props['data-delete-yn'] ? 'not-allowed' : 'pointer')}; + background-color: ${(props) => + props.temp === "true" ? "inherit" : tokens.colors.B_Grey_2}; + cursor: ${(props) => + props.temp === "true" + ? "default" + : props["data-delete-yn"] + ? "not-allowed" + : "pointer"}; } `; - export const CheckBox = styled.input` width: 0.875rem; height: 0.875rem; @@ -46,7 +43,7 @@ export const CheckBox = styled.input` } &:checked::before { - content: '✔'; + content: "✔"; color: #fff; font-size: 0.583rem; display: flex; @@ -74,7 +71,7 @@ export const InquiryCheckBox = styled.input` } &:checked::before { - content: '✔'; + content: "✔"; color: #fff; font-size: 0.583rem; display: flex; @@ -83,7 +80,6 @@ export const InquiryCheckBox = styled.input` } `; - export const Blank = styled.div` width: 0.875rem; `; @@ -112,17 +108,16 @@ export const TupleTitleBox = styled.div` // cursor: pointer; `; - export const DeletedIcon = styled.img` width: 0.833rem; height: 0.833rem; margin-right: 0.16rem; `; - export const TupleTitle = styled.span` ${tokens.typography.B2_M_16}; - color: ${(props) => (props['data-delete-yn']? tokens.colors.Sub_3 : tokens.colors.Black)}; + color: ${(props) => + props["data-delete-yn"] ? tokens.colors.Sub_3 : tokens.colors.Black}; `; export const HighlightedText = styled.span` @@ -131,17 +126,17 @@ export const HighlightedText = styled.span` `; export const NewIcon = styled.div` - display: flex; - justify-content: center; - align-items: center; - ${tokens.typography.B2_M_16}; - background-color: rgba(251, 170, 132, 0.2); - color: ${tokens.colors.Sub_3}; - width: 2.17rem; - height: 0.88rem; - border: none; - border-radius: 0.17rem; - margin-left: 0.17rem; + display: flex; + justify-content: center; + align-items: center; + ${tokens.typography.B2_M_16}; + background-color: rgba(251, 170, 132, 0.2); + color: ${tokens.colors.Sub_3}; + width: 2.17rem; + height: 0.88rem; + border: none; + border-radius: 0.17rem; + margin-left: 0.17rem; `; export const TupleWriter = styled.div` @@ -202,7 +197,8 @@ export const TupleProcess = styled.div` `; export const ProcessingYNBox = styled.div` - background-color: ${({ solvedYn }) => (solvedYn ? tokens.colors.Blue_0_Main : tokens.colors.Grey_4)}; + background-color: ${({ solvedYn }) => + solvedYn ? tokens.colors.Blue_0_Main : tokens.colors.Grey_4}; color: ${tokens.colors.White}; width: 3.167rem; height: 0.875rem; @@ -214,4 +210,3 @@ export const ProcessingYNBox = styled.div` `; // 튜플 파트 끝 - diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myinfo.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myinfo.styles.js index 3efa3b1..c359354 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myinfo.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myinfo.styles.js @@ -57,7 +57,8 @@ export const TabBox = styled.div` flex-direction: row; align-items: center; justify-content: space-between; - width: ${(props) => (props.isInquiryVisible ? "13.34rem" : "8rem")}; + /* width: ${(props) => (props.isInquiryVisible ? "13.34rem" : "8rem")}; */ + width: ${(props) => (props.isInquiryVisible ? "20.84rem" : "15.5rem")}; height: 2rem; `; From d0911ad79c7540dc066e6fb289af001844e9c3a2 Mon Sep 17 00:00:00 2001 From: begojara99 Date: Sun, 22 Jun 2025 16:00:07 +0900 Subject: [PATCH 02/62] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=B3=B4=EC=83=81=20?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=20=ED=8D=BC=EB=B8=94=EB=A6=AC?= =?UTF-8?q?=EC=8B=B1=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mypage/Mypage.mypage.challenge.table.jsx | 241 +++++++----------- .../Mypage.mypage.challenge.table.styles.js | 145 +++++------ .../Mypage.mypage.challenge.tuple.styles.js | 1 + 3 files changed, 157 insertions(+), 230 deletions(-) diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx index 8fae035..618d2fc 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx @@ -12,20 +12,12 @@ export default function ChallengeTable({ isMemberMatch, fetchinquiry = { fetchinquiry }, }) { - const navigate = useNavigate(); - const { alert } = useContext(AlertContext); - - const [checkedItems, setCheckedItems] = useState({ - inquiry: {}, // 게시한 글의 체크 상태 - }); - const [isAllChecked, setIsAllChecked] = useState({ - inquiry: false, // 게시한 글의 전체 선택 상태 - }); - const [count, setCount] = useState(inquiryCount); //TODO - - 임시로 10 넣음 - // 게시글, 임시저장글 탭 변경 - const [selectedTab, setSelectedTab] = useState("inquiry"); + const [sortType, setSortType] = useState("LATEST"); + + const [sortText, setSortText] = useState("전체"); + const [isSortDropVisible, setIsSortDropVisible] = useState(false); // 정렬 드롭박스 열기/닫기 // 스크롤 동기화를 위한 참조 const contentRef = useRef(null); @@ -68,70 +60,16 @@ export default function ChallengeTable({ (newTop / thumbHeight) * (scrollableHeight - containerHeight); }; - const handleCheckChange = (inquiryId) => { - setCheckedItems((prev) => ({ - ...prev, - [selectedTab]: { - ...prev[selectedTab], - [inquiryId]: !prev[selectedTab][inquiryId], - }, - })); + const toggleSortDrop = () => { + setIsSortDropVisible((prevState) => !prevState); }; - const handleAllCheckChange = () => { - const newIsAllChecked = !isAllChecked[selectedTab]; - setIsAllChecked((prev) => ({ - ...prev, - [selectedTab]: newIsAllChecked, - })); - - const newCheckedItems = {}; - items.forEach((item) => { - newCheckedItems[item.inquiryId] = newIsAllChecked; - }); - - setCheckedItems((prev) => ({ - ...prev, - [selectedTab]: newCheckedItems, - })); - }; - - const handleDelete = async (items) => { - const idsToDelete = Object.keys(items[selectedTab]).filter( - (id) => items[selectedTab][id] === true + const onSortType = (type) => { + setIsSortDropVisible(false); + setSortType(type); + setSortText( + type === "LATEST" ? "전체" : type === "VIEW_COUNT" ? "획득" : "사용" ); - - if (idsToDelete.length === 0) { - alert("삭제할 게시글을 선택해주세요."); - return; - } - - try { - for (let id of idsToDelete) { - const response = await request.delete(`/inquiry/${id}`); - if (response.isSuccess) { - console.log(`게시글 ${id} 삭제 성공:`, response); - } else { - console.error(`게시글 ${id} 삭제 실패:`, response); - } - } - - fetchinquiry(); - setCheckedItems((prev) => ({ - ...prev, - [selectedTab]: {}, - })); - setIsAllChecked((prev) => ({ - ...prev, - [selectedTab]: false, - })); - } catch (error) { - console.error("삭제 처리 중 오류 발생:", error); - } - }; - - const handleWriteClick = () => { - navigate("/writeinquiry"); }; return ( @@ -147,86 +85,89 @@ export default function ChallengeTable({ - - - - 획득/사용 - 제목 - 획득/사용일 - 총합 - - - - {items.length === 0 ? ( - - 등록한 문의가 없습니다. - - ) : ( - items.map((item) => ( - handleCheckChange(item.inquiryId)} - // isMemberMatch={isMemberMatch} - /> - )) - )} - - - - {count > 8 && ( - - - - + + + {sortText} + + + {isSortDropVisible && ( + + onSortType("LATEST")}> + 전체 + + onSortType("VIEW_COUNT")}> + 획득 + + onSortType("LIKE")}> + 사용 + + + )} + + + + + 획득/사용 + 제목 + 획득/사용일 + 총합 + + + + {items.length === 0 ? ( + + 등록한 문의가 없습니다. + + ) : ( + items.map((item) => ( + handleCheckChange(item.inquiryId)} + // isMemberMatch={isMemberMatch} + /> + )) + )} + + + + + {count > 8 && ( + + - - - - )} - + + + + + + )} + + - - {isMemberMatch && ( - - - 전체 선택 - - )} - {isMemberMatch && ( - - handleDelete(checkedItems)}> - 삭제 - - - 글쓰기 - - - )} - ); } diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js index 443d481..d619b73 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js @@ -46,6 +46,71 @@ export const TabBody = styled.div` ${tokens.typography.B2_M_16}; `; +export const SortTableContainer = styled.div` + display: flex; + flex-direction: column; + justify-content: right; +`; + +// 정렬 +export const SortContainer = styled.div` + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 5.92rem; + height: 1.5rem; + border: 0.04rem solid ${tokens.colors.B_Grey_3}; + border-radius: 0.17rem; + margin-top: 0.83rem; + position: relative; +`; + +export const CategoryDrop = styled.div` + ${tokens.typography.B3_M_14}; + color: ${tokens.colors.Grey_8}; + text-align: center; + cursor: pointer; +`; + +export const SortIcon = styled.img` + width: 1rem; + height: 1rem; + self-items: center; + cursor: pointer; +`; + +export const SortDrop = styled.div` + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background-color: ${tokens.colors.White}; + width: 5.92rem; + height: 4.5rem; + border-radius: 0.17rem; + position: absolute; + box-shadow: 0 0.08rem 0.42rem 0.08rem rgba(58, 107, 135, 0.1); + z-index: 99; + top: -0.17rem; +`; + +export const SortText = styled.div` + display: flex; + justify-content: center; + align-items: center; + width: 5.92rem; + height: 1.5rem; + ${tokens.typography.B3_M_14}; + color: ${tokens.colors.Grey_6}; + + &:hover { + background-color: rgba(102, 201, 255, 0.2); + } + + cursor: pointer; +`; + // 카테고리 파트 시작 export const TableContainer = styled.div` display: flex; @@ -146,86 +211,6 @@ export const ScrollbarThumb = styled.div` cursor: pointer; `; -export const ButtonContainer = styled.div` - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - width: 50rem; - margin-top: 1.458rem; -`; - -export const AllCheckBox = styled.div` - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - width: 6.416rem; - height: 2rem; -`; - -export const AllCheck = styled.input` - width: 0.875rem; - height: 0.875rem; - display: flex; - justify-content: center; - align-items: center; - appearance: none; - border: 0.08rem solid #ccc; - border-radius: 0.16rem; - background-color: #fff; - margin-left: 1.05rem; - - cursor: pointer; - - &:checked { - background-color: #007bff; - border-color: #007bff; - } - - &:checked::before { - content: "✔"; - color: #fff; - font-size: 0.583rem; - display: flex; - align-items: center; - justify-content: center; - } -`; - -export const AllCheckText = styled.div` - ${tokens.typography.Sub_B_16}; - color: ${tokens.colors.Black}; -`; - -export const ButtonBox = styled.div` - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - width: 15rem; -`; - -export const DeleteButton = styled.button` - background-color: ${tokens.colors.Red}; - color: ${tokens.colors.White}; - border: none; - width: 6.67rem; - height: 2rem; - border-radius: 0.16rem; - cursor: pointer; -`; - -export const WriteButton = styled.button` - background-color: ${tokens.colors.B_Grey_7}; - color: ${tokens.colors.White}; - border: none; - width: 6.67rem; - height: 2rem; - border-radius: 0.16rem; - cursor: pointer; -`; - export const NoItemsContainer = styled.div` display: flex; justify-content: center; diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.tuple.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.tuple.styles.js index 7c89d0f..e8dbfc2 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.tuple.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.tuple.styles.js @@ -9,6 +9,7 @@ export const TupleContainer = styled.div` flex-direction: row; justify-content: center; align-items: center; + background-color: ${tokens.colors.White}; width: 50rem; min-height: 2.333rem; border-bottom: 0.04rem solid ${tokens.colors.B_Grey_3}; From 2483d7b4e8c7e47a0ba29e26fe270dd11cebf9db Mon Sep 17 00:00:00 2001 From: begojara99 Date: Tue, 24 Jun 2025 16:21:44 +0900 Subject: [PATCH 03/62] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=B3=B4=EC=83=81=20?= =?UTF-8?q?=EA=B5=90=ED=99=98=EA=B6=8C=20=ED=8D=BC=EB=B8=94=EB=A6=AC?= =?UTF-8?q?=EC=8B=B1=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/img/koala-gold.png | Bin 0 -> 10014 bytes public/img/koala-gold.svg | 87 ++++++++++++ .../Mypage.mypage.challenge.compensation.jsx | 3 - ...Mypage.mypage.challenge.rewardprogress.jsx | 41 ++++++ .../Mypage/Mypage.mypage.challenge.table.jsx | 4 +- ....mypage.challenge.rewardprogress.styles.js | 127 ++++++++++++++++++ 6 files changed, 257 insertions(+), 5 deletions(-) create mode 100644 public/img/koala-gold.png create mode 100644 public/img/koala-gold.svg delete mode 100644 src/APP/user-pages/Mypage/Mypage.mypage.challenge.compensation.jsx create mode 100644 src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx create mode 100644 src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js diff --git a/public/img/koala-gold.png b/public/img/koala-gold.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9384065a828870ceba7f066a284d487dd5d07b GIT binary patch literal 10014 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.compensation.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.compensation.jsx deleted file mode 100644 index fb756bc..0000000 --- a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.compensation.jsx +++ /dev/null @@ -1,3 +0,0 @@ -export default function Compensation() { - return
Hello
; -} diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx new file mode 100644 index 0000000..6cf63a2 --- /dev/null +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx @@ -0,0 +1,41 @@ +import React from "react"; +import * as ItemS from "./Styled/Mypage.mypage.challenge.rewardprogress.styles"; + +export default function RewardProgress() { + return ( + + + + + 누적 교환권 : 1 + + + + + + + + + + + + + 보상 사용하기 + + ); +} diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx index 618d2fc..05d4d3d 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx @@ -1,7 +1,7 @@ import React, { useState, useRef, useContext } from "react"; import { useNavigate } from "react-router-dom"; import ChallengeTuple from "./Mypage.mypage.challenge.tuple"; -import Compensation from "./Mypage.mypage.challenge.compensation"; +import RewardProgress from "./Mypage.mypage.challenge.rewardprogress"; import * as itemS from "./Styled/Mypage.mypage.challenge.table.styles"; import request from "../../Api/request"; import { AlertContext } from "../../Common/Alert/AlertContext"; @@ -82,7 +82,7 @@ export default function ChallengeTable({ 참여 중인 정규스터디 출석부에서 획득한 챌린지 보상을 사용할 수 있습니다. - + diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js new file mode 100644 index 0000000..7ddd700 --- /dev/null +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js @@ -0,0 +1,127 @@ +import styled, { css } from "styled-components"; +import * as tokens from "../../../../tokens"; + +export const Container = styled.div` + position: relative; + width: 20.54rem; /* 493px */ + height: 3.79rem; /* 91px */ + background: #dfe8f1; + border-radius: 0 0.42rem 0.42rem 0.42rem; /* 10px */ + display: flex; + align-items: center; + padding: 0 0.5rem; /* 12px */ + box-sizing: border-box; +`; + +export const Badge = styled.div` + position: absolute; + top: -1rem; /* -24px */ + left: 0.33rem; /* 8px */ + height: 1.17rem; /* 28px */ + padding: 0 0.5rem; /* 12px */ + background: #dfe8f1; + display: flex; + align-items: center; + gap: 0.25rem; /* 6px */ + border-radius: 0.42rem 0.42rem 0 0; /* 10px */ +`; + +export const TriangleL = styled.div` + position: absolute; + top: -0.75rem; /* -18px */ + left: 0; + width: 0.38rem; /* 9.2px */ + height: 0.76rem; /* 18.2px */ + background: #dfe8f1; + clip-path: polygon(99% 0, 100% 0, 100% 100%, 0% 100%); +`; + +export const TriangleR = styled.div` + position: absolute; + top: -0.75rem; /* -18px */ + /* right: 14.36rem; */ + right: 13.74rem; + width: 0.42rem; /* 10px */ + height: 0.93rem; /* 22.2px */ + background: #dfe8f1; + clip-path: polygon(0 0, 1% 0, 100% 100%, 0% 100%); +`; + +export const BadgeText = styled.span` + ${tokens.typography.B2_M_16}; + color: ${tokens.colors.B_Grey_7}; +`; + +export const ProgressBarWrapper = styled.div` + position: relative; + top: 0.08rem; /* 2px */ + left: 0.58rem; /* 14px */ + width: 10.5rem; /* 252px */ + height: 3rem; +`; + +export const ProgressBackground = styled.div` + position: absolute; + top: 1.417rem; + left: 0; + width: 100%; + height: 0.167rem; + background: #d2d9e5; + border-radius: 0.083rem; +`; + +export const ProgressFill = styled.div` + position: absolute; + top: 1.417rem; + left: 0; + width: 4.833rem; + height: 0.167rem; + background: linear-gradient(90deg, #00a5ff 74.04%, rgba(0, 165, 255, 0) 100%); + border-radius: 0.083rem; +`; + +export const Icon = styled.img` + position: absolute; + top: 0; + transform: translateX(-50%); + ${({ $position }) => $position && `left: ${$position};`} + + ${({ $size }) => + $size === "S" && + css` + width: 1rem; + height: 1rem; + `} + + ${({ $size }) => + $size === "M" && + css` + top: 0.5rem; + width: 2rem; + height: 2rem; + `} + + ${({ $size }) => + $size === "L" && + css` + width: 3rem; + height: 3rem; + `} +`; + +export const IconS = styled.img` + width: 1rem; + height: 1rem; +`; + +export const Button = styled.button` + background-color: ${tokens.colors.B_Grey_7}; + color: ${tokens.colors.White}; + ${tokens.typography.B2_M_16}; + width: 6.667rem; + height: 2rem; + border: none; + border-radius: 0.167rem; + margin-left: auto; + cursor: pointer; +`; From 354c2a1572bab280ff01771d9e21b01fcf9f04ec Mon Sep 17 00:00:00 2001 From: begojara99 Date: Tue, 24 Jun 2025 17:22:53 +0900 Subject: [PATCH 04/62] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=B3=B4=EC=83=81=20?= =?UTF-8?q?tab=20=ED=8D=BC=EB=B8=94=EB=A6=AC=EC=8B=B1=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Styled/Community.community.main.styles.js | 40 +- ...List.enterprisebootcamplist.main.styles.js | 35 +- .../Styled/Inquiry.inquiry.main.styles.js | 347 +++++++++--------- .../Mypage/Mypage.mypage.challenge.table.jsx | 2 + .../Mypage.mypage.challenge.table.styles.js | 42 ++- .../Mypage.mypage.myboard.table.styles.js | 13 +- 6 files changed, 251 insertions(+), 228 deletions(-) diff --git a/src/APP/user-pages/Community/Styled/Community.community.main.styles.js b/src/APP/user-pages/Community/Styled/Community.community.main.styles.js index 52ffbb3..df53314 100644 --- a/src/APP/user-pages/Community/Styled/Community.community.main.styles.js +++ b/src/APP/user-pages/Community/Styled/Community.community.main.styles.js @@ -1,7 +1,5 @@ -import styled, { css } from 'styled-components'; -import * as tokens from "../../../../tokens" - - +import styled, { css } from "styled-components"; +import * as tokens from "../../../../tokens"; export const OuterContainer = styled.div` // background: linear-gradient(to bottom, #EFF1FD, #E8F7FF); @@ -11,13 +9,13 @@ export const OuterContainer = styled.div` export const Container = styled.div` display: flex; - justify-content: center; + justify-content: center; `; export const InnerContainer = styled.div` display: flex; flex-direction: column; - align-items: center; + align-items: center; background-color: ${tokens.colors.White}; border-radius: 0.25rem; padding: 1.4rem 15rem 4rem 15rem; @@ -83,7 +81,7 @@ export const Search = styled.input` margin: 0 0.42rem; border: none; outline: none; - + &:focus { outline: none; } @@ -171,7 +169,7 @@ export const CategoryDrop = styled.div` export const SortIcon = styled.img` width: 1rem; height: 1rem; - self-items: center; + align-self: center; cursor: pointer; `; @@ -185,7 +183,7 @@ export const SortDrop = styled.div` height: 4.5rem; border-radius: 0.17rem; position: absolute; - box-shadow: 0 0.08rem 0.42rem 0.08rem rgba(58, 107, 135, 0.10); + box-shadow: 0 0.08rem 0.42rem 0.08rem rgba(58, 107, 135, 0.1); z-index: 99; top: -0.17rem; `; @@ -198,15 +196,14 @@ export const SortText = styled.div` height: 1.5rem; ${tokens.typography.B3_M_14}; color: ${tokens.colors.Grey_6}; - + &:hover { - background-color: rgba(102, 201, 255, 0.2); + background-color: rgba(102, 201, 255, 0.2); } - + cursor: pointer; `; - // 페이지 export const PaginationContainer = styled.div` display: flex; @@ -232,7 +229,7 @@ export const WriteBtn = styled.button` export const Pagination = styled.div` display: flex; justify-content: center; - align-items: center; + align-items: center; padding: 0.83rem; list-style: none; // margin-top: 1.6rem; @@ -241,24 +238,25 @@ export const Pagination = styled.div` export const PaginationArrow = styled.div` width: 1rem; height: 1rem; - background-image: url('/img/grayarrow.png'); + background-image: url("/img/grayarrow.png"); background-size: contain; background-repeat: no-repeat; - transform: ${(props) => (props.left ? 'rotate(180deg)' : 'none')}; - cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')}; + transform: ${(props) => (props.left ? "rotate(180deg)" : "none")}; + cursor: ${(props) => (props.disabled ? "not-allowed" : "pointer")}; opacity: ${(props) => (props.disabled ? 0.5 : 1)}; `; export const PaginationNumber = styled.div` display: flex; justify-content: center; - align-items: center; + align-items: center; margin: 0 0.21rem; width: 0.33rem; height: 0.88rem; padding: 0.42rem; cursor: pointer; - color: ${(props) => (props.active ? tokens.colors.Blue_3 : tokens.colors.B_Grey_7)}; - font-weight: ${(props) => (props.active ? 'bold' : 'normal')}; + color: ${(props) => + props.active ? tokens.colors.Blue_3 : tokens.colors.B_Grey_7}; + font-weight: ${(props) => (props.active ? "bold" : "normal")}; ${tokens.typography.B3_M_14}; -`; \ No newline at end of file +`; diff --git a/src/APP/user-pages/EnterpriseBootcampList/Styled/EnterpriseBootcampList.enterprisebootcamplist.main.styles.js b/src/APP/user-pages/EnterpriseBootcampList/Styled/EnterpriseBootcampList.enterprisebootcamplist.main.styles.js index e2bd190..ebcc434 100644 --- a/src/APP/user-pages/EnterpriseBootcampList/Styled/EnterpriseBootcampList.enterprisebootcamplist.main.styles.js +++ b/src/APP/user-pages/EnterpriseBootcampList/Styled/EnterpriseBootcampList.enterprisebootcamplist.main.styles.js @@ -1,5 +1,5 @@ -import styled from 'styled-components'; -import * as tokens from "../../../../tokens" +import styled from "styled-components"; +import * as tokens from "../../../../tokens"; export const OuterContainer = styled.div` position: relative; @@ -13,7 +13,7 @@ export const Container = styled.div` export const InnerContainer = styled.div` display: flex; flex-direction: column; - align-items: center; + align-items: center; border-radius: 0.83rem; padding: 6.58rem 0; margin-bottom: 4.08rem; @@ -68,7 +68,7 @@ export const Search = styled.input` margin: 0 0.42rem; border: none; outline: none; - + &:focus { outline: none; } @@ -152,7 +152,7 @@ export const CategoryDrop = styled.div` export const SortIcon = styled.img` width: 1rem; height: 1rem; - self-items: center; + align-self: center; cursor: pointer; `; @@ -166,7 +166,7 @@ export const SortDrop = styled.div` height: 3rem; border-radius: 0.17rem; position: absolute; - box-shadow: 0 0.08rem 0.42rem 0.08rem rgba(58, 107, 135, 0.10); + box-shadow: 0 0.08rem 0.42rem 0.08rem rgba(58, 107, 135, 0.1); z-index: 99; top: -0.17rem; `; @@ -179,11 +179,11 @@ export const SortText = styled.div` height: 1.5rem; ${tokens.typography.B3_M_14}; color: ${tokens.colors.Grey_6}; - + &:hover { - background-color: rgba(102, 201, 255, 0.2); + background-color: rgba(102, 201, 255, 0.2); } - + cursor: pointer; `; @@ -206,7 +206,7 @@ export const BtnContainer = styled.div` export const Pagination = styled.div` display: flex; justify-content: center; - align-items: center; + align-items: center; padding: 0.83rem; list-style: none; `; @@ -214,24 +214,25 @@ export const Pagination = styled.div` export const PaginationArrow = styled.div` width: 1rem; height: 1rem; - background-image: url('/img/grayarrow.png'); + background-image: url("/img/grayarrow.png"); background-size: contain; background-repeat: no-repeat; - transform: ${(props) => (props.left ? 'rotate(180deg)' : 'none')}; - cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')}; + transform: ${(props) => (props.left ? "rotate(180deg)" : "none")}; + cursor: ${(props) => (props.disabled ? "not-allowed" : "pointer")}; opacity: ${(props) => (props.disabled ? 0.5 : 1)}; `; export const PaginationNumber = styled.div` display: flex; justify-content: center; - align-items: center; + align-items: center; margin: 0 0.21rem; width: 0.33rem; height: 0.88rem; padding: 0.42rem; cursor: pointer; - color: ${(props) => (props.active ? tokens.colors.Blue_3 : tokens.colors.B_Grey_7)}; - font-weight: ${(props) => (props.active ? 'bold' : 'normal')}; + color: ${(props) => + props.active ? tokens.colors.Blue_3 : tokens.colors.B_Grey_7}; + font-weight: ${(props) => (props.active ? "bold" : "normal")}; ${tokens.typography.B3_M_14}; -`; \ No newline at end of file +`; diff --git a/src/APP/user-pages/Inquiry/Styled/Inquiry.inquiry.main.styles.js b/src/APP/user-pages/Inquiry/Styled/Inquiry.inquiry.main.styles.js index 4d7cdf5..37914b7 100644 --- a/src/APP/user-pages/Inquiry/Styled/Inquiry.inquiry.main.styles.js +++ b/src/APP/user-pages/Inquiry/Styled/Inquiry.inquiry.main.styles.js @@ -1,255 +1,256 @@ -import styled from 'styled-components'; -import * as tokens from '../../../../tokens'; +import styled from "styled-components"; +import * as tokens from "../../../../tokens"; export const OuterContainer = styled.div` - // background: linear-gradient(to bottom, #EFF1FD, #E8F7FF); - // position: relative; - width: 100%; + // background: linear-gradient(to bottom, #EFF1FD, #E8F7FF); + // position: relative; + width: 100%; `; export const Container = styled.div` - display: flex; - justify-content: center; + display: flex; + justify-content: center; `; export const InnerContainer = styled.div` - display: flex; - flex-direction: column; - align-items: center; - background-color: ${tokens.colors.White}; - border-radius: 0.25rem; - padding: 1.4rem 15rem 4rem 15rem; - margin-top: 5.583rem; - margin-bottom: 4.083rem; - // box-shadow: 0 0.17rem 1rem 0.17rem rgba(0, 0, 0, 0.04); + display: flex; + flex-direction: column; + align-items: center; + background-color: ${tokens.colors.White}; + border-radius: 0.25rem; + padding: 1.4rem 15rem 4rem 15rem; + margin-top: 5.583rem; + margin-bottom: 4.083rem; + // box-shadow: 0 0.17rem 1rem 0.17rem rgba(0, 0, 0, 0.04); `; export const TopContainer = styled.div` - display: flex; - justify-content: space-between; - width: 50rem; - border-bottom: 0.04rem solid ${tokens.colors.B_Grey_2}; - /* margin-bottom: 27px; */ - @media (max-width: 600px) { - width: 100%; - } + display: flex; + justify-content: space-between; + width: 50rem; + border-bottom: 0.04rem solid ${tokens.colors.B_Grey_2}; + /* margin-bottom: 27px; */ + @media (max-width: 600px) { + width: 100%; + } `; export const HeadContainer = styled.div` - display: flex; - flex-direction: row; - justify-content: flex-start; - align-items: center; - // width: 14.58rem; - margin-bottom: 0.83rem; - @media (max-width: 600px) { - width: 100%; - } + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + // width: 14.58rem; + margin-bottom: 0.83rem; + @media (max-width: 600px) { + width: 100%; + } `; export const Head = styled.div` - ${tokens.typography.T3_B_24}; + ${tokens.typography.T3_B_24}; `; // 검색 컨테이너 export const SearchContainer = styled.div` - display: flex; - flex-direction: row; - align-items: center; - background-color: ${tokens.colors.Grey_1}; - width: 13.5rem; - height: 1.42rem; - border: 0.04rem solid ${tokens.colors.Grey_3}; - border-radius: 0.17rem; - margin-bottom: 0.75rem; + display: flex; + flex-direction: row; + align-items: center; + background-color: ${tokens.colors.Grey_1}; + width: 13.5rem; + height: 1.42rem; + border: 0.04rem solid ${tokens.colors.Grey_3}; + border-radius: 0.17rem; + margin-bottom: 0.75rem; `; export const Search = styled.input` - background-color: ${tokens.colors.Grey_1}; - width: 11.42rem; - height: 1.25rem; - ${tokens.typography.T5_SB_16}; - color: ${tokens.colors.B_Grey_6}; - margin: 0 0.42rem; - border: none; - outline: none; + background-color: ${tokens.colors.Grey_1}; + width: 11.42rem; + height: 1.25rem; + ${tokens.typography.T5_SB_16}; + color: ${tokens.colors.B_Grey_6}; + margin: 0 0.42rem; + border: none; + outline: none; - &:focus { - outline: none; - } + &:focus { + outline: none; + } - &::placeholder { - color: ${tokens.colors.B_Grey_4}; - } + &::placeholder { + color: ${tokens.colors.B_Grey_4}; + } `; export const SearchIcon = styled.img` - width: 1rem; - height: 1rem; - margin-right: 0.25rem; - cursor: pointer; + width: 1rem; + height: 1rem; + margin-right: 0.25rem; + cursor: pointer; `; export const TabSortContainer = styled.div` - display: flex; - justify-content: flex-end; - width: 50rem; - margin-bottom: 10px; - @media (max-width: 600px) { - width: 100%; - } + display: flex; + justify-content: flex-end; + width: 50rem; + margin-bottom: 10px; + @media (max-width: 600px) { + width: 100%; + } `; // 탭 컨테이너 export const TabContainer = styled.div` - display: flex; - flex-direction: row; - width: 50rem; - justify-content: flex-start; + display: flex; + flex-direction: row; + width: 50rem; + justify-content: flex-start; `; // 탭 메뉴 export const Tab = styled.div` - display: flex; - justify-content: center; - align-items: center; - width: 6.54rem; - height: 1.71rem; - color: ${tokens.colors.B_Grey_6}; - ${tokens.typography.B2_M_16}; - border: 0.04rem solid ${tokens.colors.B_Grey_4}; - border-radius: 0.17rem; - margin: 0.83rem 0.33rem 1.67rem 0; - cursor: pointer; + display: flex; + justify-content: center; + align-items: center; + width: 6.54rem; + height: 1.71rem; + color: ${tokens.colors.B_Grey_6}; + ${tokens.typography.B2_M_16}; + border: 0.04rem solid ${tokens.colors.B_Grey_4}; + border-radius: 0.17rem; + margin: 0.83rem 0.33rem 1.67rem 0; + cursor: pointer; `; // 선택된 탭 메뉴 export const TabSelected = styled.div` - display: flex; - justify-content: center; - align-items: center; - width: 6.54rem; - height: 1.71rem; - color: ${tokens.colors.Grey_8}; - ${tokens.typography.T5_SB_16}; - border: 0.08rem solid ${tokens.colors.B_Grey_7}; - border-radius: 0.17rem; - margin: 0.83rem 0.33rem 1.67rem 0; - cursor: pointer; + display: flex; + justify-content: center; + align-items: center; + width: 6.54rem; + height: 1.71rem; + color: ${tokens.colors.Grey_8}; + ${tokens.typography.T5_SB_16}; + border: 0.08rem solid ${tokens.colors.B_Grey_7}; + border-radius: 0.17rem; + margin: 0.83rem 0.33rem 1.67rem 0; + cursor: pointer; `; // 조회수/이름순 export const SortContainer = styled.div` - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - width: 5.92rem; - height: 1.5rem; - border: 0.04rem solid ${tokens.colors.B_Grey_3}; - border-radius: 0.17rem; - margin-top: 0.83rem; - position: relative; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 5.92rem; + height: 1.5rem; + border: 0.04rem solid ${tokens.colors.B_Grey_3}; + border-radius: 0.17rem; + margin-top: 0.83rem; + position: relative; `; export const CategoryDrop = styled.div` - ${tokens.typography.B3_M_14}; - color: ${tokens.colors.Grey_8}; - text-align: center; - cursor: pointer; + ${tokens.typography.B3_M_14}; + color: ${tokens.colors.Grey_8}; + text-align: center; + cursor: pointer; `; export const SortIcon = styled.img` - width: 1rem; - height: 1rem; - self-items: center; - cursor: pointer; + width: 1rem; + height: 1rem; + align-self: center; + cursor: pointer; `; export const SortDrop = styled.div` - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - background-color: ${tokens.colors.White}; - width: 5.92rem; - /* height: 4.5rem; */ - height: 3rem; - border-radius: 0.17rem; - position: absolute; - box-shadow: 0 0.08rem 0.42rem 0.08rem rgba(58, 107, 135, 0.1); - z-index: 99; - top: -0.17rem; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background-color: ${tokens.colors.White}; + width: 5.92rem; + /* height: 4.5rem; */ + height: 3rem; + border-radius: 0.17rem; + position: absolute; + box-shadow: 0 0.08rem 0.42rem 0.08rem rgba(58, 107, 135, 0.1); + z-index: 99; + top: -0.17rem; `; export const SortText = styled.div` - display: flex; - justify-content: center; - align-items: center; - width: 5.92rem; - height: 1.5rem; - ${tokens.typography.B3_M_14}; - color: ${tokens.colors.Grey_6}; + display: flex; + justify-content: center; + align-items: center; + width: 5.92rem; + height: 1.5rem; + ${tokens.typography.B3_M_14}; + color: ${tokens.colors.Grey_6}; - &:hover { - background-color: rgba(102, 201, 255, 0.2); - } + &:hover { + background-color: rgba(102, 201, 255, 0.2); + } - cursor: pointer; + cursor: pointer; `; // 페이지 export const PaginationContainer = styled.div` - display: flex; - justify-content: space-between; - width: 50rem; - margin-top: 1rem; + display: flex; + justify-content: space-between; + width: 50rem; + margin-top: 1rem; `; export const BlankBtn = styled.div` - width: 7.917rem; + width: 7.917rem; `; export const WriteBtn = styled.button` - background-color: ${tokens.colors.Blue_0_Main}; - color: ${tokens.colors.White}; - width: 7.917rem; - height: 2rem; - border: none; - border-radius: 0.16rem; - cursor: pointer; + background-color: ${tokens.colors.Blue_0_Main}; + color: ${tokens.colors.White}; + width: 7.917rem; + height: 2rem; + border: none; + border-radius: 0.16rem; + cursor: pointer; `; export const Pagination = styled.div` - display: flex; - justify-content: center; - align-items: center; - padding: 0.83rem; - list-style: none; - // margin-top: 1.6rem; + display: flex; + justify-content: center; + align-items: center; + padding: 0.83rem; + list-style: none; + // margin-top: 1.6rem; `; export const PaginationArrow = styled.div` - width: 1rem; - height: 1rem; - background-image: url('/img/grayarrow.png'); - background-size: contain; - background-repeat: no-repeat; - transform: ${(props) => (props.left ? 'rotate(180deg)' : 'none')}; - cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')}; - opacity: ${(props) => (props.disabled ? 0.5 : 1)}; + width: 1rem; + height: 1rem; + background-image: url("/img/grayarrow.png"); + background-size: contain; + background-repeat: no-repeat; + transform: ${(props) => (props.left ? "rotate(180deg)" : "none")}; + cursor: ${(props) => (props.disabled ? "not-allowed" : "pointer")}; + opacity: ${(props) => (props.disabled ? 0.5 : 1)}; `; export const PaginationNumber = styled.div` - display: flex; - justify-content: center; - align-items: center; - margin: 0 0.21rem; - width: 0.33rem; - height: 0.88rem; - padding: 0.42rem; - cursor: pointer; - color: ${(props) => (props.active ? tokens.colors.Blue_3 : tokens.colors.B_Grey_7)}; - font-weight: ${(props) => (props.active ? 'bold' : 'normal')}; - ${tokens.typography.B3_M_14}; + display: flex; + justify-content: center; + align-items: center; + margin: 0 0.21rem; + width: 0.33rem; + height: 0.88rem; + padding: 0.42rem; + cursor: pointer; + color: ${(props) => + props.active ? tokens.colors.Blue_3 : tokens.colors.B_Grey_7}; + font-weight: ${(props) => (props.active ? "bold" : "normal")}; + ${tokens.typography.B3_M_14}; `; diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx index 05d4d3d..ff239e6 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx @@ -101,9 +101,11 @@ export default function ChallengeTable({ onSortType("LATEST")}> 전체 + onSortType("VIEW_COUNT")}> 획득 + onSortType("LIKE")}> 사용 diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js index d619b73..e0b4d17 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.table.styles.js @@ -23,10 +23,10 @@ export const TabBtnContainer = styled.div` justify-content: flex-start; align-items: center; width: 100%; - border-bottom: 0.04rem solid ${tokens.colors.B_Grey_2}; + border-bottom: 0.04rem solid ${tokens.colors.B_Grey_3}; padding-bottom: 0.5rem; margin-top: 4rem; - margin-bottom: 1.83rem; + margin-bottom: 0.83rem; `; export const TabBox = styled.div` @@ -39,7 +39,17 @@ export const TabBox = styled.div` export const TabHead = styled.div` ${tokens.typography.T3_B_24}; - text-decoration: underline; + position: relative; + + &::after { + content: ""; + position: absolute; + bottom: 0; // 컴포넌트의 바닥에 + left: 0; + width: 100%; + height: 2px; // 선 두께 + background-color: currentColor; // 텍스트 컬러를 따라감 (또는 tokens.colors.Black 등 지정 가능) + } `; export const TabBody = styled.div` @@ -49,7 +59,7 @@ export const TabBody = styled.div` export const SortTableContainer = styled.div` display: flex; flex-direction: column; - justify-content: right; + align-items: end; `; // 정렬 @@ -58,11 +68,15 @@ export const SortContainer = styled.div` flex-direction: row; justify-content: center; align-items: center; - width: 5.92rem; + background-color: ${tokens.colors.White}; + color: ${tokens.colors.Grey_8}; + width: 5rem; + /* width: 5.92rem; */ height: 1.5rem; border: 0.04rem solid ${tokens.colors.B_Grey_3}; border-radius: 0.17rem; - margin-top: 0.83rem; + margin-right: 1.1rem; // 스크롤 있을 때 마진. 스크롤 없다면 마진 없이 너비 늘리기 + margin-bottom: 0.96rem; position: relative; `; @@ -76,7 +90,7 @@ export const CategoryDrop = styled.div` export const SortIcon = styled.img` width: 1rem; height: 1rem; - self-items: center; + align-self: center; cursor: pointer; `; @@ -86,7 +100,8 @@ export const SortDrop = styled.div` justify-content: center; align-items: center; background-color: ${tokens.colors.White}; - width: 5.92rem; + /* width: 5.92rem; */ // 스크롤 없을 때 너비 + width: 5rem; height: 4.5rem; border-radius: 0.17rem; position: absolute; @@ -99,18 +114,25 @@ export const SortText = styled.div` display: flex; justify-content: center; align-items: center; - width: 5.92rem; + /* width: 5.92rem; */ // 스크롤 없을 때 너비 + width: 5rem; height: 1.5rem; ${tokens.typography.B3_M_14}; color: ${tokens.colors.Grey_6}; &:hover { - background-color: rgba(102, 201, 255, 0.2); + background-color: #dfe8f1; } cursor: pointer; `; +export const SortDivider = styled.div` + width: 100%; + height: 1px; + background-color: ${tokens.colors.B_Grey_3}; +`; + // 카테고리 파트 시작 export const TableContainer = styled.div` display: flex; diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myboard.table.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myboard.table.styles.js index e9396aa..efc9b06 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myboard.table.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.myboard.table.styles.js @@ -1,4 +1,4 @@ -import styled from 'styled-components'; +import styled from "styled-components"; import * as tokens from "../../../../tokens"; export const Container = styled.div` @@ -28,7 +28,7 @@ export const TabBtnContainer = styled.div` justify-content: flex-start; align-items: center; width: 100%; - border-bottom: 0.04rem solid ${tokens.colors.B_Grey_2}; + border-bottom: 0.04rem solid ${tokens.colors.B_Grey_3}; padding-bottom: 0.5rem; margin-top: 4rem; margin-bottom: 1.83rem; @@ -44,7 +44,7 @@ export const TabBox = styled.div` export const Tab = styled.div` ${tokens.typography.T3_B_24}; - text-decoration: ${(props) => (props.active ? 'underline' : 'none')}; + text-decoration: ${(props) => (props.active ? "underline" : "none")}; cursor: pointer; `; @@ -62,7 +62,7 @@ export const CategoryContainer = styled.div` flex-direction: row; justify-content: center; align-items: center; - background-color: #DFE8F1; + background-color: #dfe8f1; width: 50rem; height: 2.292rem; border-bottom: 0.04rem solid ${tokens.colors.B_Grey_4}; @@ -156,8 +156,7 @@ export const ScrollTopArrow = styled.img` margin-top: 2.292rem; `; -export const ScrollBottomArrow = styled.img` -`; +export const ScrollBottomArrow = styled.img``; export const ScrollbarWrapper = styled.div` overflow-y: auto; @@ -216,7 +215,7 @@ export const AllCheck = styled.input` } &:checked::before { - content: '✔'; + content: "✔"; color: #fff; font-size: 0.583rem; display: flex; From f0ad7dbfbc2568a9cf156c1edac780f06c2dfe81 Mon Sep 17 00:00:00 2001 From: begojara99 Date: Wed, 25 Jun 2025 16:58:10 +0900 Subject: [PATCH 05/62] =?UTF-8?q?=20=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=B3=B4=EC=83=81=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=EB=B3=84=20=EA=B7=B8=EB=9E=98=ED=94=84=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Mypage.mypage.challenge.rewardprogress.jsx | 12 +++++------ .../Mypage/Mypage.mypage.challenge.table.jsx | 10 +++++++--- ....mypage.challenge.rewardprogress.styles.js | 20 ++++++++++++++++++- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx index 6cf63a2..4063abe 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx @@ -1,36 +1,36 @@ import React from "react"; import * as ItemS from "./Styled/Mypage.mypage.challenge.rewardprogress.styles"; -export default function RewardProgress() { +export default function RewardProgress({ challengeCount, rewardCount }) { return ( - 누적 교환권 : 1 + 누적 교환권 : {rewardCount} - + diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx index ff239e6..3679d14 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.table.jsx @@ -13,9 +13,10 @@ export default function ChallengeTable({ fetchinquiry = { fetchinquiry }, }) { const [count, setCount] = useState(inquiryCount); //TODO - - 임시로 10 넣음 + const [challengeCount, setChallengeCount] = useState(0); + const [rewardCount, setRewardCount] = useState(0); const [sortType, setSortType] = useState("LATEST"); - const [sortText, setSortText] = useState("전체"); const [isSortDropVisible, setIsSortDropVisible] = useState(false); // 정렬 드롭박스 열기/닫기 @@ -79,10 +80,13 @@ export default function ChallengeTable({ 챌린지 보상 현황 - 참여 중인 정규스터디 출석부에서 획득한 챌린지 보상을 사용할 수 + 획득한 챌린지 보상을 참여 중인 정규스터디 출석부에서 사용할 수 있습니다. - + diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js index 7ddd700..61d18fb 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js @@ -74,10 +74,28 @@ export const ProgressFill = styled.div` position: absolute; top: 1.417rem; left: 0; - width: 4.833rem; + height: 0.167rem; background: linear-gradient(90deg, #00a5ff 74.04%, rgba(0, 165, 255, 0) 100%); border-radius: 0.083rem; + + ${({ $challengeCount }) => + $challengeCount === 0 && + css` + width: 10%; + `} + + ${({ $challengeCount }) => + $challengeCount === 1 && + css` + width: 45%; + `} + + ${({ $challengeCount }) => + $challengeCount === 2 && + css` + width: 85%; + `} `; export const Icon = styled.img` From d18441600e653e41e9eb1f2dea972386a26290c5 Mon Sep 17 00:00:00 2001 From: begojara99 Date: Wed, 25 Jun 2025 18:03:37 +0900 Subject: [PATCH 06/62] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=B3=B4=EC=83=81=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B0=98=EC=A7=9D=EC=9E=84=20?= =?UTF-8?q?=ED=9A=A8=EA=B3=BC=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Mypage.mypage.challenge.rewardprogress.jsx | 17 +++++- ....mypage.challenge.rewardprogress.styles.js | 60 ++++++++++++++++--- 2 files changed, 68 insertions(+), 9 deletions(-) diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx index 4063abe..0b174ba 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx @@ -15,7 +15,20 @@ export default function RewardProgress({ challengeCount, rewardCount }) { - + + + + + + + + + + + + + {/* + /> */} 보상 사용하기 diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js index 61d18fb..bc9e36a 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js @@ -1,5 +1,38 @@ -import styled, { css } from "styled-components"; import * as tokens from "../../../../tokens"; +import styled, { css, keyframes } from "styled-components"; + +const Anima = keyframes` + 0% { + transform: translate(-100%, -100%) rotateZ(-45deg); + } + 70% { + transform: translate(100%, 100%) rotateZ(-45deg); + } + 100% { + transform: translate(100%, 100%) rotateZ(-45deg); + } +`; + +export const Effect = styled.div` + ${({ $isSelected }) => + !$isSelected && + css` + position: absolute; + top: 0; + left: 0; + width: 200%; + height: 200%; + opacity: 0.9; + background: linear-gradient( + to bottom, + transparent 0%, + white 50%, + transparent 100% + ); + animation: ${Anima} 2s ease-in-out infinite; + pointer-events: none; + `} +`; export const Container = styled.div` position: relative; @@ -98,12 +131,18 @@ export const ProgressFill = styled.div` `} `; -export const Icon = styled.img` +export const Icon = styled.div` position: absolute; top: 0; transform: translateX(-50%); ${({ $position }) => $position && `left: ${$position};`} + display: flex; // 반짝임 효과 + justify-content: center; + align-items: center; + overflow: hidden; + position: absolute; + ${({ $size }) => $size === "S" && css` @@ -114,19 +153,26 @@ export const Icon = styled.img` ${({ $size }) => $size === "M" && css` - top: 0.5rem; - width: 2rem; - height: 2rem; + top: 0.733rem; + width: 1.334rem; // 2rem + height: 1.334rem; `} ${({ $size }) => $size === "L" && css` - width: 3rem; - height: 3rem; + top: 0.4rem; + width: 2rem; // 3rem + height: 2rem; `} `; +export const IconImage = styled.img` + width: 100%; + height: 100%; + object-fit: cover; /* 또는 contain */ +`; + export const IconS = styled.img` width: 1rem; height: 1rem; From 8e07c5a2c22e27448e67a0101db0304e67591aea Mon Sep 17 00:00:00 2001 From: begojara99 Date: Mon, 7 Jul 2025 00:22:17 +0900 Subject: [PATCH 07/62] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=B3=B4=EC=83=81=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20?= =?UTF-8?q?=EC=86=8D=EC=84=B1=EA=B0=92=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/img/koala-gold-l.png | Bin 0 -> 23889 bytes public/img/koala-gold-s.png | Bin 0 -> 3040 bytes public/img/koala-gold.png | Bin 10014 -> 0 bytes public/img/koala-gold.svg | 87 ------------------ public/img/koala-silver-m.png | Bin 0 -> 6132 bytes ...Mypage.mypage.challenge.rewardprogress.jsx | 8 +- ....mypage.challenge.rewardprogress.styles.js | 9 +- 7 files changed, 10 insertions(+), 94 deletions(-) create mode 100644 public/img/koala-gold-l.png create mode 100644 public/img/koala-gold-s.png delete mode 100644 public/img/koala-gold.png delete mode 100644 public/img/koala-gold.svg create mode 100644 public/img/koala-silver-m.png diff --git a/public/img/koala-gold-l.png b/public/img/koala-gold-l.png new file mode 100644 index 0000000000000000000000000000000000000000..95e8c1caa316b0a15dd5439a743d33cdbf5bbf16 GIT binary patch literal 23889 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 literal 0 HcmV?d00001 diff --git a/public/img/koala-gold-s.png b/public/img/koala-gold-s.png new file mode 100644 index 0000000000000000000000000000000000000000..10b24dfe237e2a0e5d8307d143743d3c2d19ad39 GIT binary patch literal 3040 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/img/koala-silver-m.png b/public/img/koala-silver-m.png new file mode 100644 index 0000000000000000000000000000000000000000..412d47d2f888ad1886ba0daf4ff153b31308370b GIT binary patch literal 6132 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 - + 누적 교환권 : {rewardCount} @@ -16,15 +16,15 @@ export default function RewardProgress({ challengeCount, rewardCount }) { - + - + - + diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js index bc9e36a..2eab965 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js @@ -73,7 +73,8 @@ export const TriangleR = styled.div` position: absolute; top: -0.75rem; /* -18px */ /* right: 14.36rem; */ - right: 13.74rem; + right: 14.04rem; + /* right: 13.74rem; */ width: 0.42rem; /* 10px */ height: 0.93rem; /* 22.2px */ background: #dfe8f1; @@ -142,6 +143,8 @@ export const Icon = styled.div` align-items: center; overflow: hidden; position: absolute; + border-radius: 0.21rem; + box-shadow: 0 0.167rem 0.625rem 0 rgba(45, 54, 59, 0.25); ${({ $size }) => $size === "S" && @@ -174,8 +177,8 @@ export const IconImage = styled.img` `; export const IconS = styled.img` - width: 1rem; - height: 1rem; + width: 0.583rem; + height: 0.583rem; `; export const Button = styled.button` From c8d5e6536f34efd7b47ea9e2527877d5a24b5a40 Mon Sep 17 00:00:00 2001 From: begojara99 Date: Mon, 7 Jul 2025 01:27:49 +0900 Subject: [PATCH 08/62] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=B3=B4=EC=83=81=20?= =?UTF-8?q?bar=20=EC=95=A0=EB=8B=88=EB=A9=94=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/img/test-star.png | Bin 0 -> 47880 bytes ...Mypage.mypage.challenge.rewardprogress.jsx | 6 ++ ....mypage.challenge.rewardprogress.styles.js | 69 ++++++++++++++++-- 3 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 public/img/test-star.png diff --git a/public/img/test-star.png b/public/img/test-star.png new file mode 100644 index 0000000000000000000000000000000000000000..d300e9654d3380ea9ea7545e817f311a784949af GIT binary patch literal 47880 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 literal 0 HcmV?d00001 diff --git a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx index 4689e7b..920b8ec 100644 --- a/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx +++ b/src/APP/user-pages/Mypage/Mypage.mypage.challenge.rewardprogress.jsx @@ -15,6 +15,12 @@ export default function RewardProgress({ challengeCount, rewardCount }) { + + diff --git a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js index 2eab965..2dde113 100644 --- a/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js +++ b/src/APP/user-pages/Mypage/Styled/Mypage.mypage.challenge.rewardprogress.styles.js @@ -13,6 +13,30 @@ const Anima = keyframes` } `; +const fillAnimation = (target) => keyframes` + 0% { + width: 0%; + } + 100% { + width: ${target}%; + } +`; + +const targetPop = keyframes` + 0% { + transform: scale(1); + opacity: 0; + } + 30% { + transform: scale(1.5); + opacity: 1; + } + 100% { + transform: scale(1); + opacity: 1; + } +`; + export const Effect = styled.div` ${({ $isSelected }) => !$isSelected && @@ -110,26 +134,59 @@ export const ProgressFill = styled.div` left: 0; height: 0.167rem; - background: linear-gradient(90deg, #00a5ff 74.04%, rgba(0, 165, 255, 0) 100%); + background: linear-gradient( + 90deg, + rgba(0, 165, 255, 1) 74%, + rgba(0, 165, 255, 0) 100% + ); border-radius: 0.083rem; - + /* ${({ $challengeCount }) => $challengeCount === 0 && css` - width: 10%; + width: 7%; `} ${({ $challengeCount }) => $challengeCount === 1 && css` - width: 45%; + width: 42%; `} ${({ $challengeCount }) => $challengeCount === 2 && css` - width: 85%; - `} + width: 75%; + `} */ + ${({ $challengeCount }) => { + const widths = { + 0: 7, + 1: 42, + 2: 75, + }; + const targetWidth = widths[$challengeCount] ?? 0; + return css` + animation: ${fillAnimation(targetWidth)} 1.8s ease-in-out forwards; + `; + }} +`; + +export const TargetIcon = styled.img` + position: absolute; + top: 1rem; + transform: translateX(-50%); + animation: ${targetPop} 0.8s ease-in-out 1.8s forwards; + ${({ $challengeCount }) => { + if ($challengeCount === 0) return "left: 3%;"; + if ($challengeCount === 1) return "left: 38%;"; + if ($challengeCount === 2) return "left: 71%;"; + return ""; + }} + width: 1rem; + height: 1rem; + opacity: 0; + z-index: 3; + pointer-events: none; `; export const Icon = styled.div` From 38640d8ae314cfee92f371489573c4600de69115 Mon Sep 17 00:00:00 2001 From: nunomi0 Date: Tue, 8 Jul 2025 20:32:53 +0900 Subject: [PATCH 09/62] =?UTF-8?q?feat:=20=EB=8D=B0=EC=9D=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=A9=94=EC=9D=B8=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=ED=8C=8C=EC=9D=BC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DailyChallenge.dailychallenge.main.jsx | 14 ++++++++++++++ .../Styled/DailyChallenge.dailychallenge.main.js | 8 ++++++++ 2 files changed, 22 insertions(+) create mode 100644 src/APP/user-pages/DailyChallenge/DailyChallenge.dailychallenge.main.jsx create mode 100644 src/APP/user-pages/DailyChallenge/Styled/DailyChallenge.dailychallenge.main.js diff --git a/src/APP/user-pages/DailyChallenge/DailyChallenge.dailychallenge.main.jsx b/src/APP/user-pages/DailyChallenge/DailyChallenge.dailychallenge.main.jsx new file mode 100644 index 0000000..1382a88 --- /dev/null +++ b/src/APP/user-pages/DailyChallenge/DailyChallenge.dailychallenge.main.jsx @@ -0,0 +1,14 @@ +import React, { useState, useEffect } from 'react'; +import { useParams, useLocation } from 'react-router-dom'; +import * as Styled from './Styled/DailyChallenge.dailychallenge.main'; +import request from '../../Api/request'; + +export default function WritePost() { + const location = useLocation(); + + return ( + + + + ); +} diff --git a/src/APP/user-pages/DailyChallenge/Styled/DailyChallenge.dailychallenge.main.js b/src/APP/user-pages/DailyChallenge/Styled/DailyChallenge.dailychallenge.main.js new file mode 100644 index 0000000..f0541e0 --- /dev/null +++ b/src/APP/user-pages/DailyChallenge/Styled/DailyChallenge.dailychallenge.main.js @@ -0,0 +1,8 @@ +import styled from 'styled-components'; +import * as tokens from "../../../../tokens"; + +export const Container = styled.div` + display: flex; + width: 100%; + height: 100vh; +`; \ No newline at end of file From f318aa7c762290d65b453debf4176e310b9cbb83 Mon Sep 17 00:00:00 2001 From: nunomi0 Date: Tue, 8 Jul 2025 20:39:21 +0900 Subject: [PATCH 10/62] =?UTF-8?q?feat:=20=EB=8D=B0=EC=9D=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=B1=8C=EB=A6=B0=EC=A7=80=20=EB=9D=BC=EC=9A=B0=ED=8C=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/App.js b/src/App.js index 00de100..de5fa0d 100644 --- a/src/App.js +++ b/src/App.js @@ -31,6 +31,9 @@ import BoardDetail from "./APP/user-pages/BoardDetail/BoardDetail.boarddetail.ma import WriteSelfStudy from "./APP/user-pages/WriteSelfStudy/WriteSelfStudy.writeselfstudy.main"; import InquiryBoardDetail from "./APP/user-pages/InquiryBoardDetail/InquiryBoardDetail.inquiryboarddetail.main"; import WriteInquiry from "./APP/user-pages/WriteInquiry/WriteInquiry.writeinquiry.main"; + +import DailyChallenge from "./APP/user-pages/DailyChallenge/DailyChallenge.dailychallenge.main"; + import ScrollToTop from "./APP/Common/ScrollToTop"; import useInterval from "./APP/Common/UseInterval"; import { refreshToken } from "./APP/Api/refreshToken"; @@ -193,6 +196,12 @@ function App() { />{" "} {/* 새 문의하기 글쓰기 */} {/* 새 문의하기 글쓰기 */} + + {/* 데일리 챌린지 메인 */} + } + />{" "} {!hideHeader &&