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
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,
|
|
})
|