From 436a43f43d6224978242254cafb29afdae8d878a Mon Sep 17 00:00:00 2001 From: xihxxn Date: Sun, 7 Jun 2026 11:08:11 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[Validation]=20=EC=BB=A4=EB=A6=AC=ED=81=98?= =?UTF-8?q?=EB=9F=BC=20=ED=8F=BC=20=ED=95=84=EC=88=98=20=ED=95=84=EB=93=9C?= =?UTF-8?q?=20=ED=94=84=EB=A1=A0=ED=8A=B8=20=EA=B2=80=EC=A6=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/curriculum/CurriculumPage.js | 13 +++++++++++-- .../src/pages/curriculum/CurriculumPage.module.css | 7 +++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/curriculum/CurriculumPage.js b/frontend/src/pages/curriculum/CurriculumPage.js index e65f1ce..a26d907 100644 --- a/frontend/src/pages/curriculum/CurriculumPage.js +++ b/frontend/src/pages/curriculum/CurriculumPage.js @@ -132,6 +132,7 @@ function AdminSessionCard({ day, onEdit, onDelete }) { // ── 운영진 세션 생성/수정 폼 ────────────────────────── function SessionForm({ day, week, onClose, onSave }) { const isEdit = !!day; + const [errors, setErrors] = useState({}); const [form, setForm] = useState({ week: day?.week || week || 1, sessionDate: day?.sessionDate || '', @@ -164,6 +165,13 @@ function SessionForm({ day, week, onClose, onSave }) { }; const handleSave = async () => { + const newErrors = {}; + if (!form.sessionDate) newErrors.sessionDate = '날짜를 입력해주세요.'; + if (!form.amTitle) newErrors.amTitle = '오전 세션 제목을 입력해주세요.'; + if (!form.pmTitle) newErrors.pmTitle = '오후 세션 제목을 입력해주세요.'; + if (Object.keys(newErrors).length > 0) { setErrors(newErrors); return; } + setErrors({}); + const body = { generation: Number(form.generation), week: Number(form.week), @@ -238,6 +246,7 @@ function SessionForm({ day, week, onClose, onSave }) { setForm({ ...form, sessionDate: e.target.value })} /> + {errors.sessionDate &&

{errors.sessionDate}

} @@ -256,7 +265,7 @@ function SessionForm({ day, week, onClose, onSave }) {
-
setForm({ ...form, amTitle: e.target.value })} />
+
setForm({ ...form, amTitle: e.target.value })} />{errors.amTitle &&

{errors.amTitle}

}
setForm({ ...form, amHost: e.target.value })} />
setForm({ ...form, amMaterialName: e.target.value })} />
setForm({ ...form, amMaterialUrl: e.target.value })} />
@@ -279,7 +288,7 @@ function SessionForm({ day, week, onClose, onSave }) {
-
setForm({ ...form, pmTitle: e.target.value })} />
+
setForm({ ...form, pmTitle: e.target.value })} />{errors.pmTitle &&

{errors.pmTitle}

}
setForm({ ...form, pmHost: e.target.value })} />
setForm({ ...form, pmMaterialName: e.target.value })} />
setForm({ ...form, pmMaterialUrl: e.target.value })} />
diff --git a/frontend/src/pages/curriculum/CurriculumPage.module.css b/frontend/src/pages/curriculum/CurriculumPage.module.css index 57633ed..a04f001 100644 --- a/frontend/src/pages/curriculum/CurriculumPage.module.css +++ b/frontend/src/pages/curriculum/CurriculumPage.module.css @@ -434,6 +434,13 @@ .formInput:focus { border-color: var(--dark); } +.errorMsg { + font-family: var(--font-main); + font-size: 0.78rem; + color: #e53e3e; + margin: 3px 0 0 2px; +} + .saveFormBtn { width: 40%; margin: 30px auto 0; From 95e77214c16177bf81933d12bb133874578bc6e3 Mon Sep 17 00:00:00 2001 From: xihxxn Date: Sun, 7 Jun 2026 11:13:58 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[Style]=20=EC=BB=A4=EB=A6=AC=ED=81=98?= =?UTF-8?q?=EB=9F=BC=20=ED=8F=BC=20=ED=95=84=EC=88=98=20=ED=95=84=EB=93=9C?= =?UTF-8?q?=20*=20=ED=91=9C=EC=8B=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/curriculum/CurriculumPage.js | 6 +++--- frontend/src/pages/curriculum/CurriculumPage.module.css | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/frontend/src/pages/curriculum/CurriculumPage.js b/frontend/src/pages/curriculum/CurriculumPage.js index a26d907..400fcbe 100644 --- a/frontend/src/pages/curriculum/CurriculumPage.js +++ b/frontend/src/pages/curriculum/CurriculumPage.js @@ -243,7 +243,7 @@ function SessionForm({ day, week, onClose, onSave }) { readOnly />
- + setForm({ ...form, sessionDate: e.target.value })} /> {errors.sessionDate &&

{errors.sessionDate}

} @@ -265,7 +265,7 @@ function SessionForm({ day, week, onClose, onSave }) {
-
setForm({ ...form, amTitle: e.target.value })} />{errors.amTitle &&

{errors.amTitle}

}
+
setForm({ ...form, amTitle: e.target.value })} />{errors.amTitle &&

{errors.amTitle}

}
setForm({ ...form, amHost: e.target.value })} />
setForm({ ...form, amMaterialName: e.target.value })} />
setForm({ ...form, amMaterialUrl: e.target.value })} />
@@ -288,7 +288,7 @@ function SessionForm({ day, week, onClose, onSave }) {
-
setForm({ ...form, pmTitle: e.target.value })} />{errors.pmTitle &&

{errors.pmTitle}

}
+
setForm({ ...form, pmTitle: e.target.value })} />{errors.pmTitle &&

{errors.pmTitle}

}
setForm({ ...form, pmHost: e.target.value })} />
setForm({ ...form, pmMaterialName: e.target.value })} />
setForm({ ...form, pmMaterialUrl: e.target.value })} />
diff --git a/frontend/src/pages/curriculum/CurriculumPage.module.css b/frontend/src/pages/curriculum/CurriculumPage.module.css index a04f001..de1c60c 100644 --- a/frontend/src/pages/curriculum/CurriculumPage.module.css +++ b/frontend/src/pages/curriculum/CurriculumPage.module.css @@ -434,6 +434,10 @@ .formInput:focus { border-color: var(--dark); } +.required { + color: #e53e3e; +} + .errorMsg { font-family: var(--font-main); font-size: 0.78rem;