-
![]()
+
![]()
+
@@ -17,6 +22,7 @@
confirmButText="确认上传"
:uploadApi="uploadApi"
:circled="circled"
+ @uploadSuccess="handleSuccess"
/>
@@ -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 @@