Files
jobslink-user-clent/store/models/user.js
2024-03-13 09:35:02 +08:00

235 lines
4.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {
isURL,
validatenull
} from '@/untils/validate.js'
import website from '@/config/website'
import {
loginByUsername,
getUserInfo,
logout,
refreshToken
} from '@/api/user'
import md5 from 'js-md5'
import {
getStore,
setStore
} from '@/untils/store.js'
import {
calcDate
} from '@/untils/date.js'
let refreshTimer = null;
function startRefreshToken(dispatch) {
refreshTimer = setInterval(() => {
const token =
getStore({
name: "token",
debug: true
}) || {};
const date = calcDate(token.datetime, new Date().getTime());
if (validatenull(date)) return;
if (date.seconds >= website.tokenTime) {
dispatch("refreshToken")
.then(() => {})
.catch(() => {});
}
}, 10000);
}
function stopRefreshToken() {
clearInterval(refreshTimer)
}
const user = {
state: {
tenantId: getStore({
name: 'tenantId'
}) || '',
userInfo: getStore({
name: 'userInfo'
}) || [],
token: getStore({
name: 'token'
}) || '',
refreshToken: getStore({
name: 'refreshToken'
}) || '',
userChecked:getStore({
name: 'setUserCheckValue'
}) || false,
sendTimes:getStore({//用户发送短信次数
name:'setUserSendTimes'
}) || 0,
seeEnterprise: 0, // 0 个体招工 企业招工
},
actions: {
//用户点击radio按钮
UserCheckedBtn({commit},val){
commit('SET_USER_CHECKED',val);
},
//根据用户名登录
LoginByUsername({
commit,
dispatch
}, userInfo) {
return new Promise((resolve, reject) => {
loginByUsername(userInfo.tenantId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key,
userInfo.code).then(res => {
const data = res.data;
if (data.error_description) {
uni.showToast({
icon: "none",
title: data.error_description,
})
} else {
commit('SET_TOKEN', data.access_token);
commit('SET_REFRESH_TOKEN', data.refresh_token);
commit('SET_TENANT_ID', data.tenant_id);
commit('SET_USER_INFO', data);
dispatch('refreshAuthState')
dispatch('startRefreshNewsTimer')
startRefreshToken();
}
resolve(res);
}).catch(error => {
reject(error);
})
})
},
//根据手机号登录
LoginByPhone({
commit
}, userInfo) {
return new Promise((resolve) => {
loginByUsername(userInfo.phone, userInfo.code).then(res => {
const data = res.data.data;
commit('SET_TOKEN', data);
resolve();
})
})
},
GetUserInfo({
commit
}) {
return new Promise((resolve, reject) => {
getUserInfo().then((res) => {
const data = res.data.data;
resolve(data);
}).catch(err => {
reject(err);
})
})
},
//刷新token
refreshToken({
state,
commit,
dispatch
}) {
return new Promise((resolve, reject) => {
refreshToken(state.refreshToken, state.tenantId).then(res => {
const data = res.data;
dispatch('refreshAuthState')
commit('SET_TOKEN', data.access_token);
commit('SET_REFRESH_TOKEN', data.refresh_token);
resolve();
}).catch(error => {
reject(error)
})
})
},
// 登出
LogOut({
dispatch,
commit
}) {
return new Promise((resolve, reject) => {
logout();
stopRefreshToken();
commit('SET_TOKEN', '');
commit('SET_VIPCODE', '0');
resolve();
})
},
//注销session
FedLogOut({
commit
}) {
return new Promise(resolve => {
commit('SET_TOKEN', '');
resolve();
})
},
startRefreshTokenTimer({
state,
commit,
dispatch
}) {
if (state.token) {
dispatch('refreshToken').then(() => {
startRefreshToken(dispatch);
})
}
},
//更新用户接收短信次数
UpdateUserSendTimes({
commit
}, data) {
commit('SET_USER_SENDTIMES',data);
},
},
mutations: {
setEnterprise(state, val) { // 0 个体招工 企业招工
state.seeEnterprise = val;
},
SET_TOKEN: (state, token) => {
state.token = token;
setStore({
name: 'token',
content: state.token,
type: 'session'
})
},
SET_REFRESH_TOKEN: (state, refreshToken) => {
state.refreshToken = refreshToken;
setStore({
name: 'refreshToken',
content: state.refreshToken,
type: 'session'
})
},
SET_TENANT_ID: (state, tenantId) => {
state.tenantId = tenantId;
setStore({
name: 'tenantId',
content: state.tenantId,
type: 'session'
})
},
SET_USER_INFO: (state, userInfo) => {
state.userInfo = userInfo;
setStore({
name: 'userInfo',
content: state.userInfo
})
},
SET_USER_CHECKED:(state,val)=>{
state.userChecked=val;
setStore({
name: 'setUserCheckValue',
content: state.userChecked
})
},
SET_USER_SENDTIMES:(state,val)=>{
state.sendTimes=val;
setStore({
name: 'setUserSendTimes',
content: state.sendTimes
})
},
}
}
export default user