main.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import './utils/patch-el-select-filterable'
  2. import App from './App.vue'
  3. import { createApp } from 'vue'
  4. import { ElTable } from 'element-plus'
  5. ElTable.props.border = { type: Boolean, default: true }
  6. import { initStore } from './store' // Store
  7. import { initRouter } from './router' // Router
  8. import language from './locales' // 国际化
  9. import '@styles/core/tailwind.css' // tailwind
  10. import '@styles/index.scss' // 样式
  11. import '@utils/sys/console.ts' // 控制台输出内容
  12. import { setupGlobDirectives } from './directives'
  13. import { setupErrorHandle } from './utils/sys/error-handle'
  14. import FcDesigner from '@form-create/designer'
  15. import formCreateAutoImport from '@form-create/element-ui/auto-import'
  16. import { setupFormCreateUpload } from '@/utils/oa-form-create-upload'
  17. import { setupOaRelatedApproval } from '@/utils/oa-form-create-related-approval'
  18. // FormCreate 按字符串解析 el-input / fc-radio 等,主应用是按需自动导入,不会全局注册;
  19. // 必须挂上官方 auto-import,否则发起审批/详情里动态表单控件会残缺(如单选项只剩文字)。
  20. FcDesigner.formCreate.use(formCreateAutoImport)
  21. // 内置「上传」默认 action=/,改为走附件上传 API,避免 POST 前端原点 404
  22. setupFormCreateUpload(FcDesigner.formCreate)
  23. setupOaRelatedApproval(FcDesigner.formCreate)
  24. function maskSecret(value?: string) {
  25. if (!value) return '(empty)'
  26. if (value.length <= 6) return '*'.repeat(value.length)
  27. return `${value.slice(0, 3)}***${value.slice(-3)}`
  28. }
  29. function logApiCryptoBootInfo() {
  30. const {
  31. VITE_API_ENCRYPT_ENABLED,
  32. VITE_API_ENCRYPT_FAIL_OPEN,
  33. VITE_API_ENCRYPT_FIXED_SECRET,
  34. VITE_API_ENCRYPT_EXCLUDE_PATHS
  35. } = import.meta.env
  36. const excludeCount = String(VITE_API_ENCRYPT_EXCLUDE_PATHS || '')
  37. .split(',')
  38. .map((item) => item.trim())
  39. .filter(Boolean).length
  40. console.info(
  41. '[API_CRYPTO_BOOT] enabled=%s failOpen=%s fixedSecret=%s excludeCount=%s mode=%s',
  42. String(VITE_API_ENCRYPT_ENABLED || 'false'),
  43. String(VITE_API_ENCRYPT_FAIL_OPEN || 'true'),
  44. maskSecret(String(VITE_API_ENCRYPT_FIXED_SECRET || '')),
  45. excludeCount,
  46. import.meta.env.MODE
  47. )
  48. }
  49. document.addEventListener(
  50. 'touchstart',
  51. function () {},
  52. { passive: false }
  53. )
  54. logApiCryptoBootInfo()
  55. const app = createApp(App)
  56. initStore(app)
  57. initRouter(app)
  58. setupGlobDirectives(app)
  59. setupErrorHandle(app)
  60. app.use(language)
  61. app.use(FcDesigner)
  62. app.use(FcDesigner.formCreate)
  63. app.mount('#app')