mo 2 年之前
父节点
当前提交
b92be21d03

文件差异内容过多而无法显示
+ 1 - 0
dist/assets/polyfills-legacy.71501777.js


文件差异内容过多而无法显示
+ 1 - 0
dist/assets/polyfills-legacy.eb966ec8.js


+ 4 - 0
dist/index.html

@@ -52,7 +52,11 @@
     <div id="app"></div>
     
     <script nomodule>!function(){var e=document,t=e.createElement("script");if(!("noModule"in t)&&"onbeforeload"in t){var n=!1;e.addEventListener("beforeload",(function(e){if(e.target===t)n=!0;else if(!e.target.hasAttribute("nomodule")||!n)return;e.preventDefault()}),!0),t.type="module",t.src=".",e.head.appendChild(t),t.remove()}}();</script>
+<<<<<<< HEAD
     <script nomodule id="vite-legacy-polyfill" src="./assets/polyfills-legacy.71501777.js"></script>
+=======
+    <script nomodule id="vite-legacy-polyfill" src="./assets/polyfills-legacy.eb966ec8.js"></script>
+>>>>>>> newVersion
     <script nomodule id="vite-legacy-entry" data-src="./assets/index-legacy.da191fab.js">System.import(document.getElementById('vite-legacy-entry').getAttribute('data-src'))</script>
   </body>
 </html>

+ 11 - 0
package-lock.json

@@ -20,6 +20,7 @@
         "browserslist": "^4.20.2",
         "classnames": "^2.3.1",
         "clean-deep": "^3.4.0",
+        "cropperjs": "^1.5.12",
         "dayjs": "^1.10.7",
         "element-plus": "^2.2.5",
         "html-to-image": "^1.9.0",
@@ -5144,6 +5145,11 @@
         "semver": "bin/semver.js"
       }
     },
+    "node_modules/cropperjs": {
+      "version": "1.5.12",
+      "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.12.tgz",
+      "integrity": "sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw=="
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -14496,6 +14502,11 @@
         }
       }
     },
+    "cropperjs": {
+      "version": "1.5.12",
+      "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.12.tgz",
+      "integrity": "sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw=="
+    },
     "cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",

+ 1 - 0
package.json

@@ -32,6 +32,7 @@
     "browserslist": "^4.20.2",
     "classnames": "^2.3.1",
     "clean-deep": "^3.4.0",
+    "cropperjs": "^1.5.12",
     "dayjs": "^1.10.7",
     "element-plus": "^2.2.5",
     "html-to-image": "^1.9.0",

+ 37 - 10
src/components/col-cropper/cropper.tsx

@@ -16,6 +16,8 @@ import { CirclePlus, Remove } from '@element-plus/icons-vue'
 import iconRate from '../col-upload/images/icon_rate.png'
 import request from '@/helpers/request'
 
