chuangte_bike_newxcx/page_user/shiming.vue

402 lines
10 KiB
Vue
Raw Normal View History

2025-04-01 21:35:30 +08:00
<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">
2025-09-22 17:08:55 +08:00
证件类型
<view class="type-select">
2026-05-21 09:43:14 +08:00
<view hover-class="app-tap-hover" class="type-btn" :class="{active: docType === 'idcard'}" @click="docType='idcard'">身份证</view>
<view hover-class="app-tap-hover" class="type-btn" :class="{active: docType === 'passport'}" @click="docType='passport'">护照</view>
2025-09-22 17:08:55 +08:00
</view>
</view>
<view class="name" v-if="docType === 'idcard'">
2025-04-01 21:35:30 +08:00
姓名 <input type="text" v-model="name" placeholder="请填写姓名" />
</view>
2025-09-22 17:08:55 +08:00
<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>
2026-05-21 09:43:14 +08:00
<view hover-class="app-tap-hover" class="upload-box" @click="choosePassportImage" v-if="!passportImage">
2025-09-22 17:08:55 +08:00
<text class="upload-plus"></text>
<text class="upload-tip">点击上传护照页照片</text>
</view>
<view class="upload-preview" v-else>
2026-05-21 09:43:14 +08:00
<image hover-class="app-tap-hover" :src="passportImage" mode="aspectFill" @click="choosePassportImage" class="upload-img"></image>
2025-09-22 17:08:55 +08:00
<!-- <view class="upload-remove" @click.stop="removePassportImage">删除</view> -->
</view>
2025-04-01 21:35:30 +08:00
</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>
2026-05-21 09:43:14 +08:00
<view hover-class="app-tap-hover" class="anniu" @click="btnshiming" v-if="isReal == false">
2025-04-27 17:37:23 +08:00
<!-- <text>进入人脸识别</text> -->
<text>提交</text>
2025-04-01 21:35:30 +08:00
</view>
2026-05-25 17:13:15 +08:00
<qiniu-upload-progress />
2025-04-01 21:35:30 +08:00
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: "",
},
name:'',
zfzh:'',
2025-04-11 18:23:16 +08:00
isReal:false,
2025-06-06 11:32:12 +08:00
backData: null,
2025-09-22 17:08:55 +08:00
smflag:true,
docType: 'idcard', // 新增:证件类型
passportImage: '' ,// 新增:护照照片路径
2026-05-25 17:13:15 +08:00
token:'',
areaId:''
2025-04-01 21:35:30 +08:00
}
},
onLoad(option) {
2026-05-25 17:13:15 +08:00
console.log(option,'45465645645645645645645645645');
if(option.areaId){
this.areaId = option.areaId
2025-04-01 21:35:30 +08:00
}
2025-09-22 17:08:55 +08:00
this.getQiniuToken()
2025-04-01 21:35:30 +08:00
},
2025-04-11 18:23:16 +08:00
onShow() {
2025-06-06 11:32:12 +08:00
this.getareaList()
2025-04-27 17:37:23 +08:00
// if (this.backData == true) {
// console.log('接收数据:', this.backData);
// this.getshuaxin();
// this.backData = null; // 重置
// }
2025-04-11 18:23:16 +08:00
},
2025-04-01 21:35:30 +08:00
methods: {
2025-09-22 17:08:55 +08:00
// 获取上传七牛云token
getQiniuToken() {
this.$u.get("/common/qiniuToken").then((res) => {
if (res.code == 200) {
this.token = res.data
}
})
},
// 上传头像
choosePassportImage() {
2026-05-25 17:13:15 +08:00
const math = 'static/' + this.$u.guid(20)
2025-09-22 17:08:55 +08:00
uni.chooseImage({
count: 1,
type: 'all',
2026-05-25 17:13:15 +08:00
success: async (res) => {
const filePath = res.tempFiles[0].path
if (!this.token) {
this.token = await this.$fetchQiniuToken()
}
if (!this.token) {
uni.showToast({ title: '上传失败', icon: 'none' })
return
}
try {
const url = await this.$uploadQiniuFile({
filePath,
token: this.token,
key: 'smartmeter/img/' + math,
title: '上传护照照片'
})
this.passportImage = url
} catch (e) {
uni.showToast({ title: '上传失败', icon: 'none' })
}
2025-09-22 17:08:55 +08:00
}
})
},
2025-06-06 11:32:12 +08:00
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
}
})
},
2025-04-11 18:23:16 +08:00
// 刷新人脸识别是否成功
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()
}
})
}
})
},
2025-04-01 21:35:30 +08:00
// 自定义返回
btnfh(){
2025-04-11 18:23:16 +08:00
uni.navigateBack()
2025-04-01 21:35:30 +08:00
},
// 点击进行实名认证
btnshiming(){
2025-09-22 17:08:55 +08:00
// 护照分支:仅校验并提示
if(this.docType === 'passport'){
if(!this.passportImage){
uni.showToast({ title:'请先上传护照照片', icon:'none' })
return
}
let data = {
2026-05-25 17:13:15 +08:00
url:this.passportImage,
areaId:this.areaId
2025-09-22 17:08:55 +08:00
}
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
}
2025-06-06 11:32:12 +08:00
if(this.smflag == true){
this.smflag = false
let data = {
userName:this.name,
idCard:this.zfzh,
2026-05-25 17:13:15 +08:00
areaId:this.areaId
2025-04-01 21:35:30 +08:00
}
2025-06-06 11:32:12 +08:00
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
}
})
}
2025-04-27 17:37:23 +08:00
// 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
// })
// }
// })
2025-09-22 17:08:55 +08:00
},
2025-04-01 21:35:30 +08:00
}
}
</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;
2025-09-22 17:08:55 +08:00
max-height: 980rpx;
padding-bottom: 30rpx;
2025-04-01 21:35:30 +08:00
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;
}
2025-09-22 17:08:55 +08:00
.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; }
2025-04-01 21:35:30 +08:00
}
.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;
}
2025-09-22 17:08:55 +08:00
.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;
}
}
}
2025-04-01 21:35:30 +08:00
}
.bj{
width: 750rpx;
height: 696rpx;
position: fixed;
top: 0;
left: 0;
z-index: -1;
}
</style>