vue-vben-admin/src/views/demo/comp/cropper/index.vue

101 lines
2.7 KiB
Vue
Raw Normal View History

2021-03-29 22:48:13 +08:00
<template>
2021-06-10 21:46:46 +08:00
<PageWrapper title="图片裁剪示例" content="需要开启测试接口服务才能进行上传测试!">
<CollapseContainer title="头像裁剪">
<CropperAvatar :uploadApi="uploadApi" :value="avatar" />
2021-06-10 21:46:46 +08:00
</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="" />
2021-06-10 21:46:46 +08:00
</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" />
2021-04-17 22:39:05 +08:00
</div>
2021-06-10 21:46:46 +08:00
<p v-if="circleImg">裁剪后图片信息{{ circleInfo }}</p>
</CollapseContainer>
2021-03-29 22:48:13 +08:00
</PageWrapper>
</template>
<script lang="ts">
2021-06-10 21:46:46 +08:00
import { defineComponent, ref } from 'vue';
2021-03-29 22:48:13 +08:00
import { PageWrapper } from '/@/components/Page';
import { CollapseContainer } from '/@/components/Container';
2021-06-10 21:46:46 +08:00
import { CropperImage, CropperAvatar } from '/@/components/Cropper';
import { uploadApi } from '/@/api/sys/upload';
2021-03-29 22:48:13 +08:00
import img from '/@/assets/images/header.jpg';
import { useUserStore } from '/@/store/modules/user';
2021-04-17 22:39:05 +08:00
2021-03-29 22:48:13 +08:00
export default defineComponent({
components: {
PageWrapper,
CropperImage,
2021-06-10 21:46:46 +08:00
CollapseContainer,
CropperAvatar,
2021-03-29 22:48:13 +08:00
},
setup() {
2021-06-10 21:46:46 +08:00
const info = ref('');
const cropperImg = ref('');
const circleInfo = ref('');
const circleImg = ref('');
const userStore = useUserStore();
const avatar = ref(userStore.getUserInfo?.avatar || '');
2021-06-10 21:46:46 +08:00
function handleCropend({ imgBase64, imgInfo }) {
2021-04-12 23:02:48 +08:00
info.value = imgInfo;
cropperImg.value = imgBase64;
}
2021-06-10 21:46:46 +08:00
function handleCircleCropend({ imgBase64, imgInfo }) {
circleInfo.value = imgInfo;
circleImg.value = imgBase64;
}
return {
img,
info,
2021-06-10 21:46:46 +08:00
circleInfo,
cropperImg,
2021-06-10 21:46:46 +08:00
circleImg,
handleCropend,
handleCircleCropend,
avatar,
uploadApi: uploadApi as any,
};
2021-03-29 22:48:13 +08:00
},
});
</script>
<style scoped>
2021-04-17 22:39:05 +08:00
.container {
2021-04-12 23:02:48 +08:00
display: flex;
2021-04-17 22:39:05 +08:00
width: 100vw;
2021-04-12 23:02:48 +08:00
align-items: center;
}
2021-04-17 22:39:05 +08:00
.cropper-container {
width: 40vw;
}
2021-04-12 23:02:48 +08:00
.croppered {
2021-04-17 22:39:05 +08:00
height: 360px;
}
p {
margin: 10px;
2021-04-12 23:02:48 +08:00
}
</style>