diff --git a/src/components/ui/CategoryPicker.vue b/src/components/ui/CategoryPicker.vue index 9ece4d2..35c5bd4 100644 --- a/src/components/ui/CategoryPicker.vue +++ b/src/components/ui/CategoryPicker.vue @@ -10,6 +10,7 @@ const props = defineProps({ disabled: { type: Boolean, default: false }, admin: { type: Boolean, default: false }, reorderable: { type: Boolean, default: false }, + hideAdd: { type: Boolean, default: false }, // 분류 추가(+대분류/+소분류) 버튼 숨김 (필터 등 선택 전용) }) const emit = defineEmits(['update:modelValue', 'category-added', 'rename', 'delete', 'reorder']) @@ -229,10 +230,10 @@ onBeforeUnmount(destroySortables) :disabled="disabled" @click="$emit('update:modelValue', s.name)" >{{ s.name }} - + - +
form.category, (v) => { if (v) catSheet.value = false }) +// 검색 필터 분류 바텀시트 +const catFilterSheet = ref(false) +watch(() => filters.category, (v) => { if (v) catFilterSheet.value = false }) // ===== 외화 결제 ===== const CURRENCIES = ['KRW', 'USD', 'JPY', 'EUR', 'CNY', 'GBP', 'AUD', 'CAD', 'HKD', 'SGD', 'THB', 'VND', 'TWD', 'PHP', 'MYR'] @@ -1047,7 +1050,21 @@ onMounted(async () => { placeholder="메모·분류 검색" @keyup.enter="applyFilters" />
-
+
+ +
+ + + +
@@ -1563,6 +1580,23 @@ button.primary { font-size: 0.8rem; flex-shrink: 0; } +.cat-all-btn { + width: 100%; + padding: 0.55rem; + margin-bottom: 0.5rem; + border: 1px solid var(--color-border); + border-radius: 6px; + background: transparent; + color: var(--color-text); + font-size: 0.85rem; + cursor: pointer; +} +.cat-all-btn.active { + border-color: hsla(160, 100%, 37%, 1); + background: hsla(160, 100%, 37%, 0.1); + color: hsla(160, 100%, 37%, 1); + font-weight: 600; +} .summary { display: flex; gap: 0.75rem;