|
|
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 = falseVue.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: '<App/>', components: { App }})
Viewer.setDefaults({ // 需要配置的属性 注意属性并没有引号
title: false, toolbar: true, zIndex: 99999,})
|