mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-05 06:16:05 +02:00
UI Refresh
This commit is contained in:
@@ -4,7 +4,8 @@
|
||||
class="x-dialog x-avatar-dialog"
|
||||
v-model="avatarDialog.visible"
|
||||
:show-close="false"
|
||||
width="700px">
|
||||
top="10vh"
|
||||
width="930px">
|
||||
<div v-loading="avatarDialog.loading">
|
||||
<div style="display: flex">
|
||||
<img
|
||||
@@ -246,11 +247,7 @@
|
||||
style="margin-left: 5px"
|
||||
@click="selectAvatarWithoutConfirmation(avatarDialog.id)"></el-button>
|
||||
</el-tooltip>
|
||||
<el-dropdown
|
||||
trigger="click"
|
||||
size="small"
|
||||
style="margin-left: 5px"
|
||||
@command="avatarDialogCommand">
|
||||
<el-dropdown trigger="click" style="margin-left: 5px" @command="avatarDialogCommand">
|
||||
<el-button
|
||||
:type="avatarDialog.isBlocked ? 'danger' : 'default'"
|
||||
:icon="MoreFilled"
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
<style scoped>
|
||||
.img-size {
|
||||
width: 500px;
|
||||
height: 375px;
|
||||
|
||||
@@ -68,12 +68,12 @@
|
||||
<span
|
||||
v-if="avatar.releaseStatus === 'public'"
|
||||
class="extra"
|
||||
style="color: #67c23a"
|
||||
style="color: var(--el-color-success)"
|
||||
v-text="avatar.releaseStatus"></span>
|
||||
<span
|
||||
v-else-if="avatar.releaseStatus === 'private'"
|
||||
class="extra"
|
||||
style="color: #f56c6c"
|
||||
style="color: var(--el-color-danger)"
|
||||
v-text="avatar.releaseStatus"></span>
|
||||
<span v-else class="extra" v-text="avatar.releaseStatus"></span>
|
||||
<span class="extra" v-text="avatarTagStrings.get(avatar.id)"></span>
|
||||
|
||||
@@ -329,8 +329,9 @@
|
||||
);
|
||||
|
||||
const openFolderEditor = (index) => {
|
||||
folderEditor.isEditing = !!index;
|
||||
folderEditor.index = folderEditor.isEditing ? index : -1;
|
||||
const isEditing = index !== undefined && index !== null;
|
||||
folderEditor.isEditing = isEditing;
|
||||
folderEditor.index = isEditing ? index : -1;
|
||||
if (folderEditor.isEditing) {
|
||||
const entry = localLayout.value[index];
|
||||
folderEditor.data = {
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
:z-index="groupDialogIndex"
|
||||
v-model="groupDialog.visible"
|
||||
:show-close="false"
|
||||
width="770px"
|
||||
top="10vh"
|
||||
width="930px"
|
||||
class="x-dialog x-group-dialog">
|
||||
<div v-loading="groupDialog.loading" class="group-body">
|
||||
<div style="display: flex">
|
||||
@@ -258,11 +259,7 @@
|
||||
@click="joinGroup(groupDialog.id)"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-dropdown
|
||||
trigger="click"
|
||||
size="small"
|
||||
style="margin-left: 5px"
|
||||
@command="groupDialogCommand">
|
||||
<el-dropdown trigger="click" style="margin-left: 5px" @command="groupDialogCommand">
|
||||
<el-button
|
||||
:type="groupDialog.ref.membershipStatus === 'userblocked' ? 'danger' : 'default'"
|
||||
:icon="MoreFilled"
|
||||
@@ -616,7 +613,8 @@
|
||||
<span class="name">{{ t('dialog.group.info.links') }}</span>
|
||||
<div
|
||||
v-if="groupDialog.ref.links && groupDialog.ref.links.length > 0"
|
||||
style="margin-top: 5px">
|
||||
style="margin-top: 5px"
|
||||
class="flex">
|
||||
<template v-for="(link, index) in groupDialog.ref.links" :key="index">
|
||||
<el-tooltip v-if="link">
|
||||
<template #content>
|
||||
@@ -1086,7 +1084,6 @@
|
||||
<el-tabs
|
||||
v-model="groupDialogGalleryCurrentName"
|
||||
v-loading="isGroupGalleryLoading"
|
||||
type="card"
|
||||
style="margin-top: 10px">
|
||||
<template v-for="(gallery, index) in groupDialog.ref.galleries" :key="index">
|
||||
<el-tab-pane>
|
||||
@@ -1839,7 +1836,7 @@
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
<style scoped>
|
||||
.time-group-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
width="90vw">
|
||||
<div>
|
||||
<h3>{{ groupMemberModeration.groupRef.name }}</h3>
|
||||
<el-tabs type="card" style="height: 100%">
|
||||
<el-tabs style="height: 100%">
|
||||
<el-tab-pane :label="t('dialog.group_member_moderation.members')">
|
||||
<div style="margin-top: 10px">
|
||||
<el-button
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
:title="t('dialog.new_instance.header')"
|
||||
width="650px"
|
||||
append-to-body>
|
||||
<el-tabs v-model="newInstanceDialog.selectedTab" type="card" @tab-click="newInstanceTabClick">
|
||||
<el-tabs v-model="newInstanceDialog.selectedTab" @tab-click="newInstanceTabClick">
|
||||
<el-tab-pane name="Normal" :label="t('dialog.new_instance.normal')">
|
||||
<el-form :model="newInstanceDialog" label-width="150px">
|
||||
<el-form-item :label="t('dialog.new_instance.access_type')">
|
||||
|
||||
@@ -63,14 +63,7 @@
|
||||
</div>
|
||||
|
||||
<template #footer>
|
||||
<el-button
|
||||
size="small"
|
||||
@click="
|
||||
redirectToToolsTab();
|
||||
showGalleryDialog();
|
||||
"
|
||||
>{{ t('dialog.boop_dialog.emoji_manager') }}</el-button
|
||||
>
|
||||
<el-button size="small" @click="showGalleryPage">{{ t('dialog.boop_dialog.emoji_manager') }}</el-button>
|
||||
<el-button size="small" @click="closeDialog">{{ t('dialog.boop_dialog.cancel') }}</el-button>
|
||||
<el-button size="small" :disabled="!sendBoopDialog.userId" @click="sendBoop">{{
|
||||
t('dialog.boop_dialog.send')
|
||||
@@ -87,7 +80,6 @@
|
||||
import { notificationRequest, userRequest } from '../../api';
|
||||
import { miscRequest } from '../../api';
|
||||
import { photonEmojis } from '../../shared/constants/photon.js';
|
||||
import { redirectToToolsTab } from '../../shared/utils/base/ui';
|
||||
import { useGalleryStore } from '../../stores';
|
||||
import { useNotificationStore } from '../../stores';
|
||||
import { useUserStore } from '../../stores/user.js';
|
||||
@@ -98,7 +90,7 @@
|
||||
|
||||
const { sendBoopDialog } = storeToRefs(useUserStore());
|
||||
const { notificationTable } = storeToRefs(useNotificationStore());
|
||||
const { showGalleryDialog, refreshEmojiTable } = useGalleryStore();
|
||||
const { showGalleryPage, refreshEmojiTable } = useGalleryStore();
|
||||
const { emojiTable } = storeToRefs(useGalleryStore());
|
||||
const { isLocalUserVrcPlusSupporter } = storeToRefs(useUserStore());
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
@click="userDialogCommand('Add Favorite')"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-dropdown trigger="click" size="small" @command="onCommand">
|
||||
<el-dropdown trigger="click" @command="onCommand">
|
||||
<el-button
|
||||
:type="
|
||||
userDialog.incomingRequest || userDialog.outgoingRequest
|
||||
@@ -132,7 +132,7 @@
|
||||
:icon="CircleCheck"
|
||||
command="Moderation Unblock"
|
||||
divided
|
||||
style="color: #f56c6c">
|
||||
style="color: var(--el-color-danger)">
|
||||
{{ t('dialog.user.actions.moderation_unblock') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
@@ -147,7 +147,7 @@
|
||||
v-if="userDialog.isMute"
|
||||
:icon="Microphone"
|
||||
command="Moderation Unmute"
|
||||
style="color: #f56c6c">
|
||||
style="color: var(--el-color-danger)">
|
||||
{{ t('dialog.user.actions.moderation_unmute') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
@@ -161,7 +161,7 @@
|
||||
v-if="userDialog.isMuteChat"
|
||||
:icon="ChatLineRound"
|
||||
command="Moderation Enable Chatbox"
|
||||
style="color: #f56c6c">
|
||||
style="color: var(--el-color-danger)">
|
||||
{{ t('dialog.user.actions.moderation_enable_chatbox') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-else :icon="ChatDotRound" command="Moderation Disable Chatbox">
|
||||
@@ -179,7 +179,7 @@
|
||||
v-if="userDialog.isInteractOff"
|
||||
:icon="Pointer"
|
||||
command="Moderation Enable Avatar Interaction"
|
||||
style="color: #f56c6c">
|
||||
style="color: var(--el-color-danger)">
|
||||
{{ t('dialog.user.actions.moderation_enable_avatar_interaction') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-else :icon="CircleClose" command="Moderation Disable Avatar Interaction">
|
||||
@@ -189,7 +189,11 @@
|
||||
{{ t('dialog.user.actions.report_hacking') }}
|
||||
</el-dropdown-item>
|
||||
<template v-if="userDialog.isFriend">
|
||||
<el-dropdown-item :icon="Delete" command="Unfriend" divided style="color: #f56c6c">
|
||||
<el-dropdown-item
|
||||
:icon="Delete"
|
||||
command="Unfriend"
|
||||
divided
|
||||
style="color: var(--el-color-danger)">
|
||||
{{ t('dialog.user.actions.unfriend') }}
|
||||
</el-dropdown-item>
|
||||
</template>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
v-model="userDialog.visible"
|
||||
:show-close="false"
|
||||
top="10vh"
|
||||
width="940px">
|
||||
width="930px">
|
||||
<div v-loading="userDialog.loading">
|
||||
<UserSummaryHeader
|
||||
:get-user-state-text="getUserStateText"
|
||||
@@ -252,7 +252,7 @@
|
||||
style="margin-left: 5px; padding: 0"
|
||||
@click="showBioDialog"></el-button>
|
||||
</div>
|
||||
<div style="margin-top: 5px" class="flex">
|
||||
<div style="margin-top: 5px" class="flex items-center">
|
||||
<el-tooltip v-for="(link, index) in userDialog.ref.bioLinks" :key="index">
|
||||
<template #content>
|
||||
<span v-text="link"></span>
|
||||
@@ -426,10 +426,13 @@
|
||||
<div class="x-friend-item" @click="toggleAvatarCopying">
|
||||
<div class="detail">
|
||||
<span class="name">{{ t('dialog.user.info.avatar_cloning') }}</span>
|
||||
<span v-if="currentUser.allowAvatarCopying" class="extra" style="color: #67c23a">{{
|
||||
t('dialog.user.info.avatar_cloning_allow')
|
||||
}}</span>
|
||||
<span v-else class="extra" style="color: #f56c6c">{{
|
||||
<span
|
||||
v-if="currentUser.allowAvatarCopying"
|
||||
class="extra"
|
||||
style="color: var(--el-color-success)"
|
||||
>{{ t('dialog.user.info.avatar_cloning_allow') }}</span
|
||||
>
|
||||
<span v-else class="extra" style="color: var(--el-color-danger)">{{
|
||||
t('dialog.user.info.avatar_cloning_deny')
|
||||
}}</span>
|
||||
</div>
|
||||
@@ -437,10 +440,13 @@
|
||||
<div class="x-friend-item" @click="toggleAllowBooping">
|
||||
<div class="detail">
|
||||
<span class="name">{{ t('dialog.user.info.booping') }}</span>
|
||||
<span v-if="currentUser.isBoopingEnabled" class="extra" style="color: #67c23a">{{
|
||||
t('dialog.user.info.avatar_cloning_allow')
|
||||
}}</span>
|
||||
<span v-else class="extra" style="color: #f56c6c">{{
|
||||
<span
|
||||
v-if="currentUser.isBoopingEnabled"
|
||||
class="extra"
|
||||
style="color: var(--el-color-success)"
|
||||
>{{ t('dialog.user.info.avatar_cloning_allow') }}</span
|
||||
>
|
||||
<span v-else class="extra" style="color: var(--el-color-danger)">{{
|
||||
t('dialog.user.info.avatar_cloning_deny')
|
||||
}}</span>
|
||||
</div>
|
||||
@@ -451,10 +457,10 @@
|
||||
<span
|
||||
v-if="!currentUser.hasSharedConnectionsOptOut"
|
||||
class="extra"
|
||||
style="color: #67c23a"
|
||||
style="color: var(--el-color-success)"
|
||||
>{{ t('dialog.user.info.avatar_cloning_allow') }}</span
|
||||
>
|
||||
<span v-else class="extra" style="color: #f56c6c">{{
|
||||
<span v-else class="extra" style="color: var(--el-color-danger)">{{
|
||||
t('dialog.user.info.avatar_cloning_deny')
|
||||
}}</span>
|
||||
</div>
|
||||
@@ -467,10 +473,10 @@
|
||||
<span
|
||||
v-if="userDialog.ref.allowAvatarCopying"
|
||||
class="extra"
|
||||
style="color: #67c23a"
|
||||
style="color: var(--el-color-success)"
|
||||
>{{ t('dialog.user.info.avatar_cloning_allow') }}</span
|
||||
>
|
||||
<span v-else class="extra" style="color: #f56c6c">{{
|
||||
<span v-else class="extra" style="color: var(--el-color-danger)">{{
|
||||
t('dialog.user.info.avatar_cloning_deny')
|
||||
}}</span>
|
||||
</div>
|
||||
@@ -634,9 +640,10 @@
|
||||
t('dialog.user.groups.total_count', { count: userGroups.groups.length })
|
||||
}}</span>
|
||||
<template v-if="userDialogGroupEditMode">
|
||||
<span style="margin-left: 10px; color: #909399; font-size: 10px">{{
|
||||
t('dialog.user.groups.hold_shift')
|
||||
}}</span>
|
||||
<span
|
||||
style="margin-left: 10px; color: var(--el-text-color-secondary); font-size: 10px"
|
||||
>{{ t('dialog.user.groups.hold_shift') }}</span
|
||||
>
|
||||
</template>
|
||||
</div>
|
||||
<div style="display: flex; align-items: center">
|
||||
@@ -872,7 +879,7 @@
|
||||
size="small"
|
||||
:icon="Close"
|
||||
circle
|
||||
style="color: #f56c6c; margin-left: 5px"
|
||||
style="color: var(--el-color-danger); margin-left: 5px"
|
||||
@click.stop="leaveGroup(group.id)">
|
||||
</el-button>
|
||||
<el-button
|
||||
@@ -892,7 +899,7 @@
|
||||
<span style="font-weight: bold; font-size: 16px">{{
|
||||
t('dialog.user.groups.own_groups')
|
||||
}}</span>
|
||||
<span style="color: #909399; font-size: 12px; margin-left: 5px"
|
||||
<span style="color: var(--el-text-color-secondary); font-size: 12px; margin-left: 5px"
|
||||
>{{ userGroups.ownGroups.length }}/{{
|
||||
cachedConfig?.constants?.GROUPS?.MAX_OWNED
|
||||
}}</span
|
||||
@@ -936,9 +943,10 @@
|
||||
<span style="font-weight: bold; font-size: 16px">{{
|
||||
t('dialog.user.groups.mutual_groups')
|
||||
}}</span>
|
||||
<span style="color: #909399; font-size: 12px; margin-left: 5px">{{
|
||||
userGroups.mutualGroups.length
|
||||
}}</span>
|
||||
<span
|
||||
style="color: var(--el-text-color-secondary); font-size: 12px; margin-left: 5px"
|
||||
>{{ userGroups.mutualGroups.length }}</span
|
||||
>
|
||||
<div
|
||||
class="x-friend-list"
|
||||
style="margin-top: 10px; margin-bottom: 15px; min-height: 60px">
|
||||
@@ -978,7 +986,7 @@
|
||||
<span style="font-weight: bold; font-size: 16px">{{
|
||||
t('dialog.user.groups.groups')
|
||||
}}</span>
|
||||
<span style="color: #909399; font-size: 12px; margin-left: 5px">
|
||||
<span style="color: var(--el-text-color-secondary); font-size: 12px; margin-left: 5px">
|
||||
{{ userGroups.remainingGroups.length }}
|
||||
<template v-if="currentUser.id === userDialog.id">
|
||||
/
|
||||
@@ -1143,7 +1151,12 @@
|
||||
:class="userFavoriteWorldsStatus(list[1])">
|
||||
</i>
|
||||
<span style="font-weight: bold; font-size: 14px" v-text="list[0]"></span>
|
||||
<span style="color: #909399; font-size: 10px; margin-left: 5px"
|
||||
<span
|
||||
style="
|
||||
color: var(--el-text-color-secondary);
|
||||
font-size: 10px;
|
||||
margin-left: 5px;
|
||||
"
|
||||
>{{ list[2].length }}/{{ favoriteLimits.maxFavoritesPerGroup.world }}</span
|
||||
>
|
||||
</span>
|
||||
@@ -1272,13 +1285,13 @@
|
||||
<span
|
||||
v-if="avatar.releaseStatus === 'public'"
|
||||
class="extra"
|
||||
style="color: #67c23a"
|
||||
style="color: var(--el-color-success)"
|
||||
v-text="avatar.releaseStatus">
|
||||
</span>
|
||||
<span
|
||||
v-else-if="avatar.releaseStatus === 'private'"
|
||||
class="extra"
|
||||
style="color: #f56c6c"
|
||||
style="color: var(--el-color-danger)"
|
||||
v-text="avatar.releaseStatus">
|
||||
</span>
|
||||
<span v-else class="extra" v-text="avatar.releaseStatus"></span>
|
||||
@@ -1400,11 +1413,11 @@
|
||||
userRequest,
|
||||
worldRequest
|
||||
} from '../../../api';
|
||||
import { getNextDialogIndex, redirectToToolsTab } from '../../../shared/utils/base/ui';
|
||||
import { processBulk, request } from '../../../service/request';
|
||||
import { userDialogGroupSortingOptions, userDialogMutualFriendSortingOptions } from '../../../shared/constants';
|
||||
import { userDialogWorldOrderOptions, userDialogWorldSortingOptions } from '../../../shared/constants/';
|
||||
import { database } from '../../../service/database';
|
||||
import { getNextDialogIndex } from '../../../shared/utils/base/ui';
|
||||
|
||||
import SendInviteDialog from '../InviteDialog/SendInviteDialog.vue';
|
||||
import UserSummaryHeader from './UserSummaryHeader.vue';
|
||||
@@ -1455,7 +1468,7 @@
|
||||
const { refreshInviteMessageTableData } = useInviteStore();
|
||||
const { friendLogTable } = storeToRefs(useFriendStore());
|
||||
const { getFriendRequest, handleFriendDelete } = useFriendStore();
|
||||
const { clearInviteImageUpload, showFullscreenImageDialog } = useGalleryStore();
|
||||
const { clearInviteImageUpload, showFullscreenImageDialog, showGalleryPage } = useGalleryStore();
|
||||
|
||||
const { logout } = useAuthStore();
|
||||
const { cachedConfig } = storeToRefs(useAuthStore());
|
||||
@@ -1896,6 +1909,9 @@
|
||||
}
|
||||
} else if (command === 'Previous Instances') {
|
||||
showPreviousInstancesUserDialog(D.ref);
|
||||
} else if (command === 'Manage Gallery') {
|
||||
userDialog.value.visible = false;
|
||||
showGalleryPage();
|
||||
} else if (command === 'Invite To Group') {
|
||||
showInviteGroupDialog('', D.id);
|
||||
} else if (command === 'Send Boop') {
|
||||
|
||||
@@ -316,7 +316,7 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
<style scoped>
|
||||
.img-size {
|
||||
width: 500px;
|
||||
height: 375px;
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
:z-index="worldDialogIndex"
|
||||
class="x-dialog x-world-dialog"
|
||||
v-model="isDialogVisible"
|
||||
top="10vh"
|
||||
:show-close="false"
|
||||
width="770px">
|
||||
width="930px">
|
||||
<div v-loading="worldDialog.loading">
|
||||
<div style="display: flex">
|
||||
<img
|
||||
@@ -204,11 +205,7 @@
|
||||
style="margin-left: 5px"
|
||||
@click="worldDialogCommand('Add Favorite')" />
|
||||
</el-tooltip>
|
||||
<el-dropdown
|
||||
trigger="click"
|
||||
size="small"
|
||||
style="margin-left: 5px"
|
||||
@command="worldDialogCommand">
|
||||
<el-dropdown trigger="click" style="margin-left: 5px" @command="worldDialogCommand">
|
||||
<el-button type="default" :icon="MoreFilled" size="large" circle />
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
@@ -302,7 +299,10 @@
|
||||
command="Delete Persistent Data">
|
||||
{{ t('dialog.world.actions.delete_persistent_data') }}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :icon="Delete" command="Delete" style="color: #f56c6c">
|
||||
<el-dropdown-item
|
||||
:icon="Delete"
|
||||
command="Delete"
|
||||
style="color: var(--el-color-danger)">
|
||||
{{ t('dialog.world.actions.delete') }}
|
||||
</el-dropdown-item>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user