bonus-ui/src/store/modules/user.js

163 lines
4.3 KiB
JavaScript
Raw Normal View History

2024-09-10 18:01:39 +08:00
import { login, logout, getInfo, refreshToken, getPhoneCode, isLogin,isAdmin} from '@/api/login'
2024-06-26 15:11:05 +08:00
import { getToken, setToken, setExpiresIn, removeToken } from '@/utils/auth'
2024-09-08 20:13:32 +08:00
// 更严格的手机号和邮箱正则表达式
const phonePattern = /^(\+86)?1[3-9]\d{9}$/ // 支持前缀 +86
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
// 构建 payload 函数
2024-09-10 18:01:39 +08:00
const buildPayload = ({ loginMethod, username, password, uuid, code, mobile, verificationCode,phoneUuid }) => {
2024-09-08 20:13:32 +08:00
let loginType = ''
if (loginMethod === 'mobile') {
loginType = phonePattern.test(mobile.trim()) ? 'PHONE_OTP' : emailPattern.test(mobile.trim()) ? 'EMAIL_OTP' : 'PHONE_OTP'
return {
username: mobile.trim(),
verificationCode,
uuid,
code,
2024-09-10 18:01:39 +08:00
loginType,
phoneUuid
2024-09-08 20:13:32 +08:00
}
} else {
loginType = phonePattern.test(username.trim()) ? 'PHONE_PASSWORD' : emailPattern.test(username.trim()) ? 'EMAIL_PASSWORD' : 'USERNAME_PASSWORD'
return {
username: username.trim(),
password,
verificationCode,
uuid,
code,
2024-09-10 18:01:39 +08:00
loginType,
phoneUuid
2024-09-08 20:13:32 +08:00
}
}
}
2024-06-26 15:11:05 +08:00
const user = {
state: {
token: getToken(),
id: '',
name: '',
avatar: '',
roles: [],
permissions: []
},
mutations: {
2024-09-08 20:13:32 +08:00
SET_TOKEN(state, token) {
2024-06-26 15:11:05 +08:00
state.token = token
},
2024-09-08 20:13:32 +08:00
SET_EXPIRES_IN(state, time) {
2024-06-26 15:11:05 +08:00
state.expires_in = time
},
2024-09-08 20:13:32 +08:00
SET_ID(state, id) {
2024-06-26 15:11:05 +08:00
state.id = id
},
2024-09-08 20:13:32 +08:00
SET_NAME(state, name) {
2024-06-26 15:11:05 +08:00
state.name = name
},
2024-09-08 20:13:32 +08:00
SET_AVATAR(state, avatar) {
2024-06-26 15:11:05 +08:00
state.avatar = avatar
},
2024-09-08 20:13:32 +08:00
SET_ROLES(state, roles) {
2024-06-26 15:11:05 +08:00
state.roles = roles
},
2024-09-08 20:13:32 +08:00
SET_PERMISSIONS(state, permissions) {
2024-06-26 15:11:05 +08:00
state.permissions = permissions
}
},
actions: {
2024-07-31 15:06:58 +08:00
IsLogin({ commit }, userInfo) {
2024-09-08 20:13:32 +08:00
const payload = buildPayload(userInfo)
return isLogin(payload)
.then(res => res)
.catch(error => Promise.reject(error))
},
IsAdmin({ commit }, userInfo) {
const payload = buildPayload(userInfo)
return isAdmin(payload)
.then(res => res)
.catch(error => Promise.reject(error))
2024-07-31 15:06:58 +08:00
},
2024-09-08 20:13:32 +08:00
2024-06-26 15:11:05 +08:00
// 登录
Login({ commit }, userInfo) {
2024-09-08 20:13:32 +08:00
const payload = buildPayload(userInfo)
return login(payload)
.then(res => {
const { access_token, expires_in } = res.data
setToken(access_token)
commit('SET_TOKEN', access_token)
setExpiresIn(expires_in)
commit('SET_EXPIRES_IN', expires_in)
2024-11-05 14:43:17 +08:00
return res;
2024-06-26 15:11:05 +08:00
})
2024-09-08 20:13:32 +08:00
.catch(error => Promise.reject(error))
2024-06-26 15:11:05 +08:00
},
2024-09-08 20:13:32 +08:00
// 获取手机验证码
2024-07-22 15:32:27 +08:00
GetPhoneCode({ commit }, userInfo) {
2024-09-08 20:13:32 +08:00
const payload = {
2024-09-10 18:01:39 +08:00
username: userInfo.mobile.trim(),
2024-07-22 15:32:27 +08:00
uuid: userInfo.uuid,
code: userInfo.code,
2024-09-10 18:01:39 +08:00
phoneUuid: userInfo.phoneUuid,
verificationCodeType: userInfo.mobileCodeType
2024-07-22 15:32:27 +08:00
}
2024-09-08 20:13:32 +08:00
return getPhoneCode(payload)
.then(res => res)
.catch(error => Promise.reject(error))
2024-07-22 15:32:27 +08:00
},
2024-09-08 20:13:32 +08:00
2024-06-26 15:11:05 +08:00
// 获取用户信息
2024-09-08 20:13:32 +08:00
GetInfo({ commit }) {
return getInfo()
.then(res => {
2024-06-26 15:11:05 +08:00
const user = res.user
2024-09-08 20:13:32 +08:00
const avatar = user.avatar ? user.avatar : require('@/assets/images/profile.jpg')
commit('SET_ROLES', res.roles && res.roles.length > 0 ? res.roles : ['ROLE_DEFAULT'])
commit('SET_PERMISSIONS', res.permissions)
2024-06-26 15:11:05 +08:00
commit('SET_ID', user.userId)
commit('SET_NAME', user.userName)
commit('SET_AVATAR', avatar)
2024-09-08 20:13:32 +08:00
return res
2024-06-26 15:11:05 +08:00
})
2024-09-08 20:13:32 +08:00
.catch(error => Promise.reject(error))
2024-06-26 15:11:05 +08:00
},
2024-09-08 20:13:32 +08:00
// 刷新 token
2024-07-22 15:32:27 +08:00
RefreshToken({ commit, state }) {
2024-09-08 20:13:32 +08:00
return refreshToken(state.token)
.then(res => {
const expiresIn = res.data
setExpiresIn(expiresIn)
commit('SET_EXPIRES_IN', expiresIn)
2024-06-26 15:11:05 +08:00
})
2024-09-08 20:13:32 +08:00
.catch(error => Promise.reject(error))
2024-06-26 15:11:05 +08:00
},
2024-07-22 15:32:27 +08:00
2024-09-08 20:13:32 +08:00
// 退出登录
2024-06-26 15:11:05 +08:00
LogOut({ commit, state }) {
2024-09-08 20:13:32 +08:00
return logout(state.token)
.then(() => {
2024-06-26 15:11:05 +08:00
commit('SET_TOKEN', '')
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
removeToken()
})
2024-09-08 20:13:32 +08:00
.catch(error => Promise.reject(error))
2024-06-26 15:11:05 +08:00
},
2024-09-08 20:13:32 +08:00
// 前端退出
2024-06-26 15:11:05 +08:00
FedLogOut({ commit }) {
return new Promise(resolve => {
commit('SET_TOKEN', '')
removeToken()
resolve()
})
}
}
}
export default user