chuangte_bike_newxcx/page_user/shiming.vue
2025-09-22 17:08:55 +08:00

397 lines
10 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="page">
<u-navbar title=" " :border-bottom="false" :background="bgc" back-icon-color="#fff" title-color='#262B37'
title-size='36' height='36' id="navbar" :custom-back="btnfh">
</u-navbar>
<image src="https://api.ccttiot.com/smartmeter/img/static/uum6lsXMCEt4MU0WMW01" class="bj" mode=""></image>
<view class="sfxx" v-if="isReal == false">
<view class="tit">
请输入您的有效身份信息
</view>
<view class="name">
证件类型
<view class="type-select">
<view class="type-btn" :class="{active: docType === 'idcard'}" @click="docType='idcard'">身份证</view>
<view class="type-btn" :class="{active: docType === 'passport'}" @click="docType='passport'">护照</view>
</view>
</view>
<view class="name" v-if="docType === 'idcard'">
姓名 <input type="text" v-model="name" placeholder="请填写姓名" />
</view>
<view class="name" v-if="docType === 'idcard'">
证件号 <input type="text" v-model="zfzh" placeholder="请填写身份证号" />
</view>
<view class="upload" v-if="docType === 'passport'">
<view class="upload-label">护照照片</view>
<view class="upload-box" @click="choosePassportImage" v-if="!passportImage">
<text class="upload-plus"></text>
<text class="upload-tip">点击上传护照页照片</text>
</view>
<view class="upload-preview" v-else>
<image :src="passportImage" mode="aspectFill" @click="choosePassportImage" class="upload-img"></image>
<!-- <view class="upload-remove" @click.stop="removePassportImage">删除</view> -->
</view>
</view>
<view class="" style="width: 100%;text-align: center;margin-top: 20rpx;color: #ccc;">
您当前还未完成实名认证
</view>
</view>
<view class="sfxx" v-else>
<view class="tit">
请输入您的有效身份信息
</view>
<view class="name">
姓名 <input type="text" v-model="name" :disabled="true" placeholder="请填写姓名" />
</view>
<view class="name">
身份证号 <input type="text" v-model="zfzh" :disabled="true" placeholder="请填写身份证号" />
</view>
<view class="" style="width: 100%;text-align: center;margin-top: 20rpx;color: #ccc;">
您当前已完成实名认证
</view>
</view>
<view class="anniu" @click="btnshiming" v-if="isReal == false">
<!-- <text>进入人脸识别</text> -->
<text>提交</text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: "",
},
name:'',
zfzh:'',
isReal:false,
backData: null,
smflag:true,
docType: 'idcard', // 新增:证件类型
passportImage: '' ,// 新增:护照照片路径
token:''
}
},
onLoad(option) {
if(option.user){
console.log(option);
}
this.getQiniuToken()
},
onShow() {
this.getareaList()
// if (this.backData == true) {
// console.log('接收数据:', this.backData);
// this.getshuaxin();
// this.backData = null; // 重置
// }
},
methods: {
// 获取上传七牛云token
getQiniuToken() {
this.$u.get("/common/qiniuToken").then((res) => {
if (res.code == 200) {
this.token = res.data
}
})
},
// 上传头像
choosePassportImage() {
let _this = this
let math = 'static/' + _this.$u.guid(20)
uni.chooseImage({
count: 1,
type: 'all',
success(res) {
const tempFilePaths = res.tempFiles
wx.uploadFile({
url: 'https://up-z2.qiniup.com',
name: 'file',
filePath: tempFilePaths[0].path,
formData: {
token: _this.token, //后端返回的token
key: 'smartmeter/img/' + math
},
success: function(res) {
console.log(res, 'resres');
let str = JSON.parse(res.data)
console.log(str.key)
_this.passportImage = 'https://api.ccttiot.com/' + str.key
console.log(_this.passportImage);
}
})
}
})
},
getareaList() {
this.$u.get("/getInfo").then(res =>{
if(res.code == 200){
res.user.authTypes.filter(item =>{
if(item == 1){
this.isReal = true
}
})
this.name = res.user.realName
this.zfzh = res.user.realIdCard
}
})
},
// 刷新人脸识别是否成功
getshuaxin(){
this.$u.get('/app/realName/refreshRealName').then(res => {
if(res.code == 200){
if(res.data.pass == true){
let realNameType = res.data.realNameType
let infoId = res.data.infoId
uni.showModal({
title: '温馨提示',
content: `人脸认证成功`,
showCancel: false,
success: function(res) {
uni.navigateBack()
}
})
}else{
uni.showModal({
title: '温馨提示',
content: `人脸认证失败`,
showCancel: false,
success: function(res) {
uni.navigateBack()
}
})
}
}else{
uni.showModal({
title: '温馨提示',
content: `人脸认证失败`,
showCancel: false,
success: function(res) {
uni.navigateBack()
}
})
}
})
},
// 自定义返回
btnfh(){
uni.navigateBack()
},
// 点击进行实名认证
btnshiming(){
// 护照分支:仅校验并提示
if(this.docType === 'passport'){
if(!this.passportImage){
uni.showToast({ title:'请先上传护照照片', icon:'none' })
return
}
let data = {
url:this.passportImage
}
this.$u.put(`/app/realName/passportRealName`,data).then(res =>{
if(res.code == 200){
uni.showToast({
title: res.msg,
icon: 'success',
duration: 2000
})
setTimeout(()=>{
this.smflag = true
uni.navigateBack()
},1500)
}else{
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
this.smflag = true
}
})
return
}
if(this.smflag == true){
this.smflag = false
let data = {
userName:this.name,
idCard:this.zfzh,
}
this.$u.put(`/app/realName/twoElementRealName`,data).then(res =>{ //二要素
if(res.code == 200){
uni.showToast({
title: res.msg,
icon: 'success',
duration: 2000
})
setTimeout(()=>{
this.smflag = true
uni.navigateBack()
},1500)
}else if(res.code == 500 && res.msg == null){
uni.showToast({
title: '已提交,请等待系统反馈',
icon: 'none',
duration: 2000
})
this.smflag = true
} else{
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
this.smflag = true
}
})
}
// this.$u.put(`/app/realName/realName`,data).then(res =>{ //人脸
// if(res.code == 200){
// let https = encodeURIComponent(res.data.jumpUrl)
// this.backData = true
// uni.navigateTo({
// url:'/page_fenbao/renlian?https=' + https
// })
// }else{
// uni.showToast({
// title: res.msg,
// icon: 'none',
// duration: 2000
// })
// }
// })
},
}
}
</script>
<style lang="scss">
.anniu{
width: 750rpx;
height: 174rpx;
background: #FFFFFF;
box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0,0,0,0.3);
border-radius: 0rpx 0rpx 0rpx 0rpx;
line-height: 174rpx;
text-align: center;
position: fixed;
left: 0;
bottom: 0;
text{
display: inline-block;
width: 682rpx;
height: 84rpx;
background: #4297F3;
border-radius: 42rpx 42rpx 42rpx 42rpx;
text-align: center;
line-height: 84rpx;
font-weight: 600;
font-size: 36rpx;
color: #FFFFFF;
}
}
.sfxx{
width: 676rpx;
max-height: 980rpx;
padding-bottom: 30rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
margin: auto;
margin-top: 310rpx;
border-radius: 30rpx;
.name{
width: 624rpx;
height: 92rpx;
margin: auto;
background: #EFEFEF;
border-radius: 46rpx 46rpx 46rpx 46rpx;
margin-top: 46rpx;
display: flex;
align-items: center;
font-size: 32rpx;
color: #3D3D3D;
padding-left: 40rpx;
box-sizing: border-box;
justify-content: space-between;
input{
width: 430rpx;
padding-right: 20rpx;
box-sizing: border-box;
}
.type-select{ display: flex; align-items: center; padding-right: 20rpx; }
.type-btn{
min-width: 160rpx;
height: 64rpx;
padding: 0 24rpx;
border-radius: 32rpx;
background: #FFFFFF;
color: #3D3D3D;
font-size: 28rpx;
line-height: 64rpx;
text-align: center;
border: 2rpx solid #CCCCCC;
}
.type-btn + .type-btn{ margin-left: 20rpx; }
.type-btn.active{ background: #4297F3; color: #FFFFFF; border-color: #4297F3; }
}
.tit{
width: 676rpx;
height: 118rpx;
background: #EFEFEF;
font-weight: 600;
font-size: 36rpx;
color: #3D3D3D;
line-height: 118rpx;
padding-left: 38rpx;
box-sizing: border-box;
border-radius: 30rpx 30rpx 0 0;
}
.upload{
width: 624rpx;
margin: 20rpx auto 0 auto;
.upload-label{ font-size: 28rpx; color: #3D3D3D; margin-bottom: 16rpx; }
.upload-box{
width: 100%;
height: 220rpx;
background: #F7F7F7;
border: 2rpx dashed #CCCCCC;
border-radius: 16rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.upload-plus{ font-size: 60rpx; color: #999; line-height: 1; }
.upload-tip{ margin-top: 8rpx; font-size: 24rpx; color: #999; }
}
.upload-preview{
position: relative;
width: 100%;
height: 420rpx;
.upload-img{ width: 100%; height: 100%; border-radius: 16rpx; }
.upload-remove{
position: absolute;
right: 12rpx;
top: 12rpx;
background: rgba(0,0,0,0.5);
color: #fff;
padding: 8rpx 16rpx;
border-radius: 24rpx;
font-size: 24rpx;
}
}
}
}
.bj{
width: 750rpx;
height: 696rpx;
position: fixed;
top: 0;
left: 0;
z-index: -1;
}
</style>