index.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <template>
  2. <div class="component-upload-image">
  3. <el-upload
  4. :action="uploadImgUrl"
  5. list-type="picture-card"
  6. :on-success="handleUploadSuccess"
  7. :before-upload="handleBeforeUpload"
  8. :on-error="handleUploadError"
  9. name="file"
  10. :show-file-list="false"
  11. :headers="headers"
  12. style="display: inline-block; vertical-align: top"
  13. >
  14. <img v-if="value" :src="value" class="avatar" />
  15. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  16. </el-upload>
  17. </div>
  18. </template>
  19. <script>
  20. import { getAccessToken } from "@/utils/auth";
  21. export default {
  22. components: {},
  23. data() {
  24. return {
  25. uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
  26. headers: {
  27. Authorization: "Bearer " + getAccessToken(),
  28. },
  29. };
  30. },
  31. props: {
  32. value: {
  33. type: String,
  34. default: "",
  35. },
  36. },
  37. methods: {
  38. handleUploadSuccess(res) {
  39. this.$emit("input", res.url);
  40. this.loading.close();
  41. },
  42. handleBeforeUpload() {
  43. this.loading = this.$loading({
  44. lock: true,
  45. text: "上传中",
  46. background: "rgba(0, 0, 0, 0.7)",
  47. });
  48. },
  49. handleUploadError() {
  50. this.$message({
  51. type: "error",
  52. message: "上传失败",
  53. });
  54. this.loading.close();
  55. },
  56. },
  57. watch: {},
  58. };
  59. </script>
  60. <style scoped lang="scss">
  61. .avatar {
  62. width: 100%;
  63. height: 100%;
  64. }
  65. </style>