feat: 完善管理界面功能和用户体验

- 添加 API Key 窗口倒计时组件 (WindowCountdown)
- 添加自定义下拉菜单组件 (CustomDropdown)
- 优化账户和 API Key 管理界面交互
- 改进教程页面布局和说明文字
- 完善账户状态显示和错误处理

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
shaw
2025-08-08 14:14:46 +08:00
parent 4adc8d9695
commit 7e1a9daa6b
9 changed files with 881 additions and 190 deletions

View File

@@ -238,6 +238,27 @@
<p class="mt-2 text-xs text-gray-500">设置此 API Key 可同时处理的最大请求数</p>
</div>
<!-- 激活账号 -->
<div>
<div class="mb-3 flex items-center">
<input
id="editIsActive"
v-model="form.isActive"
class="h-4 w-4 rounded border-gray-300 bg-gray-100 text-blue-600 focus:ring-blue-500"
type="checkbox"
/>
<label
class="ml-2 cursor-pointer text-sm font-semibold text-gray-700"
for="editIsActive"
>
激活账号
</label>
</div>
<p class="mb-4 text-xs text-gray-500">
取消勾选将禁用此 API Key暂停所有请求客户端返回 401 错误
</p>
</div>
<div>
<label class="mb-3 block text-sm font-semibold text-gray-700">服务权限</label>
<div class="flex gap-4">
@@ -511,7 +532,8 @@ const form = reactive({
modelInput: '',
enableClientRestriction: false,
allowedClients: [],
tags: []
tags: [],
isActive: true
})
// 添加限制的模型
@@ -628,6 +650,9 @@ const updateApiKey = async () => {
data.enableClientRestriction = form.enableClientRestriction
data.allowedClients = form.allowedClients
// 活跃状态
data.isActive = form.isActive
const result = await apiClient.put(`/admin/api-keys/${props.apiKey.id}`, data)
if (result.success) {
@@ -737,6 +762,8 @@ onMounted(async () => {
// 从后端数据中获取实际的启用状态,而不是根据数组长度推断
form.enableModelRestriction = props.apiKey.enableModelRestriction || false
form.enableClientRestriction = props.apiKey.enableClientRestriction || false
// 初始化活跃状态,默认为 true
form.isActive = props.apiKey.isActive !== undefined ? props.apiKey.isActive : true
})
</script>