158 lines
4.8 KiB
TypeScript
158 lines
4.8 KiB
TypeScript
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' // 替换为你的首页路径
|
||
});
|
||
}
|
||
}
|
||
},
|
||
|
||
})
|