main.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  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 App from './App'
  15. import store from './vuex/store'
  16. // import routes from './routes'
  17. import http from './http'
  18. import port from './port'
  19. import $ from 'jquery'
  20. import VDistPicker from 'v-distpicker'
  21. Vue.component('v-distpicker',VDistPicker)
  22. import './day.js' // 加载 dayjs 初始化配置
  23. import dayjs from 'dayjs';
  24. Vue.prototype.dayjs = dayjs;
  25. // 引入中译英js
  26. import i18n from '@/i18n/index'
  27. import Viewer from 'v-viewer' // 图片预览
  28. import 'viewerjs/dist/viewer.css'
  29. // Vue.use(Viewer)
  30. Vue.use(Viewer, {
  31. defaultOptions: {
  32. zIndex: 9999,
  33. }
  34. })
  35. Viewer.setDefaults({
  36. 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' }
  37. })
  38. Vue.prototype.http = http
  39. Vue.prototype.port = port
  40. Vue.prototype.echarts = echarts
  41. import VueClipboard from 'vue-clipboard2'
  42. Vue.use(VueClipboard)
  43. // collapse 展开折叠
  44. import CollapseTransition from 'element-ui/lib/transitions/collapse-transition';
  45. Vue.component(CollapseTransition.name, CollapseTransition)
  46. import 'font-awesome/css/font-awesome.min.css'
  47. import './assets/iconfont/iconfont.css'
  48. import './assets/myfont/iconfont.css'
  49. // const router = new VueRouter({
  50. // routes
  51. // })
  52. import {fixedRouter, allRouters, simpleRouters } from './routes'
  53. import router from './routes'
  54. import NProgress from 'nprogress'
  55. import 'nprogress/nprogress.css'
  56. import Vue from 'vue'
  57. // 新手指导
  58. import VueTour from 'vue-tour'
  59. require('vue-tour/dist/vue-tour.css')
  60. Vue.use(VueTour)
  61. // 打印js
  62. import Print from './assets/js/print.js'
  63. Vue.use(Print)
  64. // 全局转译组件
  65. import TranslationOpenData from '@/components/translationOpenData.vue'
  66. import TranslationOpenDataText from '@/components/translationOpenDataText.vue'
  67. Vue.component('TranslationOpenData', TranslationOpenData)
  68. Vue.component('TranslationOpenDataText', TranslationOpenDataText)
  69. var addRouFlag = false;
  70. //角色权限对应关系
  71. var userModules = [{role:0, modules:["工时报告","专业审核","部门审核","自动计时","费用报销","待办任务", "项目管理", "请假管理", "审批流设置"]},
  72. {role:3, modules:["工时报告","工时成本统计","自定义数值统计","项目报表服务","费用报销","待办任务","项目管理","请假管理", "审批流设置"]},
  73. {role:4, modules:["财务核算成本", "费用报销", "待办任务","组织架构","请假管理", "审批流设置"]},
  74. {role:5, modules:["工时报告","自动计时","费用报销", "待办任务","项目管理","专业管理","请假管理", "审批流设置"]},
  75. {role:6, modules:["工时报告","工时成本统计","自定义数值统计","财务核算成本","项目报表服务","费用报销","待办任务","项目管理","请假管理", "审批流设置"]},];
  76. // var userModules = [{role:0, modules:["工时报告","专业审核","部门审核","自动计时","费用报销","待办任务", "项目管理", "请假管理","组织架构"]},
  77. // {role:3, modules:["工时报告","工时成本统计","项目报表服务","费用报销","待办任务","项目管理","请假管理","组织架构"]},
  78. // {role:4, modules:["财务核算成本", "费用报销", "待办任务","组织架构","请假管理"]},
  79. // {role:5, modules:["工时报告","自动计时","费用报销", "待办任务","项目管理","专业管理","请假管理","组织架构"]},
  80. // {role:6, modules:["工时报告","工时成本统计","财务核算成本","项目报表服务","费用报销","待办任务","项目管理",,"组织架构","请假管理"]},];
  81. router.beforeEach((to, from, next) => {
  82. NProgress.start();
  83. // console.log('路由跳转判定',to,from,next);
  84. if (to.path == '/') {
  85. from.name ? next(from.path) : next('/login')
  86. // console.log('走判定');
  87. return
  88. }
  89. if (to.path == '/register') {
  90. next();
  91. return;
  92. }
  93. if (to.path == '/expire') {
  94. next();
  95. return;
  96. }
  97. if (to.path != '/daily') {
  98. sessionStorage.removeItem("from")
  99. }
  100. if (to.path == '/login') {
  101. sessionStorage.removeItem('user');
  102. }
  103. let user = JSON.parse(sessionStorage.getItem('user'));
  104. // 添加临时路由
  105. if(user && user.moduleList && user.companyId == 10 && user.moduleList.length > 0) {
  106. const modulOne = JSON.parse(JSON.stringify(user.moduleList[0] || []))
  107. console.log(modulOne, '<===== modulOne')
  108. modulOne.name = '设备管理'
  109. modulOne.path = '/deviceManagement'
  110. user.moduleList.splice(2, 0, modulOne);
  111. }
  112. if (!user && to.path != '/login') {
  113. next({ path: '/login' })
  114. } else {
  115. if (!addRouFlag) {
  116. if(user != null) {
  117. addRouFlag = true;
  118. //如果是简易版,直接赋值
  119. if (user.company.packageSimple == 1) {
  120. getRoutes = simpleRouters;
  121. global.antRouter = getRoutes;
  122. router.addRoutes(getRoutes);
  123. router.options.routes = getRoutes;
  124. router.push({ path: to.path })
  125. } else {
  126. var getRoutes = null;
  127. var filterRouter = allRouters;
  128. if (user.company.packageExpense == 0) {
  129. filterRouter = filterRouter.filter(r=>{return r.name != '费用报销'});
  130. }
  131. if (user.company.packageCustomer == 0) {
  132. //没有客户管理功能的,需要去掉
  133. filterRouter = filterRouter.filter(r=>{return r.name != '客户管理'});
  134. }
  135. if (user.company.packageEngineering == 0) {
  136. //非工程类的,去掉专业管理
  137. filterRouter = filterRouter.filter(r=>{return r.name != '工程专业管理' && r.name != '专业审核' && r.name != '部门审核'});
  138. }
  139. if (user.company.packageOa == 0) {
  140. filterRouter = filterRouter.filter(r=>{return r.name != '出差管理' && r.name != '请假管理'});
  141. }
  142. if (user.company.packageProject == 0) {
  143. filterRouter = filterRouter.filter(r=>{return r.name != '待办任务' && r.name != '项目报表服务'});
  144. }
  145. if (user.timeType.needDeptAudit == 0) {
  146. //没有开启导入日报审核,则不需要
  147. filterRouter = filterRouter.filter(r=>{return r.name != '导入日报审核'});
  148. }
  149. if (user.timeType.customDataActive == 0) {
  150. //没有开启自定义数值统计
  151. filterRouter = filterRouter.filter(r=>{return r.name != '自定义数值统计'});
  152. } else {
  153. var customMenu = filterRouter.filter(r=>{return r.name == '自定义数值统计'});
  154. if (customMenu.length > 0) {
  155. console.log(customMenu,'111');
  156. customMenu[0].children[0].name = user.timeType.customDataName + '统计';
  157. }
  158. }
  159. if (user.timeType.customDegreeActive == 0) {
  160. filterRouter = filterRouter.filter(r=>{return r.name != '研究中心管理'});
  161. } else {
  162. let customDeg = filterRouter.filter(r=>{return r.name == '研究中心管理'});
  163. if(customDeg.length > 0){
  164. customDeg[0].children[0].name = user.timeType.customDegreeName + '管理'
  165. if(localStorage.getItem('lang') == 'en') {
  166. customDeg[0].meta.text = user.timeType.customDegreeName + ' management'
  167. } else {
  168. customDeg[0].meta.text = user.timeType.customDegreeName + '管理'
  169. }
  170. }
  171. }
  172. // if (user.role == 1 || user.role == 2) {
  173. // getRoutes = filterRouter;
  174. // } else {
  175. // var modules = userModules.filter(u=>u.role == user.role)[0].modules;
  176. // if (user.leader) {
  177. // modules.push(2, "项目报告审核");
  178. // } else if (user.hasAuditDept) {
  179. // modules.push(2, "项目报告审核");
  180. // }
  181. // if (user.role == 6 && user.timeType.needDeptAudit == 1) {
  182. // //公司领导可以进行导入日报的审核
  183. // modules.push(2, "导入日报审核");
  184. // }
  185. // getRoutes = filterRouter.filter(r=>{
  186. // return modules.filter(m=>m == r.name).length > 0;
  187. // });
  188. // }
  189. // 更据当前登录的权限来显示模块
  190. console.log("user",user)
  191. console.log(filterRouter)
  192. for(var i in filterRouter) {
  193. if(filterRouter[i].name == '研究中心管理') {
  194. filterRouter[i].name = user.timeType.customDegreeName + '管理'
  195. }
  196. }
  197. var arr = []
  198. for(var i in user.moduleList) {
  199. for(var s in filterRouter) {
  200. if(user.moduleList[i].children.length > 0) {
  201. if(user.moduleList[i].name == filterRouter[s].name) {
  202. console.log(user.moduleList[i].name)
  203. var arrList = user.moduleList[i].children
  204. var ddList = filterRouter[s].children
  205. var list = []
  206. for(var j in arrList) {
  207. for(var d in ddList) {
  208. if(arrList[j].name == ddList[d].name) {
  209. list.push(ddList[d])
  210. }
  211. }
  212. }
  213. filterRouter[s].children = list
  214. arr.push(filterRouter[s])
  215. }
  216. } else {
  217. if(user.moduleList[i].name == filterRouter[s].name) {
  218. arr.push(filterRouter[s])
  219. }
  220. }
  221. }
  222. }
  223. getRoutes = arr;
  224. //同步企业微信考勤打卡的情况下,根据深圳赛元微电子的要求,屏蔽项目报告审核模块
  225. if (user.timeType.onlyImportreport == 1) {
  226. getRoutes = getRoutes.filter(r=>{return r.name != '项目报告审核'});
  227. }
  228. //检查是否开启了自定义审批流
  229. if (user.timeType.reportWorkflow == 0) {
  230. getRoutes = getRoutes.filter(r=>{return r.name != '审批流设置'});
  231. console.log(getRoutes);
  232. }
  233. global.antRouter = fixedRouter.concat(getRoutes);
  234. router.addRoutes(fixedRouter.concat(getRoutes));
  235. console.log(router);
  236. router.options.routes = fixedRouter.concat(getRoutes);
  237. router.push({ path: to.path })
  238. }
  239. }
  240. }
  241. next()
  242. }
  243. })
  244. function baseRoleGetRouters(allRoutes, user) {
  245. // allRoutes是动态路由表
  246. // roles是取到的用户角色,数组
  247. let rightRoutes = allRoutes.filter((route, index) => {
  248. if (route.group == null || (user.company.packageProject == 1 && route.group == 'packageProject')) {
  249. if (route.children && route.children.length) {
  250. route.children = baseRoleGetRouters(route.children, user)
  251. }
  252. return true
  253. }
  254. return false
  255. })
  256. return rightRoutes
  257. }
  258. function hasPermission(route, roles) {
  259. if (route.meta && route.meta.roles) {
  260. return roles.some(role => route.meta.roles.indexOf(role) >= 0)
  261. } else {
  262. return true
  263. }
  264. }
  265. router.afterEach(() => {
  266. NProgress.done();
  267. // 百度统计
  268. // setTimeout(()=>{
  269. // var _hmt = _hmt || [];
  270. // (function() {
  271. // //每次执行前,先移除上次插入的代码
  272. // document.getElementById('baidu_tj') && document.getElementById('baidu_tj').remove();
  273. // var hm = document.createElement("script");
  274. // hm.src = "https://hm.baidu.com/hm.js?b485cd24e5dcbe73d4dde5abf7dc8ae0";
  275. // hm.id = "baidu_tj"
  276. // var s = document.getElementsByTagName("script")[0];
  277. // s.parentNode.insertBefore(hm, s);
  278. // })();
  279. // },0);
  280. })
  281. // 定义的方法,对文本框使用,只能输入数组, // 加 v-enter-number
  282. Vue.directive('enterNumber', {
  283. inserted: function (el) {
  284. el.addEventListener("keypress",function(e){
  285. e = e || window.event;
  286. let charcode = typeof e.charCode === 'number' ? e.charCode : e.keyCode;
  287. let re = /\d/;
  288. if(!re.test(String.fromCharCode(charcode)) && charcode > 9 && !e.ctrlKey){
  289. if(e.preventDefault){
  290. e.preventDefault();
  291. }else{
  292. e.returnValue = false;
  293. }
  294. }
  295. });
  296. }
  297. });
  298. new Vue({
  299. router,
  300. store,
  301. i18n,
  302. render: h => h(App)
  303. }).$mount('#app')