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

158 lines
4.8 KiB
TypeScript
Raw Normal View History

2025-08-10 02:08:03 +08:00
import envConfig from '../../env';
import Toast from 'tdesign-miniprogram/toast/index';
2025-08-09 17:41:14 +08:00
Component({
data: {
image: 'https://tdesign.gtimg.com/mobile/demos/avatar1.png',
},
methods: {
2025-08-10 02:08:03 +08:00
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);
2025-08-11 00:40:21 +08:00
2025-08-09 17:41:14 +08:00
if (e.detail.errMsg === "getPhoneNumber:ok") {
2025-08-10 02:08:03 +08:00
const { encryptedData, iv} = e.detail;
console.log("encryptedData:",encryptedData)
const code = await this.getLoginCode();
console.log("获得的code为",code)
2025-08-11 00:40:21 +08:00
wx.request<WechatMiniprogram.LoginUserMsg>({
2025-08-10 02:08:03 +08:00
url: `${envConfig.apiBaseUrl}/user/login`,
2025-08-09 17:41:14 +08:00
method: "POST",
data: {
encryptedData,
iv,
code,
},
success(res) {
2025-08-10 02:08:03 +08:00
console.log(res)
if (res.data.code == "20001") {
Toast({
selector: '#t-toast',
message: '登录成功',
theme: 'success',
direction: 'column',
});
2025-08-11 00:40:21 +08:00
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',
});
2025-08-09 17:41:14 +08:00
}
},
fail() {
wx.showToast({ title: "网络错误", icon: "none" });
}
});
} else {
// 用户拒绝授权
wx.showToast({ title: "请允许授权以完成登录", icon: "none" });
}
2025-08-10 02:08:03 +08:00
},
2025-08-11 00:40:21 +08:00
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',
});
}
})
},
2025-08-10 02:08:03 +08:00
onBack() {
// 获取当前页面栈
const pages = getCurrentPages();
// 页面栈长度大于1说明有上一个页面
if (pages.length > 1) {
// 调用微信API返回上一页delta: 1 表示返回一层
wx.navigateBack({
delta: 1
});
} else {
// 如果没有上一页(比如从首页直接进入登录页),可跳转到默认页面(如首页)
wx.switchTab({
url: '/pages/index/index' // 替换为你的首页路径
});
}
2025-08-09 17:41:14 +08:00
}
},
2025-08-10 02:08:03 +08:00
2025-08-09 17:41:14 +08:00
})