diff --git a/brand/LAUNCH-PROGRESS.md b/brand/LAUNCH-PROGRESS.md index cbb4e6e..d5b68a9 100644 --- a/brand/LAUNCH-PROGRESS.md +++ b/brand/LAUNCH-PROGRESS.md @@ -110,7 +110,7 @@ 3) **추천 +5 / 비추 -1** (일일 최대 적립 50포인트) 4) 다른 사용자 글에 **추천 누르면 +1** (일일 10 제한), 추천 **취소 시 -1** 5. **분류 화면 순서변경 보호** — 스크롤하다 실수로 순서 바뀌는 것 방지: 기본은 drag&drop 비활성, **"순서변경" 버튼 클릭 시에만** 드래그 가능 -6. **[버그] 앱 잠금이 카메라/갤러리 복귀 시 오작동** — 영수증 OCR(카메라)·이미지 선택 등 앱 내 네이티브 동작 후 돌아오면 PIN 잠금 화면이 뜸. 원인: 앱 잠금이 `visibilitychange`(화면 숨김)으로 백그라운드를 감지하는데, 카메라/갤러리 호출도 숨김으로 인식됨. 수정: 네이티브 동작 직전 "다음 1회 잠금 건너뛰기" 플래그를 세워 복귀 시 잠금 안 걸리게(진짜 앱 이탈만 잠금). (이번 세션 앱잠금 추가로 생긴 회귀) +6. ✅ **[버그·수정완료] 앱 잠금이 카메라/갤러리 복귀 시 오작동** — appLock.suppressLock() 추가, 파일선택은 App.vue 전역 리스너, 카메라/공유는 호출부에서 suppress. (코드 배포됨 — 테스터에게 반영하려면 versionCode 2로 AAB 재빌드 업로드 필요) --- diff --git a/src/views/account/CategoryView.vue b/src/views/account/CategoryView.vue index 8978f36..5d3203c 100644 --- a/src/views/account/CategoryView.vue +++ b/src/views/account/CategoryView.vue @@ -62,15 +62,21 @@ async function reload() { } // ===== 계층 드래그 정렬 (대분류 블록 / 대분류 내 소분류) ===== +// 스크롤하다 실수로 순서가 바뀌는 것 방지: 기본은 드래그 비활성, '순서변경' 버튼으로 켠다. const majorListEl = ref(null) +const reorderMode = ref(false) let sortables = [] function destroySortables() { sortables.forEach((s) => s.destroy()) sortables = [] } +function toggleReorder() { + reorderMode.value = !reorderMode.value + nextTick(() => initSortable()) // 켜면 생성, 끄면 destroy 후 early-return +} function initSortable() { destroySortables() - if (!majorListEl.value) return + if (!majorListEl.value || !reorderMode.value) return // 대분류 순서 — 블록 단위라 소분류가 함께 이동 sortables.push( Sortable.create(majorListEl.value, { @@ -189,7 +195,12 @@ onBeforeUnmount(destroySortables) - +
+ + +
@@ -202,7 +213,10 @@ onBeforeUnmount(destroySortables) -

≡ 손잡이로 순서 변경 — 대분류는 소분류와 함께, 소분류는 그 대분류 안에서만 이동합니다.

+

+ + +

{{ error }}

불러오는 중...

@@ -211,7 +225,7 @@ onBeforeUnmount(destroySortables)
  • - + @@ -220,7 +234,7 @@ onBeforeUnmount(destroySortables)
    • - + @@ -306,6 +320,18 @@ button.danger { .tabs-row .tabs { margin-bottom: 0; } +.tabs-actions { + display: flex; + align-items: center; + gap: 0.5rem; + flex-wrap: wrap; + justify-content: flex-end; +} +.reorder-btn.active { + color: #fff; + background: hsla(160, 100%, 37%, 1); + border-radius: 6px; +} .tabs { display: flex; gap: 0.25rem;