feat(account): implement initial skin loading in profile

This commit is contained in:
2025-06-17 14:49:19 +03:00
parent 8f4996fb2b
commit f9e0c068f4
4 changed files with 85 additions and 4 deletions

View File

@@ -71,23 +71,49 @@ const onSkinUpload = async () => {
if (skinViewer) {
skinViewer.loadSkin(URL.createObjectURL(selectedFile.value));
}
await authStore.fetchUserProfile();
} catch (e: any) {
uploadError.value = e.response?.data || "Ошибка при загрузке файла.";
} finally {
isLoading.value = false;
}
};
// --- Логика для 3D-вьювера ---
const skinCanvas = ref<HTMLCanvasElement | null>(null);
let skinViewer: SkinViewer | null = null;
// Инициализация 3D-вьювера при монтировании компонента
onMounted(() => {
if (skinCanvas.value) {
const setupSkinViewer = () => {
if (skinCanvas.value && !skinViewer) {
skinViewer = new SkinViewer({
canvas: skinCanvas.value,
width: 300,
height: 400,
skin: "/default_skin.png",
});
}
};
// Следим за изменением URL скина в сторе и обновляем вьювер
watch(
() => authStore.skinUrl,
(newUrl) => {
if (skinViewer) {
if (newUrl) {
skinViewer.loadSkin(newUrl);
} else {
// Если у пользователя нет скина, показываем скин по умолчанию
skinViewer.loadSkin("/default_skin.png");
}
}
},
{ immediate: true },
);
// Инициализация 3D-вьювера при монтировании компонента
onMounted(() => {
setupSkinViewer();
if (!authStore.skinUrl && authStore.isAuthenticated) {
authStore.fetchUserProfile();
}
});
// Очистка ресурсов при размонтировании