// app/stores/settings.ts - 用户自定义配置和系统配置状态管理 import { defineStore } from "pinia"; import { toast } from "vue-sonner"; import type { ISystemConfigPublic, ISystemConfigUpdateRequest, IUserSettings, IUserSettingsUpdateRequest } from "@/interfaces"; import { SettingsService } from "@/services/settings_service"; const getApiErrorMessage = (error: unknown, fallback: string) => { const data = (error as { data?: { msg?: string } })?.data; return data?.msg || fallback; }; export const useSettingsStore = defineStore("settings", () => { /** 用户自定义配置,null 表示尚未加载 */ const userSettings = ref(null); /** 系统配置(仅 superadmin),null 表示尚未加载或无权限 */ const systemConfig = ref(null); /** 加载/保存中状态 */ const userLoading = ref(false); // 仅用于保存 const userFetching = ref(false); // 仅用于 GET 拉取 const sysLoading = ref(false); const sysFetching = ref(false); /** 拉取当前用户的自定义配置 */ const fetchUserSettings = async () => { userFetching.value = true; try { const res = await SettingsService.getUserSettings(); if (res.data.code === 0 && res.data.data) { userSettings.value = res.data.data; } } catch { // 静默失败,不影响主功能 } finally { userFetching.value = false; } }; /** 保存用户自定义配置 */ const updateUserSettings = async ( req: IUserSettingsUpdateRequest ): Promise => { userLoading.value = true; try { const res = await SettingsService.updateUserSettings(req); const data = res.data; if (data.code === 0) { await fetchUserSettings(); toast.success("配置已保存"); return true; } toast.error(data.msg || "保存失败"); return false; } catch (error) { toast.error(getApiErrorMessage(error, "保存失败,请重试")); return false; } finally { userLoading.value = false; } }; /** 拉取系统配置(仅 superadmin 调用此方法) */ const fetchSystemConfig = async () => { sysFetching.value = true; try { const res = await SettingsService.getSystemConfig(); if (res.data.code === 0 && res.data.data) { systemConfig.value = res.data.data; } } catch { // 无权限或其他错误,静默处理 } finally { sysFetching.value = false; } }; /** 保存系统配置(仅 superadmin 调用) */ const updateSystemConfig = async ( req: ISystemConfigUpdateRequest ): Promise => { sysLoading.value = true; try { const res = await SettingsService.updateSystemConfig(req); if (res.data.code === 0) { toast.success("系统配置已更新"); await fetchSystemConfig(); return true; } toast.error(res.data.msg || "更新失败"); return false; } catch (error) { toast.error(getApiErrorMessage(error, "更新失败,请重试")); return false; } finally { sysLoading.value = false; } }; return { userSettings, systemConfig, userLoading, userFetching, sysLoading, sysFetching, fetchUserSettings, updateUserSettings, fetchSystemConfig, updateSystemConfig }; });