sinake
5 天以前 a6cdc43d699044409e06c78583a2337ccaa3b96e
src/main.js
@@ -18,7 +18,9 @@
// 运行时主题层 + 组件默认外观:必须晚于 element-ui 与 ruoyi.scss,否则覆盖不生效
import '@/assets/styles/theme-runtime.scss'
import '@/assets/styles/element-override.scss'
import '@/assets/styles/pdf-resize-dialog.scss'
import App from './App'
import FilePreview from '@/components/FilePreview/index.vue'
import store from './store'
import router from './router'
import directive from './directive' //directive
@@ -43,6 +45,7 @@
import FileUpload from "@/components/FileUpload"
// 图片上传组件
import ImageUpload from "@/components/ImageUpload"
import AttachmentPreviewPane from "@/components/AttachmentPreviewPane/index.vue"
// 字典标签组件
import DictTag from '@/components/DictTag'
// 头部标签组件
@@ -90,6 +93,30 @@
Vue.component('Editor', Editor)
Vue.component('FileUpload', FileUpload)
Vue.component('ImageUpload', ImageUpload)
Vue.component('AttachmentPreviewPane', AttachmentPreviewPane)
// 附件内嵌预览:所有报销页共用
Vue.mixin({
  data() {
    return {
      embeddedFile: null,
      pdfFullscreen: false
    }
  },
  methods: {
    openEmbeddedPreview(item) {
      if (!item) return
      const ext = String(item.name || '').toLowerCase().split('.').pop()
      const type = ext === 'pdf'
        ? 'pdf'
        : ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(ext)
          ? 'image'
          : 'other'
      this.embeddedFile = { name: item.name, url: item.url, type }
      this.pdfVisible = true
    }
  }
})
Vue.use(directive)
Vue.use(plugins)
@@ -116,9 +143,28 @@
Vue.config.productionTip = false
new Vue({
// 前端构建标识:用于确认浏览器实际加载的是哪一版代码
window.__APP_BUILD__ = '2026-11-03-PDF-PREVIEW-17'
const app = new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})
// 文件预览:App 内挂载的全局组件,避免在应用外手工 $mount
let fallbackPreview = null
Vue.prototype.$previewFile = (files, index = 0) => {
  if (app.$refs.filePreview) {
    app.$refs.filePreview.open(files, index)
    return
  }
  // 兜底:App 内组件尚未挂载时,仍保证有预览入口
  if (!fallbackPreview) {
    const FilePreviewCtor = Vue.extend(FilePreview)
    fallbackPreview = new FilePreviewCtor().$mount()
    document.body.appendChild(fallbackPreview.$el)
  }
  fallbackPreview.open(files, index)
}