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.
260 lines
5.4 KiB
260 lines
5.4 KiB
<template>
|
|
<view class="content">
|
|
<view class="cropper-wrapper" style="height:617px">
|
|
<canvas
|
|
class="cropper"
|
|
disable-scroll="true"
|
|
@touchstart="touchStart"
|
|
@touchmove="touchMove"
|
|
@touchend="touchEnd"
|
|
:style="{ width: cropperOpt.width, height: cropperOpt.height }"
|
|
canvas-id="cropper"
|
|
></canvas>
|
|
</view>
|
|
<view class="cropper-buttons">
|
|
<view class="upload" @tap="uploadTap">重新选择</view>
|
|
<view class="getCropperImage" @tap="getCropperImage">确定</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import weCropper from './weCropper';
|
|
const device = uni.getSystemInfoSync();
|
|
const width = device.windowWidth;
|
|
const height = device.windowHeight - 50;
|
|
console.log(device);
|
|
import { uploadImgApi } from '@/config/utils.js'
|
|
export default {
|
|
data() {
|
|
return {
|
|
cropperOpt: {
|
|
id: 'cropper',
|
|
width: width,
|
|
height: height,
|
|
scale: 2.5,
|
|
zoom: 8,
|
|
cut: {
|
|
x: (width - 240) / 2,
|
|
y: (height - 320) / 2,
|
|
width: 240,
|
|
height: 320
|
|
}
|
|
},
|
|
weCropper: ''
|
|
};
|
|
},
|
|
methods: {
|
|
back() {
|
|
uni.redirectTo({
|
|
url: '../infoDetail/infoDetail'
|
|
});
|
|
},
|
|
touchStart(e) {
|
|
this.weCropper.touchStart(e);
|
|
},
|
|
touchMove(e) {
|
|
this.weCropper.touchMove(e);
|
|
},
|
|
touchEnd(e) {
|
|
this.weCropper.touchEnd(e);
|
|
},
|
|
convertBase64UrlToBlob(dataURI, type) {
|
|
var binary = atob(dataURI.split(',')[1]);
|
|
var array = [];
|
|
for (var i = 0; i < binary.length; i++) {
|
|
array.push(binary.charCodeAt(i));
|
|
}
|
|
return new Blob([new Uint8Array(array)], { type: type }, { filename: '1111.jpg' });
|
|
},
|
|
blobToDataURL(blob) {
|
|
var a = new FileReader();
|
|
a.readAsDataURL(blob); //读取文件保存在result中
|
|
a.onload = function(e) {
|
|
var getRes = e.target.result; //读取的结果在result中
|
|
console.log(getRes);
|
|
};
|
|
},
|
|
getCropperImage() {
|
|
console.log('点击了确定')
|
|
let _this = this;
|
|
//let pathurl = url + '/user/upload';上传服务器地址
|
|
this.weCropper.getCropperImage(avatar => {
|
|
console.log('有图片吗?')
|
|
console.log(avatar)
|
|
if (avatar) {
|
|
// 获取到裁剪后的图片
|
|
// 获取到裁剪后的图片
|
|
uploadImgApi(avatar, 'avatar').then((res)=>{
|
|
console.log(res)
|
|
uni.setStorageSync('avatarBase64', res)
|
|
uni.navigateBack()
|
|
}).catch(()=>{
|
|
_this.$u.toast('上传失败,请重试')
|
|
})
|
|
//下面是上传到服务器的方法
|
|
// uni.uploadFile({
|
|
// url: pathurl,
|
|
// filePath: avatar,
|
|
// name: 'file',
|
|
// formData: { token: token, userId: userId},
|
|
// success: res => {
|
|
// console.log('uploadImage success, res is:', res);
|
|
// uni.showToast({
|
|
// title: '上传成功',
|
|
// icon: 'success',
|
|
// duration: 1000
|
|
// });
|
|
// },
|
|
// ail: err => {
|
|
// console.log('uploadImage fail', err);
|
|
// uni.showModal({
|
|
// content: err.errMsg,
|
|
// showCancel: false
|
|
// });
|
|
// uni.hideLoading();
|
|
// },
|
|
// complete: () => {
|
|
// console.log('complate');
|
|
// }
|
|
// });
|
|
} else {
|
|
console.log('获取图片失败,请稍后重试');
|
|
}
|
|
});
|
|
},
|
|
uploadTap() {
|
|
const self = this;
|
|
|
|
uni.chooseImage({
|
|
count: 1, // 默认9
|
|
sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有
|
|
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
|
|
success(res) {
|
|
let src = res.tempFilePaths[0];
|
|
// 获取裁剪图片资源后,给data添加src属性及其值
|
|
|
|
self.weCropper.pushOrign(src);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
onLoad(option) {
|
|
// do something
|
|
const cropperOpt = this.cropperOpt;
|
|
const src = option.src;
|
|
if (src) {
|
|
Object.assign(cropperOpt, {
|
|
src
|
|
});
|
|
|
|
this.weCropper = new weCropper(cropperOpt)
|
|
.on('ready', function(ctx) {})
|
|
.on('beforeImageLoad', ctx => {
|
|
uni.showToast({
|
|
title: '上传中',
|
|
icon: 'loading',
|
|
duration: 3000
|
|
});
|
|
})
|
|
.on('imageLoad', ctx => {
|
|
uni.hideToast();
|
|
});
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style>
|
|
.content {
|
|
background: rgba(255, 255, 255, 1);
|
|
}
|
|
|
|
.head-list {
|
|
height: 43px;
|
|
width: 100%;
|
|
background: #ffffff;
|
|
justify-content: center;
|
|
align-items: center;
|
|
display: flex;
|
|
border-bottom: 1px solid rgba(244, 244, 244, 1);
|
|
}
|
|
|
|
.head-info {
|
|
text-align: center;
|
|
font-size: 18px;
|
|
color: #000000;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.save-box {
|
|
position: absolute;
|
|
right: 0px;
|
|
width: 50px;
|
|
height: 43px;
|
|
line-height: 43px;
|
|
}
|
|
|
|
.save {
|
|
color: rgba(98, 111, 252, 1);
|
|
font-size: 16px;
|
|
font-weight: 400;
|
|
}
|
|
|
|
.icon-back {
|
|
margin-top: 11px;
|
|
width: 10px;
|
|
height: 18px;
|
|
color: #000000;
|
|
margin-left: 6px;
|
|
}
|
|
|
|
.icon-back-box {
|
|
display: block;
|
|
position: absolute;
|
|
left: 6px;
|
|
height: 43px;
|
|
width: 30px;
|
|
align-items: center;
|
|
}
|
|
.cropper {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
.cropper-buttons {
|
|
background-color: rgba(0, 0, 0, 0.95);
|
|
color: #04b00f;
|
|
}
|
|
.cropper-wrapper {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
width: 100%;
|
|
background-color: #F0F0F0;
|
|
}
|
|
|
|
.cropper-buttons {
|
|
width: 100vw;
|
|
height: 50px;
|
|
display: flex;
|
|
flex-direction: row;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
line-height: 50px;
|
|
}
|
|
|
|
.cropper-buttons .upload,
|
|
.cropper-buttons .getCropperImage {
|
|
width: 50%;
|
|
text-align: center;
|
|
}
|
|
</style>
|