Browse Source

feat: 完善认证状态显示和审核失败原因展示

蛋吧eggbar
徐飞洋 1 month ago
parent
commit
6595e00ff1
  1. 5
      pages/index/index.js
  2. 54
      pages/profile/authentication/index.js
  3. 7
      pages/profile/authentication/index.wxml
  4. 22
      pages/profile/authentication/index.wxss
  5. 4
      pages/profile/index.js
  6. 15
      pages/profile/index.wxml
  7. 10
      server-example/fix_settlement_fields.sql
  8. 8
      server-example/server-mysql.js

5
pages/index/index.js

@ -3414,11 +3414,16 @@ Page({
// 调用服务器验证登录状态
const validateRes = await API.validateUserLogin()
console.log('验证登录状态响应:', validateRes)
console.log('验证登录状态响应完整数据:', JSON.stringify(validateRes))
if (validateRes.success && validateRes.userInfo) {
// 服务器返回了用户信息,同步到本地
const app = getApp()
const userInfo = validateRes.userInfo
console.log('登录时服务器返回的用户信息:', JSON.stringify(userInfo))
console.log('登录时是否包含idcardstatus:', 'idcardstatus' in userInfo)
console.log('登录时是否包含reason:', 'reason' in userInfo)
// 更新全局用户信息
app.globalData.userInfo = userInfo

54
pages/profile/authentication/index.js

@ -15,7 +15,9 @@ Page({
idNumber: '', // 身份证号
address: '', // 居住地址
validStart: '', // 有效期开始
validEnd: '' // 有效期结束
validEnd: '', // 有效期结束
idcardstatus: 0, // 身份证认证状态:0-待审核,1-审核通过,2-审核失败
reason: '' // 审核失败原因
},
/**
@ -216,18 +218,40 @@ Page({
console.log('认证提交结果:', result);
if (result && result.success) {
// 更新本地存储的用户信息
const userInfo = wx.getStorageSync('userInfo') || {};
const updatedUserInfo = {
...userInfo,
idcard1: idcard1Url,
idcard2: idcard2Url,
businesslicenseurl: businessLicenseUrl,
name: this.data.name,
idNumber: this.data.idNumber,
address: this.data.address
};
wx.setStorageSync('userInfo', updatedUserInfo);
// 认证成功后,获取最新的用户信息,包括认证状态
API.getUserInfo(openid).then(userInfoRes => {
if (userInfoRes.success && userInfoRes.data) {
const latestUserInfo = userInfoRes.data;
// 更新本地存储的用户信息
const userInfo = wx.getStorageSync('userInfo') || {};
const updatedUserInfo = {
...userInfo,
...latestUserInfo,
idcard1: idcard1Url,
idcard2: idcard2Url,
businesslicenseurl: businessLicenseUrl,
name: this.data.name,
idNumber: this.data.idNumber,
address: this.data.address
};
wx.setStorageSync('userInfo', updatedUserInfo);
console.log('认证成功,用户信息已更新,包括认证状态:', updatedUserInfo);
}
}).catch(err => {
console.error('获取最新用户信息失败:', err);
// 即使获取失败,也要更新基本认证信息
const userInfo = wx.getStorageSync('userInfo') || {};
const updatedUserInfo = {
...userInfo,
idcard1: idcard1Url,
idcard2: idcard2Url,
businesslicenseurl: businessLicenseUrl,
name: this.data.name,
idNumber: this.data.idNumber,
address: this.data.address
};
wx.setStorageSync('userInfo', updatedUserInfo);
});
wx.hideLoading();
wx.showToast({
@ -310,7 +334,9 @@ Page({
idNumber: userData.idNumber || userData.id_number || '',
address: userData.address || '',
validStart: userData.validStart || userData.valid_start || '',
validEnd: userData.validEnd || userData.valid_end || ''
validEnd: userData.validEnd || userData.valid_end || '',
idcardstatus: userData.idcardstatus || 0,
reason: userData.reason || userData.reasonforfailure || ''
};
// 处理身份证正面图片

7
pages/profile/authentication/index.wxml

@ -64,6 +64,13 @@
</view>
</view>
</view>
<!-- 审核失败原因 -->
<view wx:if="{{idcardstatus === 2 && reason}}" class="failure-reason">
<view class="failure-title">审核失败原因</view>
<view class="failure-content">{{reason}}</view>
</view>
<!-- 认证按钮 -->
<view class="auth-btn" bindtap="submitAuth">
<text class="auth-btn-text">提交审核</text>

22
pages/profile/authentication/index.wxss

@ -167,6 +167,28 @@
line-height: 1.5;
}
/* 审核失败原因 */
.failure-reason {
background-color: #fff2f0;
border: 2rpx solid #ffccc7;
border-radius: 12rpx;
margin: 20rpx 30rpx;
padding: 24rpx;
}
.failure-title {
font-size: 28rpx;
font-weight: bold;
color: #ff4d4f;
margin-bottom: 16rpx;
}
.failure-content {
font-size: 24rpx;
color: #ff4d4f;
line-height: 1.5;
}
/* 认证按钮 */
.auth-btn {
background-color: #07c160;

4
pages/profile/index.js

@ -290,9 +290,13 @@ Page({
API.getUserInfo(openid).then(res => {
console.log('从服务器获取用户信息成功:', res)
console.log('服务器返回的完整数据:', JSON.stringify(res))
if (res.success && res.data) {
const serverUserInfo = res.data
console.log('服务器返回的用户信息:', JSON.stringify(serverUserInfo))
console.log('是否包含idcardstatus:', 'idcardstatus' in serverUserInfo)
console.log('是否包含reason:', 'reason' in serverUserInfo)
// 更新本地用户信息
const app = getApp()

15
pages/profile/index.wxml

@ -56,9 +56,18 @@
</view>
</view>
<!-- 个人认证 -->
<view class=".card" bindtap="navigateToAuthentication">
<text style="font-size: 28rpx; color: #333;">个人认证</text>
<text style="font-size: 28rpx; color: #999;">></text>
<view class="card" bindtap="navigateToAuthentication">
<view style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
<text style="font-size: 28rpx; color: #333;">个人认证</text>
<view style="display: flex; align-items: center;">
<text wx:if="{{userInfo.idcardstatus === 0}}" style="font-size: 24rpx; color: #faad14; margin-right: 12rpx;">待审核</text>
<text wx:elif="{{userInfo.idcardstatus === 1}}" style="font-size: 24rpx; color: #52c41a; margin-right: 12rpx;">审核通过</text>
<text wx:elif="{{userInfo.idcardstatus === 2}}" style="font-size: 24rpx; color: #ff4d4f; margin-right: 12rpx;">
{{userInfo.reasonforfailure ? '审核失败: ' + userInfo.reasonforfailure : '审核失败'}}
</text>
<text style="font-size: 28rpx; color: #999;">></text>
</view>
</view>
</view>
<!-- 位置授权 -->
<view class="card">

10
server-example/fix_settlement_fields.sql

@ -88,6 +88,16 @@ IF NOT EXISTS (
ALTER TABLE users ADD COLUMN reasonforfailure TEXT COMMENT '审核失败原因' AFTER partnerstatus;
END IF;
-- 检查 idcardstatus 字段(身份证认证状态)
IF NOT EXISTS (
SELECT * FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'wechat_app'
AND TABLE_NAME = 'users'
AND COLUMN_NAME = 'idcardstatus'
) THEN
ALTER TABLE users ADD COLUMN idcardstatus INT DEFAULT 0 COMMENT '身份证认证状态(0:待审核,1:审核通过,2:审核失败)' AFTER reasonforfailure;
END IF;
-- 检查 audit_time 字段(审核时间)
IF NOT EXISTS (
SELECT * FROM information_schema.COLUMNS

8
server-example/server-mysql.js

@ -1199,6 +1199,12 @@ User.init({
partnerstatus: {
type: DataTypes.STRING(255) // 合作商状态
},
// 身份证认证状态字段
idcardstatus: {
type: DataTypes.INTEGER, // 0: 待审核, 1: 审核通过, 2: 审核失败
defaultValue: 0, // 默认值为待审核
comment: '身份证认证状态'
},
// 授权区域字段 - 用于存储用户位置信息
authorized_region: {
type: DataTypes.TEXT // 存储用户位置信息的JSON字符串
@ -2468,7 +2474,7 @@ app.post('/api/user/validate', async (req, res) => {
// 查找用户
const user = await User.findOne({
where: { openid },
attributes: ['openid', 'userId', 'name', 'avatarUrl', 'phoneNumber', 'type']
attributes: ['openid', 'userId', 'name', 'avatarUrl', 'phoneNumber', 'type', 'partnerstatus', 'reasonforfailure', 'idcardstatus']
});
if (!user) {

Loading…
Cancel
Save