Skip to content

Commit 8c5fe7e

Browse files
committed
Fix: Merge conflicts and update login design
2 parents bdd7dcd + 2cab579 commit 8c5fe7e

3 files changed

Lines changed: 122 additions & 79 deletions

File tree

backend-core/static/users/css/login.css

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -31,71 +31,84 @@ body {
3131
height: 100%;
3232
}
3333

34-
/* 3. 헤더 레이아웃 수정 */
34+
/* 3. 헤더 레이아웃 수정 - 화살표와 텍스트 나란히 배치 */
3535
.header {
36-
display: grid;
37-
grid-template-columns: auto 1fr; /* 화살표 / 나머지 영역 */
38-
column-gap: 15px;
39-
align-items: start; /* 요소를 위쪽 정렬하여 텍스트 첫 줄에 맞춤 */
40-
margin-bottom: 35px;
4136
padding-top: 15px;
37+
margin-bottom: 35px;
38+
display: flex;
39+
align-items: flex-start;
40+
gap: 12px;
41+
}
42+
43+
.header > a, .header > i {
44+
text-decoration: none;
45+
color: inherit;
46+
font-size: 20px;
47+
display: flex;
48+
align-items: center;
49+
height: 28px;
4250
}
4351

44-
/* 텍스트 정렬 및 로고 배치를 위한 영역 */
4552
.header-text {
46-
grid-column: 2;
47-
text-align: left; /* 상단 텍스트는 화살표 옆 왼쪽 정렬 */
53+
flex: 1;
4854
}
4955

5056
.header h2 {
5157
font-size: 24px;
5258
font-weight: 700;
53-
margin: 0;
59+
margin: 0;
5460
color: #101828;
5561
line-height: 1.2;
62+
text-align: left;
5663
}
5764

5865
.header p {
5966
font-size: 14px;
6067
color: #667085;
61-
margin: 4px 0 0 0;
68+
margin: 4px 0 0 0;
69+
text-align: left;
70+
}
71+
72+
/* 4. 로고 및 문구 중앙 정렬 수정 (핵심 수정 부분) */
73+
.logo-area {
74+
display: flex;
75+
flex-direction: column;
76+
align-items: center; /* 로고와 문구 모두 가로 중앙 정렬 */
77+
justify-content: center;
78+
width: 100%;
79+
margin-top: 40px; /* 헤더와의 간격 */
80+
margin-bottom: 40px; /* 입력창과의 간격 */
6281
}
6382

64-
/* 4. 로고 이미지 스타일 */
6583
.login-logo {
66-
width: 370px;
84+
width: 80%;
85+
max-width: 280px;
6786
height: auto;
6887
display: block;
69-
margin: 50px 0 5px -25px; /* 왼쪽으로 25px 당김 */
88+
margin: 0 auto; /* 로고 자체 중앙 배치 */
7089
}
7190

