Files
toutoukan_front/miniprogram/pages/user-login/user-login.ts

158 lines
4.8 KiB
TypeScript
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.
import envConfig from '../../env';
import Toast from 'tdesign-miniprogram/toast/index';
Component({
data: {
image: 'https://tdesign.gtimg.com/mobile/demos/avatar1.png',
},
methods: {
async getLoginCode() {
return new Promise((resolve, reject) => {
wx.login({
success: (res) => {
if (res.code) {
resolve(res.code); // 返回获取到的code
} else {
reject(new Error('获取登录凭证失败: ' + res.errMsg));
}
},
fail: (err) => {
reject(err);
}
});
});
},
async wxPhone(e: { detail: any; }){
console.log("授权回调结果:", e);
if (e.detail.errMsg === "getPhoneNumber:ok") {
const { encryptedData, iv} = e.detail;
console.log("encryptedData:",encryptedData)
const code = await this.getLoginCode();
console.log("获得的code为",code)
wx.request<WechatMiniprogram.LoginUserMsg>({
url: `${envConfig.apiBaseUrl}/user/login`,
method: "POST",
data: {
encryptedData,
iv,
code,
},
success(res) {
console.log(res)
if (res.data.code == "20001") {
Toast({
selector: '#t-toast',
message: '登录成功',
theme: 'success',
direction: 'column',
});
const app = getApp()
app.setToken(res.data.token)
app.setUserInfo({
uid: res.data.userinfo.uid,
username: res.data.userinfo.username,
telephone: res.data.userinfo.telephone,
gender: 2,
})
setTimeout(() => {
// 3.1 刷新user组件
const pages = getCurrentPages();
let homePage = null;
pages.forEach(page => {
if (page.route === 'pages/index/index') {
homePage = page;
}
});
if (homePage) {
const userComponent = homePage.selectComponent('#userComp');
if (userComponent) {
userComponent.refreshUserStatus();
}
} else {
// 首页不在栈中,跳转首页
wx.redirectTo({
url: '/pages/home/home'
});
// 注意:如果跳转后不需要执行下面的返回逻辑,可在此处加 return
// return;
}
// 3.2 页面跳转/返回
if (pages.length > 1) {
// 返回上一页
wx.navigateBack({
delta: 1
});
} else {
// 跳转到首页tabBar页面用switchTab
wx.switchTab({
url: '/pages/index/index'
});
}
}, 1500); // 延迟时间1500毫秒1.5秒),可根据需要调整
}else{
Toast({
selector: '#t-toast',
message: '登录失败',
theme: 'error',
direction: 'column',
});
}
},
fail() {
wx.showToast({ title: "网络错误", icon: "none" });
}
});
} else {
// 用户拒绝授权
wx.showToast({ title: "请允许授权以完成登录", icon: "none" });
}
},
testSend(){
const token = wx.getStorageSync("token");
wx.request({
url: `${envConfig.apiBaseUrl}/user/test`,
method: "POST",
data: {
},
header:{
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
}
,
success(res){
console.log(res)
Toast({
selector: '#t-toast',
message: '测试成功',
theme: 'success',
direction: 'column',
});
}
})
},
onBack() {
// 获取当前页面栈
const pages = getCurrentPages();
// 页面栈长度大于1说明有上一个页面
if (pages.length > 1) {
// 调用微信API返回上一页delta: 1 表示返回一层
wx.navigateBack({
delta: 1
});
} else {
// 如果没有上一页(比如从首页直接进入登录页),可跳转到默认页面(如首页)
wx.switchTab({
url: '/pages/index/index' // 替换为你的首页路径
});
}
}
},
})