index.vue 2.7 KB
Newer Older
V
Vben 已提交
1
<template>
V
Vben 已提交
2 3
  <PageWrapper title="图片裁剪示例" content="需要开启测试接口服务才能进行上传测试!">
    <CollapseContainer title="头像裁剪">
4
      <CropperAvatar :uploadApi="uploadApi" :value="avatar" />
V
Vben 已提交
5 6 7 8 9 10 11
    </CollapseContainer>

    <CollapseContainer title="矩形裁剪" class="my-4">
      <div class="container p-4">
        <div class="cropper-container mr-10">
          <CropperImage ref="refCropper" :src="img" @cropend="handleCropend" style="width: 40vw" />
        </div>
12
        <img :src="cropperImg" class="croppered" v-if="cropperImg" alt="" />
V
Vben 已提交
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
      </div>
      <p v-if="cropperImg">裁剪后图片信息:{{ info }}</p>
    </CollapseContainer>

    <CollapseContainer title="圆形裁剪">
      <div class="container p-4">
        <div class="cropper-container mr-10">
          <CropperImage
            ref="refCropper"
            :src="img"
            @cropend="handleCircleCropend"
            style="width: 40vw"
            circled
          />
        </div>
        <img :src="circleImg" class="croppered" v-if="circleImg" />
啝裳 已提交
29
      </div>
V
Vben 已提交
30 31
      <p v-if="circleImg">裁剪后图片信息:{{ circleInfo }}</p>
    </CollapseContainer>
V
Vben 已提交
32 33 34
  </PageWrapper>
</template>
<script lang="ts">
V
Vben 已提交
35
  import { defineComponent, ref } from 'vue';
V
Vben 已提交
36
  import { PageWrapper } from '/@/components/Page';
37
  import { CollapseContainer } from '/@/components/Container';
V
Vben 已提交
38 39
  import { CropperImage, CropperAvatar } from '/@/components/Cropper';
  import { uploadApi } from '/@/api/sys/upload';
V
Vben 已提交
40
  import img from '/@/assets/images/header.jpg';
41
  import { useUserStore } from '/@/store/modules/user';
啝裳 已提交
42

V
Vben 已提交
43 44 45 46
  export default defineComponent({
    components: {
      PageWrapper,
      CropperImage,
V
Vben 已提交
47 48
      CollapseContainer,
      CropperAvatar,
V
Vben 已提交
49 50
    },
    setup() {
V
Vben 已提交
51 52 53 54
      const info = ref('');
      const cropperImg = ref('');
      const circleInfo = ref('');
      const circleImg = ref('');
55 56
      const userStore = useUserStore();
      const avatar = ref(userStore.getUserInfo?.avatar || '');
V
Vben 已提交
57
      function handleCropend({ imgBase64, imgInfo }) {
V
Vben 已提交
58 59 60
        info.value = imgInfo;
        cropperImg.value = imgBase64;
      }
61

V
Vben 已提交
62 63 64 65 66
      function handleCircleCropend({ imgBase64, imgInfo }) {
        circleInfo.value = imgInfo;
        circleImg.value = imgBase64;
      }

67 68 69
      return {
        img,
        info,
V
Vben 已提交
70
        circleInfo,
71
        cropperImg,
V
Vben 已提交
72 73 74
        circleImg,
        handleCropend,
        handleCircleCropend,
75
        avatar,
76
        uploadApi: uploadApi as any,
77
      };
V
Vben 已提交
78 79 80
    },
  });
</script>
81 82

<style scoped>
啝裳 已提交
83
  .container {
V
Vben 已提交
84 85
    display: flex;
    align-items: center;
V
vben 已提交
86
    width: 100vw;
V
Vben 已提交
87 88
  }

啝裳 已提交
89 90 91 92
  .cropper-container {
    width: 40vw;
  }

V
Vben 已提交
93
  .croppered {
啝裳 已提交
94 95 96 97 98
    height: 360px;
  }

  p {
    margin: 10px;
V
Vben 已提交
99
  }
100
</style>