| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- <template>
- <div class="change-avatar">
- <CropperAvatar
- ref="cropperRef"
- :btnProps="{ preIcon: 'ant-design:cloud-upload-outlined' }"
- :showBtn="false"
- :value="img"
- width="120px"
- @change="handelUpload"
- />
- </div>
- </template>
- <script lang="ts" setup>
- import { propTypes } from '@/utils/propTypes'
- import { updateUserProfile } from '@/api/system/user/profile'
- import { CropperAvatar } from '@/components/Cropper'
- import { useUserStore } from '@/store/modules/user'
- import { useUpload } from '@/components/UploadFile/src/useUpload'
- import { UploadRequestOptions } from 'element-plus/es/components/upload/src/upload'
- // TODO @芋艿:合并到 ProfileUser 组件中,更简洁一点
- defineOptions({ name: 'UserAvatar' })
- defineProps({
- img: propTypes.string.def('')
- })
- const userStore = useUserStore()
- const cropperRef = ref()
- const handelUpload = async ({ data }) => {
- const { httpRequest } = useUpload()
- const avatar = ((await httpRequest({
- file: data,
- filename: 'avatar.png',
- } as UploadRequestOptions)) as unknown as { data: string }).data
- await updateUserProfile({ avatar })
- // 关闭弹窗,并更新 userStore
- cropperRef.value.close()
- await userStore.setUserAvatarAction(avatar)
- }
- </script>
- <style lang="scss" scoped>
- .change-avatar {
- img {
- display: block;
- margin-bottom: 15px;
- border-radius: 50%;
- }
- }
- </style>
|