main.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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 Vuex from 'vuex'
  9. // Vue.use(Vuex)
  10. // import echarts from 'echarts'
  11. // import 'element-ui/lib/theme-chalk/index.css'
  12. import App from './App'
  13. import store from './vuex/store'
  14. // import routes from './routes'
  15. import http from './http'
  16. import port from './port'
  17. import $ from 'jquery'
  18. import './day.js' // 加载 dayjs 初始化配置
  19. import Viewer from 'v-viewer' // 图片预览
  20. import 'viewerjs/dist/viewer.css'
  21. Vue.use(Viewer)
  22. Viewer.setDefaults({
  23. 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' }
  24. })
  25. Vue.prototype.http = http
  26. Vue.prototype.port = port
  27. Vue.prototype.echarts = echarts
  28. import VueClipboard from 'vue-clipboard2'
  29. Vue.use(VueClipboard)
  30. // collapse 展开折叠
  31. import CollapseTransition from 'element-ui/lib/transitions/collapse-transition';
  32. Vue.component(CollapseTransition.name, CollapseTransition)
  33. import 'font-awesome/css/font-awesome.min.css'
  34. import './assets/iconfont/iconfont.css'
  35. import './assets/myfont/iconfont.css'
  36. // const router = new VueRouter({
  37. // routes
  38. // })
  39. import {fixedRouter, allRouters, simpleRouters } from './routes'
  40. import router from './routes'
  41. import NProgress from 'nprogress'
  42. import 'nprogress/nprogress.css'
  43. var addRouFlag = false;
  44. //角色权限对应关系
  45. var userModules = [{role:0, modules:["工时报告","专业审核","部门审核","自动计时","费用报销","待办任务", "项目管理", "请假管理"]},
  46. {role:3, modules:["工时报告","工时成本统计","项目报表服务","费用报销","待办任务","项目管理","请假管理"]},
  47. {role:4, modules:["工时报告","财务核算成本", "费用报销", "待办任务","组织架构","请假管理"]},
  48. {role:5, modules:["工时报告","自动计时","待办任务","项目管理","专业管理","请假管理"]},
  49. {role:6, modules:["工时报告","工时成本统计","财务核算成本","项目报表服务","费用报销","待办任务","项目管理","请假管理"]},];
  50. router.beforeEach((to, from, next) => {
  51. NProgress.start();
  52. if (to.path == '/register') {
  53. next();
  54. return;
  55. }
  56. if (to.path != '/daily') {
  57. sessionStorage.removeItem("from")
  58. }
  59. if (to.path == '/login') {
  60. sessionStorage.removeItem('user');
  61. }
  62. let user = JSON.parse(sessionStorage.getItem('user'));
  63. if (!user && to.path != '/login') {
  64. next({ path: '/login' })
  65. } else {
  66. if (!addRouFlag) {
  67. if(user != null) {
  68. addRouFlag = true;
  69. //如果是简易版,直接赋值
  70. if (user.company.packageSimple == 1) {
  71. console.log('走进了建议模式');
  72. getRoutes = simpleRouters;
  73. global.antRouter = getRoutes;
  74. router.addRoutes(getRoutes);
  75. router.options.routes = getRoutes;
  76. router.push({ path: to.path })
  77. } else {
  78. var getRoutes = null;
  79. var filterRouter = allRouters;
  80. if (user.company.packageExpense == 0) {
  81. filterRouter = filterRouter.filter(r=>{return r.name != '费用报销' && r.name != '项目报表服务'});
  82. }
  83. if (user.company.packageCustomer == 0) {
  84. //没有客户管理功能的,需要去掉
  85. filterRouter = filterRouter.filter(r=>{return r.name != '客户管理'});
  86. }
  87. if (user.company.packageEngineering == 0) {
  88. //非工程类的,去掉专业管理
  89. filterRouter = filterRouter.filter(r=>{return r.name != '工程专业管理' && r.name != '专业审核' && r.name != '部门审核'});
  90. }
  91. if (user.company.packageProject == 0) {
  92. filterRouter = filterRouter.filter(r=>{return r.name != '待办任务' && r.name != '请假管理'});
  93. }
  94. if (user.role == 1 || user.role == 2) {
  95. getRoutes = filterRouter;
  96. } else {
  97. var modules = userModules.filter(u=>u.role == user.role)[0].modules;
  98. if (user.role == 0 && user.leader) {
  99. modules.push(2, "项目报告审核");
  100. }
  101. getRoutes = filterRouter.filter(r=>{
  102. return modules.filter(m=>m == r.name).length > 0;
  103. });
  104. }
  105. global.antRouter = fixedRouter.concat(getRoutes);
  106. router.addRoutes(fixedRouter.concat(getRoutes));
  107. router.options.routes = fixedRouter.concat(getRoutes);
  108. router.push({ path: to.path })
  109. }
  110. }
  111. }
  112. next()
  113. }
  114. })
  115. function baseRoleGetRouters(allRoutes, user) {
  116. // allRoutes是动态路由表
  117. // roles是取到的用户角色,数组
  118. let rightRoutes = allRoutes.filter((route, index) => {
  119. if (route.group == null || (user.company.packageProject == 1 && route.group == 'packageProject')) {
  120. if (route.children && route.children.length) {
  121. route.children = baseRoleGetRouters(route.children, user)
  122. }
  123. return true
  124. }
  125. return false
  126. })
  127. return rightRoutes
  128. }
  129. function hasPermission(route, roles) {
  130. if (route.meta && route.meta.roles) {
  131. return roles.some(role => route.meta.roles.indexOf(role) >= 0)
  132. } else {
  133. return true
  134. }
  135. }
  136. router.afterEach(() => {
  137. NProgress.done();
  138. // 百度统计
  139. setTimeout(()=>{
  140. var _hmt = _hmt || [];
  141. (function() {
  142. //每次执行前,先移除上次插入的代码
  143. document.getElementById('baidu_tj') && document.getElementById('baidu_tj').remove();
  144. var hm = document.createElement("script");
  145. hm.src = "https://hm.baidu.com/hm.js?b485cd24e5dcbe73d4dde5abf7dc8ae0";
  146. hm.id = "baidu_tj"
  147. var s = document.getElementsByTagName("script")[0];
  148. s.parentNode.insertBefore(hm, s);
  149. })();
  150. },0);
  151. })
  152. // 定义的方法,对文本框使用,只能输入数组, // 加 v-enter-number
  153. Vue.directive('enterNumber', {
  154. inserted: function (el) {
  155. el.addEventListener("keypress",function(e){
  156. e = e || window.event;
  157. let charcode = typeof e.charCode === 'number' ? e.charCode : e.keyCode;
  158. let re = /\d/;
  159. if(!re.test(String.fromCharCode(charcode)) && charcode > 9 && !e.ctrlKey){
  160. if(e.preventDefault){
  161. e.preventDefault();
  162. }else{
  163. e.returnValue = false;
  164. }
  165. }
  166. });
  167. }
  168. });
  169. new Vue({
  170. router,
  171. store,
  172. render: h => h(App)
  173. }).$mount('#app')