/** 交易市场移动端允许登录的角色 role_key(供应商 103 / 承销商 104) */ export const ALLOWED_PARTNER_ROLES = ['supplier', 'distributor'] /** 平台管理角色(如 admin);无 supplier/distributor 时禁止登录 */ export const BLOCKED_PLATFORM_ROLES = ['admin'] export const PARTNER_ROLE_DENIED_MSG = '不是供应商和承销商,请联系管理员' /** * 将 getInfo 的 roles 转为字符串数组 * @param {*} raw * @returns {string[]} */ export function normalizeRoles(raw) { if (raw == null) { return [] } if (Array.isArray(raw)) { return raw.map((r) => String(r || '').trim()).filter(Boolean) } if (typeof raw === 'object') { return Object.values(raw) .map((r) => String(r || '').trim()) .filter(Boolean) } if (typeof raw === 'string') { const text = raw.trim() return text ? [text] : [] } return [] } function roleKey(role) { return String(role || '').trim().toLowerCase() } /** * roles 中须包含 supplier 或 distributor;仅 admin 等管理角色不可登录 * @param {string[]|*} roles */ export function hasPartnerRole(roles) { const list = normalizeRoles(roles) if (!list.length) { return false } const allowed = new Set(ALLOWED_PARTNER_ROLES.map((r) => r.toLowerCase())) return list.some((role) => allowed.has(roleKey(role))) } export function shouldDenyPartnerLogin(roles) { return !hasPartnerRole(roles) } /** * 当前登录用户的主身份:supplier | distributor | '' * 同时含 supplier 与 distributor 时固定为 supplier(界面与接口均走供应商) */ export function getPrimaryPartnerRole(roles) { const list = normalizeRoles(roles).map((r) => roleKey(r)) if (list.includes('supplier')) { return 'supplier' } if (list.includes('distributor')) { return 'distributor' } return '' } /** Tab 业务页是否展示供应商面板(双角色时不展示承销商) */ export function isEffectiveSupplierRole(roles) { return getPrimaryPartnerRole(roles) === 'supplier' } /** Tab 业务页是否展示承销商面板 */ export function isEffectiveDistributorRole(roles) { return getPrimaryPartnerRole(roles) === 'distributor' } /** 用户身份展示文案 */ export function getPartnerIdentityLabel(roles) { const kind = getPrimaryPartnerRole(roles) if (kind === 'supplier') { return '供应商' } if (kind === 'distributor') { return '承销商' } return '--' } export function isSupplierRole(roles) { return normalizeRoles(roles).some((role) => roleKey(role) === 'supplier') } export function isDistributorRole(roles) { return normalizeRoles(roles).some((role) => roleKey(role) === 'distributor') }