import { createApp } from 'vue' import 'core-js/features/object/entries' import 'core-js/features/object/values' import ElementPlus from 'element-plus' import print from 'vue3-print-nb' import axios from 'axios' import * as ElementPlusIconsVue from '@element-plus/icons-vue' import dayjs from 'dayjs' import App from './App.vue' import pinia from './store' import router from './router' import useSettingsStore from './store/modules/settings' import request from '@/api/index' // 自定义指令 import directive from '@/utils/directive' // 加载 svg 图标 import 'virtual:svg-icons-register' // 全局样式 import '@/assets/styles/globals.scss' // 加载 iconify 图标(element plus) import { downloadAndInstall } from '@/iconify-ep' import { hasPermission } from '@/utils/composables/permission' import buttonPerm from '@/utils/buttonPerm' // 引入打印插件 if (useSettingsStore().app.iconifyOfflineUse) { downloadAndInstall() } axios .get('./config/config.json') .then(result => { console.log('get config') console.log(result) if (Object.prototype.toString.call(result.data) !== '[object Object]') { return } window.localStorage.setItem('baseurl-safe', result.data.baseUrl) request.defaults.baseURL = result.data.baseUrl // 设置默认请求网址 window.localStorage.setItem('baseURL', result.data.baseUrl) window.localStorage.setItem('mediaBaseUrl', result.data.mediaBaseUrl) window.localStorage.setItem('timeGap', result.data.timeGap) window.localStorage.setItem('systemType', result.data.systemType) window.localStorage.setItem('lineWidth', result.data.lineWidth) window.localStorage.setItem('lineColor', result.data.lineColor) window.localStorage.setItem('fontSize', result.data.fontSize) window.localStorage.setItem('fontColor', result.data.fontColor) window.localStorage.setItem('deployPath', result.data.deployPath) // 网关集成几秒允许点击一次 window.localStorage.setItem('preventReclick', result.data.preventReclick) // gm不允许显示登录页 window.localStorage.setItem('gmStopLoinPage', result.data.gmStopLoinPage) // 使用jeccibuca的版本 window.localStorage.setItem('jessibucaVersion', result.data.jessibucaVersion) // 硬解码还是软解码 window.localStorage.setItem('useMSE', result.data.useMSE) // 检测首帧执行函数,1执行检测首帧方法,2执行持续监测方法 window.localStorage.setItem('flvIFrame', result.data.flvIFrame) // 持续监测方法超时时间 window.localStorage.setItem('flvIFrameTime', result.data.flvIFrameTime) window.localStorage.setItem('zoom', result.data.zoom) // 代理流播放地址 window.localStorage.setItem('appStreamUrl', result.data.appStreamUrl) // 划线,线的颜色 window.localStorage.setItem('lineColors', JSON.stringify(result.data.lineColors)) // 是否使用审批 window.localStorage.setItem('useApproval', result.data.useApproval) // sm是否走网关 window.localStorage.setItem('useGateway', result.data.useGateway) const app = createApp(App) app.config.globalProperties.hasPerm = hasPermission app.config.globalProperties.buttonPerm = buttonPerm app.config.globalProperties.dayjs = dayjs app.use(print) app.use(ElementPlus) app.use(pinia) app.use(router) for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) } app.directive('prevent-reclick', { // 几秒内不可连续点击 beforeMount(el, binding) { el.disabled = false // 初始化时启用按钮 el.addEventListener('click', () => { el.disabled = true // 点击后禁用按钮 setTimeout(() => { el.disabled = false // 在指定的时间后重新启用按钮 }, binding.value || 2000) // 使用 binding.value 来设置等待时间,默认为 2000 毫秒 }) }, unmounted(el) { // 组件卸载时移除事件监听器 el.removeEventListener('click') } }) directive(app) app.config.globalProperties.config = result.data app.config.globalProperties.$position = { lat: result.data.lat, lng: result.data.lng } app.config.globalProperties.$zoom = { minZoom: result.data.minZoom, maxZoom: result.data.maxZoom, zoom: result.data.zoom } app.mount('#app') }) .catch(error => { console.error(`get baseConfig error...${error}`) })