main.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. import Vue from 'vue'
  2. import axios from 'axios'
  3. import NP from 'number-precision'
  4. import ElementUI from 'element-ui'
  5. import '@/assets/css/index.css'
  6. import '@/styles/element-ui.scss'
  7. /*
  8. import '@/styles/index.scss'
  9. */
  10. import '@/styles/theme.scss'
  11. import elementUIVerify from '@/utils/elementUIVerify'
  12. import ECharts from 'vue-echarts/components/ECharts.vue'
  13. import 'echarts/lib/chart/bar'
  14. import 'echarts/lib/chart/pie'
  15. import 'echarts/lib/chart/line'
  16. import 'echarts/lib/component/tooltip'
  17. import 'echarts/lib/component/toolbox'
  18. import 'echarts/lib/component/polar'
  19. import 'echarts/lib/component/geo'
  20. import 'echarts/lib/component/legend'
  21. import 'echarts/lib/component/title'
  22. import 'echarts/lib/component/visualMap'
  23. import 'echarts/lib/component/dataset'
  24. import 'echarts/lib/component/axis'
  25. import VueQriously from 'vue-qriously'
  26. import Print from '@/utils/print'
  27. import Clipboard from 'v-clipboard'
  28. import '@/icons' // icon
  29. import App from './App'
  30. import router from './router'
  31. import store from './store'
  32. import { localStore } from '@/utils'
  33. import * as filters from './filters' // global filters
  34. import '@/permission' // permission control
  35. import printPage from '@/utils/printPage'
  36. import VueScrollTo from 'vue-scrollto'
  37. import GlobalComponents from '@/components/GlobalComponents'
  38. // string 原型方法修改
  39. import '@/utils/posUtils/string'
  40. import VueKonva from 'vue-konva'
  41. import agencyName from '@/utils/agencyName'
  42. // 红色雷锋侧边栏
  43. if (process.env.VUE_APP_PROJECT === 'leifengjinianguan') {
  44. import('@/styles/project/leifeng/index.scss')
  45. } else {
  46. import('@/styles/index.scss')
  47. }
  48. Vue.use(VueKonva)
  49. // import * as faceapi from 'face-api.js'
  50. faceapi.env.monkeyPatch({
  51. Canvas: HTMLCanvasElement,
  52. Image: HTMLImageElement,
  53. ImageData: ImageData,
  54. Video: HTMLVideoElement,
  55. createCanvasElement: () => document.createElement('canvas'),
  56. createImageElement: () => document.createElement('img')
  57. })
  58. Vue.use(GlobalComponents)
  59. Vue.use(VueScrollTo)
  60. Vue.http = Vue.prototype.$http = axios
  61. Vue.NP = Vue.prototype.$NP = NP
  62. Vue.config.productionTip = false
  63. Vue.use(ElementUI, { size: 'small' })
  64. Vue.use(elementUIVerify)
  65. Vue.use(Clipboard)
  66. Vue.component('v-chart', ECharts)
  67. const log = require('electron-log')
  68. log.transports.console.level = 'silly'
  69. log.transports.file.maxSize = 15 * 1024 * 1024
  70. // 避免在配置页无法打开配置文件
  71. localStore.set('init', true)
  72. console.log(localStore.get('appName'), process.env.VUE_APP_PROJECT_NAME)
  73. document.title = localStore.get('appName') || process.env.VUE_APP_PROJECT_NAME
  74. // 本地存储
  75. Vue.localStore = Vue.prototype.$localStore = localStore
  76. // 日志收集
  77. Vue.log = Vue.prototype.$log = log
  78. // 与旧版本本地存储做兼容,防止数据丢失
  79. setLocalStoreFromlocalStorage()
  80. // 打印
  81. Vue.use(Print)
  82. // 二维码
  83. Vue.use(VueQriously)
  84. // Vue.component('v-chart', ECharts)
  85. // register global utility filters.
  86. Object.keys(filters).forEach(key => {
  87. Vue.filter(key, filters[key])
  88. })
  89. // 是否存在定制logo
  90. const fs = require('fs')
  91. const userDataFolder = require('electron').remote.app.getPath('userData')
  92. const logoPath = require('path').join(userDataFolder, 'logo.png')
  93. fs.stat(logoPath, (err, stats) => {
  94. if (err) {
  95. console.log(err)
  96. return
  97. }
  98. store.commit('SET_CUSTOM_LOGO', 'file://' + logoPath)
  99. })
  100. Vue.mixin({
  101. data () {
  102. return {
  103. colorPalette: [
  104. '#74a275', '#3b5069', '#b39a57', '#2987db', '#f49e43',
  105. '#785012', '#805ebe', '#204e55', '#c0c21f', '#9f3d3f', '#cf7d39', '#d7c0c3', '#06315b', '#97b3a1', '#f8e71c', '#d4578a', '#72ce84', '#e93d35'
  106. ]
  107. }
  108. },
  109. computed: {
  110. // 售票电脑ip、mac信息
  111. sellerDevice () {
  112. return this.$store.state.app.sellerDevice
  113. },
  114. pagePermission () {
  115. return this.$route.meta.permissionList
  116. },
  117. printType () {
  118. return this.$store.state.app.localConfig && this.$store.state.app.localConfig.printType
  119. },
  120. transformUrl () {
  121. const configs = this.$store.state.app.systemConfig || []
  122. const item = configs.find(i => i.configKey === 'reportfile_url_serverip_replace') || {}
  123. const value = item.configValue
  124. console.log('reportfile_url_serverip_replace', value, typeof value)
  125. return value === '1'
  126. }
  127. },
  128. methods: {
  129. agencyName,
  130. checkPermission (type) {
  131. return this.pagePermission.indexOf(type) !== -1 || this.pagePermission.indexOf('all') !== -1
  132. },
  133. goToDownload () {
  134. this.$confirm('报表已导出,是否跳转到报表下载页?', '提示', {
  135. confirmButtonText: '确定',
  136. cancelButtonText: '取消',
  137. type: 'warning'
  138. }).then(() => {
  139. this.$router.push('/queryReport/reportList')
  140. }).catch(() => {
  141. })
  142. },
  143. // 下载excel
  144. downloadFile (url) {
  145. return axios.get(url, {
  146. responseType: 'arraybuffer'
  147. }).then(res => {
  148. const blob = new Blob([res.data], { type: 'application/vnd.ms-excel' })
  149. const link = document.createElement('a')
  150. link.href = window.URL.createObjectURL(blob)
  151. link.download = url.split('/').pop()
  152. link.click()
  153. }).catch(e => {
  154. this.$message.error(`${url}下载失败:${e}`)
  155. })
  156. },
  157. downloadExport (data) {
  158. if (!data.downloadUrl) {
  159. this.$message.error('暂无下载地址')
  160. return
  161. }
  162. let url = ''
  163. if (this.transformUrl) {
  164. const urlObj = new URL(data.downloadUrl)
  165. const localObj = new URL(this.$localStore.get('serverUrl'))
  166. // 主机地址一样,则不进行替换
  167. if (urlObj.hostname === localObj.hostname) {
  168. url = data.downloadUrl
  169. } else {
  170. urlObj.hostname = localObj.hostname
  171. urlObj.protocol = localObj.protocol
  172. urlObj.port = localObj.port || '80'
  173. url = urlObj.href
  174. }
  175. } else {
  176. url = data.downloadUrl
  177. }
  178. console.log('下载地址', url)
  179. this.downloadFile(url)
  180. },
  181. printPage
  182. }
  183. })
  184. const { ipcRenderer } = require('electron')
  185. ipcRenderer.removeAllListeners('message')
  186. ipcRenderer.on('message', (event, { message, data }) => {
  187. switch (message) {
  188. case 'downloadProgress':
  189. // console.log('下载进度', data)
  190. store.dispatch('updateApp', {
  191. status: 0,
  192. process: Math.floor(data.percent)
  193. })
  194. break
  195. case 'update-available':
  196. console.log('有可用更新')
  197. break
  198. case 'update-not-available':
  199. console.log('无可用更新')
  200. store.dispatch('updateApp', {
  201. status: 1,
  202. process: 0
  203. })
  204. break
  205. case 'isUpdateNow':
  206. store.dispatch('updateApp', {
  207. status: 2,
  208. process: 0
  209. })
  210. break
  211. default:
  212. // console.log(message, data)
  213. break
  214. }
  215. })
  216. new Vue({
  217. router,
  218. store,
  219. render: h => h(App)
  220. }).$mount('#app')
  221. // 兼容处理
  222. function setLocalStoreFromlocalStorage () {
  223. let { serverUrl, updateUrl, defaultPrinter, defaultTemplate, autoPrint } = localStorage
  224. serverUrl && localStore.set('serverUrl', serverUrl)
  225. updateUrl && localStore.set('updateUrl', updateUrl)
  226. defaultPrinter && localStore.set('defaultPrinter', defaultPrinter)
  227. defaultTemplate && localStore.set('defaultTemplate', defaultTemplate - 0)
  228. autoPrint && localStore.set('autoPrint', !!(autoPrint - 0))
  229. // 清除原纪录,切换到config.json来保存数据
  230. localStorage.clear()
  231. }