main.js 7.8 KB

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