feat: 개인정보 수집·이용 동의 프로세스 추가
- QR 라벨에 개인정보 동의 안내 문구 추가 (18pt 작은 글씨) - 웹앱에 핀테크 스타일 개인정보 동의 체크박스 추가 - 백엔드 API에서 개인정보 동의 검증 추가 - 개인정보보호법 준수 강화 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -166,6 +166,72 @@
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.privacy-consent {
|
||||
margin: 24px 0 8px 0;
|
||||
}
|
||||
|
||||
.checkbox-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
.checkbox-container input[type="checkbox"] {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
cursor: pointer;
|
||||
height: 0;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.checkmark {
|
||||
position: relative;
|
||||
height: 24px;
|
||||
width: 24px;
|
||||
background-color: #f8f9fa;
|
||||
border: 2px solid #e9ecef;
|
||||
border-radius: 6px;
|
||||
transition: all 0.2s ease;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.checkbox-container:hover .checkmark {
|
||||
border-color: #6366f1;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.checkbox-container input:checked ~ .checkmark {
|
||||
background: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);
|
||||
border-color: #6366f1;
|
||||
}
|
||||
|
||||
.checkmark::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
display: none;
|
||||
left: 7px;
|
||||
top: 3px;
|
||||
width: 6px;
|
||||
height: 11px;
|
||||
border: solid white;
|
||||
border-width: 0 2px 2px 0;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.checkbox-container input:checked ~ .checkmark::after {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.consent-text {
|
||||
margin-left: 12px;
|
||||
color: #495057;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
letter-spacing: -0.2px;
|
||||
}
|
||||
|
||||
.btn-submit {
|
||||
width: 100%;
|
||||
padding: 18px;
|
||||
@@ -382,6 +448,14 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="privacy-consent">
|
||||
<label class="checkbox-container">
|
||||
<input type="checkbox" id="privacyConsent" required>
|
||||
<span class="checkmark"></span>
|
||||
<span class="consent-text">개인정보 수집·이용 동의</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn-submit" id="btnSubmit">
|
||||
포인트 적립하기
|
||||
</button>
|
||||
@@ -442,12 +516,18 @@
|
||||
|
||||
const phone = document.getElementById('phone').value.trim();
|
||||
const name = document.getElementById('name').value.trim();
|
||||
const privacyConsent = document.getElementById('privacyConsent').checked;
|
||||
|
||||
if (!phone || !name) {
|
||||
showAlert('전화번호와 이름을 모두 입력해주세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!privacyConsent) {
|
||||
showAlert('개인정보 수집·이용에 동의해주세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
btnSubmit.disabled = true;
|
||||
btnSubmit.textContent = '처리 중...';
|
||||
alertMsg.style.display = 'none';
|
||||
@@ -462,7 +542,8 @@
|
||||
transaction_id: tokenInfo.transaction_id,
|
||||
nonce: tokenInfo.nonce,
|
||||
phone: phone,
|
||||
name: name
|
||||
name: name,
|
||||
privacy_consent: true
|
||||
})
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user