mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
feat: OAuth 密钥编辑时显示到期时间和重新授权按钮
- 后端 EndpointAPIKeyResponse 新增 oauth_expires_at 字段 - 从加密的 auth_config 中解密并提取 OAuth Token 到期时间 - 前端编辑已授权的 OAuth 密钥时显示"重新授权"按钮 - 在按钮旁显示 Token 到期时间
This commit is contained in:
@@ -247,6 +247,8 @@ export interface EndpointAPIKey {
|
||||
// 模型过滤规则(仅当 auto_fetch_models=true 时生效)
|
||||
model_include_patterns?: string[] // 模型包含规则(支持 * 和 ? 通配符)
|
||||
model_exclude_patterns?: string[] // 模型排除规则(支持 * 和 ? 通配符)
|
||||
// OAuth 相关
|
||||
oauth_expires_at?: number | null // OAuth Token 过期时间(Unix 时间戳)
|
||||
}
|
||||
|
||||
// 按格式的健康度数据
|
||||
|
||||
@@ -144,14 +144,14 @@
|
||||
{{ oauthHelpText }}
|
||||
</p>
|
||||
|
||||
<div class="flex flex-wrap gap-2">
|
||||
<div class="flex flex-wrap gap-2 items-center">
|
||||
<Button
|
||||
size="sm"
|
||||
type="button"
|
||||
:disabled="!canStartOAuth"
|
||||
@click="handleStartOAuth"
|
||||
>
|
||||
{{ oauth.starting ? '开始中...' : '开始授权' }}
|
||||
{{ oauth.starting ? '开始中...' : (oauth.step === 'completed' ? '重新授权' : '开始授权') }}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
@@ -164,6 +164,14 @@
|
||||
<RefreshCw class="w-3.5 h-3.5 mr-1.5" />
|
||||
{{ oauth.refreshing ? '刷新中...' : '强制刷新' }}
|
||||
</Button>
|
||||
|
||||
<span
|
||||
v-if="oauth.step === 'completed' && oauth.expires_at"
|
||||
class="text-xs text-muted-foreground ml-2"
|
||||
:class="isExpiredEpoch(oauth.expires_at) ? 'text-destructive' : ''"
|
||||
>
|
||||
到期: {{ formattedExpiresAt }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div
|
||||
@@ -259,20 +267,6 @@
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="oauth.step === 'completed'"
|
||||
class="pt-2 border-t border-border/40 text-xs text-muted-foreground space-y-1"
|
||||
>
|
||||
<div class="flex items-center justify-between gap-2">
|
||||
<span>expires_at</span>
|
||||
<span class="font-mono">{{ formattedExpiresAt }}</span>
|
||||
</div>
|
||||
<div class="flex items-center justify-between gap-2">
|
||||
<span>refresh token</span>
|
||||
<span>{{ oauth.has_refresh_token ? '有' : '无' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -882,6 +876,13 @@ function loadKeyData() {
|
||||
model_include_patterns_text: (props.editingKey.model_include_patterns || []).join(', '),
|
||||
model_exclude_patterns_text: (props.editingKey.model_exclude_patterns || []).join(', ')
|
||||
}
|
||||
|
||||
// 如果是 OAuth 类型且有 token(有 oauth_expires_at),初始化 OAuth 状态为 completed
|
||||
if (props.editingKey.auth_type === 'oauth' && props.editingKey.oauth_expires_at != null) {
|
||||
oauth.value.step = 'completed'
|
||||
oauth.value.expires_at = props.editingKey.oauth_expires_at
|
||||
oauth.value.has_refresh_token = null // 后端不返回此字段,设为未知
|
||||
}
|
||||
}
|
||||
|
||||
// 使用 useFormDialog 统一处理对话框逻辑
|
||||
|
||||
Reference in New Issue
Block a user