diff --git a/frontend/src/views/SeriesManageView.vue b/frontend/src/views/SeriesManageView.vue index 35cc619..ad9d4e2 100644 --- a/frontend/src/views/SeriesManageView.vue +++ b/frontend/src/views/SeriesManageView.vue @@ -2,6 +2,12 @@
{{ store.series?.name || 'Series' }} + {{ store.chapters.length }} part(s) · {{ store.pageCount }} page(s) @@ -214,6 +220,14 @@
+ + + + @@ -223,6 +237,7 @@ import { useRoute } from 'vue-router' import { useSeriesManageStore, moveItem } from '../stores/seriesManage.js' import { useInfiniteScroll } from '../composables/useInfiniteScroll.js' import KebabMenu from '../components/common/KebabMenu.vue' +import TagRenameDialog from '../components/modal/TagRenameDialog.vue' const route = useRoute() const store = useSeriesManageStore() @@ -231,6 +246,14 @@ const drag = ref(null) // { chapterId, idx } const titleDraft = reactive({}) // chapterId -> draft title const partDraft = reactive({}) // chapterId -> draft stated_part (string) const pickerOpen = ref(false) +const renameOpen = ref(false) + +// A series IS a Tag(kind=series); TagRenameDialog PATCHes /api/tags/ and +// handles the same-name collision→merge flow. Reflect the new name in place. +function onRenamed(updated) { + renameOpen.value = false + if (store.series && updated?.name) store.series.name = updated.name +} // Keep local drafts in sync with loaded chapters. Edits commit on blur/Enter, // which refreshes and resets the draft to the saved value.