Browse Source

!84 图片上传组件增加压缩支持
Merge pull request !84 from 缝合怪/dev

疯狂的狮子Li 1 year ago
parent
commit
26cfa7afc4
2 changed files with 20 additions and 3 deletions
  1. 1 0
      package.json
  2. 19 3
      src/components/ImageUpload/index.vue

+ 1 - 0
package.json

@@ -30,6 +30,7 @@
     "element-plus": "2.4.4",
     "file-saver": "2.0.5",
     "fuse.js": "7.0.0",
+    "image-conversion": "^2.1.1",
     "js-cookie": "3.0.5",
     "jsencrypt": "3.3.2",
     "nprogress": "0.2.0",

+ 19 - 3
src/components/ImageUpload/index.vue

@@ -44,6 +44,7 @@ import { listByIds, delOss } from '@/api/system/oss';
 import { OssVO } from '@/api/system/oss/types';
 import { propTypes } from '@/utils/propTypes';
 import { globalHeaders } from '@/utils/request';
+import { compressAccurately } from 'image-conversion';
 
 const props = defineProps({
   modelValue: {
@@ -60,7 +61,14 @@ const props = defineProps({
   isShowTip: {
     type: Boolean,
     default: true
-  }
+  },
+  // 是否支持压缩,默认否
+  compressSupport: {
+    type: Boolean,
+    default: false
+  },
+  // 压缩目标大小,单位KB。默认300KB以上文件才压缩,并压缩至300KB以内
+  compressTargetSize: propTypes.number.def(300)
 });
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -138,8 +146,16 @@ const handleBeforeUpload = (file: any) => {
       return false;
     }
   }
-  proxy?.$modal.loading('正在上传图片,请稍候...');
-  number.value++;
+
+  //压缩图片,开启压缩并且大于指定的压缩大小时才压缩
+  if (props.compressSupport && file.size / 1024 > props.compressTargetSize) {
+    proxy?.$modal.loading('正在上传图片,请稍候...');
+    number.value++;
+    return compressAccurately(file, props.compressTargetSize);
+  } else {
+    proxy?.$modal.loading('正在上传图片,请稍候...');
+    number.value++;
+  }
 };
 
 // 文件个数超出