main.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. // import Vue from 'vue'
  2. // import VueRouter from 'vue-router'
  3. // Vue.use(VueRouter)
  4. import ElementUI from 'element-ui'
  5. // 全局修改默认配置,点击空白处不能关闭弹窗
  6. ElementUI.Dialog.props.closeOnClickModal.default = false
  7. Vue.use(ElementUI)
  8. import elTableInfiniteScroll from 'el-table-infinite-scroll'
  9. Vue.use(elTableInfiniteScroll)
  10. // import Vuex from 'vuex'
  11. // Vue.use(Vuex)
  12. // import echarts from 'echarts'
  13. import 'element-ui/lib/theme-chalk/index.css'
  14. // import '.././static/css/element-variables.scss'
  15. import App from './App'
  16. import store from './vuex/store'
  17. // import routes from './routes'
  18. import http from './http'
  19. import port from './port'
  20. import $ from 'jquery'
  21. import VDistPicker from 'v-distpicker'
  22. Vue.component('v-distpicker',VDistPicker)
  23. import './day.js' // 加载 dayjs 初始化配置
  24. import dayjs from 'dayjs';
  25. Vue.prototype.dayjs = dayjs;
  26. // 引入中译英js
  27. import i18n from '@/i18n/index'
  28. import Viewer from 'v-viewer' // 图片预览
  29. import 'viewerjs/dist/viewer.css'
  30. // Vue.use(Viewer)
  31. Vue.use(Viewer, {
  32. defaultOptions: {
  33. zIndex: 9999,
  34. }
  35. })
  36. Viewer.setDefaults({
  37. Options: { 'inline': true, 'button': true, 'navbar': true, 'title': true, 'toolbar': true, 'tooltip': true, 'movable': true, 'zoomable': true, 'rotatable': true, 'scalable': true, 'transition': true, 'fullscreen': true, 'keyboard': true, 'url': 'data-source' }
  38. })
  39. Vue.prototype.http = http
  40. Vue.prototype.port = port
  41. Vue.prototype.echarts = echarts
  42. import VueClipboard from 'vue-clipboard2'
  43. Vue.use(VueClipboard)
  44. // collapse 展开折叠
  45. import CollapseTransition from 'element-ui/lib/transitions/collapse-transition';
  46. Vue.component(CollapseTransition.name, CollapseTransition)
  47. import 'font-awesome/css/font-awesome.min.css'
  48. import './assets/iconfont/iconfont.css'
  49. import './assets/myfont/iconfont.css'
  50. // const router = new VueRouter({
  51. // routes
  52. // })
  53. import {fixedRouter, allRouters, simpleRouters } from './routes'
  54. import router from './routes'
  55. import NProgress from 'nprogress'
  56. import 'nprogress/nprogress.css'
  57. import Vue from 'vue'
  58. // 新手指导
  59. import VueTour from 'vue-tour'
  60. require('vue-tour/dist/vue-tour.css')
  61. Vue.use(VueTour)
  62. // 打印js
  63. import Print from './assets/js/print.js'
  64. Vue.use(Print)
  65. var addRouFlag = false;
  66. //角色权限对应关系
  67. router.beforeEach((to, from, next) => {
  68. NProgress.start();
  69. // console.log('路由跳转判定',to,from,next);
  70. if (to.path == '/') {
  71. from.name ? next(from.path) : next('/login')
  72. // console.log('走判定');
  73. return
  74. }
  75. if (to.path == '/register') {
  76. next();
  77. return;
  78. }
  79. if (to.path == '/expire') {
  80. next();
  81. return;
  82. }
  83. if (to.path != '/report') {
  84. sessionStorage.removeItem("from")
  85. }
  86. if (to.path == '/login') {
  87. sessionStorage.removeItem('user');
  88. }
  89. let user = JSON.parse(sessionStorage.getItem('user'));
  90. if (!user && to.path != '/login') {
  91. next({ path: '/login' })
  92. } else {
  93. if (!addRouFlag) {
  94. if(user != null) {
  95. addRouFlag = true;
  96. var getRoutes = null;
  97. var filterRouter = allRouters;
  98. // 更据当前登录的权限来显示模块
  99. console.log("user",user)
  100. console.log(filterRouter)
  101. var arr = []
  102. var arrMouter = []
  103. for(var i in user.moduleList) {
  104. for(var s in filterRouter) {
  105. if(user.moduleList[i].children.length > 0) {
  106. if(user.moduleList[i].name == filterRouter[s].name) {
  107. console.log('路由模块==',user.moduleList[i].name)
  108. var arrList = user.moduleList[i].children
  109. var ddList = filterRouter[s].children
  110. var list = []
  111. for(var j in arrList) {
  112. for(var d in ddList) {
  113. if(arrList[j].name == ddList[d].name) {
  114. list.push(ddList[d])
  115. }
  116. }
  117. }
  118. // //硬编码产品管理
  119. // if (user.moduleList[i].name == '产品管理') {
  120. // list = arrList;
  121. // // { path: '/product/:id', component: prodList, name: '产品管理',iconCls: 'iconfont firerock-iconxiangmu' },
  122. // for (var i=0;i<list.length; i++) {
  123. // list[i].component = `prodList`;
  124. // list[i].iconCls = 'iconfont firerock-iconxiangmu';
  125. // }
  126. // console.log('产品管理子菜单==', list);
  127. // }
  128. filterRouter[s].children = list
  129. arr.push(filterRouter[s])
  130. }
  131. } else {
  132. if(user.moduleList[i].name == filterRouter[s].name) {
  133. arr.push(filterRouter[s])
  134. }
  135. if(filterRouter[s].name == '计划详情' && arrMouter.length == 0) {
  136. arrMouter.push(filterRouter[s])
  137. }
  138. }
  139. }
  140. }
  141. arr = [...arr, ...arrMouter]
  142. console.log(arr, '处理后的路由')
  143. getRoutes = arr;
  144. global.antRouter = fixedRouter.concat(getRoutes);
  145. router.addRoutes(fixedRouter.concat(getRoutes));
  146. console.log(router);
  147. router.options.routes = fixedRouter.concat(getRoutes);
  148. router.push({ path: to.path })
  149. }
  150. }
  151. next()
  152. }
  153. })
  154. function baseRoleGetRouters(allRoutes, user) {
  155. // allRoutes是动态路由表
  156. // roles是取到的用户角色,数组
  157. let rightRoutes = allRoutes.filter((route, index) => {
  158. if (route.group == null || (user.company.packageProject == 1 && route.group == 'packageProject')) {
  159. if (route.children && route.children.length) {
  160. route.children = baseRoleGetRouters(route.children, user)
  161. }
  162. return true
  163. }
  164. return false
  165. })
  166. return rightRoutes
  167. }
  168. function hasPermission(route, roles) {
  169. if (route.meta && route.meta.roles) {
  170. return roles.some(role => route.meta.roles.indexOf(role) >= 0)
  171. } else {
  172. return true
  173. }
  174. }
  175. router.afterEach(() => {
  176. NProgress.done();
  177. })
  178. // 定义的方法,对文本框使用,只能输入数组, // 加 v-enter-number
  179. Vue.directive('enterNumber', {
  180. inserted: function (el) {
  181. el.addEventListener("keypress",function(e){
  182. e = e || window.event;
  183. let charcode = typeof e.charCode === 'number' ? e.charCode : e.keyCode;
  184. let re = /\d/;
  185. if(!re.test(String.fromCharCode(charcode)) && charcode > 9 && !e.ctrlKey){
  186. if(e.preventDefault){
  187. e.preventDefault();
  188. }else{
  189. e.returnValue = false;
  190. }
  191. }
  192. });
  193. }
  194. });
  195. new Vue({
  196. router,
  197. store,
  198. i18n,
  199. render: h => h(App)
  200. }).$mount('#app')