diff --git a/backend/internal/handler/admin/setting_handler.go b/backend/internal/handler/admin/setting_handler.go index 4b529db5..84f74018 100644 --- a/backend/internal/handler/admin/setting_handler.go +++ b/backend/internal/handler/admin/setting_handler.go @@ -36,22 +36,22 @@ func (h *SettingHandler) GetSettings(c *gin.Context) { response.Success(c, dto.SystemSettings{ RegistrationEnabled: settings.RegistrationEnabled, EmailVerifyEnabled: settings.EmailVerifyEnabled, - SmtpHost: settings.SmtpHost, - SmtpPort: settings.SmtpPort, - SmtpUsername: settings.SmtpUsername, - SmtpPassword: settings.SmtpPassword, - SmtpFrom: settings.SmtpFrom, - SmtpFromName: settings.SmtpFromName, - SmtpUseTLS: settings.SmtpUseTLS, + SMTPHost: settings.SMTPHost, + SMTPPort: settings.SMTPPort, + SMTPUsername: settings.SMTPUsername, + SMTPPassword: settings.SMTPPassword, + SMTPFrom: settings.SMTPFrom, + SMTPFromName: settings.SMTPFromName, + SMTPUseTLS: settings.SMTPUseTLS, TurnstileEnabled: settings.TurnstileEnabled, TurnstileSiteKey: settings.TurnstileSiteKey, TurnstileSecretKey: settings.TurnstileSecretKey, SiteName: settings.SiteName, SiteLogo: settings.SiteLogo, SiteSubtitle: settings.SiteSubtitle, - ApiBaseUrl: settings.ApiBaseUrl, + APIBaseURL: settings.APIBaseURL, ContactInfo: settings.ContactInfo, - DocUrl: settings.DocUrl, + DocURL: settings.DocURL, DefaultConcurrency: settings.DefaultConcurrency, DefaultBalance: settings.DefaultBalance, EnableModelFallback: settings.EnableModelFallback, @@ -69,13 +69,13 @@ type UpdateSettingsRequest struct { EmailVerifyEnabled bool `json:"email_verify_enabled"` // 邮件服务设置 - SmtpHost string `json:"smtp_host"` - SmtpPort int `json:"smtp_port"` - SmtpUsername string `json:"smtp_username"` - SmtpPassword string `json:"smtp_password"` - SmtpFrom string `json:"smtp_from_email"` - SmtpFromName string `json:"smtp_from_name"` - SmtpUseTLS bool `json:"smtp_use_tls"` + SMTPHost string `json:"smtp_host"` + SMTPPort int `json:"smtp_port"` + SMTPUsername string `json:"smtp_username"` + SMTPPassword string `json:"smtp_password"` + SMTPFrom string `json:"smtp_from_email"` + SMTPFromName string `json:"smtp_from_name"` + SMTPUseTLS bool `json:"smtp_use_tls"` // Cloudflare Turnstile 设置 TurnstileEnabled bool `json:"turnstile_enabled"` @@ -86,9 +86,9 @@ type UpdateSettingsRequest struct { SiteName string `json:"site_name"` SiteLogo string `json:"site_logo"` SiteSubtitle string `json:"site_subtitle"` - ApiBaseUrl string `json:"api_base_url"` + APIBaseURL string `json:"api_base_url"` ContactInfo string `json:"contact_info"` - DocUrl string `json:"doc_url"` + DocURL string `json:"doc_url"` // 默认配置 DefaultConcurrency int `json:"default_concurrency"` @@ -118,8 +118,8 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) { if req.DefaultBalance < 0 { req.DefaultBalance = 0 } - if req.SmtpPort <= 0 { - req.SmtpPort = 587 + if req.SMTPPort <= 0 { + req.SMTPPort = 587 } // Turnstile 参数验证 @@ -155,22 +155,22 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) { settings := &service.SystemSettings{ RegistrationEnabled: req.RegistrationEnabled, EmailVerifyEnabled: req.EmailVerifyEnabled, - SmtpHost: req.SmtpHost, - SmtpPort: req.SmtpPort, - SmtpUsername: req.SmtpUsername, - SmtpPassword: req.SmtpPassword, - SmtpFrom: req.SmtpFrom, - SmtpFromName: req.SmtpFromName, - SmtpUseTLS: req.SmtpUseTLS, + SMTPHost: req.SMTPHost, + SMTPPort: req.SMTPPort, + SMTPUsername: req.SMTPUsername, + SMTPPassword: req.SMTPPassword, + SMTPFrom: req.SMTPFrom, + SMTPFromName: req.SMTPFromName, + SMTPUseTLS: req.SMTPUseTLS, TurnstileEnabled: req.TurnstileEnabled, TurnstileSiteKey: req.TurnstileSiteKey, TurnstileSecretKey: req.TurnstileSecretKey, SiteName: req.SiteName, SiteLogo: req.SiteLogo, SiteSubtitle: req.SiteSubtitle, - ApiBaseUrl: req.ApiBaseUrl, + APIBaseURL: req.APIBaseURL, ContactInfo: req.ContactInfo, - DocUrl: req.DocUrl, + DocURL: req.DocURL, DefaultConcurrency: req.DefaultConcurrency, DefaultBalance: req.DefaultBalance, EnableModelFallback: req.EnableModelFallback, @@ -195,22 +195,22 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) { response.Success(c, dto.SystemSettings{ RegistrationEnabled: updatedSettings.RegistrationEnabled, EmailVerifyEnabled: updatedSettings.EmailVerifyEnabled, - SmtpHost: updatedSettings.SmtpHost, - SmtpPort: updatedSettings.SmtpPort, - SmtpUsername: updatedSettings.SmtpUsername, - SmtpPassword: updatedSettings.SmtpPassword, - SmtpFrom: updatedSettings.SmtpFrom, - SmtpFromName: updatedSettings.SmtpFromName, - SmtpUseTLS: updatedSettings.SmtpUseTLS, + SMTPHost: updatedSettings.SMTPHost, + SMTPPort: updatedSettings.SMTPPort, + SMTPUsername: updatedSettings.SMTPUsername, + SMTPPassword: updatedSettings.SMTPPassword, + SMTPFrom: updatedSettings.SMTPFrom, + SMTPFromName: updatedSettings.SMTPFromName, + SMTPUseTLS: updatedSettings.SMTPUseTLS, TurnstileEnabled: updatedSettings.TurnstileEnabled, TurnstileSiteKey: updatedSettings.TurnstileSiteKey, TurnstileSecretKey: updatedSettings.TurnstileSecretKey, SiteName: updatedSettings.SiteName, SiteLogo: updatedSettings.SiteLogo, SiteSubtitle: updatedSettings.SiteSubtitle, - ApiBaseUrl: updatedSettings.ApiBaseUrl, + APIBaseURL: updatedSettings.APIBaseURL, ContactInfo: updatedSettings.ContactInfo, - DocUrl: updatedSettings.DocUrl, + DocURL: updatedSettings.DocURL, DefaultConcurrency: updatedSettings.DefaultConcurrency, DefaultBalance: updatedSettings.DefaultBalance, EnableModelFallback: updatedSettings.EnableModelFallback, @@ -221,30 +221,30 @@ func (h *SettingHandler) UpdateSettings(c *gin.Context) { }) } -// TestSmtpRequest 测试SMTP连接请求 -type TestSmtpRequest struct { - SmtpHost string `json:"smtp_host" binding:"required"` - SmtpPort int `json:"smtp_port"` - SmtpUsername string `json:"smtp_username"` - SmtpPassword string `json:"smtp_password"` - SmtpUseTLS bool `json:"smtp_use_tls"` +// TestSMTPRequest 测试SMTP连接请求 +type TestSMTPRequest struct { + SMTPHost string `json:"smtp_host" binding:"required"` + SMTPPort int `json:"smtp_port"` + SMTPUsername string `json:"smtp_username"` + SMTPPassword string `json:"smtp_password"` + SMTPUseTLS bool `json:"smtp_use_tls"` } // TestSmtpConnection 测试SMTP连接 // POST /api/v1/admin/settings/test-smtp func (h *SettingHandler) TestSmtpConnection(c *gin.Context) { - var req TestSmtpRequest + var req TestSMTPRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "Invalid request: "+err.Error()) return } - if req.SmtpPort <= 0 { - req.SmtpPort = 587 + if req.SMTPPort <= 0 { + req.SMTPPort = 587 } // 如果未提供密码,从数据库获取已保存的密码 - password := req.SmtpPassword + password := req.SMTPPassword if password == "" { savedConfig, err := h.emailService.GetSmtpConfig(c.Request.Context()) if err == nil && savedConfig != nil { @@ -253,11 +253,11 @@ func (h *SettingHandler) TestSmtpConnection(c *gin.Context) { } config := &service.SmtpConfig{ - Host: req.SmtpHost, - Port: req.SmtpPort, - Username: req.SmtpUsername, + Host: req.SMTPHost, + Port: req.SMTPPort, + Username: req.SMTPUsername, Password: password, - UseTLS: req.SmtpUseTLS, + UseTLS: req.SMTPUseTLS, } err := h.emailService.TestSmtpConnectionWithConfig(config) @@ -272,13 +272,13 @@ func (h *SettingHandler) TestSmtpConnection(c *gin.Context) { // SendTestEmailRequest 发送测试邮件请求 type SendTestEmailRequest struct { Email string `json:"email" binding:"required,email"` - SmtpHost string `json:"smtp_host" binding:"required"` - SmtpPort int `json:"smtp_port"` - SmtpUsername string `json:"smtp_username"` - SmtpPassword string `json:"smtp_password"` - SmtpFrom string `json:"smtp_from_email"` - SmtpFromName string `json:"smtp_from_name"` - SmtpUseTLS bool `json:"smtp_use_tls"` + SMTPHost string `json:"smtp_host" binding:"required"` + SMTPPort int `json:"smtp_port"` + SMTPUsername string `json:"smtp_username"` + SMTPPassword string `json:"smtp_password"` + SMTPFrom string `json:"smtp_from_email"` + SMTPFromName string `json:"smtp_from_name"` + SMTPUseTLS bool `json:"smtp_use_tls"` } // SendTestEmail 发送测试邮件 @@ -290,12 +290,12 @@ func (h *SettingHandler) SendTestEmail(c *gin.Context) { return } - if req.SmtpPort <= 0 { - req.SmtpPort = 587 + if req.SMTPPort <= 0 { + req.SMTPPort = 587 } // 如果未提供密码,从数据库获取已保存的密码 - password := req.SmtpPassword + password := req.SMTPPassword if password == "" { savedConfig, err := h.emailService.GetSmtpConfig(c.Request.Context()) if err == nil && savedConfig != nil { @@ -304,13 +304,13 @@ func (h *SettingHandler) SendTestEmail(c *gin.Context) { } config := &service.SmtpConfig{ - Host: req.SmtpHost, - Port: req.SmtpPort, - Username: req.SmtpUsername, + Host: req.SMTPHost, + Port: req.SMTPPort, + Username: req.SMTPUsername, Password: password, - From: req.SmtpFrom, - FromName: req.SmtpFromName, - UseTLS: req.SmtpUseTLS, + From: req.SMTPFrom, + FromName: req.SMTPFromName, + UseTLS: req.SMTPUseTLS, } siteName := h.settingService.GetSiteName(c.Request.Context()) diff --git a/backend/internal/handler/dto/settings.go b/backend/internal/handler/dto/settings.go index b0c2fda0..14a12697 100644 --- a/backend/internal/handler/dto/settings.go +++ b/backend/internal/handler/dto/settings.go @@ -5,13 +5,13 @@ type SystemSettings struct { RegistrationEnabled bool `json:"registration_enabled"` EmailVerifyEnabled bool `json:"email_verify_enabled"` - SmtpHost string `json:"smtp_host"` - SmtpPort int `json:"smtp_port"` - SmtpUsername string `json:"smtp_username"` - SmtpPassword string `json:"smtp_password,omitempty"` - SmtpFrom string `json:"smtp_from_email"` - SmtpFromName string `json:"smtp_from_name"` - SmtpUseTLS bool `json:"smtp_use_tls"` + SMTPHost string `json:"smtp_host"` + SMTPPort int `json:"smtp_port"` + SMTPUsername string `json:"smtp_username"` + SMTPPassword string `json:"smtp_password,omitempty"` + SMTPFrom string `json:"smtp_from_email"` + SMTPFromName string `json:"smtp_from_name"` + SMTPUseTLS bool `json:"smtp_use_tls"` TurnstileEnabled bool `json:"turnstile_enabled"` TurnstileSiteKey string `json:"turnstile_site_key"` @@ -20,9 +20,9 @@ type SystemSettings struct { SiteName string `json:"site_name"` SiteLogo string `json:"site_logo"` SiteSubtitle string `json:"site_subtitle"` - ApiBaseUrl string `json:"api_base_url"` + APIBaseURL string `json:"api_base_url"` ContactInfo string `json:"contact_info"` - DocUrl string `json:"doc_url"` + DocURL string `json:"doc_url"` DefaultConcurrency int `json:"default_concurrency"` DefaultBalance float64 `json:"default_balance"` @@ -43,8 +43,8 @@ type PublicSettings struct { SiteName string `json:"site_name"` SiteLogo string `json:"site_logo"` SiteSubtitle string `json:"site_subtitle"` - ApiBaseUrl string `json:"api_base_url"` + APIBaseURL string `json:"api_base_url"` ContactInfo string `json:"contact_info"` - DocUrl string `json:"doc_url"` + DocURL string `json:"doc_url"` Version string `json:"version"` } diff --git a/backend/internal/handler/setting_handler.go b/backend/internal/handler/setting_handler.go index 90165288..3cae7a7f 100644 --- a/backend/internal/handler/setting_handler.go +++ b/backend/internal/handler/setting_handler.go @@ -39,9 +39,9 @@ func (h *SettingHandler) GetPublicSettings(c *gin.Context) { SiteName: settings.SiteName, SiteLogo: settings.SiteLogo, SiteSubtitle: settings.SiteSubtitle, - ApiBaseUrl: settings.ApiBaseUrl, + APIBaseURL: settings.APIBaseURL, ContactInfo: settings.ContactInfo, - DocUrl: settings.DocUrl, + DocURL: settings.DocURL, Version: h.version, }) } diff --git a/backend/internal/service/setting_service.go b/backend/internal/service/setting_service.go index 44013a99..1dd65c9a 100644 --- a/backend/internal/service/setting_service.go +++ b/backend/internal/service/setting_service.go @@ -79,9 +79,9 @@ func (s *SettingService) GetPublicSettings(ctx context.Context) (*PublicSettings SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "Sub2API"), SiteLogo: settings[SettingKeySiteLogo], SiteSubtitle: s.getStringOrDefault(settings, SettingKeySiteSubtitle, "Subscription to API Conversion Platform"), - ApiBaseUrl: settings[SettingKeyApiBaseUrl], + APIBaseURL: settings[SettingKeyApiBaseUrl], ContactInfo: settings[SettingKeyContactInfo], - DocUrl: settings[SettingKeyDocUrl], + DocURL: settings[SettingKeyDocUrl], }, nil } @@ -94,15 +94,15 @@ func (s *SettingService) UpdateSettings(ctx context.Context, settings *SystemSet updates[SettingKeyEmailVerifyEnabled] = strconv.FormatBool(settings.EmailVerifyEnabled) // 邮件服务设置(只有非空才更新密码) - updates[SettingKeySmtpHost] = settings.SmtpHost - updates[SettingKeySmtpPort] = strconv.Itoa(settings.SmtpPort) - updates[SettingKeySmtpUsername] = settings.SmtpUsername - if settings.SmtpPassword != "" { - updates[SettingKeySmtpPassword] = settings.SmtpPassword + updates[SettingKeySmtpHost] = settings.SMTPHost + updates[SettingKeySmtpPort] = strconv.Itoa(settings.SMTPPort) + updates[SettingKeySmtpUsername] = settings.SMTPUsername + if settings.SMTPPassword != "" { + updates[SettingKeySmtpPassword] = settings.SMTPPassword } - updates[SettingKeySmtpFrom] = settings.SmtpFrom - updates[SettingKeySmtpFromName] = settings.SmtpFromName - updates[SettingKeySmtpUseTLS] = strconv.FormatBool(settings.SmtpUseTLS) + updates[SettingKeySmtpFrom] = settings.SMTPFrom + updates[SettingKeySmtpFromName] = settings.SMTPFromName + updates[SettingKeySmtpUseTLS] = strconv.FormatBool(settings.SMTPUseTLS) // Cloudflare Turnstile 设置(只有非空才更新密钥) updates[SettingKeyTurnstileEnabled] = strconv.FormatBool(settings.TurnstileEnabled) @@ -115,9 +115,9 @@ func (s *SettingService) UpdateSettings(ctx context.Context, settings *SystemSet updates[SettingKeySiteName] = settings.SiteName updates[SettingKeySiteLogo] = settings.SiteLogo updates[SettingKeySiteSubtitle] = settings.SiteSubtitle - updates[SettingKeyApiBaseUrl] = settings.ApiBaseUrl + updates[SettingKeyApiBaseUrl] = settings.APIBaseURL updates[SettingKeyContactInfo] = settings.ContactInfo - updates[SettingKeyDocUrl] = settings.DocUrl + updates[SettingKeyDocUrl] = settings.DocURL // 默认配置 updates[SettingKeyDefaultConcurrency] = strconv.Itoa(settings.DefaultConcurrency) @@ -223,26 +223,26 @@ func (s *SettingService) parseSettings(settings map[string]string) *SystemSettin result := &SystemSettings{ RegistrationEnabled: settings[SettingKeyRegistrationEnabled] == "true", EmailVerifyEnabled: settings[SettingKeyEmailVerifyEnabled] == "true", - SmtpHost: settings[SettingKeySmtpHost], - SmtpUsername: settings[SettingKeySmtpUsername], - SmtpFrom: settings[SettingKeySmtpFrom], - SmtpFromName: settings[SettingKeySmtpFromName], - SmtpUseTLS: settings[SettingKeySmtpUseTLS] == "true", + SMTPHost: settings[SettingKeySmtpHost], + SMTPUsername: settings[SettingKeySmtpUsername], + SMTPFrom: settings[SettingKeySmtpFrom], + SMTPFromName: settings[SettingKeySmtpFromName], + SMTPUseTLS: settings[SettingKeySmtpUseTLS] == "true", TurnstileEnabled: settings[SettingKeyTurnstileEnabled] == "true", TurnstileSiteKey: settings[SettingKeyTurnstileSiteKey], SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "Sub2API"), SiteLogo: settings[SettingKeySiteLogo], SiteSubtitle: s.getStringOrDefault(settings, SettingKeySiteSubtitle, "Subscription to API Conversion Platform"), - ApiBaseUrl: settings[SettingKeyApiBaseUrl], + APIBaseURL: settings[SettingKeyApiBaseUrl], ContactInfo: settings[SettingKeyContactInfo], - DocUrl: settings[SettingKeyDocUrl], + DocURL: settings[SettingKeyDocUrl], } // 解析整数类型 if port, err := strconv.Atoi(settings[SettingKeySmtpPort]); err == nil { - result.SmtpPort = port + result.SMTPPort = port } else { - result.SmtpPort = 587 + result.SMTPPort = 587 } if concurrency, err := strconv.Atoi(settings[SettingKeyDefaultConcurrency]); err == nil { @@ -259,7 +259,7 @@ func (s *SettingService) parseSettings(settings map[string]string) *SystemSettin } // 敏感信息直接返回,方便测试连接时使用 - result.SmtpPassword = settings[SettingKeySmtpPassword] + result.SMTPPassword = settings[SettingKeySmtpPassword] result.TurnstileSecretKey = settings[SettingKeyTurnstileSecretKey] // Model fallback settings diff --git a/backend/internal/service/settings_view.go b/backend/internal/service/settings_view.go index b8cd0833..65fc8c33 100644 --- a/backend/internal/service/settings_view.go +++ b/backend/internal/service/settings_view.go @@ -4,13 +4,13 @@ type SystemSettings struct { RegistrationEnabled bool EmailVerifyEnabled bool - SmtpHost string - SmtpPort int - SmtpUsername string - SmtpPassword string - SmtpFrom string - SmtpFromName string - SmtpUseTLS bool + SMTPHost string + SMTPPort int + SMTPUsername string + SMTPPassword string + SMTPFrom string + SMTPFromName string + SMTPUseTLS bool TurnstileEnabled bool TurnstileSiteKey string @@ -19,9 +19,9 @@ type SystemSettings struct { SiteName string SiteLogo string SiteSubtitle string - ApiBaseUrl string + APIBaseURL string ContactInfo string - DocUrl string + DocURL string DefaultConcurrency int DefaultBalance float64 @@ -42,8 +42,8 @@ type PublicSettings struct { SiteName string SiteLogo string SiteSubtitle string - ApiBaseUrl string + APIBaseURL string ContactInfo string - DocUrl string + DocURL string Version string } diff --git a/frontend/src/components/account/CreateAccountModal.vue b/frontend/src/components/account/CreateAccountModal.vue index 33342e7a..4c75626e 100644 --- a/frontend/src/components/account/CreateAccountModal.vue +++ b/frontend/src/components/account/CreateAccountModal.vue @@ -338,7 +338,19 @@
{{ t('admin.accounts.gemini.tier.hint') }}
- -- {{ t('admin.accounts.gemini.setupGuide.title') }} -
-- {{ t('admin.accounts.gemini.setupGuide.checklistTitle') }} -
-- {{ t('admin.accounts.gemini.setupGuide.activationTitle') }} -
-- {{ t('admin.accounts.gemini.quotaPolicy.title') }} -
-- {{ t('admin.accounts.gemini.quotaPolicy.note') }} -
-| - {{ t('admin.accounts.gemini.quotaPolicy.columns.channel') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.columns.account') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.columns.limits') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.columns.docs') }} - | -
|---|---|---|---|
| - {{ t('admin.accounts.gemini.quotaPolicy.rows.cli.channel') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.cli.free') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.cli.limitsFree') }} - | -- - {{ t('admin.accounts.gemini.quotaPolicy.docs.codeAssist') }} - - | -
| - {{ t('admin.accounts.gemini.quotaPolicy.rows.cli.premium') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.cli.limitsPremium') }} - | -||
| - {{ t('admin.accounts.gemini.quotaPolicy.rows.gcloud.channel') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.gcloud.account') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.gcloud.limits') }} - | -- - {{ t('admin.accounts.gemini.quotaPolicy.docs.codeAssist') }} - - | -
| - {{ t('admin.accounts.gemini.quotaPolicy.rows.aiStudio.channel') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.aiStudio.free') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.aiStudio.limitsFree') }} - | -- - {{ t('admin.accounts.gemini.quotaPolicy.docs.aiStudio') }} - - | -
| - {{ t('admin.accounts.gemini.quotaPolicy.rows.aiStudio.paid') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.aiStudio.limitsPaid') }} - | -||
| - {{ t('admin.accounts.gemini.quotaPolicy.rows.customOAuth.channel') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.customOAuth.free') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.customOAuth.limitsFree') }} - | -- - {{ t('admin.accounts.gemini.quotaPolicy.docs.vertex') }} - - | -
| - {{ t('admin.accounts.gemini.quotaPolicy.rows.customOAuth.paid') }} - | -- {{ t('admin.accounts.gemini.quotaPolicy.rows.customOAuth.limitsPaid') }} - | -
+ {{ t('admin.accounts.gemini.setupGuide.checklistTitle') }} +
++ {{ t('admin.accounts.gemini.setupGuide.activationTitle') }} +
++ {{ t('admin.accounts.gemini.quotaPolicy.note') }} +
+| + {{ t('admin.accounts.gemini.quotaPolicy.columns.channel') }} + | ++ {{ t('admin.accounts.gemini.quotaPolicy.columns.account') }} + | ++ {{ t('admin.accounts.gemini.quotaPolicy.columns.limits') }} + | +
|---|---|---|
| + {{ t('admin.accounts.gemini.quotaPolicy.rows.googleOne.channel') }} + | +Free | ++ {{ t('admin.accounts.gemini.quotaPolicy.rows.googleOne.limitsFree') }} + | +
| + | Pro | ++ {{ t('admin.accounts.gemini.quotaPolicy.rows.googleOne.limitsPro') }} + | +
| + | Ultra | ++ {{ t('admin.accounts.gemini.quotaPolicy.rows.googleOne.limitsUltra') }} + | +
| + {{ t('admin.accounts.gemini.quotaPolicy.rows.gcp.channel') }} + | +Standard | ++ {{ t('admin.accounts.gemini.quotaPolicy.rows.gcp.limitsStandard') }} + | +
| + | Enterprise | ++ {{ t('admin.accounts.gemini.quotaPolicy.rows.gcp.limitsEnterprise') }} + | +
| + {{ t('admin.accounts.gemini.quotaPolicy.rows.aiStudio.channel') }} + | +Free | ++ {{ t('admin.accounts.gemini.quotaPolicy.rows.aiStudio.limitsFree') }} + | +
| + | Paid | ++ {{ t('admin.accounts.gemini.quotaPolicy.rows.aiStudio.limitsPaid') }} + | +