// 全局公共方法 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) if(userInfo.user_type == 1) { // 教师首页 if (redirect) { uni.redirectTo({ url: redirect, fail() { uni.switchTab({ url: redirect }) } }) } else uni.redirectTo({ url: '/pages/home/index' }) } else if(userInfo.user_type == 2) { // 学生首页 if (redirect) { uni.redirectTo({ url: redirect, fail() { uni.switchTab({ url: redirect }) } }) } else uni.navigateTo({ url: '/pages-student/home/index' }) } // if(userInfo) // debugger } // 退出登录 const logout = (callback) => { // vm.$u.vuex('userInfo', { // avatar: '', // nick_name: '游客', // tenant_id: '暂无' // }) // vm.$u.vuex('accessToken', '') // vm.$u.vuex('isLogin', false) // uni.redirectTo({ // url: '/pages/login/login' // }) callback() } // 检查登录状态 const checkLogin = (e = {}) => { if (!vm.isLogin) { uni.navigateTo({ url: '/pages/login/login' }) 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?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) => { console.log('refreshTokenrefreshToken',data) 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 }