基本重构完成

This commit is contained in:
lik
2026-10-07 14:55:06 +08:00
parent f655c906f5
commit f0adf77a41
23 changed files with 1284 additions and 685 deletions
+46 -16
View File
@@ -1,8 +1,13 @@
const AIChatSocket = require('./utils/chatmsg.js')
const API = require('./utils/api.js')
const request = require('./utils/request.js')
App({
onLaunch() {
// request 层遇到 code 401(token 已失效)时回调这里:静默重登后自动重试原请求。
// 登录逻辑只在 app 里有一份,request 层不碰
request.setUnauthorizedHandler(() => this.silentSignin())
let appId = wx.getStorageSync('attendant-appid')
if (!appId) {
appId = 'app_' + Date.now().toString(36) + Math.random().toString(36).substr(2, 9)
@@ -63,39 +68,64 @@ App({
this.checkUpdate();
},
onShow(options) {
const request = require('./utils/request.js')
// 用户主动退出过就不再静默重登:wxsignin 只凭 code 换到 openid 就能重新
// 签发 token(api/user/handler/users.js 的 wxSignin),不拦这一下,
// 「我的」页的退出登录会被切后台/重进抵消。
// 用户在「我的」页重新点登录并授权成功时会清掉这个标记
onShow() {
this.silentSignin()
this.initChatSocket()
},
// 静默重登:app.onShow 与 request 层的 401 兜底共用这一个入口
// (wxsignin 只凭 code 换到 openid 就能签发 token,见 api/user/handler/users.js)。
//
// 单飞:并发只发一次——每次 wxsignin 都会重签 token 覆盖上一次,
// 两个请求重叠时 DB 里存的是后保存的那个、而 globalData 存的是后返回的那个,
// 一旦错位本机就拿着作废的 token,之后所有接口都 401。
//
// 用户主动退出过(has_logout)就不再静默重登,否则「我的」页的退出登录
// 会被切后台/重进抵消;用户在「我的」页重新授权成功时会清掉这个标记
silentSignin() {
if (wx.getStorageSync('has_logout')) {
this.initChatSocket()
return
return Promise.resolve(false)
}
wx.login({
success: res => {
if (res.code) {
request.post('https://api.huashengtec.com/user/wxsignin', {
if (this.signinPromise) {
return this.signinPromise
}
this.signinPromise = new Promise((resolve) => {
wx.login({
success: res => {
if (!res.code) {
console.log('登录失败!' + res.errMsg)
resolve(false)
return
}
API.user.wxSignin({
code: res.code
})
.then((data) => {
if (data.code == 0) {
this.globalData.user = data.data.user
resolve(true)
} else {
console.log('error:', data)
resolve(false)
}
})
.catch((err) => {
console.log('请求失败', err)
resolve(false)
})
} else {
console.log('登录失败!' + res.errMsg)
},
fail: (err) => {
console.log('登录失败!' + err.errMsg)
resolve(false)
}
}
})
}).then((ok) => {
this.signinPromise = null
return ok
})
this.initChatSocket()
return this.signinPromise
},
initChatSocket() {