import { loadingText, messageDuration, title } from "@/config/settings" import * as lodash from "lodash" import { Loading, Message, MessageBox, Notification } from "element-ui" import store from "@/store" import { getAccessToken } from "@/utils/accessToken" import Handle from "./index" const accessToken = store.getters["user/accessToken"] const layout = store.getters["settings/layout"] const install = (Vue, opts = {}) => { /* 全局accessToken */ Vue.prototype.$baseAccessToken = () => { return accessToken || getAccessToken() } /* 全局标题 */ Vue.prototype.$baseTitle = (() => { return title })() /* 全局加载层 */ Vue.prototype.$baseLoading = (index, text, callback) => { 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: "vab-loading-type" + index, background: "hsla(0,0%,100%,.8)", }) } if (callback) { callback(loading) } else { setTimeout(() => { loading.close() }, messageDuration) } } /* 全局多彩加载层 */ Vue.prototype.$baseColorfullLoading = (index, text, callback) => { let loading if (!index) { loading = Loading.service({ lock: true, text: text || loadingText, spinner: "dots-loader", background: "hsla(0,0%,100%,.8)", }) } else { switch (index) { case 1: index = "dots" break case 2: index = "gauge" break case 3: index = "inner-circles" break case 4: index = "plus" break } loading = Loading.service({ lock: true, text: text || loadingText, spinner: index + "-loader", background: "hsla(0,0%,100%,.8)", }) } if (callback) { callback(loading) } else { setTimeout(() => { loading.close() }, messageDuration) } } /* 全局Message */ Vue.prototype.$baseMessage = (message, type) => { Message({ offset: 60, showClose: true, message: message, type: type, dangerouslyUseHTMLString: true, duration: messageDuration, }) } /* 全局Alert */ Vue.prototype.$baseAlert = (content, title, callback) => { MessageBox.alert(content, title || "温馨提示", { confirmButtonText: "确定", dangerouslyUseHTMLString: true, callback: (action) => { if (callback) { callback() } }, }) } /* 全局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) => { Notification({ title: title, message: message, position: position || "top-right", type: type || "success", duration: messageDuration, }) } /* 全局TableHeight */ Vue.prototype.$baseTableHeight = (formType) => { let height = window.innerHeight let paddingHeight = 400 const formHeight = 50 if (layout === "vertical") { paddingHeight = 340 } if ("number" == typeof formType) { height = height - paddingHeight - formHeight * formType } else { height = height - paddingHeight } return height } /* 全局map图层 */ // Vue.prototype.$baseMap = () => { // return new maptalks.Map("map", { // center: [116.41348403785, 39.910843952376], // zoom: 12, // minZoom: 1, // maxZoom: 19, // spatialReference: { // projection: "baidu", // }, // attribution: { // content: "© vue-admin-beautiful", // }, // baseLayer: new maptalks.TileLayer("base", { // cssFilter: "sepia(100%) invert(90%)", // urlTemplate: // "http://online{s}.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&scaler=1&p=1", // subdomains: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], // attribution: // '© Baidu', // }), // }); // }; /* 全局lodash */ Vue.prototype.$baseLodash = lodash /* 全局事件总线 */ Vue.prototype.$baseEventBus = new Vue() // utils methods Vue.prototype.$handle = Handle Vue.prototype.deepClone = lodash.cloneDeep } if (typeof window !== "undefined" && window.Vue) { install(window.Vue) } export default install