2025-06-06 15:17:30 +08:00
|
|
|
|
// pages/login/login.js
|
|
|
|
|
|
const {
|
|
|
|
|
|
post
|
|
|
|
|
|
} = require('../../utils/http');
|
|
|
|
|
|
const {
|
2025-06-13 14:39:20 +08:00
|
|
|
|
getOpenId,
|
|
|
|
|
|
getUserAccountWithToken
|
2025-06-06 15:17:30 +08:00
|
|
|
|
} = require('../../utils/serve/user');
|
|
|
|
|
|
const tabService = require("../../utils/tab-serve")
|
|
|
|
|
|
const utils = require("../../utils/utils")
|
|
|
|
|
|
const app = getApp()
|
|
|
|
|
|
Page({
|
|
|
|
|
|
data: {
|
|
|
|
|
|
currentRole: 'user', // 当前选择的角色:user/teacher/parent
|
|
|
|
|
|
agreed: false, // 是否同意协议
|
|
|
|
|
|
|
|
|
|
|
|
top: 24, //胶囊距离顶部top
|
|
|
|
|
|
height: 32, //胶囊高度
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 教师登录相关
|
|
|
|
|
|
teacherPhone: "",
|
|
|
|
|
|
teacherPassword: "",
|
|
|
|
|
|
rememberPassword: false,
|
|
|
|
|
|
|
|
|
|
|
|
// 家长登录相关
|
|
|
|
|
|
studentName: "",
|
|
|
|
|
|
studentId: "",
|
|
|
|
|
|
isLoading: true,
|
|
|
|
|
|
params: ''
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 切换角色
|
|
|
|
|
|
switchRole: function (e) {
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
currentRole: e.currentTarget.dataset.role
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
//跳转隐私协议
|
|
|
|
|
|
goToPrivacy() {
|
|
|
|
|
|
wx.openPrivacyContract({
|
|
|
|
|
|
success: () => {
|
|
|
|
|
|
console.log('打开成功');
|
|
|
|
|
|
}, // 打开成功
|
|
|
|
|
|
fail: () => {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '打开失败,稍后重试',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
} // 打开失败
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
back() {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "请先同意用户协议",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 切换协议勾选状态
|
|
|
|
|
|
agree() {
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
agreed: !this.data.agreed
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 微信登录获取手机号
|
|
|
|
|
|
getPhoneNumber: function (e) {
|
|
|
|
|
|
|
|
|
|
|
|
if (e.detail.errMsg !== "getPhoneNumber:ok") {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "获取手机号失败",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!this.data.agreed) {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "请先同意用户协议",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
wx.showLoading({
|
|
|
|
|
|
title: "登录中..."
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
wx.login({
|
|
|
|
|
|
success: (loginRes) => {
|
|
|
|
|
|
if (loginRes.code) {
|
|
|
|
|
|
const params = {
|
|
|
|
|
|
code: loginRes.code,
|
|
|
|
|
|
encryptedData: e.detail.encryptedData,
|
|
|
|
|
|
iv: e.detail.iv,
|
|
|
|
|
|
role: this.data.currentRole
|
|
|
|
|
|
};
|
|
|
|
|
|
this.wechatLogin(params);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
wx.hideLoading();
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "登录失败",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
wx.hideLoading();
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "登录失败",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
console.error("wx.login失败:", err);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
//查看隐私协议
|
|
|
|
|
|
goRrivacy() {
|
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
|
url: '/subpackage/login/privacy',
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 教师手机号输入
|
|
|
|
|
|
onTeacherPhoneInput: function (e) {
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
teacherPhone: e.detail.value
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 教师密码输入
|
|
|
|
|
|
onTeacherPasswordInput: function (e) {
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
teacherPassword: e.detail.value
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 记住密码
|
|
|
|
|
|
onRememberChange: function (e) {
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
rememberPassword: e.detail.value.length > 0
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 教师登录
|
|
|
|
|
|
onTeacherLogin: function () {
|
|
|
|
|
|
const that = this
|
|
|
|
|
|
const {
|
|
|
|
|
|
teacherPhone,
|
|
|
|
|
|
teacherPassword
|
|
|
|
|
|
} = this.data;
|
|
|
|
|
|
if (!teacherPhone || !teacherPassword) {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "请输入手机号和密码",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const regex = /^1[3-9]\d{9}$/;
|
|
|
|
|
|
if (!regex.test(teacherPhone)) {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "请输入正确的手机号",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!this.data.agreed) {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "请先同意用户协议",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
wx.showLoading({
|
|
|
|
|
|
title: "登录中..."
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
wx.login({
|
|
|
|
|
|
success: async (loginData) => {
|
|
|
|
|
|
const opid = await getOpenId(loginData.code)
|
|
|
|
|
|
post("User/Login", {
|
|
|
|
|
|
roleId: 2,
|
|
|
|
|
|
key: teacherPhone,
|
|
|
|
|
|
password: teacherPassword,
|
2025-06-13 14:39:20 +08:00
|
|
|
|
openId: opid.data
|
2025-06-06 15:17:30 +08:00
|
|
|
|
}).then(res => {
|
|
|
|
|
|
wx.hideLoading();
|
|
|
|
|
|
if (res.success) {
|
2025-06-09 17:19:11 +08:00
|
|
|
|
wx.setStorageSync('roleId', res.data.role_Id)
|
2025-06-06 15:17:30 +08:00
|
|
|
|
that.handleLoginSuccess(res.data.token);
|
|
|
|
|
|
//
|
|
|
|
|
|
} else {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: res.errorMsg || "登录失败",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}).catch(err => {
|
|
|
|
|
|
wx.hideLoading();
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "网络错误",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
console.error("教师登录失败:", err);
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
})
|
|
|
|
|
|
|
2025-06-13 14:39:20 +08:00
|
|
|
|
|
2025-06-06 15:17:30 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 家长学生姓名输入
|
|
|
|
|
|
onStudentNameInput: function (e) {
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
studentName: e.detail.value
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 家长学生学号输入
|
|
|
|
|
|
onStudentIdInput: function (e) {
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
studentId: e.detail.value
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 家长登录
|
|
|
|
|
|
onParentLogin: function () {
|
|
|
|
|
|
const {
|
|
|
|
|
|
studentName,
|
|
|
|
|
|
studentId
|
|
|
|
|
|
} = this.data;
|
|
|
|
|
|
|
|
|
|
|
|
if (!studentName || !studentId) {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "请输入学生姓名和学号",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!this.data.agreed) {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "请先同意用户协议",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
wx.showLoading({
|
|
|
|
|
|
title: "登录中..."
|
|
|
|
|
|
});
|
2025-06-13 14:39:20 +08:00
|
|
|
|
wx.login({
|
|
|
|
|
|
success: async (loginData) => {
|
|
|
|
|
|
const opid = await getOpenId(loginData.code)
|
|
|
|
|
|
post("User/Login", {
|
|
|
|
|
|
roleId: 3,
|
|
|
|
|
|
key: studentName,
|
|
|
|
|
|
password: studentId,
|
|
|
|
|
|
openId: opid.data
|
|
|
|
|
|
}).then(res => {
|
|
|
|
|
|
wx.hideLoading();
|
|
|
|
|
|
if (res.success) {
|
|
|
|
|
|
wx.setStorageSync('roleId', res.data.role_Id)
|
|
|
|
|
|
this.handleLoginSuccess(res.data.token);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: res.errorMsg || "登录失败",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}).catch(err => {
|
|
|
|
|
|
wx.hideLoading();
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: err.errorMsg || "网络错误",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
console.error("家长登录失败:", err);
|
2025-06-06 15:17:30 +08:00
|
|
|
|
});
|
2025-06-13 14:39:20 +08:00
|
|
|
|
},
|
|
|
|
|
|
})
|
|
|
|
|
|
|
2025-06-06 15:17:30 +08:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 微信登录请求
|
|
|
|
|
|
wechatLogin: function (params) {
|
|
|
|
|
|
const that = this
|
|
|
|
|
|
post("User/WxFirstLogin", params)
|
|
|
|
|
|
.then(res => {
|
|
|
|
|
|
wx.hideLoading();
|
|
|
|
|
|
console.log(' ')
|
|
|
|
|
|
console.log(' ')
|
|
|
|
|
|
console.log('登录================>', params)
|
|
|
|
|
|
console.log('params================>', params)
|
|
|
|
|
|
console.log(' ')
|
|
|
|
|
|
console.log(' ')
|
|
|
|
|
|
if (res.success) {
|
|
|
|
|
|
that.handleLoginSuccess(res.data.token);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.error('登录失败================>', params)
|
|
|
|
|
|
console.error('登录失败================>', params)
|
|
|
|
|
|
console.error('登录失败================>', params)
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: res.message || "登录失败",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch(err => {
|
|
|
|
|
|
wx.hideLoading();
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "网络错误",
|
|
|
|
|
|
icon: "none"
|
|
|
|
|
|
});
|
|
|
|
|
|
console.error("微信登录失败:", err);
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 登录成功处理
|
|
|
|
|
|
handleLoginSuccess: function (token) {
|
|
|
|
|
|
if (app.globalData.isUserLogout) {
|
|
|
|
|
|
app.globalData.isUserLogout = false
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!token) return wx.showToast({
|
|
|
|
|
|
title: '网络错误,请重试',
|
|
|
|
|
|
icon: 'none'
|
|
|
|
|
|
})
|
|
|
|
|
|
wx.setStorageSync('token', token);
|
|
|
|
|
|
wx.showToast({
|
|
|
|
|
|
title: "登录成功",
|
|
|
|
|
|
icon: "success"
|
|
|
|
|
|
});
|
|
|
|
|
|
// 根据角色跳转
|
|
|
|
|
|
const redirectMap = {
|
|
|
|
|
|
user: '/pages/student/train/train',
|
|
|
|
|
|
teacher: "/pages/teacher/resource/resource",
|
|
|
|
|
|
parent: "/pages/parent/train/train"
|
|
|
|
|
|
};
|
|
|
|
|
|
tabService.updateRole(this, this.data.currentRole)
|
|
|
|
|
|
wx.setStorageSync('theme', this.data.currentRole)
|
|
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
wx.switchTab({
|
|
|
|
|
|
url: redirectMap[this.data.currentRole],
|
|
|
|
|
|
})
|
|
|
|
|
|
}, 1500);
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 跳转到注册页面
|
|
|
|
|
|
onRegister: function () {
|
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
|
url: "/pages/register/register"
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
//自动登录
|
|
|
|
|
|
autoLogin: (that) => {
|
|
|
|
|
|
wx.login({
|
|
|
|
|
|
success: async (loginRes) => {
|
|
|
|
|
|
console.log('自动登录====>', loginRes)
|
|
|
|
|
|
if (loginRes.code) {
|
|
|
|
|
|
const res = await post("User/WxLogin", {
|
|
|
|
|
|
code: loginRes.code,
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
console.log('loginCode登录===》', res)
|
|
|
|
|
|
if (res.success && res.data.token) {
|
|
|
|
|
|
tabService.updateRole(that, 'user')
|
|
|
|
|
|
wx.setStorageSync('theme', 'user')
|
|
|
|
|
|
wx.setStorageSync('token', res.data.token)
|
|
|
|
|
|
wx.switchTab({
|
|
|
|
|
|
url: '/pages/student/train/train',
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
that.setData({
|
|
|
|
|
|
isLoading: false
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
that.setData({
|
|
|
|
|
|
isLoading: false
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
that.setData({
|
|
|
|
|
|
isLoading: false
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
onLoad: function async (option) {
|
|
|
|
|
|
console.log(this.getTabBar)
|
|
|
|
|
|
//判断是否已登录,直接跳转首页
|
|
|
|
|
|
if (option.opt != null && option.opt == 'join') {
|
|
|
|
|
|
wx.setStorageSync('groupId', option.groupId)
|
|
|
|
|
|
}
|
|
|
|
|
|
if (app.globalData.isUserLogout) { //用户手动退出登录
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
isLoading: false
|
|
|
|
|
|
})
|
|
|
|
|
|
} else if (wx.getStorageInfoSync('token') != '' && wx.getStorageSync('theme') != '') {
|
|
|
|
|
|
utils.refreshToken()
|
|
|
|
|
|
const redirectMap = {
|
|
|
|
|
|
user: '/pages/student/train/train',
|
|
|
|
|
|
teacher: "/pages/teacher/resource/resource",
|
|
|
|
|
|
parent: "/pages/parent/train/train"
|
|
|
|
|
|
};
|
|
|
|
|
|
const theme = wx.getStorageSync('theme')
|
|
|
|
|
|
tabService.updateRole(this, theme)
|
|
|
|
|
|
console.log(redirectMap[theme])
|
|
|
|
|
|
wx.switchTab({
|
|
|
|
|
|
url: redirectMap[theme],
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.autoLogin(this)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const button = wx.getMenuButtonBoundingClientRect();
|
|
|
|
|
|
this.setData({
|
|
|
|
|
|
height: button.height,
|
|
|
|
|
|
top: button.top
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
|
|
|
|
|
});
|