import store from "@/store/index.js" import { dynamicMenu } from "@/api/system/role.js" import { logAdd } from "@/api/system/logManage" import { messageCount } from "@/api/system/message" import { saveCId } from "@/api/system/user.js" // 全局公共方法 const install = (Vue, vm) => { // 登录操作 1 const login = (userInfo) => { vm.$u.vuex('userInfo', userInfo) vm.$u.vuex('accessToken', userInfo.access_token) vm.$u.vuex('refreshToken', userInfo.refresh_token) vm.$u.vuex('isLogin', true) vm.$u.vuex('adCodeBase', userInfo.detail.adCodeBase) let role = userInfo.role_id.split(",") dynamicMenu(userInfo.role_id, 'app').then(res => { if (res.code == 200) { let adCodeBase = userInfo.detail.adCodeBase if (res.data.length > 2) { //当菜单有 首页 工作 我的 时,对用户进行判断 if (!adCodeBase) { //没有行政区划时 去掉首页 res.data.shift() } } store.commit("setTabBarList", res.data) store.commit('setActiveRoleId', role[0]) // uni.switchTab({ // url: res.data[0].path // }) let url = res.data[0].path let name = "" if (url.indexOf("patrol")) { name = "责任人首页" } else { name = "首页" } let params = { recipient: userInfo.user_id, status: 0 } // #ifdef APP-PLUS //2.0 // 获取App端cid并存入redis let pinf = plus.push.getClientInfo(); console.log(pinf, pinf.clientid, "---------------") if (pinf && pinf.clientid) { uni.setStorageSync('cid', pinf.clientid); saveCId(userInfo.user_id, pinf.clientid) } else { var obtainingCIDTimer = setInterval(function() { pinf = plus.push.getClientInfo(); if (pinf.clientid) { uni.setStorageSync('cid', pinf.clientid); saveCId(userInfo.user_id, pinf.clientid) clearInterval(obtainingCIDTimer); } }, 50); } setTimeout(() => { console.log('cid', uni.getStorageSync('cid')); }, 500); // #endif messageCount(params).then(res => { updateTabbar(res.data) globalNavigator(url, "switchTab", name) }) } }) } // 退出登录 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() }) } /** * 全局跳转 * 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 }