You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

252 lines
7.4 KiB

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