290 lines
8.4 KiB
JavaScript
290 lines
8.4 KiB
JavaScript
import {
|
||
isURL,
|
||
validatenull
|
||
} from '@/untils/validate.js'
|
||
import website from '@/config/website'
|
||
import {
|
||
loginByUsername,
|
||
getUserInfo,
|
||
logout,
|
||
refreshToken,
|
||
mobileIsCms
|
||
} 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: getStore({ //用户发送短信次数
|
||
name: 'enterprise'
|
||
}) || 0, // 0 个体招工 ; 企业招工
|
||
userLocation: null,
|
||
userIsCms: false,
|
||
},
|
||
actions: {
|
||
getMobileIsCms({
|
||
commit,
|
||
dispatch
|
||
}) {
|
||
mobileIsCms().then((res) => {
|
||
commit('setIsCms', {
|
||
val: res.data.data
|
||
})
|
||
})
|
||
},
|
||
getUserLocation({
|
||
commit,
|
||
dispatch
|
||
}) {
|
||
console.log('getUserLocation null1')
|
||
// commit('setLocation', {
|
||
// latitude: 31.133980,
|
||
// longitude: 104.404419,
|
||
// })
|
||
uni.getLocation({
|
||
type: 'gcj02',
|
||
success: function(res) {
|
||
const {
|
||
longitude,
|
||
latitude
|
||
} = res
|
||
commit('setLocation', {
|
||
longitude,
|
||
latitude
|
||
})
|
||
},
|
||
fail: function(err) {
|
||
commit('setLocation', null)
|
||
},
|
||
complete: function(e) {}
|
||
})
|
||
},
|
||
//用户点击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, userInfo.token).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: {
|
||
setIsCms(state, payload) {
|
||
state.userIsCms = payload.val
|
||
},
|
||
setLocation(state, val) {
|
||
state.userLocation = val
|
||
},
|
||
setEnterprise(state, val) { // 0 个体招工 ; 企业招工
|
||
state.seeEnterprise = val;
|
||
setStore({
|
||
name: 'enterprise',
|
||
content: 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 |