Rodney Chen
2024-06-18 6c5dd72f97a580382008bb6e01c679701abd82d4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<template>
  <PageWrapper title="图片裁剪示例" content="需要开启测试接口服务才能进行上传测试!">
    <CollapseContainer title="头像裁剪">
      <CropperAvatar :uploadApi="uploadApi as any" :value="avatar" />
    </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" alt="" />
      </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" />
      </div>
      <p v-if="circleImg">裁剪后图片信息:{{ circleInfo }}</p>
    </CollapseContainer>
  </PageWrapper>
</template>
<script lang="ts" setup>
  import { ref } from 'vue';
  import { PageWrapper } from '@/components/Page';
  import { CollapseContainer } from '@/components/Container';
  import { CropperImage, CropperAvatar } from '@/components/Cropper';
  import { uploadApi } from '@/api/sys/upload';
  import img from '@/assets/images/header.jpg';
  import { useUserStore } from '@/store/modules/user';
 
  const info = ref('');
  const cropperImg = ref('');
  const circleInfo = ref('');
  const circleImg = ref('');
  const userStore = useUserStore();
  const avatar = ref(userStore.getUserInfo?.avatar || '');
  function handleCropend({ imgBase64, imgInfo }) {
    info.value = imgInfo;
    cropperImg.value = imgBase64;
  }
 
  function handleCircleCropend({ imgBase64, imgInfo }) {
    circleInfo.value = imgInfo;
    circleImg.value = imgBase64;
  }
</script>
 
<style scoped>
  .container {
    display: flex;
    align-items: center;
    width: 100vw;
  }
 
  .cropper-container {
    width: 40vw;
  }
 
  .croppered {
    height: 360px;
  }
 
  p {
    margin: 10px;
  }
</style>