Skip to content

Commit ba6451b

Browse files
authored
Merge pull request #139 from MUIT-UMC/dev
브랜치 최신화
2 parents 4b08746 + 6490004 commit ba6451b

41 files changed

Lines changed: 1368 additions & 174 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/App.jsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import AdminEvent from "./pages/adminpage/event/AdminEvent";
5757
import AdminEventDetail from "./pages/adminpage/event/AdminEventDetail";
5858
import AdminVision from "./pages/adminpage/vision/AdminVision";
5959
import AdminVisionDetail from "./pages/adminpage/vision/AdminVisionDetail";
60+
import AdminVisionUpdate from "./pages/adminpage/vision/AdminVisionUpdate";
6061
import AdminQuery from "./pages/adminpage/query/AdminQuery";
6162
import AdminQueryDetail from "./pages/adminpage/query/AdminQueryDetail";
6263
import AdminMypage from "./pages/adminpage/mypage/AdminMypage";
@@ -171,6 +172,7 @@ function App() {
171172
<Route path="event/detail/:musicalId" element={<AdminEventDetail />} />
172173
<Route path="vision" element={<AdminVision />} />
173174
<Route path="vision/detail/:placeId" element={<AdminVisionDetail />} />
175+
<Route path="vision/detail/:placeId/update" element={<AdminVisionUpdate />} />
174176
<Route path="query" element={<AdminQuery />} />
175177
<Route path="query/detail/:queryId" element={<AdminQueryDetail />} />
176178
<Route path="mypage" element={<AdminMypage />} />

src/assets/icons/CheckRed.svg

Lines changed: 0 additions & 6 deletions
Loading

src/components/Navbar.jsx

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,21 +220,27 @@ function Sidebar({onClose}) {
220220
}
221221
};
222222

