From d9fa80fc0331e60606c2da7261050bb88c0182fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sat, 7 Mar 2026 23:34:37 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[planning-design]=20=ED=85=9C=ED=94=8C?= =?UTF-8?q?=EB=A6=BF=20=ED=8C=A8=EB=84=90=20=EC=9E=98=EB=A6=BC=20=ED=98=84?= =?UTF-8?q?=EC=83=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - position: absolute → fixed로 변경 (부모 overflow 영향 제거) - 버튼 위치 기준으로 JS 동적 좌표 계산 - 화면 경계 밖 방지 (좌/우/하단 overflow 체크) --- .../views/rd/planning-design/index.blade.php | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/resources/views/rd/planning-design/index.blade.php b/resources/views/rd/planning-design/index.blade.php index 5c2be821..79450106 100644 --- a/resources/views/rd/planning-design/index.blade.php +++ b/resources/views/rd/planning-design/index.blade.php @@ -748,10 +748,10 @@ } .sb-tpl-trigger:hover { border-color: var(--pc-indigo); color: var(--pc-indigo); } .sb-tpl-panel { - position: absolute; top: 100%; right: 0; margin-top: 4px; z-index: 100; - width: 360px; max-height: 480px; background: #fff; + position: fixed; z-index: 9990; + width: 380px; max-height: 520px; background: #fff; border: 1px solid #e2e8f0; border-radius: 10px; - box-shadow: 0 12px 32px rgba(0,0,0,0.12); display: flex; flex-direction: column; + box-shadow: 0 12px 32px rgba(0,0,0,0.15); display: flex; flex-direction: column; } .sb-tpl-tabs { display: flex; border-bottom: 1px solid #e2e8f0; @@ -1429,8 +1429,8 @@
{{-- Template Dropdown --}}
- -
+ +
기본 템플릿
내 템플릿
@@ -2997,6 +2997,30 @@ function planningCanvas() { localStorage.setItem('sb_custom_templates', JSON.stringify(this.sbCustomTemplates)); }, + sbToggleTplPanel() { + this.sbTplOpen = !this.sbTplOpen; + if (this.sbTplOpen) { + this.$nextTick(() => { + const btn = this.$refs.sbTplBtn; + const panel = this.$refs.sbTplPanel; + if (!btn || !panel) return; + const r = btn.getBoundingClientRect(); + const pw = 380; + const ww = window.innerWidth; + const wh = window.innerHeight; + // 가로: 버튼 오른쪽 끝 기준, 화면 밖이면 왼쪽으로 이동 + let left = r.right - pw; + if (left < 8) left = 8; + if (left + pw > ww - 8) left = ww - pw - 8; + // 세로: 버튼 아래, 공간 부족하면 위로 + let top = r.bottom + 4; + if (top + 520 > wh) top = Math.max(8, r.top - 520 - 4); + panel.style.left = left + 'px'; + panel.style.top = top + 'px'; + }); + } + }, + sbEditMenu() { // deep copy menuTree → draft (+ _open 플래그 추가) this.sbMenuDraft = JSON.parse(JSON.stringify(this.sb.menuTree)).map(m => {