AvatarSettingPage.vue 2.7 KB
<!--
 * @Date: 2025-03-24 13:04:21
 * @LastEditors: hookehuyr hookehuyr@gmail.com
 * @LastEditTime: 2025-03-26 00:46:59
 * @FilePath: /mlaj/src/views/profile/settings/AvatarSettingPage.vue
 * @Description: 修改头像页面
-->
<template>
  <AppLayout title="">
    <div
      class="bg-gradient-to-br from-green-50 via-green-100/30 to-blue-50/30 min-h-screen"
    >
      <div class="px-4 py-6">
        <FrostedGlass class="rounded-xl overflow-hidden">
          <div class="p-4">
            <div class="flex flex-col items-center">
              <div class="mb-6">
                <van-image
                  round
                  :src="
                    userAvatar || 'https://fastly.jsdelivr.net/npm/@vant/assets/cat.jpeg'
                  "
                  alt="用户头像"
                  class="rounded-full border-4 border-white shadow-lg"
                  width="8rem"
                  height="8rem"
                  fit="cover"
                />
              </div>
              <p class="text-sm text-gray-500 mb-4">支持 jpg、png 格式,大小不超过 2MB</p>
              <van-uploader
                :after-read="handleAvatarChange"
                :max-size="2 * 1024 * 1024"
                accept="image/jpeg,image/png"
                :preview-image="false"
              >
                <van-button
                  block
                  type="primary"
                  class="max-w-xs"
                >
                  选择新头像
                </van-button>
              </van-uploader>
            </div>
          </div>
        </FrostedGlass>
      </div>
    </div>
  </AppLayout>
</template>

<script setup>
import { ref, onMounted } from "vue";
import AppLayout from "@/components/layout/AppLayout.vue";
import FrostedGlass from "@/components/ui/FrostedGlass.vue";
import { getUserInfoAPI, updateUserInfoAPI } from "@/api/users";

import { useTitle } from '@vueuse/core';

const $route = useRoute();
useTitle($route.meta.title);


// 用户头像
const userAvatar = ref("");

// 获取用户信息
onMounted(async () => {
  try {
    const response = await getUserInfoAPI();
    if (response.data) {
      userAvatar.value = response.data.user.avatar;
    }
  } catch (error) {
    console.error("获取用户信息失败:", error);
  }
});

// 处理头像上传
const handleAvatarChange = async (file) => {
  try {
    const formData = new FormData();
    formData.append("avatar", file);

    const response = await updateUserInfoAPI(formData);
    if (response.data) {
      userAvatar.value = response.data.url;
      alert("头像上传成功");
    }
  } catch (error) {
    console.error("头像上传失败:", error);
    alert("头像上传失败,请重试");
  }
};
</script>