123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- <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>
|