feat: 大量优化和bug修复
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
// 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<IUserSettings | null>(null);
|
||||
/** 系统配置(仅 superadmin),null 表示尚未加载或无权限 */
|
||||
const systemConfig = ref<ISystemConfigPublic | null>(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<boolean> => {
|
||||
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<boolean> => {
|
||||
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
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user