| | |
| | | import Cookies from 'js-cookie' |
| | | |
| | | import Element from 'element-ui' |
| | | import '@/assets/styles/tokens.css' // 设计令牌(CSS 变量,供运行时换肤) |
| | | import './assets/styles/element-variables.scss' |
| | | |
| | | import '@/assets/styles/index.scss' // global css |
| | | import '@/assets/styles/ruoyi.scss' // ruoyi css |
| | | // 运行时主题层 + 组件默认外观:必须晚于 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 |
| | |
| | | import { getConfigKey } from "@/api/system/config"; |
| | | import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi"; |
| | | import dataV from '@jiaminghi/data-view';//dataV |
| | | // 主题色运行时(CSS 变量注入) |
| | | import { applyTheme, getStoredTheme, DEFAULT_PRIMARY } from '@/utils/theme' |
| | | // 分页组件 |
| | | import Pagination from "@/components/Pagination"; |
| | | // 自定义表格工具组件 |
| | |
| | | import FileUpload from "@/components/FileUpload" |
| | | // 图片上传组件 |
| | | import ImageUpload from "@/components/ImageUpload" |
| | | import AttachmentPreviewPane from "@/components/AttachmentPreviewPane/index.vue" |
| | | // 字典标签组件 |
| | | import DictTag from '@/components/DictTag' |
| | | // 头部标签组件 |
| | |
| | | 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) |
| | |
| | | */ |
| | | |
| | | Vue.use(Element, { |
| | | size: Cookies.get('size') || 'medium' // set element-ui default size |
| | | size: Cookies.get('size') || 'small' // set element-ui default size(原 medium,改为 small 提升信息密度) |
| | | }) |
| | | |
| | | // 启动即应用已保存的主题色(登录页等不使用 Layout 的页面也能生效) |
| | | applyTheme(getStoredTheme() || DEFAULT_PRIMARY) |
| | | |
| | | Vue.config.productionTip = false |
| | | |
| | | new Vue({ |
| | | // 前端构建标识:用于确认浏览器实际加载的是哪一版代码 |
| | | window.__APP_BUILD__ = '2026-11-03-PDF-PREVIEW-18' |
| | | |
| | | 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) |
| | | } |