feat(bulk): IR-style BulkEditorPanel + GalleryView select toggle and wiring

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-16 18:05:33 -04:00
parent bff9af1478
commit 82689e10bc
2 changed files with 166 additions and 0 deletions
+16
View File
@@ -1,5 +1,13 @@
<template>
<v-container fluid class="py-6">
<v-btn
class="fc-select-toggle"
:color="sel.isSelectMode ? 'accent' : undefined"
:variant="sel.isSelectMode ? 'flat' : 'tonal'"
size="small"
@click="sel.isSelectMode ? sel.exitSelectMode() : sel.enterSelectMode()"
>{{ sel.isSelectMode ? 'Done' : 'Select' }}</v-btn>
<div class="fc-gallery-layout">
<div class="fc-gallery-layout__main">
<EmptyState v-if="store.isEmpty" />
@@ -12,6 +20,7 @@
v-if="modal.currentImageId !== null"
@close="closeImage"
/>
<BulkEditorPanel />
</v-container>
</template>
@@ -24,9 +33,12 @@ import GalleryGrid from '../components/gallery/GalleryGrid.vue'
import TimelineSidebar from '../components/gallery/TimelineSidebar.vue'
import EmptyState from '../components/gallery/EmptyState.vue'
import ImageViewer from '../components/modal/ImageViewer.vue'
import BulkEditorPanel from '../components/gallery/BulkEditorPanel.vue'
import { useGallerySelectionStore } from '../stores/gallerySelection.js'
const store = useGalleryStore()
const modal = useModalStore()
const sel = useGallerySelectionStore()
const router = useRouter()
const route = useRoute()
@@ -41,6 +53,7 @@ onMounted(async () => {
})
watch(() => route.query.tag_id, (q) => {
sel.clear() // result set changed — selected ids are no longer valid
const tagId = parseInt(q, 10)
store.setTagFilter(isNaN(tagId) ? null : tagId)
})
@@ -69,6 +82,9 @@ function closeImage() {
}
.fc-gallery-layout__main { flex: 1; min-width: 0; }
.fc-gallery-layout__sidebar { flex-shrink: 0; }
.fc-select-toggle {
position: absolute; top: 12px; right: 16px; z-index: 1101;
}
@media (max-width: 900px) {
.fc-gallery-layout { flex-direction: column-reverse; }