You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

171 lines
4.5 KiB

<template>
<v-dialog @click:outside="cancelCropImage" content-class="mb-15" scrollable width="70%" v-model="isCropImageDialogActive" style="z-index:500">
<v-card class="border-radius-20 pt-12 cropper-card-height">
<v-spacer class="d-flex justify-end">
<v-btn icon @click="cancelCropImage" class="me-15 mb-9">
<v-icon>
mdi-close
</v-icon>
</v-btn>
</v-spacer>
<v-spacer class="d-flex justify-center pb-15">
<cropper
class="cropper"
ref="cropper"
:src="cropImagePreview"
:stencil-component="$options.components.CircleStencil"
/>
</v-spacer>
<v-spacer class="d-flex justify-center justify-sm-end mb-11">
<v-btn class="me-3" width="110px" @click="cancelCropImage" text color="primary">
{{ $t("userProfile.cropReset") }}
</v-btn>
<v-btn class="me-15 border-radius-16" width="110px" @click="cropImage" color="primary">
{{ $t("userProfile.crop") }}
</v-btn>
</v-spacer>
</v-card>
</v-dialog>
</template>
<script>
import { CircleStencil, Cropper } from 'vue-advanced-cropper';
import 'vue-advanced-cropper/dist/style.css';
export default {
name: "cropImageDialog",
components: {
CircleStencil, Cropper
},
data() {
return {
};
},
props: {
isCropImageDialogActive: {
type: Boolean,
required: true,
default: false,
},
cropImagePreview: {
type: String,
required: true,
default: '',
},
},
methods: {
cancelCropImage() {
// const deleteFile = this.cropImagePreview.split('/')
// const filename = deleteFile.pop()
// this.$axios.delete(`/users/images?filename=${filename}`)
// .then(response => {})
// .catch(error => console.log(error))
this.$emit('close-crop-dialog')
},
cropImage() {
// const result = this.$refs.cropper.getResult()
// console.log(result);
// const resultSplit = result.image.src.split('/')
// console.log(resultSplit);
// const fileDetails = resultSplit[resultSplit.length-1].split('.')
// const fileURL = result.canvas.toDataURL('image/'+fileDetails[1])
// const file = this.dataURLtoFile(fileURL,fileDetails[0]+'.'+fileDetails[1])
// const payload = new FormData()
// payload.append('file',file)
this.$emit('upload-image-success')
// this.$axios
// .post(
// `/trending/api/Members/UploadAvatar`
// )
// .then((response) => {
// //console.log(JSON.stringify(response));
// if(response && response.data && response.data.DATA && response.data.DATA.rel){
// let data = response.data.DATA.rel
// if(data){
// const pictureURL = data;
// console.log("change pic:" + pictureURL);
// this.$emit('upload-image-success');
// }
// }
// })
// .catch((error) => {
// console.log(error);
// });
},
dataURLtoFile(dataurl, filename) {
let arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, {type:mime});
},
},
}
</script>
<style lang="scss" scoped>
.cropper {
width: 85%;
@media screen and (max-width: 600px) {
min-height: 164px;
}
@media screen and (min-width: 600px) and (max-width: 960px) {
min-height: 303px;
}
@media screen and (min-width: 961px) {
min-height: 538px;
}
}
.cropper-card-height {
@media screen and (max-width: 600px) {
min-height: 515px;
}
@media screen and (min-width: 600px) and (max-width: 960px) {
min-height: 717px;
}
@media screen and (min-width: 961px) {
min-height: 900px;
}
}
.vue-advanced-cropper{
height: 600px !important;
}
.vue-advanced-cropper__stretcher{
height: 600px !important;
}
.vue-advanced-cropper__boundaries{
height: 600px !important;
}
.vue-advanced-cropper__foreground{
height: 600px !important;
}
.vue-advanced-cropper__image-wrapper{
height: 600px !important;
}
.vue-advanced-cropper__background{
height: 600px !important;
}
//裁切
.vue-circle-stencil .vue-circle-stencil--movable{
height: 400px !important;
}
.vue-bounding-box .vue-circle-stencil__bounding-box{
height: 400px !important;
}
.vue-preview__wrapper{
height: 400px !important;
}
</style>