Newer
Older
smart-metering-front / src / main.ts
import { createApp } from 'vue'
import ElementPlus, { ElMessageBox } from 'element-plus'
import 'element-plus/theme-chalk/el-checkbox.css'
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 useUserStore from '@/store/modules/user'
// 自定义指令
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'
const userStore = useUserStore()
// 引入打印插件
if (useSettingsStore().app.iconifyOfflineUse) {
  downloadAndInstall()
}
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)
}
directive(app)

axios
  .get('./config/config.json')
  .then((result) => {
    request.defaults.baseURL = result.data.baseUrl // 设置默认请求网址
    app.config.globalProperties.config = result.data
    window.localStorage.setItem('baseURL', result.data.baseUrl)
    window.localStorage.setItem('wsURL', result.data.wsURL)
    app.mount('#app')
  })
  .catch((error) => {
    console.error(`get baseConfig error...${error}`)
  })

// 监听全局刷新页面事件
window.addEventListener('beforeunload', (e) => {
  // 1. 保存用户名
  if (userStore.username) {
    localStorage.setItem('currentName', userStore.username)
  }

  // 2. 判断证书生成状态
  console.log(
    '=========556644645645=======',
    sessionStorage.getItem('createCerting'),
  )

  if (sessionStorage.getItem('createCerting') === 'true') {
    // // 必需的核心代码
    e.preventDefault()
    e.returnValue
      = '证书未生成完成, 离开页面会使证书生成失败或者自动检完失效,确定离开页面吗?请谨慎选择!' // 任意字符串均可(浏览器不会显示)
    // const message =
    //   '证书未生成完成, 离开页面会使证书生成失败或者自动检完失效,确定离开页面吗?请谨慎选择!'
    // // // 可选:开发环境调试输出
    console.log('[DEBUG] 已拦截页面离开')
    sessionStorage.setItem('createCerting', 'false')
    // ElMessageBox.confirm(message, '警告', {
    //   confirmButtonText: '确定刷新',
    //   cancelButtonText: '取消刷新',
    //   type: 'warning',
    // })
    //   .then(() => {
    //     e.preventDefault()
    //     // e.returnValue =
    //     //   '证书未生成完成, 离开页面会使证书生成失败或者自动检完失效,确定离开页面吗?请谨慎选择!' // 任意字符串均可(浏览器不会显示)
    //   })
    //   .catch(() => {})
  }
})