From f34a697cc91dbffad07ed35c5b2d9c5b6972008b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E7=BA=A2=E4=B8=BD?= <1181930680@qq.com> Date: Mon, 2 Sep 2024 15:09:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E8=A3=81=E5=89=AA=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Cropper/src/Cropper.vue | 30 +++++++++++++++++---- src/components/Cropper/src/CropperModal.vue | 11 +++++--- src/utils/file/base64Conver.ts | 16 +++++++++++ src/views/system/menu/edit.vue | 1 - src/views/system/user/edit.vue | 22 ++++++++++++--- 5 files changed, 66 insertions(+), 14 deletions(-) diff --git a/src/components/Cropper/src/Cropper.vue b/src/components/Cropper/src/Cropper.vue index 43dc872..298efb6 100644 --- a/src/components/Cropper/src/Cropper.vue +++ b/src/components/Cropper/src/Cropper.vue @@ -3,7 +3,12 @@ @@ -43,8 +49,10 @@ const iconSize = cssUnit(Math.ceil(parseInt(getWidth) / 4)); - // const emit = defineEmits(['change']); - + const emit = defineEmits(['uploadSuccess']); +function handleSuccess(value){ + emit('uploadSuccess',value) +} function openCropper() { cropperRef.value.showModal(); } @@ -61,18 +69,30 @@ overflow: hidden; text-align: center; position: relative; - + &-img { position: relative; width: 100%; height: 100%; border-radius: 50%; + .addImg { + width: v-bind(getWidth); + height: v-bind(getWidth); + border:1px dashed #999999; + display: flex; + justify-content: center; + align-items: center; + .el-icon { + color: #999999; + font-size: v-bind(iconSize); + } + } .mask { position: absolute; width: 100%; height: 100%; - background: rgba(0, 0, 0, 0.6); + background: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; diff --git a/src/components/Cropper/src/CropperModal.vue b/src/components/Cropper/src/CropperModal.vue index 76d221f..62436a5 100644 --- a/src/components/Cropper/src/CropperModal.vue +++ b/src/components/Cropper/src/CropperModal.vue @@ -160,7 +160,7 @@ import { ElMessage } from 'element-plus'; import { basicModal, useModal } from '@/components/Modal'; import CropperImage from './CropperImage.vue'; - import { dataURLtoBlob } from '@/utils/file/base64Conver'; + import { dataURLtoBlob ,base64ToFile} from '@/utils/file/base64Conver'; import { isFunction } from '@/utils/is'; import { UploadOutlined, @@ -251,11 +251,14 @@ } const uploadApi = props.uploadApi; if (uploadApi && isFunction(uploadApi)) { - const blob = dataURLtoBlob(previewSource.value); + const file = base64ToFile(previewSource.value,filename); try { setSubLoading(true); - const result = await uploadApi({ name: 'file', file: blob, filename }); - emit('uploadSuccess', { source: previewSource.value, data: result.data }); + const formData = new FormData() + formData.append('file',file) + formData.append('name',filename) + const result = await uploadApi(formData); + emit('uploadSuccess', result); closeModal(); } finally { setSubLoading(false); diff --git a/src/utils/file/base64Conver.ts b/src/utils/file/base64Conver.ts index d77618a..4ae8e12 100644 --- a/src/utils/file/base64Conver.ts +++ b/src/utils/file/base64Conver.ts @@ -39,3 +39,19 @@ export function urlToBase64(url: string, mineType?: string): Promise { img.src = url; }); } + +/** + * base64 to file + * @param dataURL + */ +export function base64ToFile(dataurl:any, filename:any) { + let arr = dataurl.split(","); + let mime = arr[0].match(/:(.*?);/)[1]; + let bstr = atob(arr[1]); + let len = bstr.length; + let u8arr = new Uint8Array(len); + while (len--) { + u8arr[len] = bstr.charCodeAt(len); + } + return new File([u8arr], filename, {type: mime}); +} diff --git a/src/views/system/menu/edit.vue b/src/views/system/menu/edit.vue index c697215..22bd8a9 100644 --- a/src/views/system/menu/edit.vue +++ b/src/views/system/menu/edit.vue @@ -243,7 +243,6 @@ const getMenu = async () => { const data: any = await getMenuList(); const menu: any = {id: 0, name: "顶级", children: []}; const lists = buildTree(data) - console.log(lists) menu.children = arrayToTree( treeToArray(lists).filter((item) => item.type ==0) ); diff --git a/src/views/system/user/edit.vue b/src/views/system/user/edit.vue index 842ff4d..c1b590a 100644 --- a/src/views/system/user/edit.vue +++ b/src/views/system/user/edit.vue @@ -97,14 +97,19 @@ - - + --> + + + +