From bb3a7955b4c6c808e702e62b8ba90657723dfba0 Mon Sep 17 00:00:00 2001 From: xds Date: Wed, 4 Feb 2026 15:47:41 +0300 Subject: [PATCH] feat: Introduce multi-selection for character assets, including UI for bulk selection and use in generation. --- src/views/CharacterDetailView.vue | 57 +++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/src/views/CharacterDetailView.vue b/src/views/CharacterDetailView.vue index e352ccf..5a78ce5 100644 --- a/src/views/CharacterDetailView.vue +++ b/src/views/CharacterDetailView.vue @@ -34,12 +34,36 @@ const API_URL = import.meta.env.VITE_API_URL const selectedAsset = ref(null) const isModalVisible = ref(false) +const activeTab = ref("0") +const isMultiSelectMode = ref(false) +const bulkSelectedAssetIds = ref([]) const openModal = (asset) => { + if (isMultiSelectMode.value) { + toggleBulkSelection(asset.id) + return + } selectedAsset.value = asset isModalVisible.value = true } +const toggleBulkSelection = (id) => { + const idx = bulkSelectedAssetIds.value.indexOf(id) + if (idx > -1) bulkSelectedAssetIds.value.splice(idx, 1) + else bulkSelectedAssetIds.value.push(id) +} + +const handleUseInGeneration = () => { + if (bulkSelectedAssetIds.value.length === 0) return + + const assetsToUse = characterAssets.value.filter(a => bulkSelectedAssetIds.value.includes(a.id)) + selectedAssets.value = [...assetsToUse] + + activeTab.value = "0" + isMultiSelectMode.value = false + bulkSelectedAssetIds.value = [] +} + const loadData = async () => { loading.value = true const charId = route.params.id @@ -396,7 +420,7 @@ const handleLogout = () => { -

Linked Assets ({{ assetsTotalRecords }})

-
+
+