From 68f003976e2801ce756e015535e96e313e862a15 Mon Sep 17 00:00:00 2001 From: shaw Date: Sat, 29 Nov 2025 11:20:07 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=9B=BA=E5=AE=9A=E5=88=97=E5=AE=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/common/ActionDropdown.vue | 174 ++ web/admin-spa/src/views/AccountsView.vue | 2269 +++++++++-------- web/admin-spa/src/views/ApiKeysView.vue | 274 +- 3 files changed, 1672 insertions(+), 1045 deletions(-) create mode 100644 web/admin-spa/src/components/common/ActionDropdown.vue diff --git a/web/admin-spa/src/components/common/ActionDropdown.vue b/web/admin-spa/src/components/common/ActionDropdown.vue new file mode 100644 index 00000000..64ba3423 --- /dev/null +++ b/web/admin-spa/src/components/common/ActionDropdown.vue @@ -0,0 +1,174 @@ + + + diff --git a/web/admin-spa/src/views/AccountsView.vue b/web/admin-spa/src/views/AccountsView.vue index 4808c560..85a89725 100644 --- a/web/admin-spa/src/views/AccountsView.vue +++ b/web/admin-spa/src/views/AccountsView.vue @@ -161,1062 +161,1102 @@ - @@ -1824,6 +1864,7 @@ import AccountExpiryEditModal from '@/components/accounts/AccountExpiryEditModal import AccountTestModal from '@/components/accounts/AccountTestModal.vue' import ConfirmModal from '@/components/common/ConfirmModal.vue' import CustomDropdown from '@/components/common/CustomDropdown.vue' +import ActionDropdown from '@/components/common/ActionDropdown.vue' // 使用确认弹窗 const { showConfirmModal, confirmOptions, showConfirm, handleConfirm, handleCancel } = useConfirm() @@ -2010,6 +2051,76 @@ const accountMatchesKeyword = (account, normalizedKeyword) => { const canViewUsage = (account) => !!account && supportedUsagePlatforms.includes(account.platform) +// 判断是否显示重置状态按钮 +const showResetButton = (account) => { + const supportedPlatforms = [ + 'claude', + 'claude-console', + 'openai', + 'openai-responses', + 'gemini', + 'gemini-api', + 'ccr' + ] + return ( + supportedPlatforms.includes(account.platform) && + (account.status === 'unauthorized' || + account.status !== 'active' || + account.rateLimitStatus?.isRateLimited || + account.rateLimitStatus === 'limited' || + !account.isActive) + ) +} + +// 获取账户操作菜单项(用于小屏下拉菜单) +const getAccountActions = (account) => { + const actions = [] + + // 重置状态(仅在需要时显示) + if (showResetButton(account)) { + actions.push({ + key: 'reset', + label: '重置状态', + icon: 'fa-redo', + color: 'orange', + handler: () => resetAccountStatus(account) + }) + } + + // 查看详情 + if (canViewUsage(account)) { + actions.push({ + key: 'usage', + label: '详情', + icon: 'fa-chart-line', + color: 'indigo', + handler: () => openAccountUsageModal(account) + }) + } + + // 测试账户 + if (canTestAccount(account)) { + actions.push({ + key: 'test', + label: '测试', + icon: 'fa-vial', + color: 'blue', + handler: () => openAccountTestModal(account) + }) + } + + // 删除 + actions.push({ + key: 'delete', + label: '删除', + icon: 'fa-trash', + color: 'red', + handler: () => deleteAccount(account) + }) + + return actions +} + const openAccountUsageModal = async (account) => { if (!canViewUsage(account)) { showToast('该账户类型暂不支持查看详情', 'warning') @@ -4018,19 +4129,11 @@ onMounted(() => { diff --git a/web/admin-spa/src/views/ApiKeysView.vue b/web/admin-spa/src/views/ApiKeysView.vue index d68fe6d3..c190d4c7 100644 --- a/web/admin-spa/src/views/ApiKeysView.vue +++ b/web/admin-spa/src/views/ApiKeysView.vue @@ -253,12 +253,15 @@