activity-role.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * 活动管理权限判定(小程序端)
  3. *
  4. * 与后端 `ActivityController.hasActivityManageRole`(com.etotem.cfc.controller)保持一致:
  5. * 后台角色 admin / activity_admin 直接放行;roles 列表含 activity_manager 也放行。
  6. *
  7. * 注意:小程序登录态里 userInfo 只存 nickname/userId/familyId,
  8. * 角色存在独立的 `role` / `currentRole` storage key 里(见 App.vue saveLoginInfo、utils/api.js _applyLoginData),
  9. * 所以不能只读 userInfo.role,否则永远判为无权限。
  10. */
  11. var ACTIVITY_MANAGE_ROLES = ['admin', 'activity_admin', 'activity_manager']
  12. function hasRoleInList(list, role) {
  13. if (!list || !list.length) return false
  14. for (var i = 0; i < list.length; i++) {
  15. if (list[i] === role) return true
  16. }
  17. return false
  18. }
  19. /**
  20. * 当前登录账号是否有活动管理权限(后台角色)
  21. * @returns {boolean}
  22. */
  23. export function hasActivityManageRole() {
  24. var mainRole = uni.getStorageSync('currentRole') || uni.getStorageSync('role') || ''
  25. if (hasRoleInList(ACTIVITY_MANAGE_ROLES, mainRole)) return true
  26. var userInfo = uni.getStorageSync('userInfo') || {}
  27. if (hasRoleInList(ACTIVITY_MANAGE_ROLES, userInfo.role)) return true
  28. if (hasRoleInList(ACTIVITY_MANAGE_ROLES, userInfo.roles)) return true
  29. return false
  30. }
  31. /**
  32. * 判定「已通过审核的活动服务商」——兼容两条申请/审核链路:
  33. * 链路1 vendor 入驻:vendorType=activity_provider 且 vendorStatus=approved
  34. * 链路2 服务角色申请:activityProviderStatus=approved
  35. * (ServiceRoleApplicationServiceImpl.approve 写入,vendor_type/vendor_status 不动)
  36. * 任一成立即视为服务商,可见管理 Tab,但草稿只能提交审核、不能直接发布。
  37. * @param {Object} vendorStatusData /api/vendor/status 的 data 字段
  38. * @returns {boolean}
  39. */
  40. export function isApprovedActivityProvider(vendorStatusData) {
  41. var d = vendorStatusData || {}
  42. if (d.vendorType === 'activity_provider' && d.vendorStatus === 'approved') return true
  43. return d.activityProviderStatus === 'approved'
  44. }