diff --git a/app/modules/cafe24/templates/cafe24/_editor.html b/app/modules/cafe24/templates/cafe24/_editor.html
index f5543ff..840bc1e 100644
--- a/app/modules/cafe24/templates/cafe24/_editor.html
+++ b/app/modules/cafe24/templates/cafe24/_editor.html
@@ -87,10 +87,19 @@
+ {# datetime-local 은 로캘·브라우저마다 표시 폭이 달라 잘리는 사고가 있었다(실제
+ 발생). 날짜/시간을 별도 input 으로 나누면 각각 폭이 고정이라 잘릴 일이 없다.
+ 제출 직전 JS 가 두 값을 합쳐 hidden scheduled_at 에 넣는다 — 서버(store.
+ parse_schedule_at)는 예전과 같은 'YYYY-MM-DDTHH:MM' 형식을 그대로 받으므로
+ 백엔드는 변경하지 않았다. #}
+
예약 시각
-
+
+
+
+
진열
diff --git a/app/modules/cafe24/templates/cafe24/products.html b/app/modules/cafe24/templates/cafe24/products.html
index a7defab..538a311 100644
--- a/app/modules/cafe24/templates/cafe24/products.html
+++ b/app/modules/cafe24/templates/cafe24/products.html
@@ -1,7 +1,7 @@
{% extends "erp_base.html" %}
{% block head_extra %}
-
+
{% endblock %}
{% block content %}
@@ -235,6 +235,7 @@
}
// 예약 폼 — 편집기 내용을 hidden 에 복사해 함께 보낸다(폼이 서로 형제라서).
+ // 날짜·시간도 두 개의 별도 input 값을 합쳐 서버가 기대하는 형식으로 만든다.
var schedForm = pane.querySelector("#cf24-schedule-form");
if (schedForm) {
schedForm.addEventListener("submit", function (e) {
@@ -242,6 +243,13 @@
var holder = document.getElementById("cf24-schedule-html");
var wantHtml = schedForm.querySelector('[name="apply_html"]').checked;
if (holder && box) holder.value = wantHtml ? box.value : "";
+
+ var dateEl = document.getElementById("cf24-schedule-date");
+ var timeEl = document.getElementById("cf24-schedule-time");
+ var atHolder = document.getElementById("cf24-schedule-at");
+ // date/time 이 필수(required)라 브라우저가 빈 값이면 여기까지 오지 않는다.
+ if (atHolder && dateEl && timeEl) atHolder.value = dateEl.value + "T" + timeEl.value;
+
if (!window.confirm(schedForm.dataset.confirm)) { e.preventDefault(); return; }
// 예약 등록으로 화면을 떠나므로 편집 중 경고를 끈다.
dirty = false;
diff --git a/app/modules/cafe24/templates/cafe24/schedules.html b/app/modules/cafe24/templates/cafe24/schedules.html
index 4f0fce1..267f813 100644
--- a/app/modules/cafe24/templates/cafe24/schedules.html
+++ b/app/modules/cafe24/templates/cafe24/schedules.html
@@ -1,7 +1,7 @@
{% extends "erp_base.html" %}
{% block head_extra %}
-
+
{% endblock %}
{% block content %}
diff --git a/app/modules/cafe24/templates/cafe24/system.html b/app/modules/cafe24/templates/cafe24/system.html
index aef2d94..6b437a4 100644
--- a/app/modules/cafe24/templates/cafe24/system.html
+++ b/app/modules/cafe24/templates/cafe24/system.html
@@ -1,7 +1,7 @@
{% extends "erp_base.html" %}
{% block head_extra %}
-
+
{% endblock %}
{% block content %}
diff --git a/app/static/cafe24.css b/app/static/cafe24.css
index 5599b26..1180b10 100644
--- a/app/static/cafe24.css
+++ b/app/static/cafe24.css
@@ -620,11 +620,22 @@
grid-column: 1 / -1;
}
-/* datetime-local 은 한국어 로캘에서 "2026. 08. 14. 오후 07:00" 형태로 길어져
- auto-fit minmax(160px, 1fr) 칸에 잘렸다(실측). 이 칸만 최소폭을 넓힌다. */
+/* 날짜/시간을 별도 input 으로 나눈다 — datetime-local 은 한국어 로캘에서
+ "2026. 08. 14. 오후 07:00" 형태로 길어져 auto-fit minmax(160px, 1fr) 칸에
+ 잘렸다(실측). date/time 은 각각 폭이 고정이라 잘릴 일이 없다. */
.cf24-schedule-datetime {
grid-column: span 2;
- min-width: 240px;
+ min-width: 220px;
+}
+
+.cf24-schedule-datetime-row {
+ display: flex;
+ gap: var(--sp-8, 8px);
+}
+
+.cf24-schedule-datetime-row .cf24-schedule-input {
+ flex: 1 1 0;
+ min-width: 0;
}
.cf24-schedule-input {
diff --git a/docs/CAFE24_MODULE.md b/docs/CAFE24_MODULE.md
index 975dd8f..2b53fa9 100644
--- a/docs/CAFE24_MODULE.md
+++ b/docs/CAFE24_MODULE.md
@@ -174,7 +174,13 @@ app/modules/cafe24/ ← 상품관리 모듈
단건 적용과 같은 다듬기(URL 인코딩 → 소스 정리)를 거치므로 화면에서 본 값이 저장된다.
- 예약 폼은 적용 폼과 **형제**로 둔다(HTML 은 폼 중첩을 허용하지 않는다). 편집기 내용은
JS 가 hidden 에 복사해 함께 보낸다.
-- **시각은 KST 로 해석**한다(`datetime-local` 은 타임존이 없다). 과거 시각은 거부하되
+- **입력은 날짜/시간 별도 input** 이다(`type=date` + `type=time`). `datetime-local`
+ 단일 입력은 한국어 로캘에서 표시 폭이 브라우저마다 달라 잘리는 사고가 있었다(실제
+ 발생 — "2026. 08. 14. 오후 07:00" 형태). 두 input 은 각각 폭이 고정이라 잘릴 일이
+ 없다. 제출 직전 JS 가 두 값을 `"YYYY-MM-DD" + "T" + "HH:MM"` 로 합쳐 hidden
+ `scheduled_at` 에 넣는다 — 서버(`store.parse_schedule_at`)는 예전과 같은 형식을
+ 받으므로 백엔드는 그대로다.
+- **시각은 KST 로 해석**한다. 과거 시각은 거부하되
폼을 채우는 동안 시간이 흐른 경우를 위해 1분 여유를 둔다.
- **실행은 `app/modules/cafe24/worker.py`** — compose 서비스 `dbx-cafe24-worker` 가
`--loop 60` 으로 돈다. 웹 요청 안에서 기다리는 방식은 프록시 타임아웃·재기동에