7 changed files with 439 additions and 2 deletions
@ -0,0 +1,173 @@ |
|||
// pages/profile/authentication/index.js
|
|||
Page({ |
|||
/** |
|||
* 页面的初始数据 |
|||
*/ |
|||
data: { |
|||
idCardFront: '', // 身份证人像面
|
|||
idCardBack: '', // 身份证国徽面
|
|||
name: '', // 姓名
|
|||
idNumber: '', // 身份证号
|
|||
address: '', // 居住地址
|
|||
validStart: '', // 有效期开始
|
|||
validEnd: '' // 有效期结束
|
|||
}, |
|||
|
|||
/** |
|||
* 返回上一页 |
|||
*/ |
|||
navigateBack() { |
|||
wx.navigateBack({ delta: 1 }); |
|||
}, |
|||
|
|||
/** |
|||
* 上传身份证人像面 |
|||
*/ |
|||
uploadIdCardFront() { |
|||
this.uploadImage('idCardFront'); |
|||
}, |
|||
|
|||
/** |
|||
* 上传身份证国徽面 |
|||
*/ |
|||
uploadIdCardBack() { |
|||
this.uploadImage('idCardBack'); |
|||
}, |
|||
|
|||
/** |
|||
* 通用图片上传方法 |
|||
* @param {string} field - 上传的字段名 |
|||
*/ |
|||
uploadImage(field) { |
|||
const _this = this; |
|||
wx.chooseMedia({ |
|||
count: 1, |
|||
mediaType: ['image'], |
|||
sizeType: ['compressed'], |
|||
sourceType: ['album', 'camera'], |
|||
success(res) { |
|||
// 获取图片临时路径
|
|||
const tempFilePaths = res.tempFiles; |
|||
if (tempFilePaths && tempFilePaths.length > 0) { |
|||
// 更新页面数据
|
|||
_this.setData({ |
|||
[field]: tempFilePaths[0].tempFilePath |
|||
}); |
|||
|
|||
// 这里可以添加图片上传到服务器的逻辑
|
|||
// 模拟识别成功后填充信息
|
|||
_this.simulateOcrResult(); |
|||
} |
|||
}, |
|||
fail(err) { |
|||
console.error('选择图片失败:', err); |
|||
wx.showToast({ |
|||
title: '选择图片失败', |
|||
icon: 'none' |
|||
}); |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
/** |
|||
* 模拟OCR识别结果 |
|||
*/ |
|||
simulateOcrResult() { |
|||
// 模拟识别成功后填充信息
|
|||
this.setData({ |
|||
name: '张三', |
|||
idNumber: '110101199001011234', |
|||
address: '北京市朝阳区建国路88号', |
|||
validStart: '2020-01-01', |
|||
validEnd: '2030-01-01' |
|||
}); |
|||
}, |
|||
|
|||
/** |
|||
* 提交认证 |
|||
*/ |
|||
submitAuth() { |
|||
// 验证是否上传了身份证
|
|||
if (!this.data.idCardFront || !this.data.idCardBack) { |
|||
wx.showToast({ |
|||
title: '请上传身份证正反面', |
|||
icon: 'none' |
|||
}); |
|||
return; |
|||
} |
|||
|
|||
// 这里可以添加提交认证信息到服务器的逻辑
|
|||
wx.showLoading({ title: '提交中...' }); |
|||
|
|||
// 模拟提交成功
|
|||
setTimeout(() => { |
|||
wx.hideLoading(); |
|||
wx.showToast({ |
|||
title: '认证成功', |
|||
icon: 'success', |
|||
duration: 1500 |
|||
}); |
|||
|
|||
// 延时返回上一页
|
|||
setTimeout(() => { |
|||
this.navigateBack(); |
|||
}, 1500); |
|||
}, 1000); |
|||
}, |
|||
|
|||
/** |
|||
* 生命周期函数--监听页面加载 |
|||
*/ |
|||
onLoad(options) { |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* 生命周期函数--监听页面初次渲染完成 |
|||
*/ |
|||
onReady() { |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* 生命周期函数--监听页面显示 |
|||
*/ |
|||
onShow() { |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* 生命周期函数--监听页面隐藏 |
|||
*/ |
|||
onHide() { |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* 生命周期函数--监听页面卸载 |
|||
*/ |
|||
onUnload() { |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* 页面相关事件处理函数--监听用户下拉动作 |
|||
*/ |
|||
onPullDownRefresh() { |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* 页面上拉触底事件的处理函数 |
|||
*/ |
|||
onReachBottom() { |
|||
|
|||
}, |
|||
|
|||
/** |
|||
* 用户点击右上角分享 |
|||
*/ |
|||
onShareAppMessage() { |
|||
|
|||
} |
|||
}); |
|||
@ -0,0 +1,6 @@ |
|||
{ |
|||
"usingComponents": {}, |
|||
"navigationBarTitleText": "个人认证", |
|||
"navigationBarBackgroundColor": "#07c160", |
|||
"navigationBarTextStyle": "white" |
|||
} |
|||
@ -0,0 +1,81 @@ |
|||
<view class="container"> |
|||
<!-- 顶部导航栏 --> |
|||
<view class="header"> |
|||
<view class="back-btn" bindtap="navigateBack"> |
|||
<text style="font-size: 36rpx;">←</text> |
|||
</view> |
|||
<view class="title">个人认证</view> |
|||
<view class="right-icon"></view> |
|||
</view> |
|||
|
|||
<!-- 身份证上传区域 --> |
|||
<view class="upload-section"> |
|||
<!-- 人像面上传 --> |
|||
<view class="upload-item"> |
|||
<view class="upload-label"> |
|||
<view class="label-title">人像面</view> |
|||
<view class="label-desc">上传您身份证头像面</view> |
|||
</view> |
|||
<view class="upload-area" bindtap="uploadIdCardFront"> |
|||
<image wx:if="{{idCardFront}}" src="{{idCardFront}}" class="uploaded-image"></image> |
|||
<view wx:else class="upload-placeholder"> |
|||
<view class="upload-icon"> |
|||
<text style="font-size: 48rpx;">+</text> |
|||
</view> |
|||
<view class="upload-text">点击上传人像面</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 国徽面上传 --> |
|||
<view class="upload-item"> |
|||
<view class="upload-label"> |
|||
<view class="label-title">国徽面</view> |
|||
<view class="label-desc">上传您身份证国徽面</view> |
|||
</view> |
|||
<view class="upload-area" bindtap="uploadIdCardBack"> |
|||
<image wx:if="{{idCardBack}}" src="{{idCardBack}}" class="uploaded-image"></image> |
|||
<view wx:else class="upload-placeholder"> |
|||
<view class="upload-icon"> |
|||
<text style="font-size: 48rpx;">+</text> |
|||
</view> |
|||
<view class="upload-text">点击上传国徽面</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 信息展示区域 --> |
|||
<view class="info-section"> |
|||
<view class="info-item"> |
|||
<view class="info-label">姓名</view> |
|||
<view class="info-value">{{name || '上传图片后自动获取'}}</view> |
|||
</view> |
|||
<view class="info-item"> |
|||
<view class="info-label">身份证号</view> |
|||
<view class="info-value">{{idNumber || '上传图片后自动获取'}}</view> |
|||
</view> |
|||
<view class="info-item"> |
|||
<view class="info-label">居住地址</view> |
|||
<view class="info-value">{{address || '上传图片后自动获取'}}</view> |
|||
</view> |
|||
<view class="info-item"> |
|||
<view class="info-label">有效期开始时间</view> |
|||
<view class="info-value">{{validStart || '上传图片后自动获取'}}</view> |
|||
</view> |
|||
<view class="info-item"> |
|||
<view class="info-label">有效期结束时间</view> |
|||
<view class="info-value">{{validEnd || '上传图片后自动获取'}}</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 提示信息 --> |
|||
<view class="tip-section"> |
|||
<text class="tip-text">为了给您提供更好的服务,请选择您当前服务所在区域</text> |
|||
</view> |
|||
|
|||
<!-- 认证按钮 --> |
|||
<view class="auth-btn" bindtap="submitAuth"> |
|||
<text class="auth-btn-text">认证</text> |
|||
</view> |
|||
</view> |
|||
@ -0,0 +1,165 @@ |
|||
/* pages/profile/authentication/index.wxss */ |
|||
|
|||
.container { |
|||
background-color: #f5f5f5; |
|||
min-height: 100vh; |
|||
padding-bottom: 40rpx; |
|||
} |
|||
|
|||
/* 顶部导航栏 */ |
|||
.header { |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
background-color: #07c160; |
|||
color: white; |
|||
padding: 20rpx 30rpx; |
|||
height: 100rpx; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.back-btn { |
|||
width: 80rpx; |
|||
display: flex; |
|||
align-items: center; |
|||
} |
|||
|
|||
.title { |
|||
font-size: 32rpx; |
|||
font-weight: bold; |
|||
flex: 1; |
|||
text-align: center; |
|||
} |
|||
|
|||
.right-icon { |
|||
width: 80rpx; |
|||
} |
|||
|
|||
/* 上传区域 */ |
|||
.upload-section { |
|||
background-color: white; |
|||
margin: 20rpx 0; |
|||
padding: 30rpx; |
|||
} |
|||
|
|||
.upload-item { |
|||
display: flex; |
|||
margin-bottom: 40rpx; |
|||
align-items: center; |
|||
} |
|||
|
|||
.upload-label { |
|||
flex: 1; |
|||
margin-right: 30rpx; |
|||
} |
|||
|
|||
.label-title { |
|||
font-size: 28rpx; |
|||
font-weight: bold; |
|||
color: #333; |
|||
margin-bottom: 8rpx; |
|||
} |
|||
|
|||
.label-desc { |
|||
font-size: 24rpx; |
|||
color: #999; |
|||
} |
|||
|
|||
.upload-area { |
|||
width: 320rpx; |
|||
height: 200rpx; |
|||
border: 2rpx dashed #ddd; |
|||
border-radius: 12rpx; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
position: relative; |
|||
} |
|||
|
|||
.upload-placeholder { |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
justify-content: center; |
|||
} |
|||
|
|||
.upload-icon { |
|||
width: 80rpx; |
|||
height: 80rpx; |
|||
border-radius: 50%; |
|||
background-color: #f0f0f0; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
margin-bottom: 16rpx; |
|||
} |
|||
|
|||
.upload-text { |
|||
font-size: 24rpx; |
|||
color: #999; |
|||
} |
|||
|
|||
.uploaded-image { |
|||
width: 100%; |
|||
height: 100%; |
|||
border-radius: 12rpx; |
|||
} |
|||
|
|||
/* 信息展示区域 */ |
|||
.info-section { |
|||
background-color: white; |
|||
margin: 20rpx 0; |
|||
padding: 0 30rpx; |
|||
} |
|||
|
|||
.info-item { |
|||
display: flex; |
|||
align-items: center; |
|||
padding: 24rpx 0; |
|||
border-bottom: 1rpx solid #f0f0f0; |
|||
} |
|||
|
|||
.info-item:last-child { |
|||
border-bottom: none; |
|||
} |
|||
|
|||
.info-label { |
|||
width: 180rpx; |
|||
font-size: 28rpx; |
|||
color: #333; |
|||
} |
|||
|
|||
.info-value { |
|||
flex: 1; |
|||
font-size: 28rpx; |
|||
color: #999; |
|||
} |
|||
|
|||
/* 提示信息 */ |
|||
.tip-section { |
|||
padding: 30rpx; |
|||
margin: 20rpx 0; |
|||
} |
|||
|
|||
.tip-text { |
|||
font-size: 24rpx; |
|||
color: #ff6b6b; |
|||
line-height: 1.5; |
|||
} |
|||
|
|||
/* 认证按钮 */ |
|||
.auth-btn { |
|||
background-color: #07c160; |
|||
color: white; |
|||
font-size: 32rpx; |
|||
font-weight: bold; |
|||
text-align: center; |
|||
padding: 30rpx; |
|||
margin: 0 30rpx; |
|||
border-radius: 20rpx; |
|||
margin-top: 40rpx; |
|||
} |
|||
|
|||
.auth-btn-text { |
|||
display: block; |
|||
} |
|||
Loading…
Reference in new issue