diff --git a/src/routes/admin.js b/src/routes/admin.js
index e6a960b7..7700193b 100644
--- a/src/routes/admin.js
+++ b/src/routes/admin.js
@@ -534,8 +534,7 @@ router.post('/api-keys', authenticateAdmin, async (req, res) => {
weeklyOpusCostLimit,
tags,
activationDays, // 新增:激活后有效天数
- expirationMode, // 新增:过期模式
- icon // 新增:图标(base64编码)
+ expirationMode // 新增:过期模式
} = req.body
// 输入验证
@@ -989,8 +988,7 @@ router.put('/api-keys/:keyId', authenticateAdmin, async (req, res) => {
dailyCostLimit,
weeklyOpusCostLimit,
tags,
- ownerId, // 新增:所有者ID字段
- icon // 新增:图标(base64编码)
+ ownerId // 新增:所有者ID字段
} = req.body
// 只允许更新指定字段
@@ -1164,19 +1162,6 @@ router.put('/api-keys/:keyId', authenticateAdmin, async (req, res) => {
updates.tags = tags
}
- // 处理图标
- if (icon !== undefined) {
- // icon 可以是空字符串(清除图标)或 base64 编码的字符串
- if (icon !== '' && typeof icon !== 'string') {
- return res.status(400).json({ error: 'Icon must be a string' })
- }
- // 简单验证 base64 格式(如果不为空)
- if (icon && !icon.startsWith('data:image/')) {
- return res.status(400).json({ error: 'Icon must be a valid base64 image' })
- }
- updates.icon = icon
- }
-
// 处理活跃/禁用状态状态, 放在过期处理后,以确保后续增加禁用key功能
if (isActive !== undefined) {
if (typeof isActive !== 'boolean') {
diff --git a/src/services/apiKeyService.js b/src/services/apiKeyService.js
index 4291d51d..637b06ec 100644
--- a/src/services/apiKeyService.js
+++ b/src/services/apiKeyService.js
@@ -412,8 +412,7 @@ class ApiKeyService {
'tags',
'userId', // 新增:用户ID(所有者变更)
'userUsername', // 新增:用户名(所有者变更)
- 'createdBy', // 新增:创建者(所有者变更)
- 'icon' // 新增:图标(base64编码)
+ 'createdBy' // 新增:创建者(所有者变更)
]
const updatedData = { ...keyData }
diff --git a/web/admin-spa/src/components/apikeys/CreateApiKeyModal.vue b/web/admin-spa/src/components/apikeys/CreateApiKeyModal.vue
index 340ac507..4e78520f 100644
--- a/web/admin-spa/src/components/apikeys/CreateApiKeyModal.vue
+++ b/web/admin-spa/src/components/apikeys/CreateApiKeyModal.vue
@@ -110,9 +110,7 @@
class="mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-2 sm:text-sm"
>名称 *
-
-
-
+
{
// 单个创建
const data = {
...baseData,
- name: form.name,
- icon: form.icon || ''
+ name: form.name
}
const result = await apiClient.post('/admin/api-keys', data)
@@ -1223,8 +1218,7 @@ const createApiKey = async () => {
...baseData,
createType: 'batch',
baseName: form.name,
- count: form.batchCount,
- icon: form.icon || ''
+ count: form.batchCount
}
const result = await apiClient.post('/admin/api-keys/batch', data)
diff --git a/web/admin-spa/src/components/apikeys/EditApiKeyModal.vue b/web/admin-spa/src/components/apikeys/EditApiKeyModal.vue
index 1bada0a5..fda19ade 100644
--- a/web/admin-spa/src/components/apikeys/EditApiKeyModal.vue
+++ b/web/admin-spa/src/components/apikeys/EditApiKeyModal.vue
@@ -32,9 +32,7 @@
class="mb-1.5 block text-xs font-semibold text-gray-700 dark:text-gray-300 sm:mb-3 sm:text-sm"
>名称
-
-
-
+
{
// 表单数据
const form = reactive({
name: '',
- icon: '',
tokenLimit: '', // 保留用于检测历史数据
rateLimitWindow: '',
rateLimitRequests: '',
@@ -809,7 +805,6 @@ const updateApiKey = async () => {
// 准备提交的数据
const data = {
name: form.name, // 添加名称字段
- icon: form.icon || '', // 添加图标字段
tokenLimit: 0, // 清除历史token限制
rateLimitWindow:
form.rateLimitWindow !== '' && form.rateLimitWindow !== null
@@ -1042,7 +1037,6 @@ onMounted(async () => {
}
form.name = props.apiKey.name
- form.icon = props.apiKey.icon || ''
// 处理速率限制迁移:如果有tokenLimit且没有rateLimitCost,提示用户
form.tokenLimit = props.apiKey.tokenLimit || ''
diff --git a/web/admin-spa/src/components/common/IconPicker.vue b/web/admin-spa/src/components/common/IconPicker.vue
deleted file mode 100644
index d3628591..00000000
--- a/web/admin-spa/src/components/common/IconPicker.vue
+++ /dev/null
@@ -1,1036 +0,0 @@
-
-
-
-
-
![icon]()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
点击或拖拽图片到此处
-
- 支持 JPG, PNG, GIF - 可裁剪选择区域
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/web/admin-spa/src/views/ApiKeysView.vue b/web/admin-spa/src/views/ApiKeysView.vue
index 25e30f3b..b3845b7f 100644
--- a/web/admin-spa/src/views/ApiKeysView.vue
+++ b/web/admin-spa/src/views/ApiKeysView.vue
@@ -1046,12 +1046,6 @@
:value="key.id"
@change="updateSelectAllState"
/>
-
-
updateApiKeyIcon(key.id, val)"
- />
{{ key.name }}
@@ -1758,7 +1752,6 @@ import { apiClient } from '@/config/api'
import { useClientsStore } from '@/stores/clients'
import { useAuthStore } from '@/stores/auth'
import * as XLSX from 'xlsx-js-style'
-import IconPicker from '@/components/common/IconPicker.vue'
import CreateApiKeyModal from '@/components/apikeys/CreateApiKeyModal.vue'
import EditApiKeyModal from '@/components/apikeys/EditApiKeyModal.vue'
import RenewApiKeyModal from '@/components/apikeys/RenewApiKeyModal.vue'
@@ -2977,28 +2970,6 @@ const toggleApiKeyStatus = async (key) => {
}
// 更新API Key图标
-const updateApiKeyIcon = async (keyId, icon) => {
- try {
- const data = await apiClient.put(`/admin/api-keys/${keyId}`, {
- icon: icon
- })
-
- if (data.success) {
- // 更新本地数据
- const localKey = apiKeys.value.find((k) => k.id === keyId)
- if (localKey) {
- localKey.icon = icon
- }
- showToast('图标已更新', 'success')
- } else {
- showToast(data.message || '更新图标失败', 'error')
- }
- } catch (error) {
- console.error('更新图标失败:', error)
- showToast('更新图标失败,请重试', 'error')
- }
-}
-
// 删除API Key
const deleteApiKey = async (keyId) => {
let confirmed = false