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