126 lines
3.5 KiB
JavaScript
Executable File
126 lines
3.5 KiB
JavaScript
Executable File
import { defineStore } from 'pinia'
|
|
import { getToken, removeToken, setToken, getUserInfo as getStorageUserInfo, setUserInfo, removeUserInfo } from '@/utils/token.js'
|
|
import { getUserInfo, userLogin } from '@/api/user/index.js'
|
|
import defaultAvatar from '@/static/avatar.png'
|
|
import router from '@/router'
|
|
import { useToast } from '@/utils/modals/index.js'
|
|
|
|
// import storage from '@/utils/storages'
|
|
|
|
export const useUserStore = defineStore('app-user', {
|
|
state () {
|
|
return {
|
|
userInfo: getStorageUserInfo(),
|
|
token: getToken(),
|
|
}
|
|
},
|
|
getters: {
|
|
userId: state => state.userInfo?.userId,
|
|
roleName: state => state.userInfo?.roleName ?? 'simple',
|
|
username: state => state.userInfo?.username,
|
|
resumed: state => !!state.resumeInfo.id,
|
|
},
|
|
actions: {
|
|
async login () {
|
|
return new Promise(async (resolve, reject) => {
|
|
const { code } = await uni.login({
|
|
provider: 'weixin',
|
|
})
|
|
const res = await userLogin({ code })
|
|
if (res.code !== 200) {
|
|
reject('自动登录失败')
|
|
}
|
|
if (res.user?.id) {
|
|
this.setUserInfo(res.user)
|
|
this.setToken(res.token)
|
|
resolve(res.user)
|
|
} else uni.getUserInfo({
|
|
provider: 'weixin',
|
|
success: ({ userInfo }) => {
|
|
// 获取用户信息成功
|
|
this.setUserInfo(userInfo)
|
|
this.setToken(res.token)
|
|
resolve(userInfo)
|
|
},
|
|
fail: (err) => {
|
|
useToast('微信登录失败,请先同意授权!', {
|
|
type: 'error',
|
|
duration: 2 * 1000,
|
|
})
|
|
this.removeToken()
|
|
// 如果用户拒绝授权,可以引导用户打开授权设置页面
|
|
if (err.errMsg === 'getUserInfo:fail auth deny') {
|
|
this.openAuthSetting()
|
|
}
|
|
reject('登录失败')
|
|
}
|
|
})
|
|
})
|
|
},
|
|
removeToken () {
|
|
this.token = ''
|
|
removeToken()
|
|
},
|
|
setToken (token) {
|
|
this.token = token
|
|
setToken(token)
|
|
},
|
|
removeUserInfo () {
|
|
this.userInfo = {}
|
|
removeUserInfo()
|
|
},
|
|
setUserInfo (userInfo = {}) {
|
|
this.userInfo = userInfo
|
|
setUserInfo(userInfo)
|
|
},
|
|
// 获取用户详情
|
|
// async getUserInfo ({ params = {}, ...options } = {}) {
|
|
// const res = await getUserInfo(params, options)
|
|
|
|
// if (!res?.success) {
|
|
// throw new Error('获取用户信息失败')
|
|
// }
|
|
|
|
// if (!res?.data) {
|
|
// throw new Error('获取用户信息失败, 没有获取到数据')
|
|
// }
|
|
|
|
// const data = res.data
|
|
// this.userInfo = {
|
|
// ...data,
|
|
// userId: data.id,
|
|
// avatar: data.avatar || defaultAvatar,
|
|
// username: data.username,
|
|
// }
|
|
|
|
// return this.userInfo
|
|
// },
|
|
openAuthSetting () {
|
|
uni.openSetting({
|
|
success: function (res) {
|
|
if (res.authSetting['scope.userInfo']) {
|
|
// 用户开启了授权,重新调用 `uni.getUserInfo` 获取用户信息
|
|
getUserInfo()
|
|
}
|
|
}
|
|
})
|
|
},
|
|
logout ({ silenced = false, redirect = null } = {}) {
|
|
this.removeToken()
|
|
this.removeUserInfo()
|
|
// this.userInfo = {}
|
|
// this.resumeInfo = {}
|
|
|
|
// if (!silenced) {
|
|
// router.replaceAll({
|
|
// force: true,
|
|
// path: '/login',
|
|
// query: {
|
|
// redirect,
|
|
// },
|
|
// })
|
|
// }
|
|
},
|
|
},
|
|
})
|