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.
156 lines
3.0 KiB
156 lines
3.0 KiB
// 全局公共方法 |
|
const install = (Vue, vm) => { |
|
|
|
// 登录操作 |
|
const login = (userInfo, redirect) => { |
|
vm.$u.vuex('userInfo', userInfo) |
|
vm.$u.vuex('accessToken', userInfo.access_token) |
|
vm.$u.vuex('refreshToken', userInfo.refresh_token) |
|
vm.$u.vuex('isLogin', true) |
|
uni.redirectTo({ |
|
url: '/pages/home/home' |
|
}) |
|
// if (!redirect) { |
|
// uni.redirectTo({ |
|
// url: redirect, |
|
// fail() { |
|
// uni.switchTab({ |
|
// url: redirect |
|
// }) |
|
// } |
|
// }) |
|
// } else uni.switchTab({ |
|
// url: '/pages/home/home' |
|
// }) |
|
} |
|
|
|
// 退出登录 |
|
const logout = () => { |
|
vm.$u.vuex('userInfo', { |
|
avatar: '', |
|
nick_name: '游客', |
|
tenant_id: '暂无' |
|
}) |
|
vm.$u.vuex('accessToken', '') |
|
vm.$u.vuex('isLogin', false) |
|
uni.redirectTo({ |
|
url: '/pages/login/login-account' |
|
}) |
|
} |
|
|
|
// 检查登录状态 |
|
const checkLogin = (e = {}) => { |
|
if (!vm.isLogin) { |
|
uni.navigateTo({ |
|
url: '/pages/login/login-account' |
|
}) |
|
return false |
|
} |
|
return true |
|
} |
|
|
|
// 跳转路由前检查登录状态 |
|
const route = (url) => { |
|
if (!vm.isLogin) { |
|
uni.showToast({ |
|
title: '请先登录', |
|
icon: 'none' |
|
}) |
|
const pages = getCurrentPages() |
|
const currentPage = pages[pages.length - 1] |
|
setTimeout(() => { |
|
uni.navigateTo({ |
|
url: `/pages/login/login-account?redirect=/${currentPage.route}` |
|
}) |
|
}, 500) |
|
return false |
|
} |
|
uni.navigateTo({ |
|
url: url |
|
}) |
|
} |
|
|
|
// URL参数转对象 |
|
const paramsToObj = (url) => { |
|
if (url.indexOf('?') != -1) { |
|
let arr = url.split('?')[1] |
|
} |
|
let arr = url.split('&') |
|
let obj = {} |
|
for (let i of arr) { |
|
obj[i.split('=')[0]] = i.split('=')[1] |
|
} |
|
return obj |
|
} |
|
|
|
// 刷新当前页面 |
|
const refreshPage = () => { |
|
const pages = getCurrentPages() |
|
const currentPage = pages[pages.length - 1] |
|
const path = '/' + currentPage.route + vm.$u.queryParams(currentPage.options) |
|
if (vm.$u.test.contains(currentPage.route, 'tabbar')) { |
|
uni.reLaunch({ |
|
url: path, |
|
fail: (err) => { |
|
console.log(err) |
|
} |
|
}) |
|
} else { |
|
uni.redirectTo({ |
|
url: path, |
|
fail: (err) => { |
|
console.log(err) |
|
} |
|
}) |
|
} |
|
} |
|
|
|
// 提示 |
|
const showToast = (data = {}) => { |
|
if (typeof data == 'string') { |
|
uni.showToast({ |
|
title: data, |
|
icon: 'none' |
|
}) |
|
} else { |
|
uni.showToast({ |
|
title: data.title, |
|
icon: data.icon || 'none', |
|
image: data.image || '', |
|
mask: data.mask || false, |
|
position: data.position || 'center', |
|
duration: data.duration || 1500, |
|
success: () => { |
|
setTimeout(() => { |
|
if (data.back) return uni.navigateBack() |
|
data.success && data.success() |
|
}, data.duration || 1500) |
|
} |
|
}) |
|
} |
|
} |
|
|
|
// 刷新token |
|
const refreshToken = (data) => { |
|
return new Promise((resolve) => { |
|
vm.$u.vuex('accessToken', data.access_token) |
|
vm.$u.vuex('refreshToken', data.refresh_token) |
|
resolve() |
|
}) |
|
} |
|
|
|
// 将定义的方法挂载,使用this.$u.func.xx调用 |
|
Vue.prototype.$u.func = { |
|
login, |
|
logout, |
|
route, |
|
checkLogin, |
|
paramsToObj, |
|
refreshPage, |
|
showToast, |
|
refreshToken |
|
} |
|
} |
|
export default { |
|
install |
|
}
|
|
|