main.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import './utils/patch-el-select-filterable'
  2. import './utils/ui/iconify-loader' // 离线注册 Remix Icon,避免请求 Iconify CDN
  3. import App from './App.vue'
  4. import { createApp } from 'vue'
  5. import { ElTable } from 'element-plus'
  6. import EmptyAwareElTag from './utils/patch-el-tag-empty'
  7. import ListTable from '@/components/business/list-table/index.vue'
  8. ElTable.props.border = { type: Boolean, default: true }
  9. import { initStore } from './store' // Store
  10. import { initRouter } from './router' // Router
  11. import language from './locales' // 国际化
  12. import '@styles/core/tailwind.css' // tailwind
  13. import '@styles/index.scss' // 样式
  14. import '@utils/sys/console.ts' // 控制台输出内容
  15. import { setupGlobDirectives } from './directives'
  16. import { setupErrorHandle } from './utils/sys/error-handle'
  17. function maskSecret(value?: string) {
  18. if (!value) return '(empty)'
  19. if (value.length <= 6) return '*'.repeat(value.length)
  20. return `${value.slice(0, 3)}***${value.slice(-3)}`
  21. }
  22. function logApiCryptoBootInfo() {
  23. const {
  24. VITE_API_ENCRYPT_ENABLED,
  25. VITE_API_ENCRYPT_FAIL_OPEN,
  26. VITE_API_ENCRYPT_FIXED_SECRET,
  27. VITE_API_ENCRYPT_EXCLUDE_PATHS
  28. } = import.meta.env
  29. const excludeCount = String(VITE_API_ENCRYPT_EXCLUDE_PATHS || '')
  30. .split(',')
  31. .map((item) => item.trim())
  32. .filter(Boolean).length
  33. console.info(
  34. '[API_CRYPTO_BOOT] enabled=%s failOpen=%s fixedSecret=%s excludeCount=%s mode=%s',
  35. String(VITE_API_ENCRYPT_ENABLED || 'false'),
  36. String(VITE_API_ENCRYPT_FAIL_OPEN || 'true'),
  37. maskSecret(String(VITE_API_ENCRYPT_FIXED_SECRET || '')),
  38. excludeCount,
  39. import.meta.env.MODE
  40. )
  41. }
  42. document.addEventListener(
  43. 'touchstart',
  44. function () {},
  45. { passive: false }
  46. )
  47. logApiCryptoBootInfo()
  48. const app = createApp(App)
  49. app.component('ElTag', EmptyAwareElTag)
  50. // 列表列宽拖拽持久化:全局注册,避免按需解析失败导致部分页仍是裸标签
  51. app.component('ListTable', ListTable)
  52. initStore(app)
  53. initRouter(app)
  54. setupGlobDirectives(app)
  55. setupErrorHandle(app)
  56. app.use(language)
  57. app.mount('#app')