|
|
@@ -0,0 +1,46 @@
|
|
|
+<script lang="ts" setup>
|
|
|
+import { useUserStore } from '@/stores/user'
|
|
|
+import { ACCESS_TOKEN } from '@/utils/constants'
|
|
|
+import { ElMessage } from 'element-plus'
|
|
|
+import type { UploadProps } from 'element-plus'
|
|
|
+
|
|
|
+interface Props {
|
|
|
+ modelValue: any
|
|
|
+}
|
|
|
+const props = defineProps<Props>()
|
|
|
+const emits = defineEmits(['update:modelValue'])
|
|
|
+
|
|
|
+const modelValue = computed({
|
|
|
+ get: () => props.modelValue,
|
|
|
+ set: value => emits('update:modelValue', value)
|
|
|
+})
|
|
|
+
|
|
|
+const user = useUserStore()
|
|
|
+const baseApi = import.meta.env.VITE_BASE_API
|
|
|
+const headers = reactive({
|
|
|
+ [ACCESS_TOKEN]: user.token
|
|
|
+})
|
|
|
+// 图片上传
|
|
|
+const handleUploadSuccess: UploadProps['onSuccess'] = response => {
|
|
|
+ if (response.success || response.code === 200) {
|
|
|
+ modelValue.value = import.meta.env.VITE_BASE_PATH + response.data
|
|
|
+ } else {
|
|
|
+ ElMessage.error(response.msg)
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<template>
|
|
|
+ <el-upload
|
|
|
+ class="avatar-uploader"
|
|
|
+ :on-success="handleUploadSuccess"
|
|
|
+ :action="baseApi + '/file/upload'"
|
|
|
+ :headers="headers"
|
|
|
+ :show-file-list="false"
|
|
|
+ >
|
|
|
+ <img v-if="modelValue" :src="modelValue" class="avatar" />
|
|
|
+ <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
|
|
|
+ </el-upload>
|
|
|
+</template>
|
|
|
+
|
|
|
+<style lang="scss" scoped></style>
|