From 6de8d7467ead2ad80af4d0f229ae0dcdefeffb4a Mon Sep 17 00:00:00 2001 From: pa Date: Thu, 30 Oct 2025 15:04:15 +0900 Subject: [PATCH] improve user dialog ui --- src/components/AvatarInfo.vue | 14 +- .../UserDialog/EditNoteAndMemoDialog.vue | 141 +++++++++++++++++ .../dialogs/UserDialog/UserActionDropdown.vue | 1 + .../dialogs/UserDialog/UserDialog.vue | 145 +++--------------- .../dialogs/UserDialog/UserSummaryHeader.vue | 45 +++--- src/shared/utils/memos.js | 4 +- 6 files changed, 203 insertions(+), 147 deletions(-) create mode 100644 src/components/dialogs/UserDialog/EditNoteAndMemoDialog.vue diff --git a/src/components/AvatarInfo.vue b/src/components/AvatarInfo.vue index 66573764..4d96f9c9 100644 --- a/src/components/AvatarInfo.vue +++ b/src/components/AvatarInfo.vue @@ -1,13 +1,13 @@ diff --git a/src/components/dialogs/UserDialog/UserActionDropdown.vue b/src/components/dialogs/UserDialog/UserActionDropdown.vue index f71bccf1..3e199c8c 100644 --- a/src/components/dialogs/UserDialog/UserActionDropdown.vue +++ b/src/components/dialogs/UserDialog/UserActionDropdown.vue @@ -120,6 +120,7 @@ {{ t('dialog.user.actions.group_moderation') }} + Edit Note and Memo {{ t('dialog.user.actions.show_avatar_author') }} diff --git a/src/components/dialogs/UserDialog/UserDialog.vue b/src/components/dialogs/UserDialog/UserDialog.vue index e9c217e7..4b77f7b6 100644 --- a/src/components/dialogs/UserDialog/UserDialog.vue +++ b/src/components/dialogs/UserDialog/UserDialog.vue @@ -4,7 +4,8 @@ class="x-dialog x-user-dialog" v-model="userDialog.visible" :show-close="false" - width="770px"> + top="10vh" + width="940px">
-
-
+
+
{{ t('dialog.user.info.note') }} - -
- - - -
+
{{ userDialog.note }}
-
-
+
+
{{ t('dialog.user.info.memo') }} - +
{{ userDialog.memo }}
@@ -236,7 +203,7 @@ font-size: 12px; white-space: pre-wrap; margin: 0 0.5em 0 0; - max-height: 40vh; + max-height: 210px; overflow-y: auto; " >{{ userDialog.ref.bio || '-' }} - + + + + + + @@ -1240,7 +1206,6 @@ Download, Edit, Loading, - More, MoreFilled, Refresh, Setting, @@ -1265,8 +1230,6 @@ openExternalLink, parseLocation, refreshInstancePlayerCount, - replaceBioSymbols, - saveUserMemo, timeToText, userImage, userOnlineFor, @@ -1315,6 +1278,7 @@ const SendInviteRequestDialog = defineAsyncComponent(() => import('./SendInviteRequestDialog.vue')); const SocialStatusDialog = defineAsyncComponent(() => import('./SocialStatusDialog.vue')); const ModerateGroupDialog = defineAsyncComponent(() => import('../ModerateGroupDialog.vue')); + const EditNoteAndMemoDialog = defineAsyncComponent(() => import('./EditNoteAndMemoDialog.vue')); const { t } = useI18n(); @@ -1343,7 +1307,6 @@ leaveGroup, leaveGroupPrompt, setGroupVisibility, - setGroupSubscription, handleGroupList, showModerateGroupDialog } = useGroupStore(); @@ -1442,6 +1405,8 @@ showingTranslated: false }); + const isEditNoteAndMemoDialogVisible = ref(false); + const userDialogAvatars = computed(() => { const { avatars, avatarReleaseStatus } = userDialog.value; if (avatarReleaseStatus === 'public' || avatarReleaseStatus === 'private') { @@ -1493,11 +1458,6 @@ return t('dialog.user.status.offline'); } - function cleanNote(note) { - // remove newlines because they aren't supported - userDialog.value.note = note.replace(/[\r\n]/g, ''); - } - function handleUserDialogTab(tabName) { const userId = userDialog.value.id; if (tabName === 'Groups') { @@ -1799,6 +1759,8 @@ } else { setPlayerModeration(D.id, 5); } + } else if (command === 'Edit Note Memo') { + isEditNoteAndMemoDialogVisible.value = true; } else { const i18nPreFix = 'dialog.user.actions.'; const formattedCommand = command.toLowerCase().replace(/ /g, '_'); @@ -2228,63 +2190,6 @@ userDialog.value.isFavoriteWorldsLoading = false; } - function checkNote(ref, note) { - if (ref.note !== note) { - addNote(ref.id, note); - } - } - - async function addNote(userId, note) { - if (userDialog.value.id === userId) { - userDialog.value.noteSaving = true; - } - const args = await miscRequest.saveNote({ - targetUserId: userId, - note - }); - handleNoteChange(args); - } - - function handleNoteChange(args) { - let _note = ''; - let targetUserId = ''; - if (typeof args.json !== 'undefined') { - _note = replaceBioSymbols(args.json.note); - } - if (typeof args.params !== 'undefined') { - targetUserId = args.params.targetUserId; - } - if (targetUserId === userDialog.value.id) { - if (_note === args.params.note) { - userDialog.value.noteSaving = false; - userDialog.value.note = _note; - } else { - // response is cached sadge :< - userRequest.getUser({ userId: targetUserId }); - } - } - const ref = cachedUsers.get(targetUserId); - if (typeof ref !== 'undefined') { - ref.note = _note; - } - } - - async function deleteNote(userId) { - if (userDialog.value.id === userId) { - userDialog.value.noteSaving = true; - } - const args = await miscRequest.saveNote({ - targetUserId: userId, - note: '' - }); - handleNoteChange(args); - } - - function onUserMemoChange() { - const D = userDialog.value; - saveUserMemo(D.id, D.memo); - } - function showBioDialog() { const D = bioDialog.value; D.bio = currentUser.value.bio; diff --git a/src/components/dialogs/UserDialog/UserSummaryHeader.vue b/src/components/dialogs/UserDialog/UserSummaryHeader.vue index 54e55127..df14ad2b 100644 --- a/src/components/dialogs/UserDialog/UserSummaryHeader.vue +++ b/src/components/dialogs/UserDialog/UserSummaryHeader.vue @@ -82,6 +82,20 @@ style="margin-right: 5px; margin-top: 5px"> {{ userDialog.ref.$trustLevel }} + + + + - {{ - t('dialog.user.tags.friend_no', { - number: userDialog.ref.$friendNumber ? userDialog.ref.$friendNumber : '' - }) - }} + + {{ userDialog.ref.$friendNumber ? userDialog.ref.$friendNumber : '' }} {{ t('dialog.user.tags.vrchat_team') }} + - PC + - Android + iOS + > {{ userDialog.ref.$platform }} - - - - + } @@ -43,6 +43,7 @@ async function getUserMemo(userId) { */ async function saveUserMemo(id, memo) { const friendStore = useFriendStore(); + const userStore = useUserStore(); if (memo) { await database.setUserMemo({ userId: id, @@ -61,6 +62,7 @@ async function saveUserMemo(id, memo) { } else { ref.$nickName = ''; } + userStore.userDialog.memo = memo; } }