Files
dygou_go/frontend/src/composables/useSettings.ts
T
2026-06-27 15:56:19 +08:00

86 lines
2.0 KiB
TypeScript

import { ref } from 'vue'
import { useToast } from './useToast'
export interface RetryStage {
maxElapsed: number
interval: number
}
export interface Settings {
timeApiUrl: string
traceEnabled: boolean
traceMaxBody: number
logLevel: string
concurrency: number
attempts: number
retryStages: RetryStage[]
seckillMode: number // 0=标准, 1=激进
}
const App = window.go.main.App
const defaultRetryStages: RetryStage[] = [
{ maxElapsed: 4, interval: 120 },
{ maxElapsed: 12, interval: 200 },
{ maxElapsed: 30, interval: 500 },
{ maxElapsed: 75, interval: 1000 }
]
const settings = ref<Settings>({
timeApiUrl: '',
traceEnabled: false,
traceMaxBody: 0,
logLevel: 'info',
concurrency: 150,
attempts: 1,
retryStages: [...defaultRetryStages],
seckillMode: 1
})
export function useSettings() {
const { showToast } = useToast()
const loadSettings = async () => {
try {
const cfg = await App.GetSettings()
settings.value = {
timeApiUrl: cfg.timeApiUrl || '',
traceEnabled: !!cfg.traceEnabled,
traceMaxBody: cfg.traceMaxBody || 0,
logLevel: cfg.logLevel || 'info',
concurrency: cfg.concurrency || 150,
attempts: cfg.attempts || 1,
retryStages: cfg.retryStages && cfg.retryStages.length > 0
? cfg.retryStages
: [...defaultRetryStages],
seckillMode: cfg.seckillMode ?? 1
}
} catch (e: any) {
showToast('读取设置失败', e.message, 'error')
}
}
const saveSettings = async (newSettings: Settings) => {
try {
const d = await App.SaveSettings(newSettings)
if (d.success) {
settings.value = { ...newSettings }
showToast('设置已保存', '配置已生效', 'success')
return true
} else {
showToast('保存失败', d.error || '', 'error')
return false
}
} catch (e: any) {
showToast('保存失败', e.message, 'error')
return false
}
}
return {
settings,
loadSettings,
saveSettings
}
}