element plus 图片上传简洁版

<template>
  <div class="common-layout">
    <el-container>
      <el-header>
        <span>更换头像</span>
      </el-header>
      <el-main>
        <div class="fm">
          <!-- v-model:file-list="fileList" -->
          <el-upload
            ref="uploadRef"
            class="avatar-uploader"
            :show-file-list="false"
            :auto-upload="false"
            :on-change="onSelectFile"
          >
            <img v-if="ImageUrls" :src="ImageUrls" class="avatar" />
            <el-icon v-else class="avatar-uploader-icon"></el-icon>
          </el-upload>
          <el-button
            type="primary"
            :icon="Plus"
            size="large"
            @click="uploadRef.$el.querySelector('input').click()"
            >选择图片</el-button
          >
          <el-button
            type="success"
            :icon="Upload"
            size="large"
            @click="uploadings"
            >上传图片</el-button
          >
        </div>
      </el-main>
    </el-container>
  </div>
</template>

<script setup>
import { ref, reactive, defineEmits } from "vue";
import { getuser, edituserimg } from "@/api/user";
// 这里是请求的方法
import { ElMessage } from "element-plus";
//引入element plus
import { Plus, Upload } from "@element-plus/icons-vue";
//引入element plus icon图标
const emit = defineEmits(["submitForm"]);
const dialogImageUrl = ref("");
const dialogVisible = ref(false);
const ImageUrls = ref("");
const uploadRef = ref("");

// 文章封面
const onSelectFile = (uploadFile) => {
  // ImageUrls.value = URL.createObjectURL(uploadFile.raw);
  const reader = new FileReader();
  reader.readAsDataURL(uploadFile.raw);
  reader.onload = () => {
    ImageUrls.value = reader.result;
  };
};

// 获取基本资料
const logins = async () => {
  let res = await getuser();
  ImageUrls.value = res.data.user_pic;
};
logins();

// 上传图片
const uploadings = async () => {
  let res = await edituserimg({
    avatar: ImageUrls.value,
  });
  console.log(res);
  if (res != undefined) {
    ElMessage({
      message: "头像更新成功",
      type: "success",
    });
    logins();
    let editok = "ok";
   // 上传成功后  返回给父组件  然后父组件获取到就重新获取数据
    emit("submitForm", editok);
  } else {
    ElMessage.error("请求超时了|图片过大");
  }
};
</script>

<style scoped>
.el-main {
  height: 100vh;
  background-color: #fff;
  border: 1px solid #e4e7ed;
}

.el-header {
  line-height: 60px;
  background-color: #fff;
  border: 1px solid #e4e7ed;
  border-bottom: 0;
}

.el-upload-list,
.fm {
  width: 278px;
  height: 278px;
}

.el-icon {
  width: 280px;
  height: 280px;
  border: 1px dashed #ccc;
}

.el-upload img {
  width: 280px;
  height: 280px;
  border-radius: 8px;
  border: 1px dashed #ccc !important;
}

.el-button {
  position: relative;
  width: 118px;
  height: 40px;
  margin-top: 20px;
}
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值