Revert "Merge pull request #424 from Wangnov/feat/i18n"

This reverts commit 1d915d8327, reversing
changes made to 009f7c84f6.
This commit is contained in:
shaw
2025-09-12 09:21:53 +08:00
parent 1d915d8327
commit 9c4dc714f8
80 changed files with 7026 additions and 19087 deletions

View File

@@ -1,7 +1,6 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { apiClient } from '@/config/api'
import i18n from '@/i18n'
export const useAccountsStore = defineStore('accounts', () => {
// 状态
@@ -28,7 +27,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
claudeAccounts.value = response.data || []
} else {
throw new Error(response.message || i18n.global.t('accounts.loadAccountsFailed'))
throw new Error(response.message || '获取Claude账户失败')
}
} catch (err) {
error.value = err.message
@@ -47,7 +46,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
claudeConsoleAccounts.value = response.data || []
} else {
throw new Error(response.message || i18n.global.t('accounts.loadAccountsFailed'))
throw new Error(response.message || '获取Claude Console账户失败')
}
} catch (err) {
error.value = err.message
@@ -66,7 +65,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
bedrockAccounts.value = response.data || []
} else {
throw new Error(response.message || i18n.global.t('accounts.loadAccountsFailed'))
throw new Error(response.message || '获取Bedrock账户失败')
}
} catch (err) {
error.value = err.message
@@ -85,7 +84,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
geminiAccounts.value = response.data || []
} else {
throw new Error(response.message || i18n.global.t('accounts.loadAccountsFailed'))
throw new Error(response.message || '获取Gemini账户失败')
}
} catch (err) {
error.value = err.message
@@ -104,7 +103,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
openaiAccounts.value = response.data || []
} else {
throw new Error(response.message || i18n.global.t('accounts.loadAccountsFailed'))
throw new Error(response.message || '获取OpenAI账户失败')
}
} catch (err) {
error.value = err.message
@@ -123,7 +122,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
azureOpenaiAccounts.value = response.data || []
} else {
throw new Error(response.message || i18n.global.t('accounts.loadAccountsFailed'))
throw new Error(response.message || '获取Azure OpenAI账户失败')
}
} catch (err) {
error.value = err.message
@@ -184,7 +183,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchClaudeAccounts()
return response.data
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '创建Claude账户失败')
}
} catch (err) {
error.value = err.message
@@ -204,9 +203,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchClaudeConsoleAccounts()
return response.data
} else {
throw new Error(
response.message || i18n.global.t('common.errors.createClaudeConsoleAccountFailed')
)
throw new Error(response.message || '创建Claude Console账户失败')
}
} catch (err) {
error.value = err.message
@@ -226,7 +223,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchBedrockAccounts()
return response.data
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '创建Bedrock账户失败')
}
} catch (err) {
error.value = err.message
@@ -246,7 +243,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchGeminiAccounts()
return response.data
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '创建Gemini账户失败')
}
} catch (err) {
error.value = err.message
@@ -266,7 +263,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchOpenAIAccounts()
return response.data
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '创建OpenAI账户失败')
}
} catch (err) {
error.value = err.message
@@ -286,9 +283,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchAzureOpenAIAccounts()
return response.data
} else {
throw new Error(
response.message || i18n.global.t('common.errors.createAzureOpenAIAccountFailed')
)
throw new Error(response.message || '创建Azure OpenAI账户失败')
}
} catch (err) {
error.value = err.message
@@ -328,7 +323,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchClaudeAccounts()
return response
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '更新Claude账户失败')
}
} catch (err) {
error.value = err.message
@@ -348,9 +343,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchClaudeConsoleAccounts()
return response
} else {
throw new Error(
response.message || i18n.global.t('common.errors.updateClaudeConsoleAccountFailed')
)
throw new Error(response.message || '更新Claude Console账户失败')
}
} catch (err) {
error.value = err.message
@@ -370,7 +363,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchBedrockAccounts()
return response
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '更新Bedrock账户失败')
}
} catch (err) {
error.value = err.message
@@ -390,7 +383,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchGeminiAccounts()
return response
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '更新Gemini账户失败')
}
} catch (err) {
error.value = err.message
@@ -410,7 +403,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchOpenAIAccounts()
return response
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '更新OpenAI账户失败')
}
} catch (err) {
error.value = err.message
@@ -430,9 +423,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchAzureOpenAIAccounts()
return response
} else {
throw new Error(
response.message || i18n.global.t('common.errors.updateAzureOpenAIAccountFailed')
)
throw new Error(response.message || '更新Azure OpenAI账户失败')
}
} catch (err) {
error.value = err.message
@@ -507,7 +498,7 @@ export const useAccountsStore = defineStore('accounts', () => {
}
return response
} else {
throw new Error(response.message || i18n.global.t('accounts.schedulingToggleFailed'))
throw new Error(response.message || '切换状态失败')
}
} catch (err) {
error.value = err.message
@@ -562,7 +553,7 @@ export const useAccountsStore = defineStore('accounts', () => {
}
return response
} else {
throw new Error(response.message || i18n.global.t('accounts.deleteFailed'))
throw new Error(response.message || '删除失败')
}
} catch (err) {
error.value = err.message
@@ -582,7 +573,7 @@ export const useAccountsStore = defineStore('accounts', () => {
await fetchClaudeAccounts()
return response
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || 'Token刷新失败')
}
} catch (err) {
error.value = err.message
@@ -599,7 +590,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
return response.data // 返回整个对象包含authUrl和sessionId
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '生成授权URL失败')
}
} catch (err) {
error.value = err.message
@@ -614,7 +605,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
return response.data
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '交换授权码失败')
}
} catch (err) {
error.value = err.message
@@ -632,9 +623,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
return response.data // 返回整个对象包含authUrl和sessionId
} else {
throw new Error(
response.message || i18n.global.t('common.errors.generateSetupTokenUrlFailed')
)
throw new Error(response.message || '生成Setup Token URL失败')
}
} catch (err) {
error.value = err.message
@@ -652,7 +641,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
return response.data
} else {
throw new Error(response.message || i18n.global.t('common.errors.exchangeSetupTokenFailed'))
throw new Error(response.message || '交换Setup Token授权码失败')
}
} catch (err) {
error.value = err.message
@@ -667,7 +656,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
return response.data // 返回整个对象包含authUrl和sessionId
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '生成授权URL失败')
}
} catch (err) {
error.value = err.message
@@ -682,7 +671,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
return response.data
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '交换授权码失败')
}
} catch (err) {
error.value = err.message
@@ -697,7 +686,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
return response.data // 返回整个对象包含authUrl和sessionId
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '生成授权URL失败')
}
} catch (err) {
error.value = err.message
@@ -712,7 +701,7 @@ export const useAccountsStore = defineStore('accounts', () => {
if (response.success) {
return response.data
} else {
throw new Error(response.message || i18n.global.t('accounts.operationFailed'))
throw new Error(response.message || '交换授权码失败')
}
} catch (err) {
error.value = err.message

View File

@@ -1,5 +1,4 @@
import { apiClient } from '@/config/api'
import i18n from '@/i18n'
import { defineStore } from 'pinia'
import { ref } from 'vue'
@@ -23,7 +22,7 @@ export const useApiKeysStore = defineStore('apiKeys', () => {
if (response.success) {
apiKeys.value = response.data || []
} else {
throw new Error(response.message || i18n.global.t('apiKeys.loadFailed'))
throw new Error(response.message || '获取API Keys失败')
}
} catch (err) {
error.value = err.message
@@ -43,7 +42,7 @@ export const useApiKeysStore = defineStore('apiKeys', () => {
await fetchApiKeys()
return response.data
} else {
throw new Error(response.message || i18n.global.t('apiKeys.operationFailed'))
throw new Error(response.message || '创建API Key失败')
}
} catch (err) {
error.value = err.message
@@ -63,7 +62,7 @@ export const useApiKeysStore = defineStore('apiKeys', () => {
await fetchApiKeys()
return response
} else {
throw new Error(response.message || i18n.global.t('apiKeys.updateFailed'))
throw new Error(response.message || '更新API Key失败')
}
} catch (err) {
error.value = err.message
@@ -83,7 +82,7 @@ export const useApiKeysStore = defineStore('apiKeys', () => {
await fetchApiKeys()
return response
} else {
throw new Error(response.message || i18n.global.t('apiKeys.operationFailed'))
throw new Error(response.message || '切换状态失败')
}
} catch (err) {
error.value = err.message
@@ -103,7 +102,7 @@ export const useApiKeysStore = defineStore('apiKeys', () => {
await fetchApiKeys()
return response
} else {
throw new Error(response.message || i18n.global.t('apiKeys.operationFailed'))
throw new Error(response.message || '续期失败')
}
} catch (err) {
error.value = err.message
@@ -123,7 +122,7 @@ export const useApiKeysStore = defineStore('apiKeys', () => {
await fetchApiKeys()
return response
} else {
throw new Error(response.message || i18n.global.t('apiKeys.deleteFailed'))
throw new Error(response.message || '删除失败')
}
} catch (err) {
error.value = err.message
@@ -142,10 +141,10 @@ export const useApiKeysStore = defineStore('apiKeys', () => {
if (response.success) {
return response.stats
} else {
throw new Error(response.message || i18n.global.t('apiKeys.operationFailed'))
throw new Error(response.message || '获取统计失败')
}
} catch (err) {
console.error(i18n.global.t('common.errors.getApiKeyStatsFailed'), err)
console.error('获取API Key统计失败:', err)
return null
}
}
@@ -167,10 +166,10 @@ export const useApiKeysStore = defineStore('apiKeys', () => {
if (response.success) {
return response.data || []
} else {
throw new Error(response.message || i18n.global.t('apiKeys.operationFailed'))
throw new Error(response.message || '获取标签失败')
}
} catch (err) {
console.error(i18n.global.t('common.errors.getTagsFailed'), err)
console.error('获取标签失败:', err)
return []
}
}

View File

@@ -1,7 +1,6 @@
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { apiStatsClient } from '@/config/apiStats'
import i18n from '@/i18n'
export const useApiStatsStore = defineStore('apistats', () => {
// 状态
@@ -94,7 +93,7 @@ export const useApiStatsStore = defineStore('apistats', () => {
}
if (!apiKey.value.trim()) {
error.value = i18n.global.t('apiStats.enterApiKey')
error.value = '请输入 API Key'
return
}
@@ -126,18 +125,14 @@ export const useApiStatsStore = defineStore('apistats', () => {
// 更新 URL
updateURL()
} else {
throw new Error(
statsResult.message || i18n.global.t('common.errors.requestFailed', { status: 500 })
)
throw new Error(statsResult.message || '查询失败')
}
} else {
throw new Error(
idResult.message || i18n.global.t('common.errors.requestFailed', { status: 500 })
)
throw new Error(idResult.message || '获取 API Key ID 失败')
}
} catch (err) {
console.error('Query stats error:', err)
error.value = err.message || i18n.global.t('apiStats.errors.queryStatsFailed')
error.value = err.message || '查询统计数据失败,请检查您的 API Key 是否正确'
statsData.value = null
modelStats.value = []
apiId.value = null
@@ -214,7 +209,7 @@ export const useApiStatsStore = defineStore('apistats', () => {
if (result.success) {
modelStats.value = result.data || []
} else {
throw new Error(result.message || i18n.global.t('apiStats.errors.loadModelStatsFailed'))
throw new Error(result.message || '加载模型统计失败')
}
} catch (err) {
console.error('Load model stats error:', err)
@@ -271,13 +266,11 @@ export const useApiStatsStore = defineStore('apistats', () => {
// 清除错误信息
error.value = ''
} else {
throw new Error(
result.message || i18n.global.t('common.errors.requestFailed', { status: 500 })
)
throw new Error(result.message || '查询失败')
}
} catch (err) {
console.error('Load stats with apiId error:', err)
error.value = err.message || i18n.global.t('apiStats.errors.queryStatsFailed')
error.value = err.message || '查询统计数据失败'
statsData.value = null
modelStats.value = []
} finally {
@@ -337,7 +330,7 @@ export const useApiStatsStore = defineStore('apistats', () => {
async function queryBatchStats() {
const keys = parseApiKeys()
if (keys.length === 0) {
error.value = i18n.global.t('apiStats.errors.enterAtLeastOneKey')
error.value = '请输入至少一个有效的 API Key'
return
}
@@ -367,7 +360,7 @@ export const useApiStatsStore = defineStore('apistats', () => {
})
if (validIds.length === 0) {
throw new Error(i18n.global.t('common.errors.allApiKeysInvalid'))
throw new Error('所有 API Key 都无效')
}
apiIds.value = validIds
@@ -391,11 +384,11 @@ export const useApiStatsStore = defineStore('apistats', () => {
// 更新 URL
updateBatchURL()
} else {
throw new Error(batchResult.message || i18n.global.t('apiStats.errors.batchQueryFailed'))
throw new Error(batchResult.message || '批量查询失败')
}
} catch (err) {
console.error('Batch query error:', err)
error.value = err.message || i18n.global.t('apiStats.errors.batchQueryFailed')
error.value = err.message || '批量查询统计数据失败'
aggregatedStats.value = null
individualStats.value = []
} finally {
@@ -415,7 +408,7 @@ export const useApiStatsStore = defineStore('apistats', () => {
if (result.success) {
modelStats.value = result.data || []
} else {
throw new Error(result.message || i18n.global.t('apiStats.errors.batchModelStatsFailed'))
throw new Error(result.message || '加载批量模型统计失败')
}
} catch (err) {
console.error('Load batch model stats error:', err)

View File

@@ -1,7 +1,6 @@
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import router from '@/router'
import i18n from '@/i18n'
import { apiClient } from '@/config/api'
export const useAuthStore = defineStore('auth', () => {
@@ -40,10 +39,10 @@ export const useAuthStore = defineStore('auth', () => {
await router.push('/dashboard')
} else {
loginError.value = result.message || i18n.global.t('login.loginFailed')
loginError.value = result.message || '登录失败'
}
} catch (error) {
loginError.value = error.message || i18n.global.t('login.loginFailedCheck')
loginError.value = error.message || '登录失败,请检查用户名和密码'
} finally {
loginLoading.value = false
}
@@ -103,11 +102,11 @@ export const useAuthStore = defineStore('auth', () => {
// 设置页面标题
if (result.data.siteName) {
document.title = `${result.data.siteName} - ${i18n.global.t('header.adminPanel')}`
document.title = `${result.data.siteName} - 管理后台`
}
}
} catch (error) {
console.error(i18n.global.t('common.errors.loadOemSettingsFailed'), error)
console.error('加载OEM设置失败:', error)
} finally {
oemLoading.value = false
}

View File

@@ -1,6 +1,5 @@
import { defineStore } from 'pinia'
import { apiClient } from '@/config/api'
import i18n from '@/i18n'
export const useClientsStore = defineStore('clients', {
state: () => ({
@@ -25,13 +24,13 @@ export const useClientsStore = defineStore('clients', {
if (response.success) {
this.supportedClients = response.data || []
} else {
this.error = response.message || i18n.global.t('common.errors.loadSupportedClientsFailed')
this.error = response.message || '加载支持的客户端失败'
console.error('Failed to load supported clients:', this.error)
}
return this.supportedClients
} catch (error) {
this.error = error.message || i18n.global.t('common.errors.loadSupportedClientsFailed')
this.error = error.message || '加载支持的客户端失败'
console.error('Error loading supported clients:', error)
return []
} finally {

View File

@@ -2,7 +2,6 @@ import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { apiClient } from '@/config/api'
import { showToast } from '@/utils/toast'
import i18n from '@/i18n'
export const useDashboardStore = defineStore('dashboard', () => {
// 状态
@@ -42,7 +41,7 @@ export const useDashboardStore = defineStore('dashboard', () => {
realtimeTPM: 0,
metricsWindow: 5,
isHistoricalMetrics: false,
systemStatus: i18n.global.t('system.status.normal'),
systemStatus: '正常',
uptime: 0,
systemTimezone: 8 // 默认 UTC+8
})
@@ -69,9 +68,9 @@ export const useDashboardStore = defineStore('dashboard', () => {
customEnd: '',
customRange: null,
presetOptions: [
{ value: 'today', label: i18n.global.t('dashboard.today'), days: 1 },
{ value: '7days', label: i18n.global.t('dashboard.last7Days'), days: 7 },
{ value: '30days', label: i18n.global.t('dashboard.last30Days'), days: 30 }
{ value: 'today', label: '今日', days: 1 },
{ value: '7days', label: '7天', days: 7 },
{ value: '30days', label: '30天', days: 30 }
]
})
@@ -90,11 +89,11 @@ export const useDashboardStore = defineStore('dashboard', () => {
const minutes = Math.floor((seconds % 3600) / 60)
if (days > 0) {
return i18n.global.t('dashboard.uptimeFormat.daysHours', { days, hours })
return `${days}${hours}小时`
} else if (hours > 0) {
return i18n.global.t('dashboard.uptimeFormat.hoursMinutes', { hours, minutes })
return `${hours}小时 ${minutes}分钟`
} else {
return i18n.global.t('dashboard.uptimeFormat.minutes', { minutes })
return `${minutes}分钟`
}
})
@@ -199,9 +198,7 @@ export const useDashboardStore = defineStore('dashboard', () => {
realtimeTPM: realtimeMetrics.tpm || 0,
metricsWindow: realtimeMetrics.windowMinutes || 5,
isHistoricalMetrics: realtimeMetrics.isHistorical || false,
systemStatus: systemHealth.redisConnected
? i18n.global.t('system.status.normal')
: i18n.global.t('system.status.abnormal'),
systemStatus: systemHealth.redisConnected ? '正常' : '异常',
uptime: systemHealth.uptime || 0,
systemTimezone: dashboardResponse.data.systemTimezone || 8
}
@@ -221,7 +218,7 @@ export const useDashboardStore = defineStore('dashboard', () => {
}
}
} catch (error) {
console.error(i18n.global.t('common.errors.loadDashboardFailed'), error)
console.error('加载仪表板数据失败:', error)
} finally {
loading.value = false
}
@@ -309,7 +306,7 @@ export const useDashboardStore = defineStore('dashboard', () => {
trendData.value = response.data
}
} catch (error) {
console.error(i18n.global.t('common.errors.loadUsageTrendFailed'), error)
console.error('加载使用趋势失败:', error)
}
}
@@ -400,7 +397,7 @@ export const useDashboardStore = defineStore('dashboard', () => {
dashboardModelStats.value = response.data
}
} catch (error) {
console.error(i18n.global.t('common.errors.loadModelStatsFailed'), error)
console.error('加载模型统计失败:', error)
}
}
@@ -502,7 +499,7 @@ export const useDashboardStore = defineStore('dashboard', () => {
}
}
} catch (error) {
console.error(i18n.global.t('common.errors.loadApiKeysTrendFailed'), error)
console.error('加载API Keys趋势失败:', error)
}
}
@@ -639,14 +636,14 @@ export const useDashboardStore = defineStore('dashboard', () => {
// 小时粒度:限制 24 小时
const hoursDiff = (end - start) / (1000 * 60 * 60)
if (hoursDiff > 24) {
showToast(i18n.global.t('dashboard.errors.rangeTooLongHour'), 'warning')
showToast('小时粒度下日期范围不能超过24小时', 'warning')
return
}
} else {
// 天粒度:限制 31 天
const daysDiff = Math.ceil((end - start) / (1000 * 60 * 60 * 24)) + 1
if (daysDiff > 31) {
showToast(i18n.global.t('dashboard.errors.rangeTooLongDay'), 'warning')
showToast('日期范围不能超过 31 天', 'warning')
return
}
}
@@ -665,13 +662,9 @@ export const useDashboardStore = defineStore('dashboard', () => {
// 根据粒度更新预设选项
if (granularity === 'hour') {
dateFilter.value.presetOptions = [
{
value: 'last24h',
label: i18n.global.t('dashboard.usageTrend.periodOptions.last24Hours'),
hours: 24
},
{ value: 'yesterday', label: i18n.global.t('dashboard.yesterday'), hours: 24 },
{ value: 'dayBefore', label: i18n.global.t('dashboard.dayBefore'), hours: 24 }
{ value: 'last24h', label: '近24小时', hours: 24 },
{ value: 'yesterday', label: '昨天', hours: 24 },
{ value: 'dayBefore', label: '前天', hours: 24 }
]
// 检查当前自定义日期范围是否超过24小时
@@ -684,7 +677,7 @@ export const useDashboardStore = defineStore('dashboard', () => {
const end = new Date(dateFilter.value.customRange[1])
const hoursDiff = (end - start) / (1000 * 60 * 60)
if (hoursDiff > 24) {
showToast(i18n.global.t('dashboard.errors.rangeTooLongHourSwitched'), 'warning')
showToast('小时粒度下日期范围不能超过24小时已切换到近24小时', 'warning')
setDateFilterPreset('last24h')
return
}
@@ -698,9 +691,9 @@ export const useDashboardStore = defineStore('dashboard', () => {
} else {
// 天粒度
dateFilter.value.presetOptions = [
{ value: 'today', label: i18n.global.t('dashboard.today'), days: 1 },
{ value: '7days', label: i18n.global.t('dashboard.last7Days'), days: 7 },
{ value: '30days', label: i18n.global.t('dashboard.last30Days'), days: 30 }
{ value: 'today', label: '今日', days: 1 },
{ value: '7days', label: '7天', days: 7 },
{ value: '30days', label: '30天', days: 30 }
]
// 如果当前是小时粒度的预设,切换到天粒度的默认预设

View File

@@ -1,47 +0,0 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { i18n, SUPPORTED_LOCALES, getSupportedLocalesWithI18n } from '@/i18n'
export const useLocaleStore = defineStore('locale', () => {
const currentLocale = ref(i18n.global.locale.value)
// 切换语言
const setLocale = (locale) => {
if (!SUPPORTED_LOCALES[locale]) {
console.warn(`Unsupported locale: ${locale}`)
return
}
currentLocale.value = locale
i18n.global.locale.value = locale
localStorage.setItem('app-locale', locale)
// 更新HTML lang属性
document.documentElement.setAttribute('lang', locale)
}
// 获取当前语言信息兼容i18n
const getCurrentLocaleInfo = (t = null) => {
if (t) {
const supportedLocales = getSupportedLocalesWithI18n(t)
return supportedLocales[currentLocale.value] || supportedLocales['zh-cn']
}
return SUPPORTED_LOCALES[currentLocale.value] || SUPPORTED_LOCALES['zh-cn']
}
// 获取所有支持的语言兼容i18n
const getSupportedLocales = (t = null) => {
const supportedLocales = t ? getSupportedLocalesWithI18n(t) : SUPPORTED_LOCALES
return Object.entries(supportedLocales).map(([key, value]) => ({
code: key,
...value
}))
}
return {
currentLocale,
setLocale,
getCurrentLocaleInfo,
getSupportedLocales
}
})

View File

@@ -1,7 +1,6 @@
import { defineStore } from 'pinia'
import { ref } from 'vue'
import { apiClient } from '@/config/api'
import i18n from '@/i18n'
export const useSettingsStore = defineStore('settings', () => {
// 状态
@@ -78,7 +77,7 @@ export const useSettingsStore = defineStore('settings', () => {
const applyOemSettings = () => {
// 更新页面标题
if (oemSettings.value.siteName) {
document.title = `${oemSettings.value.siteName} - ${i18n.global.t('header.adminPanel')}`
document.title = `${oemSettings.value.siteName} - 管理后台`
}
// 更新favicon
@@ -95,9 +94,7 @@ export const useSettingsStore = defineStore('settings', () => {
// 格式化日期时间
const formatDateTime = (dateString) => {
if (!dateString) return ''
const localeMap = { 'zh-cn': 'zh-CN', 'zh-tw': 'zh-TW', en: 'en-US' }
const currentLocale = localeMap[i18n.global.locale.value] || 'en-US'
return new Date(dateString).toLocaleString(currentLocale, {
return new Date(dateString).toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
@@ -113,13 +110,13 @@ export const useSettingsStore = defineStore('settings', () => {
// 检查文件大小 (350KB)
if (file.size > 350 * 1024) {
errors.push(i18n.global.t('settings.validation.iconTooLarge'))
errors.push('图标文件大小不能超过 350KB')
}
// 检查文件类型
const allowedTypes = ['image/x-icon', 'image/png', 'image/jpeg', 'image/jpg', 'image/svg+xml']
if (!allowedTypes.includes(file.type)) {
errors.push(i18n.global.t('settings.validation.iconTypeNotSupported'))
errors.push('不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件')
}
return {

View File

@@ -1,6 +1,5 @@
import { defineStore } from 'pinia'
import axios from 'axios'
import i18n from '@/i18n'
import { showToast } from '@/utils/toast'
const API_BASE = '/users'
@@ -41,7 +40,7 @@ export const useUserStore = defineStore('user', {
return response.data
} else {
throw new Error(response.data.message || i18n.global.t('user.login.loginFailed'))
throw new Error(response.data.message || 'Login failed')
}
} catch (error) {
this.clearAuth()
@@ -116,9 +115,7 @@ export const useUserStore = defineStore('user', {
this.clearAuth()
// If it's a disabled account error, throw a specific error
if (error.response?.status === 403) {
throw new Error(
error.response.data?.message || i18n.global.t('user.login.accountDisabled')
)
throw new Error(error.response.data?.message || 'Your account has been disabled')
}
}
throw error