import Vue from 'vue' import App from '@/App' import router from '@/router' // api: https://github.com/vuejs/vue-router import store from '@/store' // api: https://github.com/vuejs/vuex import VueCookie from 'vue-cookie' // api: https://github.com/alfhen/vue-cookie // 时间处理 import { isAuth } from '@/utils' import dayjs from 'dayjs'; import '@/element-ui' // api: https://github.com/ElemeFE/element import '@/icons' // api: http://www.iconfont.cn/ import '@/element-ui-theme' import 'element-ui/lib/theme-chalk/icon.css' import '@/assets/scss/index.scss' import httpRequest from '@/utils/httpRequest' // api: https://github.com/axios/axios import { searchUserSettingRecording } from '@/api/sift/queryUserSetting' import Ajax from "./utils/ajax.js"; import cloneDeep from 'lodash/cloneDeep' import JsonExcel from 'vue-json-excel' import i18n from '@/i18n/i18n' import './utils/directives' import decimalUtil from '@/utils/decimalUtil.js' import getLodop from '@/utils/LodopFuncs.js' // import pdf from 'vue-pdf' import { debounce,throttle} from '@/utils/common.js' import 'element-ui/lib/theme-chalk/drawer.css'; import 'element-ui/lib/theme-chalk/descriptions.css'; import 'element-ui/lib/theme-chalk/popover.css'; import Viewer from 'v-viewer' import 'viewerjs/dist/viewer.css' import selectDiv from '@/views/common/selectDiv.vue' import resizable from '@/utils/resizable.js' Vue.prototype.isAuth = isAuth // 权限方法 Vue.component('downloadExcel', JsonExcel) // Vue.component('pdf', pdf) Vue.use(VueCookie) Vue.config.productionTip = false Vue.component('selectDiv', selectDiv); export const EventBus = new Vue(); Vue.use(Viewer) Vue.directive('resizable',resizable) // 非生产环境, 适配mockjs模拟数据 // api: https://github.com/nuysoft/Mock if (process.env.NODE_ENV !== 'production') { require('@/mock') } // 挂载全局 Vue.prototype.$http = httpRequest // ajax请求方法 Vue.prototype.getLodop = getLodop // 打印 Vue.prototype.decimalUtil = decimalUtil // 计算 Vue.prototype.dayjs = dayjs //时间格式化插件 2021-11-02 Vue.prototype.debounce = debounce // 防抖 Vue.prototype.throttle = throttle // 限流 window.ajax = Ajax; // 保存整站vuex本地储存初始状态 window.SITE_CONFIG['storeState'] = cloneDeep(store.state) function extractRows (data) { if (!data) { return [] } if (Array.isArray(data.rows)) { return data.rows } if (Array.isArray(data.list)) { return data.list } if (Array.isArray(data.data)) { return data.data } return [] } function pickFormulaValue (row) { var formula = row && row.formula ? String(row.formula) : '' var symbol = row && row.symbol ? String(row.symbol).toLowerCase() : '' if (!formula) { return '' } if (symbol === 'between') { return formula.split('..')[0] || '' } if (symbol === 'in' || symbol === 'ne') { return formula } return formula } function buildAdvancedContextStorageKey (path) { return 'advanced_search_context_' + String(path || '') } function normalizeRoutePath (path) { var p = String(path || '').trim() if (!p) { return '' } if (p.charAt(0) !== '/') { p = '/' + p } return p } function parseAdvancedContextByPath (path) { var normalizedPath = normalizeRoutePath(path) var raw = sessionStorage.getItem(buildAdvancedContextStorageKey(normalizedPath)) if (!raw && normalizedPath.indexOf('/modules/') === 0) { raw = sessionStorage.getItem(buildAdvancedContextStorageKey(normalizedPath.substring('/modules'.length))) } if (!raw && normalizedPath.indexOf('/modules/') !== 0) { raw = sessionStorage.getItem(buildAdvancedContextStorageKey('/modules' + normalizedPath)) } if (!raw) { return null } try { var context = JSON.parse(raw) if (!context || !Array.isArray(context.conditions) || context.conditions.length <= 0) { return null } return context } catch (e) { return null } } Vue.mixin({ mounted () { this.__applySavedRuleFromRoute() }, activated () { this.__applySavedRuleFromRoute() }, methods: { async __applySavedRuleFromRoute () { if (!this || !this.$route || !this.$route.query) { return } // 模块已实现专用恢复逻辑时,避免全局逻辑重复执行 if (typeof this.searchTableBySavedRule === 'function') { return } var queryModel = this.searchData || this.queryHeaderData if (!queryModel) { return } if (typeof this.searchTable !== 'function' && typeof this.getDataList !== 'function') { return } var routeQuery = this.$route.query var routePath = normalizeRoutePath(this.$route.path || '') var menuId = routeQuery.menuId var itemNo = routeQuery.itemNo if (!menuId || !itemNo) { return } var cacheKey = [this.$route.path || '', menuId, itemNo].join('_') if (this.__savedRuleAppliedKey === cacheKey) { return } var existContext = parseAdvancedContextByPath(routePath) if (existContext) { this.__savedRuleAppliedKey = cacheKey return } try { var userId = String((this.$store && this.$store.state && this.$store.state.user && this.$store.state.user.id) || '') if (!userId) { return } var resp = await searchUserSettingRecording({ menuId: String(menuId), userId: userId, itemNo: Number(itemNo) }) var data = resp && resp.data ? resp.data : {} if (!(data && data.code === 0)) { return } var rows = extractRows(data) if (!rows.length) { return } try { var contextRows = rows .filter(row => row && row.fieldName && row.symbol && row.formula) .map(row => ({ fieldName: String(row.fieldName), symbol: String(row.symbol).toLowerCase(), formula: String(row.formula) })) sessionStorage.setItem(buildAdvancedContextStorageKey(routePath), JSON.stringify({ menuUrl: routePath, conditions: contextRows })) } catch (e) { } if (Object.prototype.hasOwnProperty.call(this, 'pageIndex')) { this.pageIndex = 1 } this.__savedRuleAppliedKey = cacheKey if (typeof this.searchTable === 'function') { this.searchTable() } else if (typeof this.getDataList === 'function') { try { this.getDataList('Y') } catch (e) { this.getDataList() } } } catch (e) { } finally { var query = Object.assign({}, routeQuery) delete query.savedSearchId delete query.menuId delete query.itemNo if (this.$router && typeof this.$router.replace === 'function') { var result = this.$router.replace({ path: this.$route.path, query: query }) if (result && typeof result.catch === 'function') { result.catch(() => {}) } } } } } }) /* eslint-disable no-new */ new Vue({ el: '#app', router, i18n, store, template: '', components: { App } }) Viewer.setDefaults({ // 需要配置的属性 注意属性并没有引号 title: false, toolbar: true, zIndex: 99999, })