import Vue from 'vue' import Cookies from 'js-cookie' import Element from 'element-ui' import './assets/styles/element-variables.scss' import '@/assets/styles/index.scss' // global css import '@/assets/styles/ruoyi.scss' // ruoyi css import App from './App' import store from './store' import router from './router' import directive from './directive' // directive import plugins from './plugins' // plugins import { download } from '@/utils/request' 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 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 ImagePreview from "@/components/ImagePreview" // 字典标签组件 import DictTag from '@/components/DictTag' // 头部标签组件 import VueMeta from 'vue-meta' // 字典数据组件 import DictData from '@/components/DictData' import VideoPlayer from 'vue-video-player' import 'video.js/dist/video-js.css' import 'vue-video-player/src/custom-theme.css' Vue.use(VideoPlayer) // 全局方法挂载 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.download = download Vue.prototype.handleTree = handleTree // 全局组件挂载 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('ImagePreview', ImagePreview) Vue.directive('drag', (el) => { const oDiv = el // 当前元素 const minTop = oDiv.getAttribute('drag-min-top') const ifMoveSizeArea = 20 oDiv.onmousedown = e => { let target = oDiv while (window.getComputedStyle(target).position !== 'absolute' && target !== document.body) { target = target.parentElement } document.onselectstart = () => { return false } if (!target.getAttribute('init_x')) { target.setAttribute('init_x', target.offsetLeft) target.setAttribute('init_y', target.offsetTop) } const initX = parseInt(target.getAttribute('init_x')) const initY = parseInt(target.getAttribute('init_y')) // 鼠标按下,计算当前元素距离可视区的距离 const disX = e.clientX - target.offsetLeft const disY = e.clientY - target.offsetTop document.onmousemove = e => { // 通过事件委托,计算移动的距离 // 因为浏览器里并不能直接取到并且使用clientX、clientY,所以使用事件委托在内部做完赋值 const l = e.clientX - disX const t = e.clientY - disY const { marginTop: mt, marginLeft: ml } = window.getComputedStyle(target) // 计算移动当前元素的位置,并且给该元素样式中的left和top值赋值 target.style.left = l - parseInt(ml) + 'px' target.style.top = (t < minTop ? minTop : t) - parseInt(mt) + 'px' // 添加对容器位置的限制 const viewportWidth = window.innerWidth; const viewportHeight = window.innerHeight; const containerWidth = target.offsetWidth; const containerHeight = target.offsetHeight; let left = l - parseInt(ml); let top = (t < minTop ? minTop : t) - parseInt(mt); if (left < 0) left = 0; if (top < 0) top = 0; if (left + containerWidth > viewportWidth) left = viewportWidth - containerWidth; if (top + containerHeight > viewportHeight) top = viewportHeight - containerHeight; target.style.left = `${left}px`; target.style.top = `${top}px`; if (Math.abs(l - initX) > ifMoveSizeArea || Math.abs(t - initY) > ifMoveSizeArea) { target.setAttribute('dragged', '') } else { target.removeAttribute('dragged') } } document.onmouseup = e => { document.onmousemove = null document.onmouseup = null document.onselectstart = null } // return false不加的话可能导致黏连,拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效 return false } }) Vue.use(directive) Vue.use(plugins) Vue.use(VueMeta) 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') || 'medium' // set element-ui default size }) Vue.config.productionTip = false new Vue({ el: '#app', router, store, render: h => h(App) })