fix(cafe24): 예약 날짜/시간 — 칸 전체 클릭 반응 + 요일 표시 + 날짜 폭 확대
1) 칸 전체를 클릭해야 팝업이 뜨지 않던 문제
네이티브 date/time input 은 자신의 달력 아이콘(우측 끝 작은 영역)을 클릭해야만
팝업이 뜬다. 투명한 네이티브 input 을 칸 전체 크기로 늘려놔도 그 작은 아이콘
영역만 반응하는 건 그대로였다 — 실제 "오른쪽 부분을 선택해야 나온다"로 보고된
문제 그대로다.
클릭 핸들러에서 showPicker() 를 직접 호출해 칸 어디를 클릭해도 팝업이 뜨게
했다. 미지원 브라우저에서는 조용히 무시되고 기존처럼 포커스만 이동한다.
실제 클릭(진짜 사용자 제스처)으로 검증했다 — showPicker() 는 클릭당 한 번만
유효한 제스처를 소비하므로, 같은 클릭에서 두 번째 호출을 시도하면
"NotAllowedError: requires a user gesture" 가 나는 것으로 첫 호출이 성공했음을
간접 확인했다. 이 미리보기 도구는 네이티브 OS 팝업을 스크린샷에 담지 못해
시각적으로는 확인할 수 없었다(도구 제약이지 코드 문제 아님).
2) 요일 표시
"2026년 08월 20일" 뒤에 "(목)" 을 붙인다. new Date("YYYY-MM-DD") 로 문자열을
그대로 파싱하면 UTC 로 해석돼 하루 밀릴 수 있어, 연/월/일을 분해해
new Date(y, mo-1, d) 로 로컬 시간대 기준으로 만든 뒤 getDay() 를 쓴다.
3) 날짜 칸 폭 확대
요일이 붙어 텍스트가 길어진 만큼 날짜 칸을 시간 칸보다 넓게 잡았다
(flex: 1.7 대 1). 라벨 전체 폭도 240px→300px 로 늘렸다.
검증: 유닛테스트 61개 통과(백엔드 무변경). 브라우저 실측 — "2026년 08월 20일 (목)"
표시 확인, 날짜/시간 칸 모두 잘림 없음(날짜 185px·시간 109px), showPicker 지원
확인, 가로 스크롤 없음.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -102,12 +102,12 @@
|
||||
동작하고, 보이는 글자만 "2026년 08월 20일"/"오후 07시 30분" 형식이다.
|
||||
value 는 그대로 YYYY-MM-DD / HH:MM 이라 제출 시 합치는 로직은 그대로다. #}
|
||||
<span class="cf24-schedule-datetime-row">
|
||||
<span class="cf24-dt-field">
|
||||
<span class="cf24-dt-field cf24-dt-field-date">
|
||||
<span class="cf24-dt-display" id="cf24-schedule-date-display" aria-hidden="true">연도.월.일</span>
|
||||
<input class="cf24-dt-native" type="date" id="cf24-schedule-date"
|
||||
aria-label="예약 날짜" required />
|
||||
</span>
|
||||
<span class="cf24-dt-field">
|
||||
<span class="cf24-dt-field cf24-dt-field-time">
|
||||
<span class="cf24-dt-display" id="cf24-schedule-time-display" aria-hidden="true">시:분</span>
|
||||
<input class="cf24-dt-native" type="time" id="cf24-schedule-time"
|
||||
aria-label="예약 시간" required />
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends "erp_base.html" %}
|
||||
|
||||
{% block head_extra %}
|
||||
<link rel="stylesheet" href="/static/cafe24.css?v=20260814v" />
|
||||
<link rel="stylesheet" href="/static/cafe24.css?v=20260814w" />
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
@@ -244,13 +244,20 @@
|
||||
var timeOut = document.getElementById("cf24-schedule-time-display");
|
||||
if (!dateEl || !timeEl) return;
|
||||
|
||||
var WEEKDAY = ["일", "월", "화", "수", "목", "금", "토"];
|
||||
|
||||
function pad2(n) { return (n < 10 ? "0" : "") + n; }
|
||||
|
||||
function paintDate() {
|
||||
var v = dateEl.value; // "YYYY-MM-DD"
|
||||
if (!v) { dateOut.textContent = "연도.월.일"; return; }
|
||||
var p = v.split("-");
|
||||
dateOut.textContent = p[0] + "년 " + p[1] + "월 " + p[2] + "일";
|
||||
var y = parseInt(p[0], 10), mo = parseInt(p[1], 10), d = parseInt(p[2], 10);
|
||||
// new Date(y, mo-1, d) 는 로컬 시간대로 만들어져 날짜가 밀리지 않는다
|
||||
// (문자열을 그대로 new Date("YYYY-MM-DD") 로 파싱하면 UTC 로 해석돼 하루
|
||||
// 어긋날 수 있다).
|
||||
var weekday = WEEKDAY[new Date(y, mo - 1, d).getDay()];
|
||||
dateOut.textContent = p[0] + "년 " + p[1] + "월 " + p[2] + "일 (" + weekday + ")";
|
||||
}
|
||||
|
||||
function paintTime() {
|
||||
@@ -264,6 +271,18 @@
|
||||
timeOut.textContent = period + " " + pad2(h12) + "시 " + parts[1] + "분";
|
||||
}
|
||||
|
||||
// 네이티브 달력/시간 팝업은 브라우저가 자체 아이콘(우측 끝) 클릭에만 반응하고
|
||||
// 칸 전체 클릭에는 반응하지 않는다. showPicker() 를 직접 호출해 칸 어디를
|
||||
// 클릭해도 팝업이 뜨게 한다. 지원하지 않는 브라우저에서는 조용히 무시되고
|
||||
// 포커스만 이동한다(기존 동작 그대로 유지되므로 안전).
|
||||
function openPicker(el) {
|
||||
if (typeof el.showPicker === "function") {
|
||||
try { el.showPicker(); } catch (err) { /* 사용자 제스처 밖 호출 등 — 무시 */ }
|
||||
}
|
||||
}
|
||||
dateEl.addEventListener("click", function () { openPicker(dateEl); });
|
||||
timeEl.addEventListener("click", function () { openPicker(timeEl); });
|
||||
|
||||
dateEl.addEventListener("input", paintDate);
|
||||
dateEl.addEventListener("change", paintDate);
|
||||
timeEl.addEventListener("input", paintTime);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends "erp_base.html" %}
|
||||
|
||||
{% block head_extra %}
|
||||
<link rel="stylesheet" href="/static/cafe24.css?v=20260814v" />
|
||||
<link rel="stylesheet" href="/static/cafe24.css?v=20260814w" />
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{% extends "erp_base.html" %}
|
||||
|
||||
{% block head_extra %}
|
||||
<link rel="stylesheet" href="/static/cafe24.css?v=20260814v" />
|
||||
<link rel="stylesheet" href="/static/cafe24.css?v=20260814w" />
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
Reference in New Issue
Block a user