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({ 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 } }