import { ref } from 'vue' import { useToast } from './useToast' import { GetActivities, GetCurrentActivity, SwitchActivity } from '@wails/go/app/App' // 活动项(与后端 types.ActivityInfo 对齐) export interface ActivityItem { id: string displayName: string } // 模块级单例:活动列表与当前活动在所有组件中共享同一份状态 const activities = ref([]) const currentActivity = ref(null) const switching = ref(false) // 统一走 Wails 自动生成绑定,后端签名变化时可由 TypeScript 暴露问题。 export function useActivity() { const { showToast } = useToast() // 拉取全部活动与当前生效活动 const loadActivities = async () => { try { const list = await GetActivities() activities.value = list || [] try { currentActivity.value = await GetCurrentActivity() } catch { // 当前活动读取失败不阻塞列表展示 } } catch (e: any) { showToast('读取活动列表失败', e?.message || '', 'error') } } // 切换活动;成功返回 true,调用方可据此刷新商品等数据 const switchActivity = async (id: string): Promise => { if (id === currentActivity.value?.id) return true switching.value = true try { const d: Record = await SwitchActivity(id) if (d && d.success) { currentActivity.value = { id: d.activity, displayName: d.displayName } showToast('活动已切换', (d.displayName || id) + ',正在刷新商品...', 'success') return true } showToast('切换失败', d?.error || '', 'error') return false } catch (e: any) { showToast('切换失败', e?.message || '', 'error') return false } finally { switching.value = false } } return { activities, currentActivity, switching, loadActivities, switchActivity } }