From dc09105504fa7df3be23e79addacad2fd2a057d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9C=A7=E9=9B=A8=E3=83=90=E3=83=8B=E3=83=A9=E3=83=BC?= <118162831+kirisamevanilla@users.noreply.github.com> Date: Thu, 18 Jun 2026 22:52:17 +0800 Subject: [PATCH 1/2] feat: nickname --- src/components/index.ts | 1 + src/components/user/NicknameEditor.tsx | 75 ++++++++++++++++++++++++++ src/config/api.ts | 1 + src/pages/user/ProfilePage.tsx | 14 ++++- src/types/user.ts | 2 + 5 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 src/components/user/NicknameEditor.tsx diff --git a/src/components/index.ts b/src/components/index.ts index 99e68a0..61e979b 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -10,6 +10,7 @@ export { default as Logout } from './user/Logout'; export { default as ChartUploader } from './user/ChartUploader'; export { default as AvatarUploader } from './user/AvatarUploader'; export { default as IntroUploader } from './user/IntroUploader'; +export { default as NicknameEditor } from './user/NicknameEditor'; // UI组件 export { default as MajdataLogo } from './header/MajdataLogo'; diff --git a/src/components/user/NicknameEditor.tsx b/src/components/user/NicknameEditor.tsx new file mode 100644 index 0000000..133287c --- /dev/null +++ b/src/components/user/NicknameEditor.tsx @@ -0,0 +1,75 @@ +import { useState } from 'react'; +import { toast } from 'react-toastify'; +import axios from 'axios'; +import { endpoints } from '@/config/api'; +import { useLoc, useUserContext } from '@/hooks'; +import { getDisplayMessage } from '@/utils'; + +export default function NicknameEditor() { + const loc = useLoc(); + const { user } = useUserContext(); + const [nickname, setNickname] = useState(user?.nickname || ''); + const [isUploading, setIsUploading] = useState(false); + + async function onSubmit(event: React.FormEvent) { + event.preventDefault(); + + const formData = new FormData(event.currentTarget); + const content = formData.get('content') as string; + + if (!content || content.trim() === '') { + toast.error(loc('NicknameRequired', 'Please enter a nickname')); + return; + } + + const uploading = toast.loading(loc('Uploading'), { + hideProgressBar: false, + }); + + setIsUploading(true); + + try { + await axios.post(endpoints.account.nickname, { content }, { + withCredentials: true, + }); + toast.success(loc('UploadSuccess', 'Nickname updated successfully')); + } catch (e: unknown) { + const error = e as { response?: { data?: unknown }; message?: string }; + const message = getDisplayMessage( + error.response?.data ?? error.message, + loc('UploadFailed', 'Update failed'), + ); + toast.error(message, { autoClose: false }); + } finally { + toast.done(uploading); + setIsUploading(false); + } + } + + return ( +
+

+ {loc('NicknameHint', 'Your display name shown across the site.')} +

