import Vue from 'vue'; import '@babel/polyfill'; // import 'babel-polyfill' import Cookies from 'js-cookie'; import 'normalize.css/normalize.css'; // a modern alternative to CSS resets import Element from 'element-ui'; import './styles/element-variables.scss'; import '@/styles/index.scss'; // global css import '@/assets/iconfont/iconfont'; import '@/assets/iconfont/iconfont.css'; import VueAwesomeSwiper from 'vue-awesome-swiper'; import 'swiper/dist/css/swiper.css'; import 'vue-ydui/dist/ydui.base.css'; import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from '@/utils/parsing'; // 懒加载 import VueLazyload from 'vue-lazyload'; Vue.config.devtools = true; import App from './App'; import store from './store'; import router from './router'; import attrFrom from './components/attrFrom'; import uploadPicture from './components/uploadPicture/uploadFrom'; import goodListFrom from './components/goodList/goodListFrom'; import couponFrom from './components/couponList/couponFrom'; import articleFrom from './components/articleList/articleFrom'; import UploadIndex from '@/components/uploadPicture/index.vue'; import UploadFile from '@/components/Upload/uploadFile.vue'; // import VueUeditorWrap from 'vue-ueditor-wrap' import iconFrom from './components/iconFrom'; import TimeSelect from '@/components/TimeSelect'; import dialog from '@/libs/dialog'; import scroll from '@/libs/loading'; import schema from 'async-validator'; import Debounce from './libs/debounce.js'; //防抖自定义指令 // 切勿更改 此组件为表单生成中使用的图片上传组件 import SelfUpload from '@/components/uploadPicture/forGenrator/index.vue'; import util from '@/utils/utils'; import modalAttr from '@/libs/modal-attr'; import modalIcon from '@/libs/modal-icon'; import { modalSure } from '@/libs/public'; import timeOptions from '@/libs/timeOptions'; import { loadScriptQueue } from '@/components/FormGenerator/utils/loadScript'; import './icons'; // icon import './permission'; // permission control import './utils/error-log'; // error integralLog import * as filters from './filters'; // global filters import { parseQuery } from '@/utils'; import * as Auth from '@/libs/wechat'; import * as constants from '@/utils/constants.js'; import * as selfUtil from '@/utils/ZBKJIutil.js'; import SettingMer from '@/utils/settingMer'; import plugins from './plugins'; import directive from './directive'; //directive Vue.use(VueLazyload, { preLoad: 1.3, error: require('./assets/imgs/no.png'), loading: require('./assets/imgs/moren.jpg'), attempt: 1, listenEvents: ['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend', 'touchmove'], }); Vue.use(uploadPicture); Vue.use(goodListFrom); Vue.use(couponFrom); Vue.use(articleFrom); Vue.use(VueAwesomeSwiper); Vue.use(plugins); Vue.use(directive); Vue.component('attrFrom', attrFrom); Vue.component('UploadIndex', UploadIndex); Vue.component('SelfUpload', SelfUpload); Vue.component('iconFrom', iconFrom); Vue.component('uploadFile', UploadFile); Vue.component('timeSelect', TimeSelect); Vue.prototype.$modalSure = modalSure; Vue.prototype.$modalAttr = modalAttr; Vue.prototype.$modalIcon = modalIcon; Vue.prototype.$dialog = dialog; Vue.prototype.$scroll = scroll; Vue.prototype.$wechat = Auth; Vue.prototype.$util = util; Vue.prototype.$constants = constants; Vue.prototype.$selfUtil = selfUtil; Vue.prototype.$timeOptions = timeOptions; Vue.prototype.$validator = function (rule) { return new schema(rule); }; Vue.prototype.handleTree = handleTree; Vue.prototype.parseTime = parseTime; Vue.prototype.resetForm = resetForm; let cookieName = 'VCONSOLE'; let query = parseQuery(); let urlSpread = query['spread']; let vconsole = query[cookieName.toLowerCase()]; let md5Crmeb = 'b14d1e9baeced9bb7525ab19ee35f2d2'; //CRMEB MD5 加密开启vconsole模式 let md5UnCrmeb = '3dca2162c4e101b7656793a1af20295c'; //UN_CREMB MD5 加密关闭vconsole模式 if (vconsole !== undefined) { if (vconsole === md5UnCrmeb && Cookies.has(cookieName)) Cookies.remove(cookieName); } else vconsole = Cookies.get(cookieName); if (vconsole !== undefined && vconsole === md5Crmeb) { Cookies.set(cookieName, md5Crmeb, 3600); const module = () => import('vconsole'); module().then((Module) => { new Module.default(); }); } // 自定义实现String 类型的replaceAll方法 String.prototype.replaceAll = function (s1, s2) { return this.replace(new RegExp(s1, 'gm'), s2); }; // Vue.prototype.$modalCoupon = modalCoupon /** * 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 ! ! ! */ // if (process.env.NODE_ENV === 'production') { // const { mockXHR } = require('../mock') // mockXHR() // } Vue.use(Element, { size: Cookies.get('size') || 'mini', // set element-ui default size }); // register global utility filters Object.keys(filters).forEach((key) => { Vue.filter(key, filters[key]); }); Vue.config.productionTip = false; const $previewApp = document.getElementById('previewApp'); const childAttrs = { file: '', dialog: ' width="600px" class="dialog-width" v-if="visible" :visible.sync="visible" :modal-append-to-body="false" ', }; window.addEventListener('message', init, false); function buildLinks(links) { let strs = ''; links.forEach((url) => { strs += ``; }); return strs; } function init(event) { if (event.data.type === 'refreshFrame') { const code = event.data.data; const attrs = childAttrs[code.generateConf.type]; let links = ''; if (Array.isArray(code.links) && code.links.length > 0) { links = buildLinks(code.links); } $previewApp.innerHTML = `${links}
`; if (Array.isArray(code.scripts) && code.scripts.length > 0) { loadScriptQueue(code.scripts, () => { newVue(attrs, code.js, code.html); }); } else { newVue(attrs, code.js, code.html); } } } function newVue(attrs, main, html) { // eslint-disable-next-line no-eval main = eval(`(${main})`); main.template = `
${html}
`; new Vue({ components: { child: main, }, data() { return { visible: true, }; }, template: `
`, }).$mount('#app'); } String.prototype.replaceAll = function (s1, s2) { return this.replace(new RegExp(s1, 'gm'), s2); }; /** * 防抖 防止重复点击 * 传参:v-debounceClick="() =>{handleFun(arg)}" * 不传参:v-debounceClick="handleFun" * delayTime:延迟的时间,只执行最后一次 */ Vue.directive('debounceClick', { bind(el, binding, vnode, oldvnode) {}, inserted: function (el, binding) { let delayTime = el.getAttribute('delay-time') || 500; el.onclick = Debounce(function () { binding.value(); }, delayTime); }, }); new Vue({ el: '#app', router, store, render: (h) => h(App), });