From 0430899748ac7c6c5d26d94cac8cc9b46bccb8ab Mon Sep 17 00:00:00 2001 From: shaw Date: Sat, 23 May 2026 14:17:08 +0800 Subject: [PATCH] feat(admin): add compact proxy IP resource link Add a low-visibility proxy IP resource link near proxy-related controls. - Show the link beside account proxy selectors - Show the link in the create proxy dialog tab row - Keep the entry inline to avoid interrupting form workflows --- .../components/account/CreateAccountModal.vue | 6 +- .../components/account/EditAccountModal.vue | 6 +- .../src/components/common/ProxyAdBanner.vue | 18 ++++ frontend/src/i18n/locales/en.ts | 3 + frontend/src/i18n/locales/zh.ts | 3 + frontend/src/views/admin/ProxiesView.vue | 82 ++++++++++--------- 6 files changed, 78 insertions(+), 40 deletions(-) create mode 100644 frontend/src/components/common/ProxyAdBanner.vue diff --git a/frontend/src/components/account/CreateAccountModal.vue b/frontend/src/components/account/CreateAccountModal.vue index 115aab22..90d5e15a 100644 --- a/frontend/src/components/account/CreateAccountModal.vue +++ b/frontend/src/components/account/CreateAccountModal.vue @@ -2439,7 +2439,10 @@
- +
+ + +
@@ -3152,6 +3155,7 @@ import ConfirmDialog from '@/components/common/ConfirmDialog.vue' import Select from '@/components/common/Select.vue' import Icon from '@/components/icons/Icon.vue' import ProxySelector from '@/components/common/ProxySelector.vue' +import ProxyAdBanner from '@/components/common/ProxyAdBanner.vue' import GroupSelector from '@/components/common/GroupSelector.vue' import ModelWhitelistSelector from '@/components/account/ModelWhitelistSelector.vue' import QuotaLimitCard from '@/components/account/QuotaLimitCard.vue' diff --git a/frontend/src/components/account/EditAccountModal.vue b/frontend/src/components/account/EditAccountModal.vue index 9e664764..070887fe 100644 --- a/frontend/src/components/account/EditAccountModal.vue +++ b/frontend/src/components/account/EditAccountModal.vue @@ -1258,7 +1258,10 @@
- +
+ + +
@@ -2224,6 +2227,7 @@ import ConfirmDialog from '@/components/common/ConfirmDialog.vue' import Select from '@/components/common/Select.vue' import Icon from '@/components/icons/Icon.vue' import ProxySelector from '@/components/common/ProxySelector.vue' +import ProxyAdBanner from '@/components/common/ProxyAdBanner.vue' import GroupSelector from '@/components/common/GroupSelector.vue' import ModelWhitelistSelector from '@/components/account/ModelWhitelistSelector.vue' import QuotaLimitCard from '@/components/account/QuotaLimitCard.vue' diff --git a/frontend/src/components/common/ProxyAdBanner.vue b/frontend/src/components/common/ProxyAdBanner.vue new file mode 100644 index 00000000..52e107fb --- /dev/null +++ b/frontend/src/components/common/ProxyAdBanner.vue @@ -0,0 +1,18 @@ + + + diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts index c65b5c4e..fb28cce4 100644 --- a/frontend/src/i18n/locales/en.ts +++ b/frontend/src/i18n/locales/en.ts @@ -4002,6 +4002,9 @@ export default { createProxy: 'Create Proxy', editProxy: 'Edit Proxy', deleteProxy: 'Delete Proxy', + ad: { + inline: 'Need proxy IP?' + }, dataImport: 'Import', dataExportSelected: 'Export Selected', dataImportTitle: 'Import Proxies', diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts index 45da3b18..70526306 100644 --- a/frontend/src/i18n/locales/zh.ts +++ b/frontend/src/i18n/locales/zh.ts @@ -4097,6 +4097,9 @@ export default { createProxy: '添加代理', editProxy: '编辑代理', deleteProxy: '删除代理', + ad: { + inline: '正在寻找合适的代理 IP?' + }, deleteConfirmMessage: "确定要删除代理 '{name}' 吗?", testProxy: '测试代理', dataImport: '导入', diff --git a/frontend/src/views/admin/ProxiesView.vue b/frontend/src/views/admin/ProxiesView.vue index 1e4df356..27f38307 100644 --- a/frontend/src/views/admin/ProxiesView.vue +++ b/frontend/src/views/admin/ProxiesView.vue @@ -357,45 +357,50 @@ @close="closeCreateModal" > -
- - + + {{ t('admin.proxies.standardAdd') }} + + +
+ @@ -887,6 +892,7 @@ import ConfirmDialog from '@/components/common/ConfirmDialog.vue' import EmptyState from '@/components/common/EmptyState.vue' import ImportDataModal from '@/components/admin/proxy/ImportDataModal.vue' import Select from '@/components/common/Select.vue' +import ProxyAdBanner from '@/components/common/ProxyAdBanner.vue' import Icon from '@/components/icons/Icon.vue' import PlatformTypeBadge from '@/components/common/PlatformTypeBadge.vue' import { useClipboard } from '@/composables/useClipboard'