feat(settings): add user profile and password management
This commit is contained in:
42
src/hooks/setting-hooks.ts
Normal file
42
src/hooks/setting-hooks.ts
Normal file
@@ -0,0 +1,42 @@
|
||||
import { useUserData } from "./useUserData";
|
||||
import { useEffect } from "react";
|
||||
import logger from "@/utils/logger";
|
||||
import type { IUserInfo } from "@/interfaces/database/user-setting";
|
||||
import userService from "@/services/user_service";
|
||||
import { rsaPsw } from "../utils/encryption";
|
||||
|
||||
export function useProfileSetting() {
|
||||
const {fetchUserInfo, userInfo} = useUserData();
|
||||
|
||||
useEffect(() => {
|
||||
fetchUserInfo();
|
||||
}, [fetchUserInfo]);
|
||||
|
||||
const updateUserInfo = async (newUserInfo: Partial<IUserInfo>) => {
|
||||
try {
|
||||
await userService.updateSetting(newUserInfo);
|
||||
} catch (error) {
|
||||
logger.error('更新用户信息失败:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
const changeUserPassword = async (data: { password: string; new_password: string }) => {
|
||||
try {
|
||||
const newPassword = rsaPsw(data.new_password);
|
||||
const oldPassword = rsaPsw(data.password);
|
||||
const res = await userService.updatePassword({
|
||||
password: oldPassword,
|
||||
new_password: newPassword,
|
||||
});
|
||||
} catch (error) {
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
userInfo,
|
||||
updateUserInfo,
|
||||
changeUserPassword,
|
||||
};
|
||||
}
|
||||
@@ -1,12 +1,17 @@
|
||||
import { useSnackbar } from '@/components/Provider/SnackbarProvider';
|
||||
import { useSnackbar as useSnackbarProvider } from '@/components/Provider/SnackbarProvider';
|
||||
|
||||
// 简化的 hooks
|
||||
export const useMessage = () => {
|
||||
const { showMessage } = useSnackbar();
|
||||
const { showMessage } = useSnackbarProvider();
|
||||
return showMessage;
|
||||
};
|
||||
|
||||
export const useNotification = () => {
|
||||
const { showNotification } = useSnackbar();
|
||||
const { showNotification } = useSnackbarProvider();
|
||||
return showNotification;
|
||||
};
|
||||
|
||||
export const useSnackbar = () => {
|
||||
const { showMessage, showNotification } = useSnackbarProvider();
|
||||
return { showMessage, showNotification };
|
||||
};
|
||||
@@ -1,6 +1,7 @@
|
||||
import { useEffect, useCallback } from 'react';
|
||||
import { useUserStore } from '@/stores/userStore';
|
||||
import userService from '@/services/user_service';
|
||||
import type { IUserInfo } from '@/interfaces/database/user-setting';
|
||||
|
||||
/**
|
||||
* 用户数据管理Hook
|
||||
@@ -28,8 +29,9 @@ export const useUserData = () => {
|
||||
try {
|
||||
const response = await userService.getUserInfo();
|
||||
if (response.data.code === 0) {
|
||||
setUserInfo(response.data.data);
|
||||
return response.data.data;
|
||||
const userInfoData: IUserInfo | null = response.data.data || null;
|
||||
setUserInfo(userInfoData);
|
||||
return userInfoData;
|
||||
} else {
|
||||
throw new Error(response.data.message || '获取用户信息失败');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user