72-
/* 로고 밑에 '대학생 미션 중개 플랫폼' 문구 */
73-
.header-text::after {
74-
content: "대학생 미션 중개 플랫폼";
91+
/* 로고 밑 문구 */
92+
.logo-subtext {
7593
display: block;
76-
width: 370px;
77-
margin-left: -25px;
94+
margin-top: 15px;
7895
text-align: center;
7996
font-size: 15px;
8097
font-weight: 500;
8198
color: #667085;
82-
margin-top: 20px;
83-
margin-bottom: 20px;
8499
}
85100

101+
/* 5. 입력창 및 버튼 디자인 */
86102
.input-section {
87103
display: flex;
88104
flex-direction: column;
89-
text-align: center;
90105
}
91106

92-
/* [순서 3] 입력창 영역 */
93107
.email-section, .input-group {
94108
text-align: left;
95109
margin-bottom: 18px;
96110
}
97111

98-
/* 5. 입력창 및 버튼 디자인 */
99112
label {
100113
display: block;
101114
font-size: 14px;
@@ -117,7 +130,6 @@ input {
117130
background-size: 18px;
118131
}
119132

120-
/* 아이콘 이미지 (Data URI 사용으로 별도 파일 없이 작동) */
121133
#email {
122134
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2398A2B3'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z' /%3E%3C/svg%3E");
123135
}
@@ -139,7 +151,6 @@ input {
139151
margin-top: 15px;
140152
}
141153

142-
/* 로그인 없이 둘러보기 버튼 */
143154
.btn-guest {
144155
display: flex;
145156
align-items: center;
@@ -175,7 +186,6 @@ input {
175186
font-size: 14px;
176187
}
177188

178-
/* 비밀번호 찾기 (회색 링크) */
179189
#search_key {
180190
display: inline-block;
181191
color: #98A2B3;
@@ -187,14 +197,12 @@ input {
187197
color: #667085;
188198
}
189199

190-
/* 회원가입 하기 (파란색 링크) */
191200
#signup {
192201
color: #4DA6FF;
193202
text-decoration: none;
194203
font-weight: 600;
195204
}
196205

197-
/* 두 메뉴 사이의 구분선 */
198206
#search_key::after {
199207
content: "|";
200208
margin-left: 15px;

backend-core/staticfiles/missions/js/mission_detail.js

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*
66
* 역할:
77
* - 미션 상세 정보 로드
8-
* - 지도에 미션 위치 표시 (카테고리별 색상)
8+
* - 지도에 미션 위치 표시 (상태별 색상)
99
* - 이미지 갤러리 렌더링 및 모달
1010
* - 햄버거 메뉴 토글 (작성자만)
1111
* - 삭제 기능
@@ -15,7 +15,7 @@
1515

1616
(function () {
1717
let mapManager;
18-
let missionStatus = null;
18+
let missionStatus = null; // ✨ 미션 상태 저장
1919

2020
// URL에서 mission_id 추출
2121
const pathParts = window.location.pathname.split('/').filter(p => p !== "");
@@ -27,9 +27,9 @@
2727
// ==================== 지도 초기화 ====================
2828

2929
/**
30-
* 지도 초기화 (카테고리별 색상 마커)
30+
* 지도 초기화 (상태별 마커 색상)
3131
*/
32-
async function initMap(lat, lng, status, category) {
32+
async function initMap(lat, lng, status) {
3333
const container = document.getElementById('map');
3434
if (!container) return;
3535

@@ -41,16 +41,15 @@
4141

4242
await mapManager.init();
4343

44-
// ✅ 카테고리별 색상 + 상태 클래스 적용
44+
// ✨ 상태별 마커 생성 (InfoWindow 제거)
4545
const marker = mapManager.addCustomMarker(lat, lng, {
46-
category: category, // 카테고리별 색상
47-
status: status // WAITING/MATCHED/COMPLETED
46+
status: status // WAITING/MATCHED/COMPLETED
4847
});
4948

5049
mapManager.fitBoundsToLocations([{ lat, lng }]);
5150
mapManager.setLevel(3);
5251

53-
console.log("✅ 지도 초기화 완료 (카테고리:", category, "상태:", status, ")");
52+
console.log("✅ 지도 초기화 완료 (상태:", status, ")");
5453
} catch (err) {
5554
console.error("지도 초기화 실패:", err);
5655
}
@@ -98,6 +97,7 @@
9897
}
9998

10099
const imagesHTML = images.map(img => {
100+
// 이미지 경로 처리
101101
let src = img.image;
102102
if (src && !src.startsWith('http') && !src.startsWith('/')) {
103103
src = '/' + src;
@@ -144,12 +144,16 @@
144144

145145
// ==================== 햄버거 메뉴 ====================
146146

147+
/**
148+
* 햄버거 메뉴 토글
149+
*/
147150
function toggleMenu() {
148151
const menu = document.getElementById('dropdown-menu');
149152
const backdrop = document.getElementById('menu-backdrop');
150153

151154
if (menu && backdrop) {
152155
const isOpen = menu.classList.contains('show');
156+
153157
if (isOpen) {
154158
closeMenu();
155159
} else {
@@ -159,6 +163,9 @@
159163
}
160164
}
161165

166+
/**
167+
* 메뉴 닫기
168+
*/
162169
function closeMenu() {
163170
const menu = document.getElementById('dropdown-menu');
164171
const backdrop = document.getElementById('menu-backdrop');
@@ -167,8 +174,12 @@
167174
if (backdrop) backdrop.classList.remove('show');
168175
}
169176

177+
/**
178+
* 햄버거 버튼 표시 (작성자만)
179+
*/
170180
function showMenuButton(isAuthor) {
171181
const menuButton = document.getElementById('menu-button');
182+
172183
if (menuButton && isAuthor) {
173184
menuButton.classList.add('visible');
174185
}
@@ -177,6 +188,7 @@
177188
// ==================== 미션 삭제 ====================
178189

179190
async function deleteMission() {
191+
// 메뉴 먼저 닫기
180192
closeMenu();
181193

182194
if (!confirm('정말로 이 미션을 삭제하시겠습니까?\n삭제된 미션은 복구할 수 없습니다.')) {
@@ -217,16 +229,17 @@
217229
return;
218230
}
219231

232+
// ✨ 미션 상태 저장
220233
missionStatus = mission.status;
221234

222235
// 1. 이미지 표시
223236
renderImages(mission.images);
224237

225-
// 2. 지도 표시 (좌표가 있을 때만)
238+
// 2. 지도 표시 (좌표가 있을 때만, 상태 포함)
226239
if (mission.location_lat && mission.location_lng) {
227-
// ✅ category 추가 전달
228-
initMap(mission.location_lat, mission.location_lng, mission.status, mission.category);
240+
initMap(mission.location_lat, mission.location_lng, mission.status);
229241
} else {
242+
// ✨ 위치 정보가 없으면 "장소 설정 없음" 메시지 표시
230243
showNoLocationMessage();
231244
}
232245

@@ -240,6 +253,9 @@
240253

241254
// ==================== 이벤트 핸들러 ====================
242255

256+
/**
257+
* 키보드 이벤트 (ESC로 모달/메뉴 닫기)
258+
*/
243259
function initKeyboardEvents() {
244260
document.addEventListener('keydown', function(e) {
245261
if (e.key === 'Escape') {
@@ -249,15 +265,23 @@
249265
});
250266
}
251267

268+
/**
269+
* 모달 배경 클릭으로 닫기
270+
*/
252271
function initModalEvents() {
253272
const modal = document.getElementById('imageModal');
254273
if (modal) {
255274
modal.addEventListener('click', function(e) {
256-
if (e.target === this) closeImageModal();
275+
if (e.target === this) {
276+
closeImageModal();
277+
}
257278
});
258279
}
259280
}
260281

282+
/**
283+
* 햄버거 메뉴 이벤트
284+
*/
261285
function initMenuEvents() {
262286
const menuButton = document.getElementById('menu-button');
263287
const backdrop = document.getElementById('menu-backdrop');
@@ -270,6 +294,7 @@
270294
});
271295
}
272296

297+
// 삭제 버튼 이벤트
273298
if (deleteBtn) {
274299
deleteBtn.addEventListener('click', function(e) {
275300
e.preventDefault();
@@ -282,13 +307,16 @@
282307
backdrop.addEventListener('click', closeMenu);
283308
}
284309

310+
// 메뉴 외부 클릭 시 닫기
285311
document.addEventListener('click', function(e) {
286312
const menu = document.getElementById('dropdown-menu');
287313
const menuButton = document.getElementById('menu-button');
288314

289315
if (menu && menuButton) {
290316
if (!menu.contains(e.target) && !menuButton.contains(e.target)) {
291-
if (menu.classList.contains('show')) closeMenu();
317+
if (menu.classList.contains('show')) {
318+
closeMenu();
319+
}
292320
}
293321
}
294322
});
@@ -297,14 +325,17 @@
297325
// ==================== 초기화 ====================
298326

299327
function init() {
328+
// 전역 함수 노출
300329
window.deleteMission = deleteMission;
301330
window.openImageModal = openImageModal;
302331
window.closeImageModal = closeImageModal;
303332

333+
// 이벤트 리스너 등록
304334
initKeyboardEvents();
305335
initModalEvents();
306336
initMenuEvents();
307337

338+
// 데이터 로드
308339
loadMissionDetail();
309340

310341
console.log("✅ mission_detail.js 초기화 완료");

0 commit comments

Comments
 (0)