From bbcfe3e3246ddc81ec2527be5f6a987a7ce7ffa2 Mon Sep 17 00:00:00 2001 From: wzhqwq Date: Thu, 14 Oct 2021 22:10:22 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BF=AE=E6=94=B9=E6=98=B5?= =?UTF-8?q?=E7=A7=B0=E5=8A=9F=E8=83=BD=EF=BC=88=E5=B0=B1=E9=9A=8F=E4=BE=BF?= =?UTF-8?q?=E5=81=9A=E4=BA=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/AvatarUnit/AvatarUnit.css | 29 ++++++++ src/components/AvatarUnit/AvatarUnit.js | 46 +++++++++++-- src/components/UserControl/UserControl.js | 80 ++++++++++++----------- src/helper/apis.js | 1 + 4 files changed, 112 insertions(+), 44 deletions(-) diff --git a/src/components/AvatarUnit/AvatarUnit.css b/src/components/AvatarUnit/AvatarUnit.css index 37d1d78..ecd990e 100644 --- a/src/components/AvatarUnit/AvatarUnit.css +++ b/src/components/AvatarUnit/AvatarUnit.css @@ -119,4 +119,33 @@ .btn-close > svg { width: 16px; height: 16px; +} + +.nickname-edit { + margin-top: 5px; + margin-left: -1px; + width: 360px; + padding: 4px; + border-radius: 8px; + background-color: #f7f7f7; + border: 1px solid #e5e5e5; + display: flex; +} +.nickname-edit > label { + line-height: 1.7em; + font-size: 18px; +} +.nickname-edit > input { + flex-grow: 1; + border: none; + background-color: #eee; + border-radius: 6px; + margin-right: 10px; + padding: 0 5px; + font-size: 16px; +} +.nickname-edit > .btn { + padding: .1em 0; + width: 60px; + border-radius: 6px; } \ No newline at end of file diff --git a/src/components/AvatarUnit/AvatarUnit.js b/src/components/AvatarUnit/AvatarUnit.js index 0219817..bfdba74 100644 --- a/src/components/AvatarUnit/AvatarUnit.js +++ b/src/components/AvatarUnit/AvatarUnit.js @@ -1,11 +1,11 @@ -import { useState, useCallback, useRef } from "react"; +import { useState, useCallback, useRef, useEffect } from "react"; import Spinner from '../Spinner/Spinner'; import './AvatarUnit.css'; -import { multiFormPost } from '../../helper/axios'; +import { multiFormPost, post } from '../../helper/axios'; import { alert } from '../../helper/alert'; import { apis } from "../../helper/apis"; -export default function AvatarUnit({ avatar, onChangeAvatar, showTip }) { +export default function AvatarUnit({ avatar, nickname, onChangeAvatar, showTip }) { const [showBubble, setShowBubble] = useState(showTip); const [showUpload, setShowUpload] = useState(false); const [loading, setLoading] = useState(false); @@ -14,9 +14,15 @@ export default function AvatarUnit({ avatar, onChangeAvatar, showTip }) { const [uploaded, setUploaded] = useState(false); const [dataURL, setDataURL] = useState(null); const [file, setFile] = useState(null); + const [nicknameNow, setNicknameNow] = useState(''); + const [nicknameUploading, setNicknameUploading] = useState(false); const inputRef = useRef(null); + useEffect(() => { + setNicknameNow(nickname || ''); + }, [nickname]); + // useEffect(() => { // setShowBubble(!localStorage.getItem("avatarTipShown")); // localStorage.setItem("avatarTipShown", true); @@ -66,20 +72,33 @@ export default function AvatarUnit({ avatar, onChangeAvatar, showTip }) { multiFormPost(apis.uploadAvatar, formData).then(data => { if (data.networkStatus === 200 && data.status) { setUploaded(true); - setUploading(false); setTimeout(() => { handleClose(); onChangeAvatar(data.data); }, 800); } else { - alert(data.data); - setUploading(false); + alert('头像上传失败:' + data.data); } + setUploading(false); }); } }, [file, onChangeAvatar]); + const handleChangeNickname = useCallback(() => { + setNicknameUploading(true); + post(apis.updateNickname, { nickname: nicknameNow }).then(data => { + if (data.networkStatus === 200 && data.status) { + alert('昵称已修改为:' + nicknameNow); + setNicknameNow(nicknameNow); + } + else { + alert('修改失败:' + data.data.map(item => item.msg).join(',')); + } + setNicknameUploading(false); + }); + }, [nicknameNow]); + return (
user avatar { @@ -96,7 +115,7 @@ export default function AvatarUnit({ avatar, onChangeAvatar, showTip }) {
- 点击图标修改头像 + 点击图标修改头像和昵称
@@ -129,6 +148,19 @@ export default function AvatarUnit({ avatar, onChangeAvatar, showTip }) {
+
+ + setNicknameNow(e.target.value)} /> + +
); diff --git a/src/components/UserControl/UserControl.js b/src/components/UserControl/UserControl.js index c27c825..1aa8ddc 100644 --- a/src/components/UserControl/UserControl.js +++ b/src/components/UserControl/UserControl.js @@ -25,6 +25,7 @@ export default function UserControl({ pageAuthLevel, buttonOnly }) { name: data.realName, role: data.role, avatar: data.avatar, + nickname: data.nickname }); }); return; @@ -46,44 +47,49 @@ export default function UserControl({ pageAuthLevel, buttonOnly }) { {({ userData, setUserData }) => (
- {buttonOnly || ( - - { - userData.role === -1 - ? ( - - ) - : userData.role > 0 && ( - setUserData({ ...userData, avatar: url })} - showTip={!userData.avatar} - /> - ) - } - { - userData.role !== 0 && ( -
{userData.name}
- ) - } -
- )} - { - userData.role === 2 && pageAuthLevel !== 2 && ( - + userData.role === -1 + ? ( + + ) : ( + + {buttonOnly || ( + + { + userData.role > 0 && ( + setUserData({ ...userData, avatar: url })} + showTip={!userData.avatar} + /> + ) + } + { + userData.role !== 0 && ( +
{userData.name}
+ ) + } +
+ )} + + { + userData.role === 2 && pageAuthLevel !== 2 && ( + + ) + } +
) }
diff --git a/src/helper/apis.js b/src/helper/apis.js index fb8b34e..1c0462a 100644 --- a/src/helper/apis.js +++ b/src/helper/apis.js @@ -5,6 +5,7 @@ export const apis = { login: backEndBaseURL + "/user/login", getProfile: backEndBaseURL + "/user/me", uploadAvatar: backEndBaseURL + "/user/uploadAvatar", + updateNickname: backEndBaseURL + "/user/updateNickname", submitMessage: backEndBaseURL + "/post/submit", listEssence: backEndBaseURL + "/post/listPublished?page=1",