+
+ setNickname(e.target.value)} + disabled={isUploading} + /> + +
+
+ ); +} diff --git a/src/config/api.ts b/src/config/api.ts index c0f9a59..c41f335 100644 --- a/src/config/api.ts +++ b/src/config/api.ts @@ -23,6 +23,7 @@ export const endpoints = { diff: `${apiroot3}/account/favorite/collection/diff`, }, account: { + nickname: `${apiroot3}/account/nickname/`, info: `${apiroot3}/account/info/`, login: `${apiroot3}/account/Login`, logout: `${apiroot3}/account/Logout`, diff --git a/src/pages/user/ProfilePage.tsx b/src/pages/user/ProfilePage.tsx index e01b407..f2c2380 100644 --- a/src/pages/user/ProfilePage.tsx +++ b/src/pages/user/ProfilePage.tsx @@ -1,4 +1,4 @@ -import { PageLayout, AvatarUploader, IntroUploader } from '@/components'; +import { PageLayout, AvatarUploader, IntroUploader, NicknameEditor } from '@/components'; import { useLoc } from '@/hooks'; import { motion, type Variants } from 'framer-motion'; @@ -29,6 +29,18 @@ export default function UserProfilePage() { variants={slideInUp} >
+ {/* Nickname Card */} +
+
+
+ {loc('Nickname', 'Nickname')} +
+
+
+ +
+
+ {/* Avatar Settings Card */}
diff --git a/src/types/user.ts b/src/types/user.ts index 5fcec88..99fd283 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -6,5 +6,7 @@ export interface UserInfo { username: string; email?: string; + joinDate: string; + nickname: string; // 根据实际API返回添加更多字段 } From 8e3e4eebebcd939909b8baf922f697b4024090e2 Mon Sep 17 00:00:00 2001 From: SparkBarry Date: Sun, 1 Nov 2026 02:26:30 -0500 Subject: [PATCH 2/2] Revert "feat: nickname" This reverts commit dc09105504fa7df3be23e79addacad2fd2a057d4. --- src/components/index.ts | 1 - src/components/user/NicknameEditor.tsx | 75 -------------------------- src/config/api.ts | 1 - src/pages/user/ProfilePage.tsx | 14 +---- src/types/user.ts | 2 - 5 files changed, 1 insertion(+), 92 deletions(-) delete mode 100644 src/components/user/NicknameEditor.tsx diff --git a/src/components/index.ts b/src/components/index.ts index 61e979b..99e68a0 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -10,7 +10,6 @@ export { default as Logout } from './user/Logout'; export { default as ChartUploader } from './user/ChartUploader'; export { default as AvatarUploader } from './user/AvatarUploader'; export { default as IntroUploader } from './user/IntroUploader'; -export { default as NicknameEditor } from './user/NicknameEditor'; // UI组件 export { default as MajdataLogo } from './header/MajdataLogo'; diff --git a/src/components/user/NicknameEditor.tsx b/src/components/user/NicknameEditor.tsx deleted file mode 100644 index 133287c..0000000 --- a/src/components/user/NicknameEditor.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { useState } from 'react'; -import { toast } from 'react-toastify'; -import axios from 'axios'; -import { endpoints } from '@/config/api'; -import { useLoc, useUserContext } from '@/hooks'; -import { getDisplayMessage } from '@/utils'; - -export default function NicknameEditor() { - const loc = useLoc(); - const { user } = useUserContext(); - const [nickname, setNickname] = useState(user?.nickname || ''); - const [isUploading, setIsUploading] = useState(false); - - async function onSubmit(event: React.FormEvent) { - event.preventDefault(); - - const formData = new FormData(event.currentTarget); - const content = formData.get('content') as string; - - if (!content || content.trim() === '') { - toast.error(loc('NicknameRequired', 'Please enter a nickname')); - return; - } - - const uploading = toast.loading(loc('Uploading'), { - hideProgressBar: false, - }); - - setIsUploading(true); - - try { - await axios.post(endpoints.account.nickname, { content }, { - withCredentials: true, - }); - toast.success(loc('UploadSuccess', 'Nickname updated successfully')); - } catch (e: unknown) { - const error = e as { response?: { data?: unknown }; message?: string }; - const message = getDisplayMessage( - error.response?.data ?? error.message, - loc('UploadFailed', 'Update failed'), - ); - toast.error(message, { autoClose: false }); - } finally { - toast.done(uploading); - setIsUploading(false); - } - } - - return ( -
-

- {loc('NicknameHint', 'Your display name shown across the site.')} -

-
- setNickname(e.target.value)} - disabled={isUploading} - /> - -
-
- ); -} diff --git a/src/config/api.ts b/src/config/api.ts index c41f335..c0f9a59 100644 --- a/src/config/api.ts +++ b/src/config/api.ts @@ -23,7 +23,6 @@ export const endpoints = { diff: `${apiroot3}/account/favorite/collection/diff`, }, account: { - nickname: `${apiroot3}/account/nickname/`, info: `${apiroot3}/account/info/`, login: `${apiroot3}/account/Login`, logout: `${apiroot3}/account/Logout`, diff --git a/src/pages/user/ProfilePage.tsx b/src/pages/user/ProfilePage.tsx index f2c2380..e01b407 100644 --- a/src/pages/user/ProfilePage.tsx +++ b/src/pages/user/ProfilePage.tsx @@ -1,4 +1,4 @@ -import { PageLayout, AvatarUploader, IntroUploader, NicknameEditor } from '@/components'; +import { PageLayout, AvatarUploader, IntroUploader } from '@/components'; import { useLoc } from '@/hooks'; import { motion, type Variants } from 'framer-motion'; @@ -29,18 +29,6 @@ export default function UserProfilePage() { variants={slideInUp} >
- {/* Nickname Card */} -
-
-
- {loc('Nickname', 'Nickname')} -
-
-
- -
-
- {/* Avatar Settings Card */}
diff --git a/src/types/user.ts b/src/types/user.ts index 99fd283..5fcec88 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -6,7 +6,5 @@ export interface UserInfo { username: string; email?: string; - joinDate: string; - nickname: string; // 根据实际API返回添加更多字段 }