洛阳学员端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

229 lines
6.1 KiB

import { httpPrefix } from '../../config/site.config.js';
// #ifdef APP-PLUS
// import { requestSingleFreshLocation } from '@/common/js/qqLatLng.js'
// #endif
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
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来了吗没有获取到经纬度?')
// openGps()
uni.getLocation({
// type: 'wgs84',
type: 'gcj02',
success: function(res) {
console.log('只为弹出权限当前位置的经度:' + res.longitude);
// console.log('当前位置的纬度:' + res);
getCityInfo(resolve, reject, commit)
},
fail() {
uni.showToast({
title: '您的定位权限已关闭,请手动开启定位权限',
icon: 'none'
})
}
})
}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,
}
commit('update_vuex_cityInfo', obj)
resolve(obj)
}
})
}catch(e){
console.log('来到这是里了吗?腾讯云经纬度了')
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()
}
})
}
}