| import { defineStore } from 'pinia' |
| import { ref, watch } from 'vue' |
|
|
| export const useDashboardStore = defineStore('dashboard', () => { |
| |
| const status = ref({ |
| keyCount: 0, |
| modelCount: 0, |
| retryCount: 0, |
| last24hCalls: 0, |
| hourlyCalls: 0, |
| minuteCalls: 0 |
| }) |
|
|
| const config = ref({ |
| maxRequestsPerMinute: 0, |
| maxRequestsPerDayPerIp: 0, |
| currentTime: '', |
| fakeStreaming: false, |
| fakeStreamingInterval: 0, |
| randomString: false, |
| localVersion: '', |
| remoteVersion: '', |
| hasUpdate: false |
| }) |
|
|
| const apiKeyStats = ref([]) |
| const logs = ref([]) |
| const isRefreshing = ref(false) |
| |
| |
| const selectedModel = ref('all') |
| const availableModels = ref([]) |
| |
| |
| const isDarkMode = ref(localStorage.getItem('darkMode') === 'true') |
| |
| |
| watch(isDarkMode, (newValue) => { |
| localStorage.setItem('darkMode', newValue) |
| applyDarkMode(newValue) |
| }) |
| |
| |
| function applyDarkMode(isDark) { |
| if (isDark) { |
| document.documentElement.classList.add('dark-mode') |
| } else { |
| document.documentElement.classList.remove('dark-mode') |
| } |
| } |
| |
| |
| applyDarkMode(isDarkMode.value) |
|
|
| |
| async function fetchDashboardData() { |
| if (isRefreshing.value) return |
| |
| isRefreshing.value = true |
| try { |
| const response = await fetch('/api/dashboard-data') |
| if (!response.ok) { |
| throw new Error(`HTTP error! status: ${response.status}`) |
| } |
| const data = await response.json() |
| updateDashboardData(data) |
| } catch (error) { |
| console.error('获取数据失败:', error) |
| } finally { |
| isRefreshing.value = false |
| } |
| } |
|
|
| |
| function updateDashboardData(data) { |
| |
| status.value = { |
| keyCount: data.key_count || 0, |
| modelCount: data.model_count || 0, |
| retryCount: data.retry_count || 0, |
| last24hCalls: data.last_24h_calls || 0, |
| hourlyCalls: data.hourly_calls || 0, |
| minuteCalls: data.minute_calls || 0 |
| } |
|
|
| |
| config.value = { |
| maxRequestsPerMinute: data.max_requests_per_minute || 0, |
| maxRequestsPerDayPerIp: data.max_requests_per_day_per_ip || 0, |
| currentTime: data.current_time || '', |
| fakeStreaming: data.fake_streaming || false, |
| fakeStreamingInterval: data.fake_streaming_interval || 0, |
| randomString: data.random_string || false, |
| localVersion: data.local_version || '', |
| remoteVersion: data.remote_version || '', |
| hasUpdate: data.has_update || false |
| } |
|
|
| |
| if (data.api_key_stats) { |
| apiKeyStats.value = data.api_key_stats |
| |
| |
| const models = new Set(['all']) |
| data.api_key_stats.forEach(stat => { |
| if (stat.model_stats) { |
| Object.keys(stat.model_stats).forEach(model => { |
| models.add(model) |
| }) |
| } |
| }) |
| availableModels.value = Array.from(models) |
| |
| |
| if (!availableModels.value.includes(selectedModel.value)) { |
| selectedModel.value = 'all' |
| } |
| } |
|
|
| |
| if (data.logs) { |
| logs.value = data.logs |
| } |
| } |
| |
| |
| function setSelectedModel(model) { |
| selectedModel.value = model |
| } |
|
|
| |
| function toggleDarkMode() { |
| isDarkMode.value = !isDarkMode.value |
| } |
|
|
| return { |
| status, |
| config, |
| apiKeyStats, |
| logs, |
| isRefreshing, |
| fetchDashboardData, |
| selectedModel, |
| availableModels, |
| setSelectedModel, |
| isDarkMode, |
| toggleDarkMode |
| } |
| }) |