同步上游v0.1.66并重新应用自定义配置
上游更新内容: - 邀请码注册功能 - 公告系统(Header铃铛通知) - Gemini 长上下文双倍计费 - Antigravity scope 级别限流 - Redis TLS 支持 - 大量 Claude OAuth 兼容性修复 自定义配置: - 品牌化:Sub2API → StarFireAPI - 移除所有 GitHub 链接,改为官网 anthropic.edu.pl - 移除版本更新日志的 GitHub 跳转 - docker-compose.yml: starfireapi镜像、端口6580、外部Redis - .env.example: 外部Redis配置 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@ services:
|
|||||||
# Sub2API Application
|
# Sub2API Application
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
sub2api:
|
sub2api:
|
||||||
image: weishaw/sub2api:latest
|
image: starfireapi:latest
|
||||||
container_name: sub2api
|
container_name: sub2api
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ulimits:
|
ulimits:
|
||||||
@@ -24,7 +24,7 @@ services:
|
|||||||
soft: 100000
|
soft: 100000
|
||||||
hard: 100000
|
hard: 100000
|
||||||
ports:
|
ports:
|
||||||
- "${BIND_HOST:-0.0.0.0}:${SERVER_PORT:-8080}:8080"
|
- "${BIND_HOST:-0.0.0.0}:${SERVER_PORT:-6580}:8080"
|
||||||
volumes:
|
volumes:
|
||||||
# Data persistence (config.yaml will be auto-generated here)
|
# Data persistence (config.yaml will be auto-generated here)
|
||||||
- sub2api_data:/app/data
|
- sub2api_data:/app/data
|
||||||
@@ -58,9 +58,9 @@ services:
|
|||||||
# =======================================================================
|
# =======================================================================
|
||||||
# Redis Configuration
|
# Redis Configuration
|
||||||
# =======================================================================
|
# =======================================================================
|
||||||
- REDIS_HOST=redis
|
- REDIS_HOST=${REDIS_HOST:-172.18.0.2}
|
||||||
- REDIS_PORT=6379
|
- REDIS_PORT=${REDIS_PORT:-6379}
|
||||||
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
- REDIS_PASSWORD=${REDIS_PASSWORD:-redis_JCHeKT}
|
||||||
- REDIS_DB=${REDIS_DB:-0}
|
- REDIS_DB=${REDIS_DB:-0}
|
||||||
- REDIS_ENABLE_TLS=${REDIS_ENABLE_TLS:-false}
|
- REDIS_ENABLE_TLS=${REDIS_ENABLE_TLS:-false}
|
||||||
|
|
||||||
@@ -130,8 +130,6 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
redis:
|
|
||||||
condition: service_healthy
|
|
||||||
networks:
|
networks:
|
||||||
- sub2api-network
|
- sub2api-network
|
||||||
healthcheck:
|
healthcheck:
|
||||||
@@ -171,9 +169,13 @@ services:
|
|||||||
# 如需调试,可临时添加:ports: ["127.0.0.1:5433:5432"]
|
# 如需调试,可临时添加:ports: ["127.0.0.1:5433:5432"]
|
||||||
|
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
# Redis Cache
|
# Redis Cache (DISABLED - Using external Redis at 172.18.0.2:6379)
|
||||||
# ===========================================================================
|
# ===========================================================================
|
||||||
|
# Built-in Redis is available but not used by default
|
||||||
|
# The application connects to external Redis at 172.18.0.2:6379
|
||||||
redis:
|
redis:
|
||||||
|
profiles:
|
||||||
|
- disabled
|
||||||
image: redis:8-alpine
|
image: redis:8-alpine
|
||||||
container_name: sub2api-redis
|
container_name: sub2api-redis
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/png" href="/logo.png" />
|
<link rel="icon" type="image/png" href="/logo.png" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Sub2API - AI API Gateway</title>
|
<title>StarFireAPI - AI API Gateway</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|||||||
@@ -226,14 +226,10 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Priority 3: Update available for source build - show git pull hint -->
|
<!-- Priority 3: Update available for source build - show hint -->
|
||||||
<div v-else-if="hasUpdate && !isReleaseBuild" class="space-y-2">
|
<div v-else-if="hasUpdate && !isReleaseBuild" class="space-y-2">
|
||||||
<a
|
<div
|
||||||
v-if="releaseInfo?.html_url && releaseInfo.html_url !== '#'"
|
class="flex items-center gap-3 rounded-lg border border-amber-200 bg-amber-50 p-3 dark:border-amber-800/50 dark:bg-amber-900/20"
|
||||||
:href="releaseInfo.html_url"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
class="group flex items-center gap-3 rounded-lg border border-amber-200 bg-amber-50 p-3 transition-colors hover:bg-amber-100 dark:border-amber-800/50 dark:bg-amber-900/20 dark:hover:bg-amber-900/30"
|
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-amber-100 dark:bg-amber-900/50"
|
class="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-amber-100 dark:bg-amber-900/50"
|
||||||
@@ -253,16 +249,7 @@
|
|||||||
v{{ latestVersion }}
|
v{{ latestVersion }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<svg
|
</div>
|
||||||
class="h-4 w-4 text-amber-500 transition-transform group-hover:translate-x-0.5 dark:text-amber-400"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
>
|
|
||||||
<path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7" />
|
|
||||||
</svg>
|
|
||||||
</a>
|
|
||||||
<!-- Source build hint -->
|
<!-- Source build hint -->
|
||||||
<div
|
<div
|
||||||
class="flex items-center gap-2 rounded-lg border border-blue-200 bg-blue-50 p-2 dark:border-blue-800/50 dark:bg-blue-900/20"
|
class="flex items-center gap-2 rounded-lg border border-blue-200 bg-blue-50 p-2 dark:border-blue-800/50 dark:bg-blue-900/20"
|
||||||
@@ -336,37 +323,9 @@
|
|||||||
<Icon v-else name="download" size="sm" :stroke-width="2" />
|
<Icon v-else name="download" size="sm" :stroke-width="2" />
|
||||||
{{ updating ? t('version.updating') : t('version.updateNow') }}
|
{{ updating ? t('version.updating') : t('version.updateNow') }}
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<!-- View release link -->
|
|
||||||
<a
|
|
||||||
v-if="releaseInfo?.html_url && releaseInfo.html_url !== '#'"
|
|
||||||
:href="releaseInfo.html_url"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
class="flex items-center justify-center gap-1 text-xs text-gray-500 transition-colors hover:text-gray-700 dark:text-dark-400 dark:hover:text-dark-200"
|
|
||||||
>
|
|
||||||
{{ t('version.viewChangelog') }}
|
|
||||||
<Icon name="externalLink" size="xs" :stroke-width="2" />
|
|
||||||
</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Priority 5: Up to date - show GitHub link -->
|
<!-- Priority 5: Up to date -->
|
||||||
<a
|
|
||||||
v-else-if="releaseInfo?.html_url && releaseInfo.html_url !== '#'"
|
|
||||||
:href="releaseInfo.html_url"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
class="flex items-center justify-center gap-2 py-2 text-sm text-gray-500 transition-colors hover:text-gray-700 dark:text-dark-400 dark:hover:text-dark-200"
|
|
||||||
>
|
|
||||||
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24">
|
|
||||||
<path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
d="M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.17 6.839 9.49.5.092.682-.217.682-.482 0-.237-.008-.866-.013-1.7-2.782.604-3.369-1.34-3.369-1.34-.454-1.156-1.11-1.464-1.11-1.464-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.831.092-.646.35-1.086.636-1.336-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.269 2.75 1.025A9.578 9.578 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.747-1.025 2.747-1.025.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.167 22 16.418 22 12c0-5.523-4.477-10-10-10z"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
{{ t('version.viewRelease') }}
|
|
||||||
</a>
|
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -123,18 +123,14 @@
|
|||||||
</router-link>
|
</router-link>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
href="https://github.com/Wei-Shaw/sub2api"
|
href="https://anthropic.edu.pl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
@click="closeDropdown"
|
@click="closeDropdown"
|
||||||
class="dropdown-item"
|
class="dropdown-item"
|
||||||
>
|
>
|
||||||
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24">
|
<svg class="h-4 w-4" fill="currentColor" viewBox="0 0 24 24">
|
||||||
<path
|
<path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/>
|
||||||
fill-rule="evenodd"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
d="M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.17 6.839 9.49.5.092.682-.217.682-.482 0-.237-.008-.866-.013-1.7-2.782.604-3.369-1.34-3.369-1.34-.454-1.156-1.11-1.464-1.11-1.464-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.831.092-.646.35-1.086.636-1.336-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.269 2.75 1.025A9.578 9.578 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.747-1.025 2.747-1.025.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.167 22 16.418 22 12c0-5.523-4.477-10-10-10z"
|
|
||||||
/>
|
|
||||||
</svg>
|
</svg>
|
||||||
{{ t('nav.github') }}
|
{{ t('nav.github') }}
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ import { ref, computed, onMounted } from 'vue'
|
|||||||
import { getPublicSettings } from '@/api/auth'
|
import { getPublicSettings } from '@/api/auth'
|
||||||
import { sanitizeUrl } from '@/utils/url'
|
import { sanitizeUrl } from '@/utils/url'
|
||||||
|
|
||||||
const siteName = ref('Sub2API')
|
const siteName = ref('StarFireAPI')
|
||||||
const siteLogo = ref('')
|
const siteLogo = ref('')
|
||||||
const siteSubtitle = ref('Subscription to API Conversion Platform')
|
const siteSubtitle = ref('Subscription to API Conversion Platform')
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ const currentYear = computed(() => new Date().getFullYear())
|
|||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
try {
|
try {
|
||||||
const settings = await getPublicSettings()
|
const settings = await getPublicSettings()
|
||||||
siteName.value = settings.site_name || 'Sub2API'
|
siteName.value = settings.site_name || 'StarFireAPI'
|
||||||
siteLogo.value = sanitizeUrl(settings.site_logo || '', { allowRelative: true })
|
siteLogo.value = sanitizeUrl(settings.site_logo || '', { allowRelative: true })
|
||||||
siteSubtitle.value = settings.site_subtitle || 'Subscription to API Conversion Platform'
|
siteSubtitle.value = settings.site_subtitle || 'Subscription to API Conversion Platform'
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
export default {
|
export default {
|
||||||
// Home Page
|
// Home Page
|
||||||
home: {
|
home: {
|
||||||
viewOnGithub: 'View on GitHub',
|
viewOnGithub: 'Official Site',
|
||||||
viewDocs: 'View Documentation',
|
viewDocs: 'View Documentation',
|
||||||
docs: 'Docs',
|
docs: 'Docs',
|
||||||
switchToLight: 'Switch to Light Mode',
|
switchToLight: 'Switch to Light Mode',
|
||||||
@@ -43,8 +43,8 @@ export default {
|
|||||||
|
|
||||||
// Setup Wizard
|
// Setup Wizard
|
||||||
setup: {
|
setup: {
|
||||||
title: 'Sub2API Setup',
|
title: 'StarFireAPI Setup',
|
||||||
description: 'Configure your Sub2API instance',
|
description: 'Configure your StarFireAPI instance',
|
||||||
database: {
|
database: {
|
||||||
title: 'Database Configuration',
|
title: 'Database Configuration',
|
||||||
description: 'Connect to your PostgreSQL database',
|
description: 'Connect to your PostgreSQL database',
|
||||||
@@ -2933,7 +2933,7 @@ export default {
|
|||||||
secretKeyConfiguredHint: 'Secret key configured. Leave empty to keep the current value.' },
|
secretKeyConfiguredHint: 'Secret key configured. Leave empty to keep the current value.' },
|
||||||
linuxdo: {
|
linuxdo: {
|
||||||
title: 'LinuxDo Connect Login',
|
title: 'LinuxDo Connect Login',
|
||||||
description: 'Configure LinuxDo Connect OAuth for Sub2API end-user login',
|
description: 'Configure LinuxDo Connect OAuth for StarFireAPI end-user login',
|
||||||
enable: 'Enable LinuxDo Login',
|
enable: 'Enable LinuxDo Login',
|
||||||
enableHint: 'Show LinuxDo login on the login/register pages',
|
enableHint: 'Show LinuxDo login on the login/register pages',
|
||||||
clientId: 'Client ID',
|
clientId: 'Client ID',
|
||||||
@@ -2963,7 +2963,7 @@ export default {
|
|||||||
title: 'Site Settings',
|
title: 'Site Settings',
|
||||||
description: 'Customize site branding',
|
description: 'Customize site branding',
|
||||||
siteName: 'Site Name',
|
siteName: 'Site Name',
|
||||||
siteNamePlaceholder: 'Sub2API',
|
siteNamePlaceholder: 'StarFireAPI',
|
||||||
siteNameHint: 'Displayed in emails and page titles',
|
siteNameHint: 'Displayed in emails and page titles',
|
||||||
siteSubtitle: 'Site Subtitle',
|
siteSubtitle: 'Site Subtitle',
|
||||||
siteSubtitlePlaceholder: 'Subscription to API Conversion Platform',
|
siteSubtitlePlaceholder: 'Subscription to API Conversion Platform',
|
||||||
@@ -3022,7 +3022,7 @@ export default {
|
|||||||
fromEmail: 'From Email',
|
fromEmail: 'From Email',
|
||||||
fromEmailPlaceholder: "noreply{'@'}example.com",
|
fromEmailPlaceholder: "noreply{'@'}example.com",
|
||||||
fromName: 'From Name',
|
fromName: 'From Name',
|
||||||
fromNamePlaceholder: 'Sub2API',
|
fromNamePlaceholder: 'StarFireAPI',
|
||||||
useTls: 'Use TLS',
|
useTls: 'Use TLS',
|
||||||
useTlsHint: 'Enable TLS encryption for SMTP connection'
|
useTlsHint: 'Enable TLS encryption for SMTP connection'
|
||||||
},
|
},
|
||||||
@@ -3227,14 +3227,14 @@ export default {
|
|||||||
// Admin tour steps
|
// Admin tour steps
|
||||||
admin: {
|
admin: {
|
||||||
welcome: {
|
welcome: {
|
||||||
title: '👋 Welcome to Sub2API',
|
title: '👋 Welcome to StarFireAPI',
|
||||||
description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">Sub2API is a powerful AI service gateway platform that helps you easily manage and distribute AI services.</p><p style="margin-bottom: 12px;"><b>🎯 Core Features:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>📦 <b>Group Management</b> - Create service tiers (VIP, Free Trial, etc.)</li><li>🔗 <b>Account Pool</b> - Connect multiple upstream AI service accounts</li><li>🔑 <b>Key Distribution</b> - Generate independent API Keys for users</li><li>💰 <b>Billing Control</b> - Flexible rate and quota management</li></ul><p style="color: #10b981; font-weight: 600;">Let\'s complete the initial setup in 3 minutes →</p></div>',
|
description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">StarFireAPI is a powerful AI service gateway platform that helps you easily manage and distribute AI services.</p><p style="margin-bottom: 12px;"><b>🎯 Core Features:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>📦 <b>Group Management</b> - Create service tiers (VIP, Free Trial, etc.)</li><li>🔗 <b>Account Pool</b> - Connect multiple upstream AI service accounts</li><li>🔑 <b>Key Distribution</b> - Generate independent API Keys for users</li><li>💰 <b>Billing Control</b> - Flexible rate and quota management</li></ul><p style="color: #10b981; font-weight: 600;">Let\'s complete the initial setup in 3 minutes →</p></div>',
|
||||||
nextBtn: 'Start Setup 🚀',
|
nextBtn: 'Start Setup 🚀',
|
||||||
prevBtn: 'Skip'
|
prevBtn: 'Skip'
|
||||||
},
|
},
|
||||||
groupManage: {
|
groupManage: {
|
||||||
title: '📦 Step 1: Group Management',
|
title: '📦 Step 1: Group Management',
|
||||||
description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>What is a Group?</b></p><p style="margin-bottom: 12px;">Groups are the core concept of Sub2API, like a "service package":</p><ul style="margin-left: 20px; margin-bottom: 12px; font-size: 13px;"><li>🎯 Each group can contain multiple upstream accounts</li><li>💰 Each group has independent billing multiplier</li><li>👥 Can be set as public or exclusive</li></ul><p style="margin-top: 12px; padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Example:</b> You can create "VIP Premium" (high rate) and "Free Trial" (low rate) groups</p><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 Click "Group Management" on the left sidebar</p></div>'
|
description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>What is a Group?</b></p><p style="margin-bottom: 12px;">Groups are the core concept of StarFireAPI, like a "service package":</p><ul style="margin-left: 20px; margin-bottom: 12px; font-size: 13px;"><li>🎯 Each group can contain multiple upstream accounts</li><li>💰 Each group has independent billing multiplier</li><li>👥 Can be set as public or exclusive</li></ul><p style="margin-top: 12px; padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 Example:</b> You can create "VIP Premium" (high rate) and "Free Trial" (low rate) groups</p><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 Click "Group Management" on the left sidebar</p></div>'
|
||||||
},
|
},
|
||||||
createGroup: {
|
createGroup: {
|
||||||
title: '➕ Create New Group',
|
title: '➕ Create New Group',
|
||||||
@@ -3327,8 +3327,8 @@ export default {
|
|||||||
// User tour steps
|
// User tour steps
|
||||||
user: {
|
user: {
|
||||||
welcome: {
|
welcome: {
|
||||||
title: '👋 Welcome to Sub2API',
|
title: '👋 Welcome to StarFireAPI',
|
||||||
description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">Hello! Welcome to the Sub2API AI service platform.</p><p style="margin-bottom: 12px;"><b>🎯 Quick Start:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>🔑 Create API Key</li><li>📋 Copy key to your application</li><li>🚀 Start using AI services</li></ul><p style="color: #10b981; font-weight: 600;">Just 1 minute, let\'s get started →</p></div>',
|
description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">Hello! Welcome to the StarFireAPI AI service platform.</p><p style="margin-bottom: 12px;"><b>🎯 Quick Start:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>🔑 Create API Key</li><li>📋 Copy key to your application</li><li>🚀 Start using AI services</li></ul><p style="color: #10b981; font-weight: 600;">Just 1 minute, let\'s get started →</p></div>',
|
||||||
nextBtn: 'Start 🚀',
|
nextBtn: 'Start 🚀',
|
||||||
prevBtn: 'Skip'
|
prevBtn: 'Skip'
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
export default {
|
export default {
|
||||||
// Home Page
|
// Home Page
|
||||||
home: {
|
home: {
|
||||||
viewOnGithub: '在 GitHub 上查看',
|
viewOnGithub: '访问官网',
|
||||||
viewDocs: '查看文档',
|
viewDocs: '查看文档',
|
||||||
docs: '文档',
|
docs: '文档',
|
||||||
switchToLight: '切换到浅色模式',
|
switchToLight: '切换到浅色模式',
|
||||||
@@ -40,8 +40,8 @@ export default {
|
|||||||
|
|
||||||
// Setup Wizard
|
// Setup Wizard
|
||||||
setup: {
|
setup: {
|
||||||
title: 'Sub2API 安装向导',
|
title: 'StarFireAPI 安装向导',
|
||||||
description: '配置您的 Sub2API 实例',
|
description: '配置您的 StarFireAPI 实例',
|
||||||
database: {
|
database: {
|
||||||
title: '数据库配置',
|
title: '数据库配置',
|
||||||
description: '连接到您的 PostgreSQL 数据库',
|
description: '连接到您的 PostgreSQL 数据库',
|
||||||
@@ -3086,7 +3086,7 @@ export default {
|
|||||||
secretKeyConfiguredHint: '密钥已配置,留空以保留当前值。' },
|
secretKeyConfiguredHint: '密钥已配置,留空以保留当前值。' },
|
||||||
linuxdo: {
|
linuxdo: {
|
||||||
title: 'LinuxDo Connect 登录',
|
title: 'LinuxDo Connect 登录',
|
||||||
description: '配置 LinuxDo Connect OAuth,用于 Sub2API 用户登录',
|
description: '配置 LinuxDo Connect OAuth,用于 StarFireAPI 用户登录',
|
||||||
enable: '启用 LinuxDo 登录',
|
enable: '启用 LinuxDo 登录',
|
||||||
enableHint: '在登录/注册页面显示 LinuxDo 登录入口',
|
enableHint: '在登录/注册页面显示 LinuxDo 登录入口',
|
||||||
clientId: 'Client ID',
|
clientId: 'Client ID',
|
||||||
@@ -3116,7 +3116,7 @@ export default {
|
|||||||
description: '自定义站点品牌',
|
description: '自定义站点品牌',
|
||||||
siteName: '站点名称',
|
siteName: '站点名称',
|
||||||
siteNameHint: '显示在邮件和页面标题中',
|
siteNameHint: '显示在邮件和页面标题中',
|
||||||
siteNamePlaceholder: 'Sub2API',
|
siteNamePlaceholder: 'StarFireAPI',
|
||||||
siteSubtitle: '站点副标题',
|
siteSubtitle: '站点副标题',
|
||||||
siteSubtitleHint: '显示在登录和注册页面',
|
siteSubtitleHint: '显示在登录和注册页面',
|
||||||
siteSubtitlePlaceholder: '订阅转 API 转换平台',
|
siteSubtitlePlaceholder: '订阅转 API 转换平台',
|
||||||
@@ -3173,7 +3173,7 @@ export default {
|
|||||||
fromEmail: '发件人邮箱',
|
fromEmail: '发件人邮箱',
|
||||||
fromEmailPlaceholder: "noreply{'@'}example.com",
|
fromEmailPlaceholder: "noreply{'@'}example.com",
|
||||||
fromName: '发件人名称',
|
fromName: '发件人名称',
|
||||||
fromNamePlaceholder: 'Sub2API',
|
fromNamePlaceholder: 'StarFireAPI',
|
||||||
useTls: '使用 TLS',
|
useTls: '使用 TLS',
|
||||||
useTlsHint: '为 SMTP 连接启用 TLS 加密'
|
useTlsHint: '为 SMTP 连接启用 TLS 加密'
|
||||||
},
|
},
|
||||||
@@ -3375,14 +3375,14 @@ export default {
|
|||||||
// Admin tour steps
|
// Admin tour steps
|
||||||
admin: {
|
admin: {
|
||||||
welcome: {
|
welcome: {
|
||||||
title: '👋 欢迎使用 Sub2API',
|
title: '👋 欢迎使用 StarFireAPI',
|
||||||
description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">Sub2API 是一个强大的 AI 服务中转平台,让您轻松管理和分发 AI 服务。</p><p style="margin-bottom: 12px;"><b>🎯 核心功能:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>📦 <b>分组管理</b> - 创建不同的服务套餐(VIP、免费试用等)</li><li>🔗 <b>账号池</b> - 连接多个上游 AI 服务商账号</li><li>🔑 <b>密钥分发</b> - 为用户生成独立的 API Key</li><li>💰 <b>计费管理</b> - 灵活的费率和配额控制</li></ul><p style="color: #10b981; font-weight: 600;">接下来,我们将用 3 分钟带您完成首次配置 →</p></div>',
|
description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">StarFireAPI 是一个强大的 AI 服务中转平台,让您轻松管理和分发 AI 服务。</p><p style="margin-bottom: 12px;"><b>🎯 核心功能:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>📦 <b>分组管理</b> - 创建不同的服务套餐(VIP、免费试用等)</li><li>🔗 <b>账号池</b> - 连接多个上游 AI 服务商账号</li><li>🔑 <b>密钥分发</b> - 为用户生成独立的 API Key</li><li>💰 <b>计费管理</b> - 灵活的费率和配额控制</li></ul><p style="color: #10b981; font-weight: 600;">接下来,我们将用 3 分钟带您完成首次配置 →</p></div>',
|
||||||
nextBtn: '开始配置 🚀',
|
nextBtn: '开始配置 🚀',
|
||||||
prevBtn: '跳过'
|
prevBtn: '跳过'
|
||||||
},
|
},
|
||||||
groupManage: {
|
groupManage: {
|
||||||
title: '📦 第一步:分组管理',
|
title: '📦 第一步:分组管理',
|
||||||
description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>什么是分组?</b></p><p style="margin-bottom: 12px;">分组是 Sub2API 的核心概念,它就像一个"服务套餐":</p><ul style="margin-left: 20px; margin-bottom: 12px; font-size: 13px;"><li>🎯 每个分组可以包含多个上游账号</li><li>💰 每个分组有独立的计费倍率</li><li>👥 可以设置为公开或专属分组</li></ul><p style="margin-top: 12px; padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 示例:</b>您可以创建"VIP专线"(高倍率)和"免费试用"(低倍率)两个分组</p><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 点击左侧的"分组管理"开始</p></div>'
|
description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;"><b>什么是分组?</b></p><p style="margin-bottom: 12px;">分组是 StarFireAPI 的核心概念,它就像一个"服务套餐":</p><ul style="margin-left: 20px; margin-bottom: 12px; font-size: 13px;"><li>🎯 每个分组可以包含多个上游账号</li><li>💰 每个分组有独立的计费倍率</li><li>👥 可以设置为公开或专属分组</li></ul><p style="margin-top: 12px; padding: 8px 12px; background: #f0fdf4; border-left: 3px solid #10b981; border-radius: 4px; font-size: 13px;"><b>💡 示例:</b>您可以创建"VIP专线"(高倍率)和"免费试用"(低倍率)两个分组</p><p style="margin-top: 16px; color: #10b981; font-weight: 600;">👉 点击左侧的"分组管理"开始</p></div>'
|
||||||
},
|
},
|
||||||
createGroup: {
|
createGroup: {
|
||||||
title: '➕ 创建新分组',
|
title: '➕ 创建新分组',
|
||||||
@@ -3475,8 +3475,8 @@ export default {
|
|||||||
// User tour steps
|
// User tour steps
|
||||||
user: {
|
user: {
|
||||||
welcome: {
|
welcome: {
|
||||||
title: '👋 欢迎使用 Sub2API',
|
title: '👋 欢迎使用 StarFireAPI',
|
||||||
description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">您好!欢迎来到 Sub2API AI 服务平台。</p><p style="margin-bottom: 12px;"><b>🎯 快速开始:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>🔑 创建 API 密钥</li><li>📋 复制密钥到您的应用</li><li>🚀 开始使用 AI 服务</li></ul><p style="color: #10b981; font-weight: 600;">只需 1 分钟,让我们开始吧 →</p></div>',
|
description: '<div style="line-height: 1.8;"><p style="margin-bottom: 16px;">您好!欢迎来到 StarFireAPI AI 服务平台。</p><p style="margin-bottom: 12px;"><b>🎯 快速开始:</b></p><ul style="margin-left: 20px; margin-bottom: 16px;"><li>🔑 创建 API 密钥</li><li>📋 复制密钥到您的应用</li><li>🚀 开始使用 AI 服务</li></ul><p style="color: #10b981; font-weight: 600;">只需 1 分钟,让我们开始吧 →</p></div>',
|
||||||
nextBtn: '开始 🚀',
|
nextBtn: '开始 🚀',
|
||||||
prevBtn: '跳过'
|
prevBtn: '跳过'
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -391,7 +391,7 @@
|
|||||||
{{ t('home.docs') }}
|
{{ t('home.docs') }}
|
||||||
</a>
|
</a>
|
||||||
<a
|
<a
|
||||||
:href="githubUrl"
|
:href="officialUrl"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="text-sm text-gray-500 transition-colors hover:text-gray-700 dark:text-dark-400 dark:hover:text-white"
|
class="text-sm text-gray-500 transition-colors hover:text-gray-700 dark:text-dark-400 dark:hover:text-white"
|
||||||
@@ -417,7 +417,7 @@ const authStore = useAuthStore()
|
|||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
|
|
||||||
// Site settings - directly from appStore (already initialized from injected config)
|
// Site settings - directly from appStore (already initialized from injected config)
|
||||||
const siteName = computed(() => appStore.cachedPublicSettings?.site_name || appStore.siteName || 'Sub2API')
|
const siteName = computed(() => appStore.cachedPublicSettings?.site_name || appStore.siteName || 'StarFireAPI')
|
||||||
const siteLogo = computed(() => appStore.cachedPublicSettings?.site_logo || appStore.siteLogo || '')
|
const siteLogo = computed(() => appStore.cachedPublicSettings?.site_logo || appStore.siteLogo || '')
|
||||||
const siteSubtitle = computed(() => appStore.cachedPublicSettings?.site_subtitle || 'AI API Gateway Platform')
|
const siteSubtitle = computed(() => appStore.cachedPublicSettings?.site_subtitle || 'AI API Gateway Platform')
|
||||||
const docUrl = computed(() => appStore.cachedPublicSettings?.doc_url || appStore.docUrl || '')
|
const docUrl = computed(() => appStore.cachedPublicSettings?.doc_url || appStore.docUrl || '')
|
||||||
@@ -432,8 +432,8 @@ const isHomeContentUrl = computed(() => {
|
|||||||
// Theme
|
// Theme
|
||||||
const isDark = ref(document.documentElement.classList.contains('dark'))
|
const isDark = ref(document.documentElement.classList.contains('dark'))
|
||||||
|
|
||||||
// GitHub URL
|
// Official Site URL
|
||||||
const githubUrl = 'https://github.com/Wei-Shaw/sub2api'
|
const officialUrl = 'https://anthropic.edu.pl'
|
||||||
|
|
||||||
// Auth state
|
// Auth state
|
||||||
const isAuthenticated = computed(() => authStore.isAuthenticated)
|
const isAuthenticated = computed(() => authStore.isAuthenticated)
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ const promoCodeEnabled = ref<boolean>(true)
|
|||||||
const invitationCodeEnabled = ref<boolean>(false)
|
const invitationCodeEnabled = ref<boolean>(false)
|
||||||
const turnstileEnabled = ref<boolean>(false)
|
const turnstileEnabled = ref<boolean>(false)
|
||||||
const turnstileSiteKey = ref<string>('')
|
const turnstileSiteKey = ref<string>('')
|
||||||
const siteName = ref<string>('Sub2API')
|
const siteName = ref<string>('StarFireAPI')
|
||||||
const linuxdoOAuthEnabled = ref<boolean>(false)
|
const linuxdoOAuthEnabled = ref<boolean>(false)
|
||||||
|
|
||||||
// Turnstile
|
// Turnstile
|
||||||
@@ -368,7 +368,7 @@ onMounted(async () => {
|
|||||||
invitationCodeEnabled.value = settings.invitation_code_enabled
|
invitationCodeEnabled.value = settings.invitation_code_enabled
|
||||||
turnstileEnabled.value = settings.turnstile_enabled
|
turnstileEnabled.value = settings.turnstile_enabled
|
||||||
turnstileSiteKey.value = settings.turnstile_site_key || ''
|
turnstileSiteKey.value = settings.turnstile_site_key || ''
|
||||||
siteName.value = settings.site_name || 'Sub2API'
|
siteName.value = settings.site_name || 'StarFireAPI'
|
||||||
linuxdoOAuthEnabled.value = settings.linuxdo_oauth_enabled
|
linuxdoOAuthEnabled.value = settings.linuxdo_oauth_enabled
|
||||||
|
|
||||||
// Read promo code from URL parameter only if promo code is enabled
|
// Read promo code from URL parameter only if promo code is enabled
|
||||||
|
|||||||
Reference in New Issue
Block a user