|
|
|
@ -23,57 +23,80 @@ |
|
|
|
|
|
|
|
<div :class="`${prefixCls}-toolbar`"> |
|
|
|
<Upload :fileList="[]" accept="image/*" :beforeUpload="handleBeforeUpload"> |
|
|
|
<a-button size="small" preIcon="ant-design:upload-outlined" type="primary" /> |
|
|
|
<Tooltip :title="t('component.cropper.selectImage')" placement="bottom"> |
|
|
|
<a-button size="small" preIcon="ant-design:upload-outlined" type="primary" /> |
|
|
|
</Tooltip> |
|
|
|
</Upload> |
|
|
|
<Space> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:reload-outlined" |
|
|
|
size="small" |
|
|
|
@click="handlerToolbar('reset')" |
|
|
|
/> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:rotate-left-outlined" |
|
|
|
size="small" |
|
|
|
@click="handlerToolbar('rotate', -45)" |
|
|
|
/> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:rotate-right-outlined" |
|
|
|
size="small" |
|
|
|
@click="handlerToolbar('rotate', 45)" |
|
|
|
/> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="vaadin:arrows-long-h" |
|
|
|
size="small" |
|
|
|
@click="handlerToolbar('scaleX')" |
|
|
|
/> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="vaadin:arrows-long-v" |
|
|
|
size="small" |
|
|
|
@click="handlerToolbar('scaleY')" |
|
|
|
/> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:zoom-in-outlined" |
|
|
|
size="small" |
|
|
|
@click="handlerToolbar('zoom', 0.1)" |
|
|
|
/> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:zoom-out-outlined" |
|
|
|
size="small" |
|
|
|
@click="handlerToolbar('zoom', -0.1)" |
|
|
|
/> |
|
|
|
<Tooltip :title="t('component.cropper.btn_reset')" placement="bottom"> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:reload-outlined" |
|
|
|
size="small" |
|
|
|
:disabled="!src" |
|
|
|
@click="handlerToolbar('reset')" |
|
|
|
/> |
|
|
|
</Tooltip> |
|
|
|
<Tooltip :title="t('component.cropper.btn_rotate_left')" placement="bottom"> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:rotate-left-outlined" |
|
|
|
size="small" |
|
|
|
:disabled="!src" |
|
|
|
@click="handlerToolbar('rotate', -45)" |
|
|
|
/> |
|
|
|
</Tooltip> |
|
|
|
<Tooltip :title="t('component.cropper.btn_rotate_right')" placement="bottom"> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:rotate-right-outlined" |
|
|
|
size="small" |
|
|
|
:disabled="!src" |
|
|
|
@click="handlerToolbar('rotate', 45)" |
|
|
|
/> |
|
|
|
</Tooltip> |
|
|
|
<Tooltip :title="t('component.cropper.btn_scale_x')" placement="bottom"> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="vaadin:arrows-long-h" |
|
|
|
size="small" |
|
|
|
:disabled="!src" |
|
|
|
@click="handlerToolbar('scaleX')" |
|
|
|
/> |
|
|
|
</Tooltip> |
|
|
|
<Tooltip :title="t('component.cropper.btn_scale_y')" placement="bottom"> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="vaadin:arrows-long-v" |
|
|
|
size="small" |
|
|
|
:disabled="!src" |
|
|
|
@click="handlerToolbar('scaleY')" |
|
|
|
/> |
|
|
|
</Tooltip> |
|
|
|
<Tooltip :title="t('component.cropper.btn_zoom_in')" placement="bottom"> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:zoom-in-outlined" |
|
|
|
size="small" |
|
|
|
:disabled="!src" |
|
|
|
@click="handlerToolbar('zoom', 0.1)" |
|
|
|
/> |
|
|
|
</Tooltip> |
|
|
|
<Tooltip :title="t('component.cropper.btn_zoom_out')" placement="bottom"> |
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
preIcon="ant-design:zoom-out-outlined" |
|
|
|
size="small" |
|
|
|
:disabled="!src" |
|
|
|
@click="handlerToolbar('zoom', -0.1)" |
|
|
|
/> |
|
|
|
</Tooltip> |
|
|
|
</Space> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div :class="`${prefixCls}-right`"> |
|
|
|
<div :class="`${prefixCls}-preview`"> |
|
|
|
<img :src="previewSource" v-if="previewSource" /> |
|
|
|
<img :src="previewSource" v-if="previewSource" :alt="t('component.cropper.preview')" /> |
|
|
|
</div> |
|
|
|
<template v-if="previewSource"> |
|
|
|
<div :class="`${prefixCls}-group`"> |
|
|
|
@ -92,7 +115,7 @@ |
|
|
|
|
|
|
|
import { defineComponent, ref } from 'vue'; |
|
|
|
import CropperImage from './Cropper.vue'; |
|
|
|
import { Space, Upload, Avatar } from 'ant-design-vue'; |
|
|
|
import { Space, Upload, Avatar, Tooltip } from 'ant-design-vue'; |
|
|
|
import { useDesign } from '/@/hooks/web/useDesign'; |
|
|
|
import { BasicModal, useModalInner } from '/@/components/Modal'; |
|
|
|
import { dataURLtoBlob } from '/@/utils/file/base64Conver'; |
|
|
|
@ -102,13 +125,13 @@ |
|
|
|
const props = { |
|
|
|
circled: { type: Boolean, default: true }, |
|
|
|
uploadApi: { |
|
|
|
type: Function as PropType<({ file: Blob, name: stirng, filename: string }) => Promise<any>>, |
|
|
|
type: Function as PropType<({ file: Blob, name: string, filename: string }) => Promise<any>>, |
|
|
|
}, |
|
|
|
}; |
|
|
|
|
|
|
|
export default defineComponent({ |
|
|
|
name: 'CropperAvatar', |
|
|
|
components: { BasicModal, Space, CropperImage, Upload, Avatar }, |
|
|
|
components: { BasicModal, Space, CropperImage, Upload, Avatar, Tooltip }, |
|
|
|
props, |
|
|
|
emits: ['uploadSuccess', 'register'], |
|
|
|
setup(props, { emit }) { |
|
|
|
|