From 5f8b2597bfcb869eee32f9444a100fcdf73ac83e Mon Sep 17 00:00:00 2001 From: ttipo Date: Mon, 22 Jun 2026 23:35:33 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EA=B3=B5=EC=9A=A9=20=ED=8F=BC=20?= =?UTF-8?q?=EB=AA=A8=EB=8B=AC=20BaseModal=20+=20=EC=A0=84=EC=97=AD=20.form?= =?UTF-8?q?-*=20=ED=95=84=EB=93=9C=20=ED=81=B4=EB=9E=98=EC=8A=A4=20(Phase?= =?UTF-8?q?=201a)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - components/common/BaseModal.vue 신설: backdrop+헤더(제목/닫기)+본문/푸터 슬롯, Teleport·ESC·바깥클릭 닫기 내장. 전역 .modal* 와 충돌 없게 bm- 접두 클래스 사용 - relay.css 에 .form-field/-label/-row/-input/-textarea/-select(+wrap/chev) 표준 추가 - 일정·카테고리 모달을 BaseModal + .form-* 로 전환(중복 모달/필드 CSS 제거, 푸터 버튼은 전역 .mbtn 사용) Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/src/assets/styles/relay.css | 84 +++ frontend/src/components/common/BaseModal.vue | 162 ++++++ .../schedule/ScheduleCategoryModal.vue | 228 ++------ .../schedule/ScheduleEventModal.vue | 540 ++++++------------ 4 files changed, 466 insertions(+), 548 deletions(-) create mode 100644 frontend/src/components/common/BaseModal.vue diff --git a/frontend/src/assets/styles/relay.css b/frontend/src/assets/styles/relay.css index 18605c6..495ebff 100644 --- a/frontend/src/assets/styles/relay.css +++ b/frontend/src/assets/styles/relay.css @@ -569,6 +569,90 @@ body { color: var(--text-3); } +/* ============================================================ + * 폼 필드 (폼 모달 공통 — BaseModal 본문 등에서 사용) + * ============================================================ */ +.form-field { + display: flex; + flex-direction: column; + gap: 0.5rem; +} +.form-label { + font-size: 0.781rem; + font-weight: 600; + color: var(--text-2); +} +.form-row { + display: flex; + gap: 0.75rem; +} +.form-row .form-field { + flex: 1; + min-width: 0; +} +.form-input { + width: 100%; + height: 2.5rem; + padding: 0 0.75rem; + border: 1px solid var(--border-strong); + border-radius: var(--radius); + font-family: inherit; + font-size: 0.844rem; + color: var(--text); + background: #fff; +} +.form-input::placeholder { + color: var(--text-3); +} +.form-input:focus { + outline: none; + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-weak); +} +.form-textarea { + height: auto; + min-height: 5.75rem; + padding: 0.625rem 0.75rem; + line-height: 1.5; + resize: vertical; +} +/* 네이티브 select 래퍼 + 셰브론 */ +.form-select-wrap { + position: relative; +} +.form-select { + -webkit-appearance: none; + appearance: none; + width: 100%; + height: 2.5rem; + padding: 0 2.125rem 0 0.75rem; + border: 1px solid var(--border-strong); + border-radius: var(--radius); + font-family: inherit; + font-size: 0.844rem; + color: var(--text); + background: #fff; + cursor: pointer; +} +.form-select:focus { + outline: none; + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-weak); +} +.form-select-chev { + position: absolute; + right: 0.625rem; + top: 50%; + transform: translateY(-50%); + display: grid; + color: var(--text-3); + pointer-events: none; +} +.form-select-chev svg { + width: 0.9375rem; + height: 0.9375rem; +} + /* ============================================================ * 더보기 버튼 (목록 페이지네이션 공통) * ============================================================ */ diff --git a/frontend/src/components/common/BaseModal.vue b/frontend/src/components/common/BaseModal.vue new file mode 100644 index 0000000..f29b4d6 --- /dev/null +++ b/frontend/src/components/common/BaseModal.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/frontend/src/components/schedule/ScheduleCategoryModal.vue b/frontend/src/components/schedule/ScheduleCategoryModal.vue index 432b305..a357511 100644 --- a/frontend/src/components/schedule/ScheduleCategoryModal.vue +++ b/frontend/src/components/schedule/ScheduleCategoryModal.vue @@ -1,6 +1,7 @@ diff --git a/frontend/src/components/schedule/ScheduleEventModal.vue b/frontend/src/components/schedule/ScheduleEventModal.vue index d7f7463..7023675 100644 --- a/frontend/src/components/schedule/ScheduleEventModal.vue +++ b/frontend/src/components/schedule/ScheduleEventModal.vue @@ -1,6 +1,7 @@