import store from "@/store/index.js"
|
import {
|
dynamicMenu,
|
getDetail
|
} from "@/api/system/role.js"
|
import {
|
logAdd
|
} from "@/api/system/logManage"
|
|
// 全局公共方法
|
const install = (Vue, vm) => {
|
|
// 登录操作 1
|
const login = async (userInfo, pageType) => {
|
vm.$u.vuex('userInfo', userInfo)
|
vm.$u.vuex('accessToken', userInfo.access_token)
|
vm.$u.vuex('isLogin', true)
|
let activeRoleId = userInfo.role_id.split(",")[0]
|
const resDetail = await getDetail({
|
id: activeRoleId
|
})
|
console.log("当前激活角色的id:", resDetail.data)
|
//添加当前激活的角色(默认取第一个)
|
store.commit('setActiveRole', resDetail.data)
|
//获取角色菜单
|
const {
|
data
|
} = await dynamicMenu({
|
roleId: activeRoleId,
|
roleName: resDetail.data.roleName
|
})
|
|
let appMenu = data.filter(e => e.name == 'app')[0].children
|
console.log("当前角色菜单:", appMenu)
|
store.commit('SET_MENU', appMenu)
|
if (pageType == 4 && resDetail.data.roleAlias == "mj") {
|
uni.navigateTo({
|
url: '/subPackage/school/security'
|
})
|
} else {
|
//跳转到首页
|
uni.switchTab({
|
url: '/pages/home/index'
|
})
|
}
|
|
}
|
|
// 退出登录
|
const logout = () => {
|
vm.$u.vuex('userInfo', {
|
avatar: '',
|
nick_name: '游客',
|
tenant_id: '暂无'
|
})
|
vm.$u.vuex('accessToken', '')
|
vm.$u.vuex('isLogin', false)
|
if (uni.getStorageSync("pageType")) {
|
uni.removeStorageSync("pageType")
|
}
|
if (uni.getStorageSync("houseCode")) {
|
uni.removeStorageSync("houseCode")
|
}
|
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()
|
})
|
}
|
|
/**
|
* 全局跳转
|
* type = navTo / redTo /switchTab / navBack
|
*/
|
const globalNavigator = (url, type = "navTo", name) => {
|
//type = navTo / redTo /switchTab / navBack
|
|
if (name) {
|
let params = {
|
operationDescription: name,
|
source: 'APP',
|
url: url.split("?")[0],
|
}
|
logAdd(params)
|
}
|
|
switch (type) {
|
case "navTo":
|
uni.navigateTo({
|
url: url
|
})
|
break;
|
case "redTo":
|
uni.redirectTo({
|
url: url
|
})
|
break;
|
case "switchTab":
|
uni.switchTab({
|
url: url
|
})
|
break;
|
case "navBack":
|
uni.navigateBack({
|
delta: 1
|
})
|
break;
|
default:
|
return
|
}
|
}
|
|
const updateTabbar = (count) => {
|
let tabList = uni.getStorageSync("tabBarList")
|
tabList.forEach(tab => {
|
if (tab.name == "我的") {
|
vm.$set(tab, "badge", count)
|
store.commit("setTabBarList", tabList)
|
}
|
})
|
}
|
|
|
|
// 将定义的方法挂载,使用this.$u.func.xx调用
|
Vue.prototype.$u.func = {
|
login,
|
logout,
|
route,
|
checkLogin,
|
paramsToObj,
|
refreshPage,
|
showToast,
|
refreshToken,
|
globalNavigator,
|
updateTabbar
|
}
|
}
|
export default {
|
install
|
}
|