优化裁剪上传

This commit is contained in:
zjl 2024-12-23 12:52:53 +08:00
parent 9f5dc0b57a
commit dc0431e9f6
2 changed files with 43 additions and 20 deletions

View File

@ -17,7 +17,7 @@
<el-upload <el-upload
:show-file-list="false" :show-file-list="false"
accept="image/*" accept="image/*"
:http-request="handleHttpUpload" :http-request="handleHttpUpload"
:before-upload="beforeUpload" :before-upload="beforeUpload"
style="width: auto" style="width: auto"
> >
@ -160,7 +160,7 @@
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { basicModal, useModal } from '@/components/Modal'; import { basicModal, useModal } from '@/components/Modal';
import CropperImage from './CropperImage.vue'; import CropperImage from './CropperImage.vue';
import { dataURLtoBlob ,base64ToFile} from '@/utils/file/base64Conver'; import { dataURLtoBlob, base64ToFile } from '@/utils/file/base64Conver';
import { isFunction } from '@/utils/is'; import { isFunction } from '@/utils/is';
import { getOssConfig } from '@/api/common'; import { getOssConfig } from '@/api/common';
import OSS from 'ali-oss'; import OSS from 'ali-oss';
@ -207,17 +207,26 @@
let scaleX = 1; let scaleX = 1;
let scaleY = 1; let scaleY = 1;
/**
* 定义模态
*/
const [modalRegister, { openModal, closeModal, setSubLoading }] = useModal({ const [modalRegister, { openModal, closeModal, setSubLoading }] = useModal({
title: props.title, title: props.title,
width: 800, width: 800,
}); });
/**
* 显示弹窗
*/
function showModal() { function showModal() {
openModal(); openModal();
} }
function handleHttpUpload(){ function handleHttpUpload() {}
}
// /**
* 上传图片
* @param file 文件
*/
function beforeUpload(file) { function beforeUpload(file) {
const reader = new FileReader(); const reader = new FileReader();
reader.readAsDataURL(file); reader.readAsDataURL(file);
@ -248,21 +257,25 @@
cropper?.value?.[event]?.(arg); cropper?.value?.[event]?.(arg);
} }
/**
* 执行上传
*/
async function handleOk() { async function handleOk() {
if (!src.value) { if (!src.value) {
setSubLoading(false); setSubLoading(false);
return ElMessage.error('请先上传图片'); return ElMessage.error('请先上传图片');
} }
const uploadApi = props.uploadApi; const uploadApi = props.uploadApi;
const name = props.name const name = props.name;
const file = base64ToFile(previewSource.value,filename); const file = base64ToFile(previewSource.value, filename);
// //
if (uploadApi && isFunction(uploadApi)) { if (uploadApi && isFunction(uploadApi)) {
//
try { try {
setSubLoading(true); setSubLoading(true);
const formData = new FormData() const formData = new FormData();
formData.append('file',file) formData.append('file', file);
formData.append('name',name) formData.append('name', name);
const result = await uploadApi(formData); const result = await uploadApi(formData);
emit('uploadSuccess', result); emit('uploadSuccess', result);
closeModal(); closeModal();
@ -270,10 +283,15 @@
setSubLoading(false); setSubLoading(false);
} }
} else { } else {
//oss // OSS
actionFiles(file) actionFiles(file);
} }
} }
/**
* 上传阿里云OSS
* @param fileChild 参数
*/
const actionFiles = async (fileChild) => { const actionFiles = async (fileChild) => {
const configData = await getOssConfig(); const configData = await getOssConfig();
let date = new Date(); let date = new Date();
@ -321,17 +339,21 @@
// headers, // headers,
mime: fileChild.type, mime: fileChild.type,
}); });
emit('uploadSuccess', {fileUrl:configData.oss_domain + res.name}); emit('uploadSuccess', { fileUrl: configData.oss_domain + res.name });
closeModal(); closeModal();
} catch (error) { } catch (error) {
emit('uploadSuccess', {}); emit('uploadSuccess', {});
} finally { } finally {
setSubLoading(false); setSubLoading(false);
} }
}; };
function handleClose(){
src.value ='' /**
previewSource.value='' * 执行关闭
*/
function handleClose() {
src.value = '';
previewSource.value = '';
} }
return { return {
@ -346,7 +368,7 @@
handleReady, handleReady,
handlerToolbar, handlerToolbar,
handleOk, handleOk,
handleClose handleClose,
}; };
}, },
}); });

View File

@ -157,7 +157,8 @@
class="flex-1" class="flex-1"
:rules="[ :rules="[
{ required: true, message: '请输入手机号码', trigger: 'blur' }, { required: true, message: '请输入手机号码', trigger: 'blur' },
{ validator: rule.validatePhone, trigger: 'blur' }]" { validator: rule.validatePhone, trigger: 'blur' },
]"
> >
<el-input v-model="formData.mobile" placeholder="请输入手机号码" clearable /> <el-input v-model="formData.mobile" placeholder="请输入手机号码" clearable />
</el-form-item> </el-form-item>