index.vue 2.2 KB

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