Skip to content

cropper(裁切弹出框)

基础用法

示例:

裁切弹出框

代码示例:

二次封装的裁切组件

vue
<!-- 图片剪切组件 -->
<template>
  <!-- 容器 -->
  <v-cropper ref="cropper" @confirm="handleConfirm" />
</template>
<script>
import {fileDisplay} from '@/mixin/file';
import fetch from '@/config/fetch';
import util from '@/assets/js/util';

export default {
  data() {
    return {
      fileName: '', //文件名称
      callback: null, //回调函数
    };
  },
  methods: {
    /**
     * 打开剪切
     * 1、调用组件剪切
     * 2、存储回调函数与文件名称
     */
    open({ id, name }, callback) {
      this.$refs.cropper.open(fileDisplay(id, name));
      this.fileName = name;
      this.callback = callback;
    },
    /**
     * 处理确定
     * 1、构建上传的数据
     * 2、处理上传
     * 3、调用回调函数
     * 4、清空原始文件名称与回调函数
     */
    async handleConfirm(base64Url) {
      try {
        this.$loading();
        let uploadData = {
          attachId: util.generateUUID(),
          fileName: `${this.fileName.substring(
            this.fileName.lastIndexOf('.'),
            0
          )}.jpeg`,
          fileFormat: '.jpeg',
          contentType: 'image/jpeg',
          contentBase64: base64Url.split('data:image/jpeg;base64,')[1],
          sysId: 'PEX',
        };
        await this.upload([uploadData]);
        this.callback({ id: uploadData.attachId, name: uploadData.fileName });
        this.fileName = '';
        this.callback = null;
      } catch (err) {
        console.error(err);
        this.$message({
          type: 'error',
          message: err.msg,
        });
      } finally {
        this.$loadingClose();
      }
    },
    /**
     * 处理上传base64图片
     */
    upload(data) {
      return new Promise((resolve, reject) => {
        fetch
          .post('/pub/attachmentBase64FileUpload', data)
          .then(resolve)
          .catch(reject);
      });
    },
  },
};
</script>

事件:

事件名说明参数参数说明
confirm确认事件base64Url图片的base64数据

方法:

方法名说明参数参数说明
open打开图片裁剪组件imgSrc图片路径