223+
const isLoggedIn = !!localStorage.getItem("accessToken");
224+
223225
return (
224226
<SidebarOverlay onClick={handleOverlayClick}>
225227
<SidebarContainer onClick={handleContainerClick}>
226228
<SideMenuArea>
227229
<MenuTop>
228230
<SideMenuLink to="/"></SideMenuLink>
229231
<SideMenuLink to="/vision">시야 확인</SideMenuLink>
232+
<SideMenuLink to="/small-theater">소극장 공연</SideMenuLink>
230233
<SideMenuLink to="/event-check">이벤트 확인</SideMenuLink>
231-
<SideMenuLink to="/small-theater">소극장 연극</SideMenuLink>
232234
<SideMenuLink to="/board/item/lost" >게시판</SideMenuLink>
233235
</MenuTop>
234236
<Bar><img src={DivideBarIcon} alt="Bar Icon" /></Bar>
235237
<MenuBottom>
236-
<SideMenuLink to="/login">로그인</SideMenuLink>
237-
<SideMenuLink to="/signup">회원가입</SideMenuLink>
238+
{!isLoggedIn && (
239+
<>
240+
<SideMenuLink to="/login">로그인</SideMenuLink>
241+
<SideMenuLink to="/signup">회원가입</SideMenuLink>
242+
</>
243+
)}
238244
<SideMenuLink to="/mypage" onClick={handleLinkClick}>마이 페이지</SideMenuLink>
239245
</MenuBottom>
240246
</SideMenuArea>

src/components/board/PageNavigator.jsx

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,42 @@ import ChevronLeft from "../../assets/icons/ChevronLeft.svg";
44
import ChevronRight from "../../assets/icons/ChevronRight.svg";
55

66
const PageNavigator = ({ currentPage, totalPages, onPageChange }) => {
7+
const pagesPerGroup = 5; // 5개씩 끊어서 표시
8+
const currentGroup = Math.floor(currentPage / pagesPerGroup);
9+
const startPage = currentGroup * pagesPerGroup;
10+
const endPage = Math.min(startPage + pagesPerGroup, totalPages);
11+
712
const handlePageClick = (page) => {
8-
if (page >= 0 && page <= totalPages) {
13+
if (page >= 0 && page < totalPages) {
914
onPageChange(page);
1015
}
1116
};
1217

1318
return (
1419
<PageNavigatorWrapper>
20+
{/* 이전 5개 이동 */}
1521
<Img
1622
src={ChevronLeft}
17-
visibility={currentPage === 0 ? "hidden" : "visible"}
18-
onClick={() => handlePageClick(currentPage - 1)}
23+
visibility={currentGroup === 0 ? "hidden" : "visible"}
24+
onClick={() => handlePageClick(startPage - pagesPerGroup)}
1925
/>
20-
{Array.from({ length: totalPages }, (_, index) => (
26+
27+
{/* 현재 그룹의 페이지 번호 표시 */}
28+
{Array.from({ length: endPage - startPage }, (_, index) => (
2129
<PageNumber
22-
key={index}
23-
color={currentPage === index ? "#A00000" : undefined}
24-
onClick={() => handlePageClick(index)}
30+
key={startPage + index}
31+
color={currentPage === startPage + index ? "#A00000" : undefined}
32+
onClick={() => handlePageClick(startPage + index)}
2533
>
26-
{index + 1}
34+
{startPage + index + 1}
2735
</PageNumber>
2836
))}
37+
38+
{/* 다음 5개 이동 */}
2939
<Img
3040
src={ChevronRight}
31-
visibility={currentPage === totalPages-1 ? "hidden" : "visible"}
32-
onClick={() => handlePageClick(currentPage + 1)}
41+
visibility={endPage >= totalPages ? "hidden" : "visible"}
42+
onClick={() => handlePageClick(startPage + pagesPerGroup)}
3343
/>
3444
</PageNavigatorWrapper>
3545
);

src/components/board/PostList.jsx

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,7 @@ const PostListWrapper = styled.table`
9292
margin-top: 32px;
9393
font-family: Pretendard, sans-serif;
9494
text-align: center;
95-
96-
95+
table-layout: fixed; /* 고정된 레이아웃 */
9796
9897
th, td {
9998
@@ -118,24 +117,56 @@ const PostListWrapper = styled.table`
118117
td:nth-child(1) {
119118
text-align: left;
120119
padding-left: 50px;
120+
min-width: 40%;
121+
max-width: 50%;
122+
}
123+
td:nth-child(2) {
124+
text-align: left;
125+
padding-left: 50px;
126+
width: 20%;
127+
max-width: 190px;
128+
}
129+
td:nth-child(3) {
130+
text-align: left;
131+
padding-left: 50px;
132+
width: 20%;
133+
}
134+
td:nth-child(4) {
135+
text-align: left;
136+
padding-left: 50px;
137+
width: 20%;
121138
}
122139
th:nth-child(1) {
123140
text-align: left;
124141
padding-left: 94px;
142+
min-width: 40%;
143+
max-width: 50%;
144+
}
145+
th:nth-child(2) {
146+
width:20%;
147+
}
148+
th:nth-child(3) {
149+
width:20%;
150+
} th:nth-child(4) {
151+
width:20%;
125152
}
126153
127154
td {
128155
color: #000;
129156
border-bottom: 1px solid #E6E6E6;
130157
padding-top: 18px;
131158
padding-bottom: 18px;
132-
159+
padding-right: 20px;
133160
/* Body-tiny-md */
134161
font-family: Pretendard;
135162
font-size: 14px;
136163
font-style: normal;
137164
font-weight: 500;
138165
line-height: normal;
166+
167+
overflow: hidden; /* 넘치는 내용 숨김 */
168+
white-space: nowrap; /* 줄바꿈 방지 */
169+
text-overflow: ellipsis; /* ... 처리 */
139170
}
140171
141172
tbody tr:hover {

src/components/board/PostList2.jsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,20 @@ const NavWrapper = styled.div`
113113
`
114114

115115
const Text = styled.div`
116-
color: ${(props) => props.color ? props.color: '#000'};
117-
118-
/* Body-me */
116+
color: ${(props) => props.color || "#000"};
119117
font-family: Pretendard;
120118
font-size: 16px;
121119
font-style: normal;
122120
font-weight: 500;
123121
line-height: 25px; /* 156.25% */
124-
`
122+
text-align:left;
123+
display: -webkit-box;
124+
-webkit-line-clamp: 2;
125+
-webkit-box-orient: vertical;
126+
overflow: hidden;
127+
text-overflow: ellipsis;
128+
word-break: break-word;
129+
`;
125130
const Img = styled.img`
126131
height: 88px;
127132
width: 88px;

src/components/buy/Step2.jsx

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const Step2 = () => {
1616
const navigate = useNavigate();
1717
const location = useLocation();
1818
const peopleCount = location.state?.peopleCount || 1;
19-
const [selectedTicketId, setSelectedTicketId] = useState("1");
19+
const [selectedTicketName, setSelectedTicketName] = useState("일반 예매");
2020

2121
const url = `/tickets/${amateurId}/ticketInfo`;
2222
const { data, error, loading } = useCustomFetch(url, {
@@ -32,18 +32,19 @@ const Step2 = () => {
3232

3333

3434
// 🎯 선택된 티켓 정보 찾기
35-
const selectedTicket = ticketInfo.tickets.find(ticket => ticket.amateurTicketId === selectedTicketId);
35+
const selectedTicket = ticketInfo.tickets.find(ticket => ticket.ticketName === selectedTicketName);
3636
const ticketPrice = selectedTicket ? selectedTicket.price : 0;
3737

3838
// 🎯 할인 선택 핸들러
3939
const handleDiscountChange = (event) => {
40-
setSelectedTicketId(event.target.value);
40+
setSelectedTicketName(event.target.value);
4141
};
42+
4243
const handleNextStep = () => {
4344
navigate('../step3', {
4445
state: {
4546
peopleCount,
46-
selectedTicketId,
47+
selectedTicketName,
4748
ticketInfo,
4849
},
4950
});
@@ -69,22 +70,22 @@ const Step2 = () => {
6970
<Option>
7071
<RadioButton type="radio"
7172
name="discount"
72-
value="1"
73-
checked={selectedTicketId === "1"}
73+
value="일반 예매"
74+
checked={selectedTicketName === "일반 예매"}
7475
onChange={handleDiscountChange} /> 할인 없음
7576
</Option>
7677
<Option>
7778
<RadioButton type="radio"
7879
name="discount"
79-
value="2"
80-
checked={selectedTicketId === "2"}
80+
value="홍대생 할인"
81+
checked={selectedTicketName === "홍대생 할인"}
8182
onChange={handleDiscountChange} /> 홍대생 할인
8283
</Option>
8384
<Option>
8485
<RadioButton type="radio"
8586
name="discount"
86-
value="2"
87-
checked={selectedTicketId === "2"}
87+
value="홍대생 할인"
88+
checked={selectedTicketName === "홍대생 할인"}
8889
onChange={handleDiscountChange} /> 지인 할인
8990
</Option>
9091
</Options>

src/components/buy/Step3.jsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const Step3 = () => {
1515
const {amateurId} = useParams();
1616
const navigate = useNavigate();
1717
const location = useLocation();
18-
const { peopleCount = 1, selectedTicketId = '1' } = location.state || {};
18+
const { peopleCount = 1, selectedTicketName="일반 예매" } = location.state || {};
1919

2020
const url = `/tickets/${amateurId}/ticketInfo`;
2121
const { data, error, loading } = useCustomFetch(url, {
@@ -32,9 +32,7 @@ const Step3 = () => {
3232
const memberInfo = data.result.reserveConfirmMemberDTO;
3333

3434
// 선택된 티켓 정보 찾기
35-
const selectedTicket = ticketInfo.tickets.find(
36-
(ticket) => ticket.amateurTicketId === selectedTicketId
37-
);
35+
const selectedTicket = ticketInfo.tickets.find(ticket => ticket.ticketName === selectedTicketName);
3836
const ticketPrice = selectedTicket ? selectedTicket.price : 0;
3937
// 총 결제 금액 계산
4038
const totalAmount = ticketPrice * peopleCount;
@@ -43,12 +41,12 @@ const Step3 = () => {
4341
navigate('../step4', {
4442
state: {
4543
peopleCount,
46-
selectedTicketId,
44+
selectedTicketName,
4745
ticketInfo,
46+
amateurTicketId: selectedTicket.amateurTicketId,
4847
},
4948
});
5049
};
51-
5250

5351
return (
5452
<Container>

src/components/buy/Step4.jsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,20 @@ const token = localStorage.getItem("accessToken");
88

99
const Step4 = () => {
1010
const navigate = useNavigate();
11-
const { amateurId } = useParams();
11+
// const { amateurTicketId } = useParams();
1212
const [accountName, setAccountName] = useState("");
1313
const [isSubmitting, setIsSubmitting] = useState(false);
1414
const isButtonActive = accountName.trim().length > 0;
1515
const location = useLocation();
16-
const { peopleCount, selectedTicketId,ticketInfo } = location.state || {};
16+
const { peopleCount, selectedTicketName="일반 예매",ticketInfo,amateurTicketId } = location.state || {};
17+
console.log("ticketId",amateurTicketId)
1718

1819
const handleSubmit = async () => {
1920
if (!isButtonActive || isSubmitting) return;
2021

2122
setIsSubmitting(true);
2223

23-
const url = `${import.meta.env.VITE_APP_SERVER_URL}/tickets/purchase/${amateurId}`;
24-
24+
const url = `${import.meta.env.VITE_APP_SERVER_URL}/tickets/purchase/${amateurTicketId}`;
2525
try {
2626
const response = await fetch(url, {
2727
method: 'POST',
@@ -51,9 +51,7 @@ const Step4 = () => {
5151
}
5252
};
5353
// 선택된 티켓 정보 찾기
54-
const selectedTicket = ticketInfo.tickets.find(
55-
(ticket) => ticket.amateurTicketId === selectedTicketId
56-
);
54+
const selectedTicket = ticketInfo.tickets.find(ticket => ticket.ticketName === selectedTicketName);
5755
const ticketPrice = selectedTicket ? selectedTicket.price : 0;
5856
// 총 결제 금액 계산
5957
const totalAmount = ticketPrice * peopleCount;

0 commit comments

Comments
 (0)