permission.js 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //各套餐的默认权限组
  2. export let permission = {
  3. EXPO_MANAGEMENT: ['audience.search','audience.select','audience.import','audience.changePage','preReg.search','preReg.handelDisable','preReg.handelDelete','preReg.changePage','preReg.save','preReg.saveCompEdit','preReg.copy','preReg.saveComp','preReg.handelCopy','preReg.copyComp','preReg.delComp','preReg.addComp','exhibitor.search','exhibitor.copyLink','exhibitor.handelDisable','exhibitor.handelDelete','exhibitor.save','exhibitor.handelCopy','exhibitor.handel','setting.system.save'],
  4. EXPO_INVITATION_MANAGEMENT: ['audience.search','audience.select','audience.sendInvite','audience.changePage','preReg.search','preReg.handelDisable','preReg.handelDelete','preReg.changePage','preReg.save','preReg.saveCompEdit','preReg.copy','preReg.saveComp','preReg.copyComp','preReg.delComp','preReg.addComp','audience.import','invitation.addList','invitation.changePage','invitation.save','setting.system.save'],
  5. // 默认权限,啥也没买就能看的
  6. DEFAULT: ['dashboard','dashboard.head','audience','preReg','preReg.addNew','preReg.comp','preReg.edit','preReg.list','preReg.handelEdit','preReg.creat','preReg.editEdit','preReg.editName','preReg.editDesc','exhibitor','exhibitor.list','exhibitor.setting','exhibitor.add','exhibitor.addList','exhibitor.handelView','exhibitor.handelEdit','invitation','invitation.add','invitation.edit','invitation.index','invitation.addList','invitation.goto','invitation.desc','invitation.rename','invitation.select','invitation.editor','setting','setting.system','setting.system.sentEmailAddress','setting.system.sentEmailPassword','setting.system.sentEmailServer','setting.system.sentEmailPort','setting.system.sentEmailSSL','404','401','login','user.form','user.register']
  7. }
  8. let allPermission = permission.DEFAULT
  9. let is_init = false
  10. //root就是Vue实例,可在其上使用路由总线状态管理等。
  11. import {root} from '@/main'
  12. // 控件锁定的模板
  13. let mask = `
  14. <div class="el-icon-lock" style="z-index: 999;position: absolute;width: 100%;height: 100%;left: 0;top:0;color:#ffffff;background: #00000044;display: flex;align-items: center;justify-content: center;font-size: inherit;"></div>
  15. `
  16. export function canIShow(roles) {
  17. return new Promise((resolve, reject) => {
  18. let timer = setTimeout(()=>{
  19. if(!is_init){
  20. try {
  21. if(root.$store.getters.user.permission.includes('show_official_footer')) {
  22. allPermission = allPermission.concat(['exhibitor.copyright'])
  23. }
  24. if(root.$store.getters.user.permission.includes('expo_management')) {
  25. allPermission = allPermission.concat(permission.EXPO_MANAGEMENT)
  26. }
  27. if(root.$store.getters.user.permission.includes('expo_invitation_management')) {
  28. allPermission = allPermission.concat(permission.EXPO_INVITATION_MANAGEMENT)
  29. }
  30. }
  31. catch (e) {
  32. resolve(false)
  33. }
  34. is_init = true
  35. }
  36. if(allPermission.includes(roles)){
  37. resolve(true)
  38. }else {
  39. resolve(false)
  40. }
  41. clearTimeout( timer)
  42. },0)
  43. })
  44. }
  45. /**
  46. * 控件权限控制定指令
  47. * @type {{inserted: directive.inserted, update: directive.update}}
  48. */
  49. let directive = {
  50. inserted: function(el, binding, vnode) {
  51. canIShow(binding.value).then((res)=>{
  52. if(!res) {
  53. let node = new DOMParser().parseFromString(mask, 'text/html')
  54. node.body.firstElementChild.onclick = (event)=>{
  55. event.stopPropagation()
  56. root.$bus.$emit('showPacket',true)
  57. }
  58. if(window.getComputedStyle(el).position !== 'relative' && window.getComputedStyle(el).position !== 'absolute') {
  59. el.style.position = 'relative'
  60. }
  61. el.style.overflow = 'hidden'
  62. el.append(node.body.firstElementChild)
  63. }
  64. })
  65. },
  66. update: function(el, binding, vnode) {
  67. },
  68. }
  69. export default directive