|
|
import { httpPrefix } from '../../config/site.config.js'; // #ifdef APP-PLUS
// import { requestSingleFreshLocation } from '@/common/js/qqLatLng.js'
// #endif
import store from '@/store/index.js' let apiOk =true let refreshTokenFn = null let timer = null
const user = { state: { vuex_cityInfo: uni.getStorageSync('vuex_cityInfo') ? uni.getStorageSync('vuex_cityInfo') : {city: ''}, vuex_userInfo: uni.getStorageSync('vuex_userInfo') ? uni.getStorageSync('vuex_userInfo') : {}, vuex_loginInfo: uni.getStorageSync('vuex_loginInfo') ? uni.getStorageSync('vuex_loginInfo') : {}, apiOk: true, NonPlatformStudent: false, }, mutations: { update_vuex_cityInfo(state, payload) { state.vuex_cityInfo = payload uni.setStorageSync('vuex_cityInfo', payload); }, update_vuex_loginInfo(state, payload) { state.vuex_loginInfo = payload uni.setStorageSync('vuex_loginInfo', payload); }, update_vuex_userInfo(state, payload) { state.vuex_userInfo = payload || {} uni.setStorageSync('vuex_userInfo', payload); }, update_apiOk(state, payload) { state.apiOk = payload }, goLogin(state) { uni.clearStorageSync() state.vuex_loginInfo = {} state.vuex_userInfo = {} const pages = getCurrentPages(); const page = pages[pages.length - 1].$page.fullPath; //完整路由地址
let url = '/pages/userCenter/login/login' if(page!= url) { console.log('当前页面') console.log(page) if(timer) clearTimeout(timer) timer = setTimeout(()=>{ uni.navigateTo({ url: url+'?redirect='+ page }) timer = null },1000) } }, // 为非平台学员开一条路
updateNonPlatformStudent(state, val) { state.NonPlatformStudent = val } }, actions: { getCity({commit}) { return new Promise((resolve, reject) => { // #ifdef APP-PLUS
store.dispatch("requestPermissions",'ACCESS_FINE_LOCATION',).then((result)=>{ if (result !== 1) return uni.showLoading({ title: '正在更新位置...' }) getCityInfo(resolve, reject,commit) }) // #endif
// #ifdef H5
console.log('h5经纬度的代码') uni.getLocation({ type: 'wgs84', // type: 'gcj02',
success: function(res) { console.log('当前位置的经度:' + res.longitude); // console.log('当前位置的纬度:' + res);
gaoDeFn(res.longitude,res.latitude, commit, resolve, reject,); } }) // #endif
}) }, checkLogin({state, commit}) { let token = state.vuex_loginInfo.accessToken if(!token) { commit('goLogin') return false } return true }, // 获取用户信息
async getUserInfo({state, commit}) { let token = state.vuex_loginInfo.accessToken if(!token) return const http = uni.$u.http let config = { custom: { auth: false }, header: {'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'} } const res = await http.get('app/student-record/get') if(!res) return commit('update_vuex_userInfo',res.data) }, // 刷新token
async refreshToken({state, commit}) { return new Promise(async(resolve, reject)=>{ if(!apiOk&&refreshTokenFn) { return refreshTokenFn } apiOk = false refreshTokenFn = null const http = uni.$u.http let config = { header: {'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'}, custom: { noToken: true } } let refreshToken = state.vuex_loginInfo.refreshToken refreshTokenFn = await http.post('member/auth/refresh-token',{refreshToken}, config) if( refreshTokenFn.data|| refreshTokenFn.data.accessToken) { apiOk = true commit('update_vuex_loginInfo', refreshTokenFn.data) uni.$u.http.setConfig((config) => { config.header.Authorization = 'Bearer ' + refreshTokenFn.data.accessToken return config }) resolve(refreshTokenFn) }else { apiOk = true commit('goLogin') reject('刷新token失败了') } }) } } }
export default user
// h5高德地图
function gaoDeFn(longitude,latitude,commit,resolve, reject,) { uni.request({ method: 'GET', url: 'https://restapi.amap.com/v3/geocode/regeo?parameters', data: { key: 'a0dde4c05390e689ea2c19d8ec447f62', location: `${longitude},${latitude}`, output: 'JSON' }, success: (res) => { console.log(res) // 数据结构见下方
let result = res.data.regeocode.addressComponent let obj = { lat: latitude, lng: longitude, city: result.city, cityCode: result.adcode, province: result.province, district: result.district } commit('update_vuex_cityInfo', obj) console.log('h5获得的最终位置对象') console.log(obj) resolve(obj) uni.hideLoading() }, fail: res => { reject(new Error('获取地理位置信息失败')) uni.hideLoading() } }) }
function getCityInfo(resolve, reject, commit) { // import { requestSingleFreshLocation } from '@/common/js/qqLatLng.js'
let qqLatLng = require('@/common/js/qqLatLng.js') try{ qqLatLng.requestSingleFreshLocation().then(res=>{ let result = res.location if(result.latitude===0) { console.log('gogogo来了吗没有获取到经纬度?') // uni.showToast({
// title: '您的定位权限已关闭,请手动开启定位权限',
// icon: 'none'
// })
// uni.hideLoading()
// uni.getLocation({
// // type: 'wgs84',
// type: 'gcj02',
// success: function(res) {
// console.log('只为弹出权限当前位置的经度:' + res.longitude);
// // console.log('当前位置的纬度:' + res);
// getCityInfo(resolve, reject, commit)
// uni.hideLoading()
// },
// fail() {
// uni.showToast({
// title: '您的定位权限已关闭,请手动开启定位权限',
// icon: 'none'
// })
// uni.hideLoading()
// }
// })
}else { console.log('腾讯云经纬度') console.log(result) let obj = { lat: result.latitude, lng: result.longitude, city: result.city, // cityCode: result.code||result.cityCode,
province: result.province, district: result.district, name: result.name } commit('update_vuex_cityInfo', obj) resolve(obj) uni.hideLoading() } }) }catch(e){ console.log('来到这是里了吗?腾讯云经纬度了') uni.hideLoading() uni.getLocation({ // type: 'wgs84',
type: 'gcj02', success: function(res) { console.log('当前位置的经度:' + res.longitude); // console.log('当前位置的纬度:' + res);
gaoDeFn(res.longitude,res.latitude, commit, resolve, reject,); }, fail(e) { console.log(e) uni.hideLoading() } }) } }
|