mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 09:20:22 +08:00
feat(api-keys): 支持独立密钥额度重置(手动+定时自动)
- 新增手动重置接口 PATCH /api/admin/api-keys/{id}/reset-usage
- 前端 ApiKeys 页面增加重置按钮,支持确认后归零已使用额度
- 新增独立密钥额度定时自动重置任务,支持配置周期和执行时间
- 支持 all/selected 两种重置模式,selected 模式可指定密钥
- 移除已废弃的 CleanupScheduler 兼容别名
This commit is contained in:
@@ -114,7 +114,14 @@
|
||||
id="section-scheduled"
|
||||
:scheduled-tasks="scheduledTasks"
|
||||
:quota-reset-interval-days="systemConfig.user_quota_reset_interval_days"
|
||||
:standalone-key-reset-interval-days="systemConfig.standalone_key_quota_reset_interval_days"
|
||||
:standalone-key-reset-mode="systemConfig.standalone_key_quota_reset_mode"
|
||||
:standalone-key-reset-key-ids="systemConfig.standalone_key_quota_reset_key_ids"
|
||||
:standalone-keys="standaloneKeys"
|
||||
@update:quota-reset-interval-days="systemConfig.user_quota_reset_interval_days = $event"
|
||||
@update:standalone-key-reset-interval-days="systemConfig.standalone_key_quota_reset_interval_days = $event"
|
||||
@update:standalone-key-reset-mode="handleStandaloneKeyResetModeChange"
|
||||
@toggle-standalone-key-reset-key-id="handleToggleStandaloneKeyResetKeyId"
|
||||
/>
|
||||
|
||||
<!-- 系统版本信息 -->
|
||||
@@ -194,6 +201,7 @@
|
||||
import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue'
|
||||
import { PageHeader, PageContainer } from '@/components/layout'
|
||||
import { useProxyNodesStore } from '@/stores/proxy-nodes'
|
||||
import { adminApi } from '@/api/admin'
|
||||
|
||||
// Composables
|
||||
import { useSystemConfig } from './system-settings/composables/useSystemConfig'
|
||||
@@ -336,13 +344,50 @@ const {
|
||||
const {
|
||||
scheduledTasks,
|
||||
initPreviousValues,
|
||||
saveStandaloneKeyResetMode,
|
||||
saveStandaloneKeyResetKeyIds,
|
||||
} = useScheduledTasks(systemConfig)
|
||||
|
||||
// 独立密钥列表(用于定时任务配置中的密钥选择)
|
||||
const standaloneKeys = ref<Array<{ id: string; name?: string; key_display?: string; current_balance_usd?: number | null }>>([])
|
||||
|
||||
async function loadStandaloneKeys() {
|
||||
try {
|
||||
const result = await adminApi.getAllApiKeys({ limit: 2000 })
|
||||
standaloneKeys.value = result.api_keys.map((k) => ({
|
||||
id: k.id,
|
||||
name: k.name,
|
||||
key_display: k.key_display,
|
||||
current_balance_usd: k.current_balance_usd,
|
||||
}))
|
||||
} catch {
|
||||
// 加载失败不影响其他功能
|
||||
}
|
||||
}
|
||||
|
||||
function handleStandaloneKeyResetModeChange(mode: string) {
|
||||
systemConfig.value.standalone_key_quota_reset_mode = mode
|
||||
saveStandaloneKeyResetMode(mode)
|
||||
}
|
||||
|
||||
function handleToggleStandaloneKeyResetKeyId(keyId: string) {
|
||||
const ids = [...systemConfig.value.standalone_key_quota_reset_key_ids]
|
||||
const idx = ids.indexOf(keyId)
|
||||
if (idx >= 0) {
|
||||
ids.splice(idx, 1)
|
||||
} else {
|
||||
ids.push(keyId)
|
||||
}
|
||||
systemConfig.value.standalone_key_quota_reset_key_ids = ids
|
||||
saveStandaloneKeyResetKeyIds(ids)
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
await Promise.all([
|
||||
loadSystemConfig(),
|
||||
loadSystemVersion(),
|
||||
proxyNodesStore.ensureLoaded(),
|
||||
loadStandaloneKeys(),
|
||||
])
|
||||
// 配置加载完成后初始化定时任务的原始值
|
||||
initPreviousValues()
|
||||
|
||||
Reference in New Issue
Block a user