diff --git a/frontend/src/views/admin/SoraAdminView.vue b/frontend/src/views/admin/SoraAdminView.vue index 17a42838..3d107a1e 100644 --- a/frontend/src/views/admin/SoraAdminView.vue +++ b/frontend/src/views/admin/SoraAdminView.vue @@ -3,10 +3,9 @@ import { ref, onMounted, computed } from 'vue' import { useI18n } from 'vue-i18n' import soraAdminAPI, { type SoraSystemStats, type SoraUserStats, type SoraGenerationAdmin } from '@/api/admin/sora' import AppLayout from '@/components/layout/AppLayout.vue' -import LoadingSpinner from '@/components/ui/LoadingSpinner.vue' -import Icon from '@/components/ui/Icon.vue' -import BaseButton from '@/components/ui/BaseButton.vue' -import BasePagination from '@/components/ui/BasePagination.vue' +import LoadingSpinner from '@/components/common/LoadingSpinner.vue' +import Icon from '@/components/icons/Icon.vue' +import ConfirmDialog from '@/components/common/ConfirmDialog.vue' const { t } = useI18n() @@ -17,6 +16,11 @@ const userStats = ref([]) const generations = ref([]) const activeTab = ref<'overview' | 'users' | 'generations'>('overview') +// Confirm dialog state +const showConfirmDialog = ref(false) +const confirmDialogMessage = ref('') +const pendingClearUserId = ref(null) + // Pagination const userPage = ref(1) const userPageSize = ref(20) @@ -98,8 +102,19 @@ async function fetchGenerations() { } } -async function clearUserStorage(userId: number) { - if (!confirm(t('admin.sora.confirmClearStorage'))) return +// Confirm dialog handlers +function confirmClearStorage(userId: number) { + pendingClearUserId.value = userId + confirmDialogMessage.value = t('admin.sora.confirmClearStorage') + showConfirmDialog.value = true +} + +async function handleConfirmClear() { + if (pendingClearUserId.value === null) return + const userId = pendingClearUserId.value + showConfirmDialog.value = false + pendingClearUserId.value = null + try { await soraAdminAPI.clearUserStorage(userId) await fetchUserStats() @@ -109,6 +124,11 @@ async function clearUserStorage(userId: number) { } } +function handleCancelClear() { + showConfirmDialog.value = false + pendingClearUserId.value = null +} + async function loadAll() { loading.value = true await Promise.all([ @@ -304,7 +324,7 @@ onMounted(loadAll) class="input flex-1" @keyup.enter="fetchUserStats" /> - {{ t('common.search') }} + @@ -340,13 +360,12 @@ onMounted(loadAll) {{ formatBytes(user.used_bytes) }} {{ user.generations_count }} - {{ t('admin.sora.clearStorage') }} - + @@ -354,12 +373,16 @@ onMounted(loadAll) - +
+ +
@@ -417,14 +440,28 @@ onMounted(loadAll) - +
+ +
+ + +