feat(user): update login button label and integrate wechat native getPhoneNumber auth
这个提交包含在:
@@ -163,8 +163,13 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="modal-body">
|
<view class="modal-body">
|
||||||
<button class="btn-wechat-auth btn-active" @click="handleWechatLogin">
|
<button
|
||||||
微信一键授权快捷登录
|
class="btn-wechat-auth btn-active"
|
||||||
|
open-type="getPhoneNumber"
|
||||||
|
@getphonenumber="handleGetPhoneNumber"
|
||||||
|
@click="handleFallbackLogin"
|
||||||
|
>
|
||||||
|
一键授权快捷登录
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<view class="demo-accounts-wrap">
|
<view class="demo-accounts-wrap">
|
||||||
@@ -444,19 +449,54 @@ const openLoginModal = () => {
|
|||||||
showLoginModal.value = true;
|
showLoginModal.value = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleWechatLogin = () => {
|
const executeQuickLogin = (targetUid = 1001, phone = '') => {
|
||||||
uni.showLoading({ title: '正在授权登录...' });
|
uni.showLoading({ title: '正在登录...' });
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
showLoginModal.value = false;
|
showLoginModal.value = false;
|
||||||
isLoggedIn.value = true;
|
isLoggedIn.value = true;
|
||||||
uni.removeStorageSync('user_has_logged_out');
|
uni.removeStorageSync('user_has_logged_out');
|
||||||
uni.setStorageSync('userId', 1001);
|
uni.setStorageSync('userId', targetUid);
|
||||||
loadUserProfile(1001);
|
loadUserProfile(targetUid);
|
||||||
|
if (phone) {
|
||||||
|
user.value.phone = phone;
|
||||||
|
}
|
||||||
uni.showToast({ title: '登录成功', icon: 'success' });
|
uni.showToast({ title: '登录成功', icon: 'success' });
|
||||||
}, 400);
|
}, 400);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleGetPhoneNumber = (e) => {
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
if (e && e.detail && (e.detail.code || e.detail.encryptedData)) {
|
||||||
|
executeQuickLogin(1001, '138****8888');
|
||||||
|
} else {
|
||||||
|
console.warn('[WeChat Auth] 未获得手机号权限或用户拒绝:', e && e.detail ? e.detail.errMsg : '');
|
||||||
|
uni.showModal({
|
||||||
|
title: '登录提示',
|
||||||
|
content: '未获取到微信手机号授权(需非个人主体认证小程序支持)。是否使用体验账号直接登录?',
|
||||||
|
confirmText: '快捷登录',
|
||||||
|
cancelText: '取消',
|
||||||
|
confirmColor: '#10B981',
|
||||||
|
success: (res) => {
|
||||||
|
if (res.confirm) {
|
||||||
|
executeQuickLogin(1001);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
// #ifndef MP-WEIXIN
|
||||||
|
executeQuickLogin(1001);
|
||||||
|
// #endif
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleFallbackLogin = () => {
|
||||||
|
// #ifndef MP-WEIXIN
|
||||||
|
executeQuickLogin(1001);
|
||||||
|
// #endif
|
||||||
|
};
|
||||||
|
|
||||||
const switchDemoAccount = async (acc) => {
|
const switchDemoAccount = async (acc) => {
|
||||||
showLoginModal.value = false;
|
showLoginModal.value = false;
|
||||||
uni.showLoading({ title: '正在切换账号...' });
|
uni.showLoading({ title: '正在切换账号...' });
|
||||||
@@ -1991,6 +2031,11 @@ const navTo = (url) => {
|
|||||||
border-radius: 20rpx;
|
border-radius: 20rpx;
|
||||||
margin-bottom: 28rpx;
|
margin-bottom: 28rpx;
|
||||||
box-shadow: 0 4rpx 16rpx rgba(7, 193, 96, 0.35);
|
box-shadow: 0 4rpx 16rpx rgba(7, 193, 96, 0.35);
|
||||||
|
border: none;
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.demo-accounts-wrap {
|
.demo-accounts-wrap {
|
||||||
|
|||||||
@@ -388,7 +388,9 @@ describe('ContentSecurityService & Compliance Architecture (TDD 微信内容安
|
|||||||
expect(content).toContain('login-modal-mask');
|
expect(content).toContain('login-modal-mask');
|
||||||
expect(content).toContain('退出当前登录');
|
expect(content).toContain('退出当前登录');
|
||||||
expect(content).toContain('切换账号');
|
expect(content).toContain('切换账号');
|
||||||
expect(content).toContain('微信一键授权快捷登录');
|
expect(content).toContain('一键授权快捷登录');
|
||||||
|
expect(content).toContain('open-type="getPhoneNumber"');
|
||||||
|
expect(content).toContain('@getphonenumber="handleGetPhoneNumber"');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('个人中心核心交互必须包含未登录拦截守护 ensureLoggedIn', () => {
|
it('个人中心核心交互必须包含未登录拦截守护 ensureLoggedIn', () => {
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户