/** * 会员有效态(前端入口可见性统一判据) * * 唯一判据 = POST /api/ai/gate 返回 data.isActive === true。 * 刻意不使用 canUse / status:运营开关 ai.coach.member_gate_enabled 关闭时, * 后端会把未付费用户的 status 也置为 ALLOW / canUse=true,用它判入口会放行非会员。 * isActive 在开关判断之前按真实付费记录填充 * (users.member_expire_time > now 或 family_memberships payment_status='paid' 且 end_date > now), * 不受运营开关影响,也不受当日 AI 配额影响。 * * 过期会员 isActive=false,按需求一律隐藏入口、不补历史入口。 * fail-closed:无 token 直接 false(不发请求);接口异常/超时/字段缺失一律 false。 * * @returns {Promise} 是否为有效付费会员 */ import { aiGateStatus } from './api.js' export const isActiveMember = () => { if (!uni.getStorageSync('token')) { return Promise.resolve(false) } return aiGateStatus().then(function(res) { return !!(res && res.data && res.data.isActive === true) }).catch(function() { return false }) }