integrated_traffic_uniapp/pages/my/face/index.nvue

303 lines
7.4 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="allbox">
<div class="custom" :style="{height: CustomBar+'px'}">
<view class="navcontent" :style="[{top:statusBar + 'px'}]">
<text style="color: #FFFFFF;font-size: 16px;line-height: 45px;position: absolute;"
class="iconfont icon-xiangzuo" @click="BackPage">返回</text>
<text style="color: #FFFFFF;font-size: 16px;line-height: 45px;text-align: center;">人脸采集</text>
<text></text>
</view>
</div>
<view class="fat">
<text class="fatt">请将人脸置于圆圈内</text>
</view>
<div class="livefater">
<div style="width: 350px;height: 350px;border-radius: 350px;overflow: hidden;background-color: #CCCCCC;">
<live-pusher id='livePusher' ref="livePusher" class="livePusher" url="" mode="SD" :muted="true"
:enable-camera="true" :auto-focus="true" :beauty="1" whiteness="2" aspect="1:1"
@statechange="statechange" @netstatus="netstatus" @error="error"></live-pusher>
</div>
<cover-image src="../../../static/image/gaiz.png" class="gaiimg"></cover-image>
</div>
<view class="allfoot">
<view class="allbtn bg-green" @click="snapshot">
<text class="alltext">拍照/上传</text>
</view>
</view>
</view>
</template>
<script>
import {
basePath,
loginUser,
} from '../../../common/tool.js';
export default {
data: {
USER_ID: '',
fil: true,
imgList: [""],
statusBar: '',
CustomBar: 0,
startPreviewTimer: null
},
onLoad() {
var that = this
uni.getStorage({
key: 'USER',
success: function (res) {
that.USER_ID = res.data.USER_ID
if(!res.data.USER_ID){
uni.clearStorage()
uni.reLaunch({
url: '/pages/login/home'
});
}
}
})
// this.startPreview()
},
onReady() {
// 注意需要在onReady中 或 onLoad 延时
this.context = uni.createLivePusherContext("livePusher", this);
var that = this
uni.getSystemInfo({
success: function(e) {
// 计算导航栏高度
that.statusBar = e.statusBarHeight
// #ifndef MP
if (e.platform == 'android') {
that.CustomBar = e.statusBarHeight + 50
} else {
that.CustomBar = e.statusBarHeight + 45
}
console.log(that.statusBar)
// #endif
// #ifdef MP-WEIXIN
let custom = wx.getMenuButtonBoundingClientRect()
that.CustomBar = custom.bottom + custom.top - e.statusBarHeight
// #endif
// #ifdef MP-ALIPAY
that.CustomBar = e.statusBarHeight + e.titleBarHeight
// #endif
that.$nextTick(() => {
// that.startPreview()
that.startPreviewTimer = setInterval(() => {
that.startPreview()
}, 1000)
})
}
})
},
methods: {
Timer() {},
statechange(e) {
console.log("statechange:" + JSON.stringify(e));
},
netstatus(e) {
console.log("netstatus:" + JSON.stringify(e));
},
error(e) {
console.log("error:" + JSON.stringify(e));
},
start: function() {
this.context.start({
success: (a) => {
console.log("livePusher.start:" + JSON.stringify(a));
}
});
},
close: function() {
this.context.close({
success: (a) => {
console.log("livePusher.close:" + JSON.stringify(a));
}
});
},
// 拍照事件
snapshot: function() {
var that = this
uni.showLoading({
title: "加载中..."
}); //加载中动画
this.context.snapshot({
success: (e) => {
console.log(JSON.stringify(e));
that.getMinImage(e.message.tempImagePath)
}
});
},
// 开启摄像头
startPreview() {
this.$forceUpdate()
var that = this
that.context.stopPreview()
this.context.startPreview({
success: (a) => {
that.startPreviewTimer && clearInterval(that.startPreviewTimer)
console.log("livePusher.startPreview:" + JSON.stringify(a));
// that.Timer = setInterval(function() {
// that.snapshot()
// if (that.imgList.length > 3) {
// clearInterval(that.Timer)
// }
// }, 2000)
}
});
},
// 使用plus.zip.compressImage压缩图片并转换成base64
getMinImage(imgPath) {
var that = this
plus.zip.compressImage({
src: imgPath,
dst: imgPath,
overwrite: true,
quality: 40
},
zipRes => {
setTimeout(() => {
var reader = new plus.io.FileReader();
reader.onloadend = res => {
var speech = res.target.result; //base64图片
var USERAVATARPREFIX = speech.substring(0, speech.indexOf('base64,') + 7)
var USERAVATARURL = speech.substring(speech.indexOf('base64,') + 7)
uni.request({
url: basePath + '/app/user/editUserFace',
method: 'POST',
dataType: 'json',
header: {
'Content-type': 'application/x-www-form-urlencoded'
},
data: {
USERAVATARPREFIX: USERAVATARPREFIX,
USERAVATARURL: USERAVATARURL,
USER_ID: that.USER_ID,
CORPINFO_ID:loginUser.CORPINFO_ID,
},
success: (res) => {
uni.hideLoading(); //结束加载中动画
if (res.data != null) {
var result = res.data.result;
if ("success" == result) {
uni.showToast({
title: "更新成功",
duration: 1000
});
that.goback()
} else if ("error" == result) {
uni.showToast({
icon: 'none',
title: "人脸图像不符合要求,请重新上传!",
duration: 2000
});
} else {
uni.showToast({
icon: 'none',
title: "登录错误!请联系管理员",
duration: 2000
});
}
}
}
})
console.log(speech);
// this.imgList.push(speech);
};
//一定要使用plus.io.convertLocalFileSystemURL将target地址转换为本地文件地址否则readAsDataURL会找不到文件
reader.readAsDataURL(plus.io.convertLocalFileSystemURL(zipRes.target));
}, 1000);
},
function(error) {
console.log('Compress error!', error);
}
);
},
BackPage() {
uni.navigateBack({
delta: 1
});
},
goback(){
var pages = getCurrentPages(); // 获取当前页面栈
var prePage = pages[pages.length - 2]; // 上二级页面
prePage.$vm.initflag = true; // A 页面 init方法 为true
uni.navigateBack({delta: 1});
uni.hideLoading();
},
}
}
</script>
<style>
.allbox {
background-color: #fff;
}
.allfoot {
padding: 0 20px 0 20px;
}
.cu-btn {
color: #fff;
}
.custom {
background-color: #2C65F7;
}
.navcontent {
height: 45px;
padding: 0 24px;
color: #FFFFFF;
position: relative;
}
.livePusher {
width: 350px;
height: 350px;
}
.livefater {
display: -ms-flex;
display: -webkit-flex;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
margin-bottom: 50rpx;
height: 350px;
}
.fat {
margin: 50rpx;
}
.fatt {
text-align: center;
font-size: 18px;
}
.gaiimg {
width: 350px;
height: 350px;
margin-top: -350px;
}
.allbtn {
color: #fff;
border-radius: 10upx;
}
.alltext {
text-align: center;
color: #FFFFFF;
font-size: 16px;
line-height: 45px;
}
</style>