index.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <template>
  2. <PageWrapper title="图片裁剪示例" content="需要开启测试接口服务才能进行上传测试!">
  3. <CollapseContainer title="头像裁剪">
  4. <CropperAvatar :uploadApi="uploadApi" :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">
  33. import { defineComponent, 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. export default defineComponent({
  41. components: {
  42. PageWrapper,
  43. CropperImage,
  44. CollapseContainer,
  45. CropperAvatar,
  46. },
  47. setup() {
  48. const info = ref('');
  49. const cropperImg = ref('');
  50. const circleInfo = ref('');
  51. const circleImg = ref('');
  52. const userStore = useUserStore();
  53. const avatar = ref(userStore.getUserInfo?.avatar || '');
  54. function handleCropend({ imgBase64, imgInfo }) {
  55. info.value = imgInfo;
  56. cropperImg.value = imgBase64;
  57. }
  58. function handleCircleCropend({ imgBase64, imgInfo }) {
  59. circleInfo.value = imgInfo;
  60. circleImg.value = imgBase64;
  61. }
  62. return {
  63. img,
  64. info,
  65. circleInfo,
  66. cropperImg,
  67. circleImg,
  68. handleCropend,
  69. handleCircleCropend,
  70. avatar,
  71. uploadApi,
  72. };
  73. },
  74. });
  75. </script>
  76. <style scoped>
  77. .container {
  78. display: flex;
  79. width: 100vw;
  80. align-items: center;
  81. }
  82. .cropper-container {
  83. width: 40vw;
  84. }
  85. .croppered {
  86. height: 360px;
  87. }
  88. p {
  89. margin: 10px;
  90. }
  91. </style>