Blame view

src/views/demo/comp/cropper/index.vue 2.48 KB
1
<template>
2
3
  <PageWrapper title="图片裁剪示例" content="需要开启测试接口服务才能进行上传测试!">
    <CollapseContainer title="头像裁剪">
4
      <CropperAvatar :uploadApi="uploadApi" />
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    </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>
        <img :src="cropperImg" class="croppered" v-if="cropperImg" />
      </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>
30
31
      <p v-if="circleImg">裁剪后图片信息:{{ circleInfo }}</p>
    </CollapseContainer>
32
33
34
  </PageWrapper>
</template>
<script lang="ts">
35
  import { defineComponent, ref } from 'vue';
36
  import { PageWrapper } from '/@/components/Page';
37
38
39
  import { CollapseContainer } from '/@/components/Container/index';
  import { CropperImage, CropperAvatar } from '/@/components/Cropper';
  import { uploadApi } from '/@/api/sys/upload';
40
  import img from '/@/assets/images/header.jpg';
41
42
43
44
45
  export default defineComponent({
    components: {
      PageWrapper,
      CropperImage,
46
47
      CollapseContainer,
      CropperAvatar,
48
49
    },
    setup() {
50
51
52
53
      const info = ref('');
      const cropperImg = ref('');
      const circleInfo = ref('');
      const circleImg = ref('');
54
55
      function handleCropend({ imgBase64, imgInfo }) {
56
57
58
        info.value = imgInfo;
        cropperImg.value = imgBase64;
      }
59
60
61
62
63
64
      function handleCircleCropend({ imgBase64, imgInfo }) {
        circleInfo.value = imgInfo;
        circleImg.value = imgBase64;
      }
65
66
67
      return {
        img,
        info,
68
        circleInfo,
69
        cropperImg,
70
71
72
73
        circleImg,
        handleCropend,
        handleCircleCropend,
        uploadApi,
74
      };
75
76
77
    },
  });
</script>
78
79

<style scoped>
80
  .container {
81
    display: flex;
82
    width: 100vw;
83
84
85
    align-items: center;
  }
86
87
88
89
  .cropper-container {
    width: 40vw;
  }
90
  .croppered {
91
92
93
94
95
    height: 360px;
  }

  p {
    margin: 10px;
96
  }
97
</style>