Newer
Older
safe_production_front / src / main.ts
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}`)
  })