feat(ui): 編輯個人檔案對話框
This commit is contained in:
@@ -3,11 +3,14 @@ export type CallMethod =
|
|||||||
"User.register" |
|
"User.register" |
|
||||||
"User.login" |
|
"User.login" |
|
||||||
|
|
||||||
"User.setNickName" |
|
|
||||||
"User.setUserName" |
|
|
||||||
"User.setAvatar" |
|
"User.setAvatar" |
|
||||||
|
"User.updateProfile" |
|
||||||
"User.getMyInfo" |
|
"User.getMyInfo" |
|
||||||
|
|
||||||
|
"User.getMyContacts" |
|
||||||
|
"User.addContact" |
|
||||||
|
"User.removeContacts" |
|
||||||
|
|
||||||
"Chat.getInfo" |
|
"Chat.getInfo" |
|
||||||
"Chat.sendMessage" |
|
"Chat.sendMessage" |
|
||||||
"Chat.getMessageHistory"
|
"Chat.getMessageHistory"
|
||||||
|
|||||||
@@ -39,20 +39,20 @@ export default function UserProfileDialog({
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
return (
|
const userProfileEditDialogRef = React.useRef<Dialog>(null)
|
||||||
<mdui-dialog close-on-overlay-click close-on-esc ref={userProfileDialogRef}>
|
const editNickNameRef = React.useRef<TextField>(null)
|
||||||
<div style={{
|
const editUserNameRef = React.useRef<TextField>(null)
|
||||||
display: "none"
|
|
||||||
}}>
|
|
||||||
<input type="file" name="選擇頭像" ref={chooseAvatarFileRef}
|
|
||||||
accept="image/*" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
return (<>
|
||||||
|
{
|
||||||
|
// 公用 - 資料卡
|
||||||
|
}
|
||||||
|
<mdui-dialog close-on-overlay-click close-on-esc ref={userProfileDialogRef}>
|
||||||
<div style={{
|
<div style={{
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
}}>
|
}}>
|
||||||
<Avatar src={user?.avatar} text={user?.nickname} avatarRef={editAvatarButtonRef} style={{
|
<Avatar src={user?.avatar} text={user?.nickname} style={{
|
||||||
width: '50px',
|
width: '50px',
|
||||||
height: '50px',
|
height: '50px',
|
||||||
}} />
|
}} />
|
||||||
@@ -70,12 +70,58 @@ export default function UserProfileDialog({
|
|||||||
{!isMySelf && <mdui-list-item icon="edit" rounded>編輯聯絡人訊息</mdui-list-item>}
|
{!isMySelf && <mdui-list-item icon="edit" rounded>編輯聯絡人訊息</mdui-list-item>}
|
||||||
{
|
{
|
||||||
isMySelf && <>
|
isMySelf && <>
|
||||||
<mdui-list-item icon="edit" rounded>編輯資料</mdui-list-item>
|
<mdui-list-item icon="edit" rounded onClick={() => userProfileEditDialogRef.current!.open = true}>編輯資料</mdui-list-item>
|
||||||
<mdui-list-item icon="settings" rounded>賬號設定</mdui-list-item>
|
<mdui-list-item icon="settings" rounded>賬號設定</mdui-list-item>
|
||||||
<mdui-list-item icon="lock" rounded>隱私設定</mdui-list-item>
|
<mdui-list-item icon="lock" rounded>隱私設定</mdui-list-item>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
</mdui-list>
|
</mdui-list>
|
||||||
</mdui-dialog>
|
</mdui-dialog>
|
||||||
)
|
{
|
||||||
|
// 個人資料編輯
|
||||||
|
}
|
||||||
|
<mdui-dialog close-on-overlay-click close-on-esc ref={userProfileEditDialogRef}>
|
||||||
|
<div style={{
|
||||||
|
display: "none"
|
||||||
|
}}>
|
||||||
|
<input type="file" name="選擇頭像" ref={chooseAvatarFileRef}
|
||||||
|
accept="image/*" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style={{
|
||||||
|
display: 'flex',
|
||||||
|
alignItems: 'center',
|
||||||
|
}}>
|
||||||
|
<Avatar src={user?.avatar} text={user?.nickname} avatarRef={editAvatarButtonRef} style={{
|
||||||
|
width: '50px',
|
||||||
|
height: '50px',
|
||||||
|
}} />
|
||||||
|
<mdui-text-field variant="outlined" placeholder="昵稱" ref={editNickNameRef as any} style={{
|
||||||
|
marginLeft: "15px",
|
||||||
|
}} value={user?.nickname}></mdui-text-field>
|
||||||
|
</div>
|
||||||
|
<mdui-divider style={{
|
||||||
|
marginTop: "10px",
|
||||||
|
marginBottom: "10px",
|
||||||
|
}}></mdui-divider>
|
||||||
|
|
||||||
|
<mdui-text-field variant="outlined" label="用戶名" value={user?.username || ''} ref={editUserNameRef as any}></mdui-text-field>
|
||||||
|
|
||||||
|
<mdui-button slot="action" variant="text" onClick={() => userProfileEditDialogRef.current!.open = false}>取消</mdui-button>
|
||||||
|
<mdui-button slot="action" variant="text" onClick={async () => {
|
||||||
|
const re = await Client.invoke("User.updateProfile", {
|
||||||
|
token: data.access_token,
|
||||||
|
nickname: editNickNameRef.current?.value,
|
||||||
|
username: editUserNameRef.current?.value,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (checkApiSuccessOrSncakbar(re, "修改失敗")) return
|
||||||
|
snackbar({
|
||||||
|
message: "修改成功 (刷新頁面以更新)",
|
||||||
|
placement: "top",
|
||||||
|
})
|
||||||
|
userProfileEditDialogRef.current!.open = false
|
||||||
|
}}>更新</mdui-button>
|
||||||
|
</mdui-dialog>
|
||||||
|
</>)
|
||||||
}
|
}
|
||||||
@@ -3,9 +3,8 @@ export type CallMethod =
|
|||||||
"User.register" |
|
"User.register" |
|
||||||
"User.login" |
|
"User.login" |
|
||||||
|
|
||||||
"User.setNickName" |
|
|
||||||
"User.setUserName" |
|
|
||||||
"User.setAvatar" |
|
"User.setAvatar" |
|
||||||
|
"User.updateProfile" |
|
||||||
"User.getMyInfo" |
|
"User.getMyInfo" |
|
||||||
|
|
||||||
"User.getMyContacts" |
|
"User.getMyContacts" |
|
||||||
|
|||||||
@@ -129,9 +129,9 @@ export default class UserApi extends BaseApi {
|
|||||||
code: 200,
|
code: 200,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// 更新昵稱
|
// 更新資料
|
||||||
this.registerEvent("User.setNickName", (args) => {
|
this.registerEvent("User.updateProfile", (args) => {
|
||||||
if (this.checkArgsMissing(args, ['nickname', 'token'])) return {
|
if (this.checkArgsMissing(args, ['token'])) return {
|
||||||
msg: "參數缺失",
|
msg: "參數缺失",
|
||||||
code: 400,
|
code: 400,
|
||||||
}
|
}
|
||||||
@@ -143,27 +143,9 @@ export default class UserApi extends BaseApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const user = User.findById(token.author)
|
const user = User.findById(token.author)
|
||||||
|
if (args.nickname != null)
|
||||||
user!.setNickName(args.nickname as string)
|
user!.setNickName(args.nickname as string)
|
||||||
|
if (args.username != null)
|
||||||
return {
|
|
||||||
msg: "成功",
|
|
||||||
code: 200,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// 更新用戶名
|
|
||||||
this.registerEvent("User.setUserName", (args) => {
|
|
||||||
if (this.checkArgsMissing(args, ['username', 'token'])) return {
|
|
||||||
msg: "參數缺失",
|
|
||||||
code: 400,
|
|
||||||
}
|
|
||||||
|
|
||||||
const token = TokenManager.decode(args.token as string)
|
|
||||||
if (!this.checkToken(token)) return {
|
|
||||||
code: 401,
|
|
||||||
msg: "令牌無效",
|
|
||||||
}
|
|
||||||
|
|
||||||
const user = User.findById(token.author)
|
|
||||||
user!.setUserName(args.username as string)
|
user!.setUserName(args.username as string)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user