feat(admin/accounts): confirm before OpenAI weekly limit reset

This commit is contained in:
shaw
2026-06-24 21:56:03 +08:00
parent 85a3b12254
commit 30adee43bc
3 changed files with 32 additions and 4 deletions
@@ -43,7 +43,7 @@
class="inline-flex items-center gap-0.5 rounded px-1.5 py-0.5 text-[10px] font-medium text-orange-600 transition-colors hover:bg-orange-50 disabled:cursor-not-allowed disabled:opacity-50 dark:text-orange-400 dark:hover:bg-orange-900/30"
:disabled="resetting || loading || !canReset"
:title="resetButtonTitle"
@click="handleReset"
@click="openResetConfirm"
>
<svg
class="h-2.5 w-2.5"
@@ -77,6 +77,17 @@
>
{{ resetMessage }}
</div>
<ConfirmDialog
:show="showResetConfirm"
:title="t('admin.accounts.openaiQuotaReset.confirmTitle')"
:message="t('admin.accounts.openaiQuotaReset.confirmMessage', { count: availableResetCount })"
:confirm-text="t('admin.accounts.openaiQuotaReset.reset')"
:cancel-text="t('common.cancel')"
danger
@confirm="confirmReset"
@cancel="showResetConfirm = false"
/>
</div>
</template>
@@ -90,6 +101,7 @@ import {
type OpenAIQuotaUsage,
type OpenAIQuotaResetResult
} from '@/api/admin/accounts'
import ConfirmDialog from '@/components/common/ConfirmDialog.vue'
const props = defineProps<{
account: Account
@@ -105,6 +117,7 @@ const resetting = ref(false)
const error = ref<string | null>(null)
const data = ref<OpenAIQuotaUsage | null>(null)
const resetMessage = ref<string | null>(null)
const showResetConfirm = ref(false)
const availableResetCount = computed(() => data.value?.rate_limit_reset_credits?.available_count ?? 0)
const canReset = computed(() => availableResetCount.value > 0)
@@ -161,7 +174,17 @@ const handleQuery = async () => {
}
}
const handleReset = async () => {
const openResetConfirm = () => {
if (resetting.value || loading.value) return
if (!canReset.value) {
error.value = t('admin.accounts.openaiQuotaReset.noCreditsAvailable')
return
}
showResetConfirm.value = true
}
const confirmReset = async () => {
showResetConfirm.value = false
if (resetting.value) return
if (!canReset.value) {
error.value = t('admin.accounts.openaiQuotaReset.noCreditsAvailable')
@@ -195,6 +218,7 @@ watch(
resetMessage.value = null
loading.value = false
resetting.value = false
showResetConfirm.value = false
}
)
</script>
+3 -1
View File
@@ -4126,7 +4126,9 @@ export default {
resetTooltipNeedQuery: 'Click Credits first to load the available count',
resetTooltipNoCredits: 'No reset credits available',
noCreditsAvailable: 'No reset credits available',
resetSuccess: 'Reset {windows} window(s)'
resetSuccess: 'Reset {windows} window(s)',
confirmTitle: 'Confirm Weekly Limit Reset',
confirmMessage: 'This will consume 1 reset credit to immediately restore the current window ({count} remaining). This action cannot be undone. Continue?'
},
tier: {
free: 'Free',
+3 -1
View File
@@ -3414,7 +3414,9 @@ export default {
resetTooltipNeedQuery: '先点击「次数」加载剩余重置次数',
resetTooltipNoCredits: '没有可用的重置次数',
noCreditsAvailable: '没有可用的重置次数',
resetSuccess: '已重置 {windows} 个窗口'
resetSuccess: '已重置 {windows} 个窗口',
confirmTitle: '确认重置周限',
confirmMessage: '将消耗 1 次重置次数立即恢复当前窗口,剩余 {count} 次。此操作不可撤销,确定继续吗?'
},
tier: {
free: 'Free',