/* * @Author: your Name * @Date: 2022-04-25 08:04:47 * @LastEditors: your Name * @LastEditTime: 2022-04-25 16:33:00 * @Description: */ import Vue from 'vue' import yearPicker from 'vue-year-picker' 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 plugins from './plugins' // plugins import './assets/icons' // icon import './permission' // permission control import { getDicts } from "@/api/system/dict/data"; 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 RightToolbar from "@/components/RightToolbar" // 富文本组件 import Editor from "@/components/Editor" // 文件上传组件 import FileUpload from "@/components/FileUpload" // 图片上传组件 import ImageUpload from "@/components/ImageUpload" import AttachmentPreviewPane from "@/components/AttachmentPreviewPane/index.vue" // 字典标签组件 import DictTag from '@/components/DictTag' // 头部标签组件 import VueMeta from 'vue-meta' // 字典数据组件 import DictData from '@/components/DictData' //省市区选择组件 // import li_area_select from '@components/Address' import moment from "moment" import '@/utils/drag.js'; import DingTalkPC from 'dingtalk-jsapi'; Vue.prototype.$dingtalk = DingTalkPC; DingTalkPC.config({ agentId: 'your_agentId', corpId: 'your_corpId', timeStamp: new Date().getTime(), nonceStr: 'your_nonceStr', signature: 'your_signature', jsApiList: ['runtime.permission.requestAuthCode'] }); Vue.prototype.$moment = moment; // 全局方法挂载 Vue.prototype.getDicts = getDicts Vue.prototype.getConfigKey = getConfigKey Vue.prototype.parseTime = parseTime Vue.prototype.resetForm = resetForm Vue.prototype.addDateRange = addDateRange Vue.prototype.selectDictLabel = selectDictLabel Vue.prototype.selectDictLabels = selectDictLabels Vue.prototype.handleTree = handleTree //引入echart import echarts from 'echarts' Vue.prototype.$echarts = echarts // 全局组件挂载 // Vue.component('li_area_select',li_area_select) Vue.component('DictTag', DictTag) Vue.component('Pagination', Pagination) Vue.component('RightToolbar', RightToolbar) 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(VueMeta) Vue.use(dataV); Vue.use(yearPicker); DictData.install() /** * If you don't want to use mock-server * you want to use MockJs for mock api * you can execute: mockXHR() * * Currently MockJs will be used in the production environment, * please remove it before going online! ! ! */ Vue.use(Element, { size: Cookies.get('size') || 'small' // set element-ui default size(原 medium,改为 small 提升信息密度) }) // 启动即应用已保存的主题色(登录页等不使用 Layout 的页面也能生效) applyTheme(getStoredTheme() || DEFAULT_PRIMARY) Vue.config.productionTip = false // 前端构建标识:用于确认浏览器实际加载的是哪一版代码 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) }