import { loadingText, messageDuration, title, publicPath } from '@/config' import * as lodash from 'lodash' import { Loading, Message, MessageBox, Notification } from 'element-ui' import store from '@/store' import router from '@/router' import { getAccessToken } from '@/utils/accessToken' import { getUsername } from '@/utils/username' const layout = store.getters['settings/layout'] const hostPath = `${window.location.protocol}//${window.location.host}${publicPath}` const install = (Vue, opts = {}) => { /* 全局标题 */ Vue.prototype.$baseTitle = (() => { return title })() /* 全局加载层 */ Vue.prototype.$baseLoading = (index, text) => { let loading if (!index) { loading = Loading.service({ lock: true, text: text || loadingText, background: 'hsla(0,0%,100%,.8)', }) } else { loading = Loading.service({ lock: true, text: text || loadingText, spinner: 'app-loading-type' + index, background: 'hsla(0,0%,100%,.8)', }) } return loading } /* 全局Message */ Vue.prototype.$baseMessage = (message, type) => { return new Promise((resolve) => { Message({ offset: 60, showClose: false, message: message, type: type || 'success', dangerouslyUseHTMLString: true, duration: messageDuration, onClose: () => resolve(), }) }) } /* 全局Alert */ Vue.prototype.$baseAlert = (content, title, callback) => { MessageBox.alert(content, title || '温馨提示', { confirmButtonText: '确定', dangerouslyUseHTMLString: true, callback: (action) => { if (callback) { callback(action) } }, }) } /* 全局Confirm */ Vue.prototype.$baseConfirm = (content, title, callback1, callback2) => { MessageBox.confirm(content, title || '温馨提示', { confirmButtonText: '确定', cancelButtonText: '取消', closeOnClickModal: false, type: 'warning', }) .then(() => { if (callback1) { callback1() } }) .catch(() => { if (callback2) { callback2() } }) } /* 全局Notification */ Vue.prototype.$baseNotify = (message, title, type, position, offset) => { Notification({ title: title, message: message, position: position || 'top-right', type: type || 'success', duration: messageDuration, offset: offset || 50, }) } /* 全局TableHeight */ Vue.prototype.$baseTableHeight = (adjustHeight, isDialog) => { let height = window.innerHeight let paddingHeight = 270 if (isDialog) { height = height - 80 } else { if ('number' == typeof adjustHeight) { height = height - paddingHeight + adjustHeight } else { height = height - paddingHeight } } return height } /* 全局lodash */ Vue.prototype.$baseLodash = lodash /* 全局事件总线 */ Vue.prototype.$baseEventBus = new Vue() /* tabs的通用操作 */ Vue.prototype.$tabs = { open: (url) => { if (!url) { console.error(`URL can not be empty when open new tab.`) return } // 是否完整的url地址 if (/^http(s?)\:\/\/.*$/.test(url)) { // 是完整的url地址而且是当前系统的地址 if (url.startsWith(hostPath)) { router.push(url.replace(hostPath, '')) } else { // 非当前系统的地址 window.open(url) } } else { router.push(url) } }, close: (route, isBack = false) => { const fullScreenState = store.getters['routes/fullScreenState'] // 是否全屏方式打开的页面 if (fullScreenState) { window.close() } else { store .dispatch('tabsBar/delVisitedRoute', route || router.currentRoute) .then((visitedRoutes) => { const latestView = visitedRoutes.slice(-1)[0] if (isBack) { router.go(-1) } else if (latestView) { router.push({ path: latestView.path, query: latestView.query }) } else { router.push('/') } }) } }, replace: (route) => { Vue.prototype.$tabs.close() route && setTimeout(() => router.replace(route), 100) }, reload: () => { let viewElementAry = document.getElementsByName('app-base-main') if (!viewElementAry || viewElementAry.length != 1) { window.location.reload() } else { let viewInst = viewElementAry[0].__vue__ if (!viewInst || !viewInst._isVue) { window.location.reload() } window.location.reload() } }, } /** * 附件 */ Vue.prototype.$file = { header: () => { return { Authorization: `Bearer ${getAccessToken()}` } }, actionUrl: `${context.portal}/system/file/v1/upload`, previewUrl: `${context.portal}/onlinePreview`, downloadUrl: `${context.portal}/system/file/v1/downloadFile`, watermarkOptions: () => { return { text: `门户POC ${getUsername()} 1001`, } }, } } if (typeof window !== 'undefined' && window.Vue) { install(window.Vue) } export default install