+import Cropper from "cropperjs";
+import "cropperjs/dist/cropper.css";
 export default defineComponent({
   name: 'cropper',
   props: {
@@ -63,7 +65,8 @@ export default defineComponent({
       url: {
         upload: '/sys/common/saveToImgByStr'
       },
-      submitLoading: false
+      submitLoading: false,
+      myCropper:null as any
     }
   },
   methods: {
@@ -84,7 +87,9 @@ export default defineComponent({
      * 确认截图
      */
     okHandel() {
-      ;(this as any).$refs.cropperRef.getCropBlob(async data => {
+      ;(this as any).myCropper.getCroppedCanvas({
+        imageSmoothingQuality: 'high'
+      }).toBlob(async data => {
         this.submitLoading = true
         const options: any = this.options
         const fileName =
@@ -117,7 +122,8 @@ export default defineComponent({
           for (let key in this.dataObj) {
             formData.append(key, this.dataObj[key])
           }
-          formData.append('file', this.blobToFile(data, fileName), fileName)
+          // this.blobToFile(data, fileName)
+          formData.append('file', data, fileName)
           await umiRequest(this.ossUploadUrl, {
             method: 'POST',
             data: formData
@@ -167,6 +173,22 @@ export default defineComponent({
     //向右旋转
     rotateRight() {
       ;(this as any).$refs.cropperRef.rotateRight()
+    },
+    initImgCropper(){
+      this.myCropper = new Cropper((this as any).$refs.imgCropper, {
+        viewMode: 1, //定义裁剪器的视图模式。如果将viewMode设置为0,则裁剪框可以延伸到画布外部,而值为1、2或3将限制裁剪框的大小为画布的大小。viewMode为2或3会将画布限制为容器。请注意,如果画布和容器的比例相同,则2和3之间没有差别。
+        dragMode: 'move', //定义的拖动模式裁剪器.canvas和容器一样,2和3没有区别。move:移动画布 crop:创建新的裁剪框(默认) none:什么也不做
+        //定义裁剪框的固定纵横比。默认情况下,裁剪框为自由比率。
+        aspectRatio: this.options.autoCropWidth / this.options.autoCropHeight,
+        initialAspectRatio: 1,
+        autoCropArea: 1, //定义0到1之间的fA编号。定义自动裁剪区域大小(百分比)。默认0.8
+        cropBoxMovable: true, //允许通过拖动移动裁剪框。默认true
+        cropBoxResizable: false, //以通过拖动来调整裁剪框的大小 默认true
+        background: false, //显示容器的网格背景
+        movable: true, //移动图像
+        modal: true,
+        preview: '.before'
+      })
     }
   },
   render() {
@@ -178,6 +200,8 @@ export default defineComponent({
         title={this.options.title}
         closeOnClickModal={false}
         width={'900px'}
+        destroyOnClose={true}
+        onOpened={()=>{this.initImgCropper()}}
         v-slots={{
           footer: () => (
             <span class="dialog-footer !text-center block">
@@ -200,7 +224,10 @@ export default defineComponent({
       >
         <ElRow>
           <ElCol xs={24} md={12} style={{ width: '350px' }}>
-            <VueCropper
+          <div  class={styles.imgwarp}>
+            <img ref="imgCropper" id="myImages" src={this.options.img} alt="" style={{ height: '350px' }}/>
+          </div>
+            {/* <VueCropper
               ref="cropperRef"
               img={this.options.img}
               info={true}
@@ -214,8 +241,8 @@ export default defineComponent({
               enlarge={this.options.enlarge}
               onRealTime={this.realTime}
               style={{ height: '350px' }}
-            />
-            <div class="flex pt-2">
+            /> */}
+            {/* <div class="flex pt-2">
               <div
                 onClick={() => {
                   this.changeScale(1)
@@ -245,23 +272,23 @@ export default defineComponent({
               >
                 <img src={iconRate} class="w-[30px] h-[30px]" />
               </div>
-            </div>
+            </div> */}
           </ElCol>
           <ElCol xs={24} md={12} style={{ height: '350px' }}>
             <div class={styles.previewImg}>
               <span>预览图片</span>
               <div
                 class={
-                  this.options.previewsCircle
+                  [this.options.previewsCircle
                     ? styles['avatar-upload-preview']
-                    : styles['avatar-upload-preview_range']
+                    : styles['avatar-upload-preview_range'], 'before']
                 }
                 style={{
                   width: this.options.autoCropWidth + 'px',
                   height: this.options.autoCropHeight + 'px'
                 }}
               >
-                <ElImage src={this.previews.url} style={this.previews.img} />
+                {/* <ElImage src={this.previews.url} style={this.previews.img} /> */}
               </div>
             </div>
           </ElCol>

+ 14 - 0
src/components/col-cropper/index.module.less

@@ -83,3 +83,17 @@
     padding-top: 0;
   }
 }
+:global {
+  .before {
+    max-width: 400px !important;
+    max-height: 400px !important;
+    overflow: hidden;
+  }
+}
+
+#myImages {
+  max-width: 400px;
+  display: block;
+  width: 400px;
+  min-height: 400px;
+}

+ 8 - 8
yarn.lock

@@ -2624,6 +2624,11 @@
   "resolved" "https://registry.npmmirror.com/core-js/-/core-js-3.23.3.tgz"
   "version" "3.23.3"
 
+"cropperjs@^1.5.12":
+  "integrity" "sha512-re7UdjE5UnwdrovyhNzZ6gathI4Rs3KGCBSc8HCIjUo5hO42CtzyblmWLj6QWVw7huHyDMfpKxhiO2II77nhDw=="
+  "resolved" "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.12.tgz"
+  "version" "1.5.12"
+
 "cross-spawn@^5.0.1":
   "integrity" "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A=="
   "resolved" "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz"
@@ -2893,9 +2898,9 @@
   "resolved" "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz"
   "version" "0.9.3"
 
-"esbuild-darwin-64@0.13.15":
-  "integrity" "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ=="
-  "resolved" "https://registry.npmmirror.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz"
+"esbuild-windows-64@0.13.15":
+  "integrity" "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ=="
+  "resolved" "https://registry.npmmirror.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz"
   "version" "0.13.15"
 
 "esbuild@^0.13.12":
@@ -3277,11 +3282,6 @@
   "resolved" "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz"
   "version" "1.0.0"
 
-"fsevents@~2.3.2":
-  "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="
-  "resolved" "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz"
-  "version" "2.3.2"
-
 "function-bind@^1.1.1":
   "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
   "resolved" "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz"

部分文件因为文件数量过多而无法显示